编写和应用穿墙Shellcode.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编写和应用穿墙Shellcode.doc

  编写和应用穿墙Shellcode~教育资源库   Shellcode要求是:满足攻击机器位于NAT的内网中的情况,溢出后能突破防火墙限制、突破操作系统版本限制、能自动接收并执行文件、最后安全退出。这实际上是要编写一个综合性的Shellcode,结合这两个漏洞的具体情况,经过两整天的编写和调试最终成功,完整的Shellcode汇编代码和攻击程序参见文章附带的源码。这里我主要想和大家交流实现的思路和过程。   第一部分:打造综合功能的Shellcode   制定最佳的防火墙突破思路及文件传送方式   我们的目标是攻击个人主机,这里的防火墙也专指个人防火墙(PFe法)、要么就是目标服务进程中代码在调用recv函数时开辟的缓冲区大小很难确定(字符串匹配法)或则是该服务进程根本就没使用recv函数来接收数据(hook recv法)。根据Shellcode设计要求,该方法不应该成为首选。   方法二、端口复用,也就是溢出成功后在目标服务进程中重复绑定其开放的TCP端口。这种方法应该能满足我们的设计要求,但它存在一个限制:假如服务进程中绑定端口时通过setsockopt函数设置了SO_EXCLUSIVEADDRUSE选项的话,重复绑定该端口是不会成功的。那么究竟怎么检测服务进程是否设置了SO_EXCLUSIVEADDRUSE呢?比如检测CCProxy进程(对应808端口),在本地运行该进程,另外编写一程序,绑定808端口,并且设置:   setsockopt( fd, SOL_SOCKET, SO_REUSEADDR,   (char *)val, sizeof(val) )   如果bind函数返回0,则说明未设置SO_EXCLUSIVEADDRUSE,反之设置。   通过实验,CCProxy和RealServer服务进程中绑定端口时都没有设置SO_EXCLUSIVEADDRUSE,看来采用端口复用的方法是可行的!不急,把其它两种方法看了再说,说不定有更好的方法呢。   方法三、重新绑定服务进程开放端口。这种方法适合在第二种方法不起作用,即服务进程设置了SO_EXCLUSIVEADDRUSE时采用。它需要在重新绑定端口之前退出进程、移植文件、创建进程、向新进程注入Shellcode等工作。因此,这种方法是最通用的一种,也是实现起来最复杂的一种。   方法四、代码注入可信任进程。这种方法要求攻击者本机监听一常用端口(如80端口),Shellcode执行时创建可信任的进程(如Inter Explore),然后再将通信部分的Shellcode通过CreateRemoteThread注入到该进程中去让其执行以完成指定的功能。假如防火墙对外出的端口做了严格的限制,这种方法可能会失败,实现起来和第三中方法的复杂程度相近,但总的来讲成功率还是很高的。   比较完四种溢出成功后突破防火墙方法各自的优劣,毫无疑问,我选择第二种方法---端口复用。   接下来就是文件的传输方式。这里以目标系统为服务端,攻击者为客户端,客户端向服务器端上传文件。   取消系统版本的限制----Shellcode中API函数地址的动态获取   这部分不是什么新鲜的东西,在很多资料中都有描述,但它却是很基本、很重要的。编写Shellcode的过程中,很用到多个API函数来完成各种功能。但是不同的ov eax, [eax + 0x0c]   mov esi, [eax + 0x1c]   lodsd   mov ebx, [eax + 0x08] //ebx = Kernel32.dll基址   mov eax, [ebx + 0x3c] //eax = PE header offset   mov eax, [ebx + eax + 0x78]   add eax, ebx // eax=输出表目录指针   mov [ebp + 20h], eax //保存输出表目录指针   mov ecx, [eax + 0x18] //函数名数目   mov eax, [eax + 0x20]   add eax, ebx //eax = 函数名指针数组指针   mov Dov Dov dov dov dov ov byte ptr[ebp + 0xe], 0   mov esi, ebp   push esi   push ecx //保存外层循环次数   mov eax, [eax] //得出指针偏移   add eax, ebx //eax某个函数名地址   mov edi, eax   mov e 1234下一页 友情提醒:,特别!cx, 14 //GetProcAddress的长度   rep cmpsb   jne FindNext //如果

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档