首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

实验吧-溢出类

0x01 题目描述

在实验吧上练习的一道溢出类题目,题目来源为cctf_2016,通过这个题目,学习了格式化字符串漏洞的相关利用方式,在这里稍作记录。

0x02 题目分析

逆向分析

使用ida逆向分析其功能,程序主要功能为:

上传文件 通过输入及上传,程序会将二者存放到一个数组之中。

获取文件内容 通过输入文件名获取文件内容,输出的内容为文件上传功能中输入的数据。二者配合可触发fmt漏洞

列目录 使用函数将所有文件名打印出来

寻找漏洞

通过逆向分析,环节可以向缓冲区中输入自定义字符串,环节将这个字符串打印出来,如果在中构造特定格式化字符串,那么时就会造成格式化字符串漏洞,从而完成任意地址读和写。

利用思路

最终目的是想调用,获取系统shell。存在问题有三个

的address

如构造

如何调用sysputs函数别的实际地址,最后计算出libc的地址

由于system位于libc中,所以只需要确定libc的加载地址即可,我们可以使用格式化字符串泄漏出其地址,注意到程序会多次调用put_file, get_file, show_dir,那么里面用到的函数将会放到got表中,puts函数在showdir里面反复调用,可以利用其got表获取其地址,再利用其偏移得到libc的地址,这样system的地址也就出来了。 然后可以将puts的got表覆盖为system的地址,并构造一个的文件名,再调用函数就可以完成漏洞利用。

0x03 构造exploit

通过前面的分析,需要做到下面两步即可完成利用:

泄漏system地址

覆盖puts函数地址为system地址,并使其参数包含

首先,使用查询puts函数的表:

得到其got表地址为

接着需要获取puts在libc中的偏移:

偏移为

然后可通过打印出got表中的地址,获取puts函数别的实际地址,最后计算出libc的地址

addr_libc = addr_puts - offset_puts

紧接着计算出system地址

addr_system = addr_libc + offset_system

然后通用进行任意地址写,将puts的got表覆盖为system的地址

最后构造的exploit如下:

0x04 获取flag

运行exploit获取flag

Referenced

代码之间

travel between codes

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180212G0BSFH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券