编写和应用穿墙shellcode

编写和应用穿墙shellcode

ID:9511259

大小:67.00 KB

页数:9页

时间:2018-05-02

编写和应用穿墙shellcode_第1页
编写和应用穿墙shellcode_第2页
编写和应用穿墙shellcode_第3页
编写和应用穿墙shellcode_第4页
编写和应用穿墙shellcode_第5页
资源描述:

《编写和应用穿墙shellcode》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、编写和应用穿墙Shellcode~教育资源库  Shellcode要求是:满足攻击机器位于NAT的内网中的情况,溢出后能突破防火墙限制、突破操作系统版本限制、能自动接收并执行文件、最后安全退出。这实际上是要编写一个综合性的Shellcode,结合这两个漏洞的具体情况,经过两整天的编写和调试最终成功,完整的Shellcode汇编代码和攻击程序参见文章附带的源码。这里我主要想和大家交流实现的思路和过程。  第一部分:打造综合功能的Shellcode  制定最佳的防火墙突破思路及文件传送方式  我们的目标是攻击个人主机,这里的防火墙也专指个人防火墙(PFe法)、要

2、么就是目标服务进程中代码在调用recv函数时开辟的缓冲区大小很难确定(字符串匹配法)或则是该服务进程根本就没使用recv函数来接收数据(hookrecv法)。根据Shellcode设计要求,该方法不应该成为首选。  方法二、端口复用,也就是溢出成功后在目标服务进程中重复绑定其开放的TCP端口。这种方法应该能满足我们的设计要求,但它存在一个限制:假如服务进程中绑定端口时通过setsockopt函数设置了SO_EXCLUSIVEADDRUSE选项的话,重复绑定该端口是不会成功的。那么究竟怎么检测服务进程是否设置了SO_EXCLUSIVEADDRUSE呢?比如检测

3、CCProxy进程(对应808端口),在本地运行该进程,另外编写一程序,绑定808端口,并且设置:  setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,  (char*)val,sizeof(val))  如果bind函数返回0,则说明未设置SO_EXCLUSIVEADDRUSE,反之设置。  通过实验,CCProxy和RealServer服务进程中绑定端口时都没有设置SO_EXCLUSIVEADDRUSE,看来采用端口复用的方法是可行的!不急,把其它两种方法看了再说,说不定有更好的方法呢。  方法三、重新绑定服务进程开放端口。这种

4、方法适合在第二种方法不起作用,即服务进程设置了SO_EXCLUSIVEADDRUSE时采用。它需要在重新绑定端口之前退出进程、移植文件、创建进程、向新进程注入Shellcode等工作。因此,这种方法是最通用的一种,也是实现起来最复杂的一种。  方法四、代码注入可信任进程。这种方法要求攻击者本机监听一常用端口(如80端口),Shellcode执行时创建可信任的进程(如InterExplore),然后再将通信部分的Shellcode通过CreateRemoteThread注入到该进程中去让其执行以完成指定的功能。假如防火墙对外出的端口做了严格的限制,这种方法可能

5、会失败,实现起来和第三中方法的复杂程度相近,但总的来讲成功率还是很高的。  比较完四种溢出成功后突破防火墙方法各自的优劣,毫无疑问,我选择第二种方法---端口复用。  接下来就是文件的传输方式。这里以目标系统为服务端,攻击者为客户端,客户端向服务器端上传文件。  取消系统版本的限制----Shellcode中API函数地址的动态获取  这部分不是什么新鲜的东西,在很多资料中都有描述,但它却是很基本、很重要的。编写Shellcode的过程中,很用到多个API函数来完成各种功能。但是不同的oveax,[eax+0x0c]  movesi,[eax+0x1c]  

6、lodsd  movebx,[eax+0x08]//ebx=Kernel32.dll基址  moveax,[ebx+0x3c]//eax=PEheaderoffset  moveax,[ebx+eax+0x78]  addeax,ebx//eax=输出表目录指针  mov[ebp+20h],eax//保存输出表目录指针  movecx,[eax+0x18]//函数名数目  moveax,[eax+0x20]  addeax,ebx//eax=函数名指针数组指针  movDovDovdovdovdovovbyteptr[ebp+0xe],0  movesi,e

7、bp  pushesi  pushecx//保存外层循环次数  moveax,[eax]//得出指针偏移  addeax,ebx//eax某个函数名地址  movedi,eax  move1234下一页友情提醒:,特别!cx,14//GetProcAddress的长度  repcmpsb  jneFindNext//如果当前函数名不是指定的函数名则查找下一个  addesp,4  moveax,[ebp+20h]  moveax,[eax+0x24]  addeax,ebx//获得序号转换表地址,以便取得正确的函数地址序号  movedi,D  push2/

8、/AF_I  call[ebp+44h]//sock

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。