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

堆栈溢出渗透实战-part5

作者头像
光明SAMA
发布2019-07-25 14:48:31
4310
发布2019-07-25 14:48:31
举报

这是这个靶机环境的最后一个flag了,目标是获取root用户shell,不知道作者会设置些什么样的障碍,一步一步试吧,渗透技术不就是通过不断的尝试来找到各种脑洞大开的方法嘛。

与前面的flag一样,目录下给了一个levelFive的可执行文件,没有其他提示。

执行一下试试看,这个程序还是一个交互式的程序,按照提示输入一个字符串,提示参数错误。

输入一个短点的字符串,没有报错,看来对输入长度有要求。

同样的方法,edb开始分析汇编的代码,在5655628f处调用了levelFive!overflow,看来这个过程是切入点了。

继续分析levelFive!overflow,这里没有看到熟悉的strcpy函数,但是找到了一个同样存在越界可能的gets函数。

既然找到了存在隐患的函数,那传入一个较长的字符串参数观察一下是否会出现溢出。(注意下图中的函数返回地址 ffffd33c,值为56556214)

在edb的output窗口输入字符串。

从栈内容中可以看到输入的字符串被写入到了ffffd32c,并且把后面的返回地址覆盖了。这样就说明了溢出是可操作的,接下来就是定义payload了。

下图是我使用的shellcode,想详细分析可以到shell-storm.org上找。毕竟我不会写shellcode。

这里要注意的是在返回地址之前填充的内容长度太小,不足以容纳shellcode,所以用字符串填充,为了shellcode不受栈影响,跳转到变量保存的位置。

将shellocde输入到5.txt,并用5.txt的内容做为输入,执行levelFive,成功获得shell,但是确没有得到root权限,看来还是少了点什么。

仔细对比levelFive与之前的程序反汇编代码,发现少了一个setuid的调用过程,如果不把uid设置为0,那程序肯定没有root权限。

最简单的方法就是在shellcode之前再加一个setuid的代码不就行了,网上借鉴了其它shellcode,将\xb0\x17\x31\xdb\xcd\x80这6个字节的代码加入到原来的shellcode之面。

重新执行levelFive,成功拿到了root的shell。

回过头来查看一下levelFive文件的uid属性,其uid在一开始就一直是0,那为什么执行时并没有使用root权限呢?这个问题一直没有想明白,不知道有没有大神可以指导一下。

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

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

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

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

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