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

堆栈溢出渗透实战-part2

作者头像
光明SAMA
发布2019-07-25 17:21:49
5070
发布2019-07-25 17:21:49
举报

昨天完成了Stack Overflows for Beginners: 1靶机的第一个目标,还是比较简单的,今天来继续完成第二个目标。

首先用level1用户和昨天拿到的密码登陆系统。

第二个目标难度有所提升,除了一个名为levelTwo的可执行文件外,作者没有留下其它任何线索。

尝试执行一下levelTwo这个文件,随意输入个参数AAAA,可正常执行

还用老套路,利用edb-debugger分析程序运行的流程,找到可溢出的部分。

打开edb后,发现除了调用系统函数外,还调用了一个叫levelTwo!hello的函数,在此处设置端点并执行。

行下一条指令,可以看到levelTwo!hello函数的内容,这里调用了strcpy函数,从昨天的内容可知,strcpy没有对数据长度进行检测,过长的数据会导致越界,将其它的数据覆盖,看来这里就是可溢出的部分了。同时注意程度的返回地址已经被压入到栈中,值为56556286

在strcpy和printf这两行设置断点,依次执行。可以看到输入的参数已经被复制到了栈中,这样就可以计算出一共填充72字节后,后面的数据就可以覆盖程序的返回地址了。

我们输入40个A来验证一下(72+8=80字节=40个字母)

执行下一条指令,查看栈内容,栈顶地址为ffffd2ec,值为56556286,没问题

继续执行到printf之后,ret之前的断点,查看ffffd2ec处的值,已经变成了41414141,说明溢出已经成功,返回地址已经被修改

接下来回头找一下40个A是从哪个地址开始填入的,并记下这个地址,以便做为替换后的跳转地址,在下图可以看到这个地址为ffffd2c8

接下来需要用shellcode替换填充的A字符,shellcode的长度不能超过填充字符的长度,也就是说不能超过72字节,shellcode的功能是获得当前UID的shell,我在shell-storm下找到了一个21字节的shellcode,功能是直接获得root权限的shell。

来写一个python脚本生成新的填充字符,内容是编码后的shellcode+填充A+返回地址ffffd2c8

执行一下,已经获得了root的shell,进入/home/level2目录,得到了level2的密码和levelThree的可执行文件

正常来讲只要获得了level2的shell就可就了,这样的话提前拿到了root权限,应该与靶机作者设计的目的不符,看来还有其它我没想到的方法。

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

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

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

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

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