堆栈溢出渗透实战-part3

Stack Overflows for Beginners: 1这个靶机还剩下三个flag没有拿到,继续加油。

还是一样,用level2和昨天拿到的密码登录系统,随意传入一个字符串来测试一下levelThree这个程序,执行之后回显我输入的字符串,看起来和上一个任务差别不大。

还是用老方法,edb执行levelThree,并传入参数,开始分析程序执行流程,可以看到在5655623f处调用了levelThree!overflow这个过程,设置断点并继续分析。

levelThree!overflow这个过程中又调用了strcpy过程,那就还利用strcpy来溢出总没错。这里要注意一下返回主程序的地址已经被压入栈(地址ffffd2fc,值为56556244),这就是要覆盖的目的地址,记下来备用。

在printf前设置断点,并继续执行,可以看到strcpy执行之后,传入的字符串已经被复制到了栈中(下图红框中的内容)

利用字符串的起始地址ffffd1f0和之前记下来的ffffd2fc可以计算出需要填充的数据长度为268字节。

接下来利用脚本生成268个A,再加上4个B做为输入参数来验证是否可以将程序跳转到42424242处。

打开edb,在调用levelThree!overflow后,查看栈顶,地址为ffffd1fc,其值目前为正确值56556244。

在levelThree!overflow执行ret指令之前设置断点并继续执行程序,留意填充字符串的启始这址,并记下备用(地址为ffffd0f0,当把填充替换为shellcode时,需要跳转到此处执行shellcode)

在到刚才的ffffd1fc处验证其值,可以看出已经被覆盖为42424242了,这就说明计算正确。

利用python将shellcode和填充字符以及返回地址生成为新的填充字符。也可以叫它payload。自行程序,并将payload做为输入参数。

用edb验证,可以看到shellcode已经被写入到ffffd0f0处。

再到ffffd1fc处查看其值,已经被修改为ffffd0f0,也就是shellcode的地址。理论上已经成功了。

执行levelThree,将payload传入,成功获得level3的shell。第三个flag成功拿到!

本文分享自微信公众号 - 吾生也有涯IT也无涯(UnlessITSkill)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券