前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >堆栈溢出渗透实战-part3

堆栈溢出渗透实战-part3

作者头像
光明SAMA
发布2019-07-25 14:50:26
4830
发布2019-07-25 14:50:26
举报

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成功拿到!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吾生也有涯IT也无涯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档