专栏首页吾生也有涯IT也无涯堆栈溢出渗透实战-part2

堆栈溢出渗透实战-part2

昨天完成了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权限,应该与靶机作者设计的目的不符,看来还有其它我没想到的方法。

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

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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • tomcat开机启动和服务

    说明: 这里的启动脚本可以把它分为3个部分,第一部分是申明启动脚本和注释,第二部分是定义路径的变量,第三部分是一个case...in条件选择结构。

    用户1499526
  • Linux 启动流程分析

    这个部分比较有意思。因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多;但是,一旦进入操作系统,程序员几乎可以定制所有方面。所以,这个部分...

    用户5807183
  • 利用shell脚本快速定位日志

    我们平时查日志,在测试环境,日志文件只有几个的情况下,我们可以通过找时间接近的文件然后根据关键词定位报错位置,大不了都查一遍,这都可以忍受。但是在实际的生产环境...

    walking在cloud.tencent
  • Shell脚本之特殊变量

    Qt君
  • Linux提权学习

    此时http://10.22.5.70/dahuiji.php 已经取得一个webshell

    用户5807183
  • 网络爬虫暗藏杀机:在Scrapy中利用Telnet服务LPE

    网络抓取框架中使用最多的莫过于是scrapy,然而我们是否考虑过这个框架是否存在漏洞妮?5年前曾经在scrapy中爆出过XXE漏洞,然而这次我们发现的漏洞是一个...

    FB客服
  • ShellCommand命令执行器

    基于Qt写的shell命令执行器,基于popen命令执行shell命令,通过pclose获取命令执行状态。

    Qt君
  • Ansible 2 -- 3 常用模块及常用API

    ansible 中的模块可以用在ansible命令行或后面要讲的playbook中。不同的模块提供不同的功能,官方提供的非常多,几千种,常用的有几十种,这里只介...

    mafeifan
  • 如何优雅使用Docker?请收下这15个小技巧。

    获取最近运行容器的id 这是我们经常会用到的一个操作,按照官方示例,你可以这样做(环境ubuntu):

    黄泽杰
  • Appium+python自动化(十七)- 你难道是猴哥失散多年的混血弟弟还是妹妹???- Monkey简介之开山篇(超详解)

      今天由宏哥给小伙伴们来介绍猴哥的混血弟弟=Monkey。Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的And...

    北京-宏哥

扫码关注云+社区

领取腾讯云代金券