攻防世界-Pwn-new-easypwn

这篇具有很好参考价值的文章主要介绍了攻防世界-Pwn-new-easypwn。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目给了一个附件,我们将附件下载下来并解压,发现有俩文件,显然这个hello程序就是我们需要破解的
pwn攻防,安全,web安全,Powered by 金山文档

在linux环境下执行下该程序,发现这是一个通讯录小程序,可以对通讯者号码,姓名,描述信息进行增删改查操作

pwn攻防,安全,web安全,Powered by 金山文档

使用file命令查看文件类型,发现是64位的elf文件

pwn攻防,安全,web安全,Powered by 金山文档

ok,接下来使用ida对该文件进行逆向,查看具体的代码逻辑。

代码逻辑如下:
  1. 主函数:从代码中可以看出,主函数的逻辑就是接收增删改查指令去调用对应的函数处理,这和我们执行程序过程中感知到的是一致的

pwn攻防,安全,web安全,Powered by 金山文档
  1. 初始化函数sub_B56如下:这里都是一些赋值操作,没有什么问题,这里初始化了三个变量,一个是qword_202F8,一个是unk_2020E0,一个是unk2020EB,这里我们还不知道这三个变量是用来干嘛的,没关系,我们往下看。

pwn攻防,安全,web安全,Powered by 金山文档
  1. 接收指令函数如下:输入一个正数,根据正数的值决定对应的操作,这里也没有什么问题

pwn攻防,安全,web安全,Powered by 金山文档
  1. 增加记录函数sub_E13:这里说明一下,unk_2020E0位存储数据的基地址,可以认为时一个数组,v1是用户输入的数组索引,dword_2020BC为程序维护的数组索引(0, 1, 2 ,3)。因此这里进行的操作是将用户输入存入到数组中;其中电话号码存入到unk_2020E0中,unk_2020E0再偏移11就是unk_2020EB,这个位置存储的是姓名;由于一条记录大小为32,那么描述信息则再偏移13放在name后面,继续存储到qword_2020F8中(注意,这里存储的是描述信息的地址,不然32位存不下)。这里就和初始化中匹配上了。分析到这里,其实会有一个发现,那就是虽然是这么存储的,但是实际上对用户输入的电话号码和姓名的长度并未进行验证这是不是一个可以利用的点呢?是否可以利用长度未作限制覆盖掉其它值呢?这里描述信息的指针是最后赋值的,要覆盖也是指针覆盖掉姓名,影响有限。不过没关系,我们先继续往下看

pwn攻防,安全,web安全,Powered by 金山文档
  1. 删除记录函数:弄清楚了数据存在哪里,那这个函数也很容易就弄懂了,这个函数就是将对应下标的姓名,电话号码,描述信息清除,这里没发现什么问题

pwn攻防,安全,web安全,Powered by 金山文档
  1. 查询记录函数:这个函数的作用就是将所有的通讯记录打印出来,但是这里有个问题,就是打印电话号码的时候,printf的格式参数受到外部的控制,因为unk_2020E0真是我们存储数据的地址,可以判断这里存在格式化字符串漏洞

pwn攻防,安全,web安全,Powered by 金山文档
  1. 修改记录函数,这里和增加记录函数逻辑基本一致,都是接收用户输入并存到对应的位置,这里和增加记录不一样的地方在于,这里没有重新为描述信息分配一个地址,而且用户名未进行长度限制

pwn攻防,安全,web安全,Powered by 金山文档
如何利用我们从代码中发现的漏洞:

结合前面的分析,在修改记录信息的时候,我们可以输入用户名覆盖掉原本指向描述信息的指针(即输入任意以一个地址),然后等到输入描述信息的时候再往这个地址里面写任意数据。这里我们修改通讯录函数,将atoi地址改为system,当再次选择时,输入/bin/sh就可以拿到shell了

  1. 获取到程序执行基址和__libc_start_main函数地址

调试前做如下设置,保证我们使用到的第三方库和远程服务器的一致

patchelf --replace-needed libc.so.6 ./libc-2.23.so hello
patchelf --set-interpreter ./ld-2.23.so hello

给程序设置断点,在显示通讯录信息功能中存在格式化字符串漏洞的地方设置断点,开启ida调试。可以发现程序的断点处相对于程序的偏移量为0x1274。

pwn攻防,安全,web安全,Powered by 金山文档

查看具体的栈内容,找到这两个地址对应的参数位置分别是第9和第13(64位机器中0-5都传递给寄存器,6之后的才入栈),其中第13个参数的位置相对于_libc_start_main的偏移量为0xF0

pwn攻防,安全,web安全,Powered by 金山文档

ok,知道这两个偏移量后,我们利用格式化字符串漏洞将这两个参数泄露出来,添加用户的时候设置电话号码为:%13$p%9$p

pwn攻防,安全,web安全,Powered by 金山文档

然后,_libc_start_main的地址为0x7f3c601ec840 - 0xf0 = 0x7f3c601ec750   程序基址为0x55c7fa75a274 - 0x1274 = 0x55c7fa759000。

  1. 再获取system和atoi中的地址,获取后修改atoi的地址为system的地址,这里后面就不手动计算了,通过如下代码获取

pwn攻防,安全,web安全,Powered by 金山文档

完整代码参考https://www.cnblogs.com/C0ngvv/p/16656671.html

  1. 执行程序,成功进入后台,拿到flag

pwn攻防,安全,web安全,Powered by 金山文档
总结:第一次对程序进行逆向分析,涉及到的知识点非常多。基本上都是看攻略完成的,不过在整个过程中也积累了很多经验,学到了很多东西。
  1. ida逆向分析,之前未完整使用过ida,这两天学如何使用这个软件都花了不少时间,再加上分析和调试逆向出来的代码,堆栈,确实增长了不少知识。

  1. 在漏洞利用方面,发现漏洞和利用漏洞是两回事,替换掉重要函数system也是一种基本思路。学习和掌握如何实现着这种思路也提升了自己的思维能力

参考资料:

https://www.cnblogs.com/C0ngvv/p/16656671.html

https://blog.csdn.net/yongbaoii/article/details/111938821

https://github.com/matrix1001/glibc-all-in-one文章来源地址https://www.toymoban.com/news/detail-667509.html

到了这里,关于攻防世界-Pwn-new-easypwn的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Web安全攻防世界05 easyphp(江苏工匠杯)

    题目是这个样子的: 发现自己编辑的东西有一部分没有被发出来,怪不得阅读量低到可怜...现在重新补上一些内容,解题过程很罗嗦,对小白依然友好~ 按照惯例,把源码贴在这里逐行分析一下~ 解题思路如下: 整个题目就是单纯地在考验php语法,并且每个变量输错了都有不同

    2024年02月13日
    浏览(48)
  • Web安全攻防世界01 fileinclude(宜兴网信办)

    攻防世界文件包含入门题目,参考大佬们的WP有所补充,内容对小白友好~ 按照惯例,首先查看源代码ctrl+u: 整理一下大概是下面这个意思(代码0基础,可能有误,欢迎留言沟通与指正~) 所以题目的关键在于达成这第15行的条件: $lan = $_COOKIE[\\\'language\\\']; 在cookie中的内容 lang

    2023年04月08日
    浏览(46)
  • Web安全攻防世界08 very_easy_sql

    SQL注入、SSRF类型题目~ crtl+u查看源码,如下所示~ 经过了多次失败,终于水了一篇混杂了30%的博文链接+60%的错误解法+文末10%官网wp的博文~ 在我看来这道题目页面和源码都没有明显的提示项...页面甚至没有反馈项,有可能是一道考验运气的题目~ 目前看起来是以POST方式注入,

    2024年02月11日
    浏览(39)
  • [CTF/网络安全] 攻防世界 Web_php_include 解题详析(php伪协议、data伪协议、file伪协议)

    这段代码首先通过 show_source(__FILE__) 显示当前文件的源代码,然后通过 $_GET[\\\'hello\\\'] 显示 URL 参数中名为 hello 的值。 接下来,代码使用 $_GET[\\\'page\\\'] 获取 URL 参数中名为 “page” 的值,并进行字符串替换,将 php:// 替换为空字符串 这是为了防止通过 URL 参数加载本地文件或其他可

    2024年02月08日
    浏览(48)
  • 攻防世界easyupload (web新手)

    典型的文件上传,本题涉及知识点 文件上传漏洞 .user.ini绕过 其实这个题目是文件上传漏洞中相对来说不是很常见的题目,说实话也是涉及了我的知识盲区,在此之前我对文件上传漏洞有一些总结如下,都尝试过后发现没有能用的。 1. JavaScript 防御 检测发生在浏览器端(本地

    2023年04月16日
    浏览(43)
  • 攻防世界web题目记录(一)

    打开后获得源码开始审计 第一个php便是重定向到page页面 第二个是上传文件并保存但是首先需要session为admin 接着看第三个是要利用php弱类型 如果设置了id 并且id的浮点值不等于1并且截取id的最后一个值等于9这里可以使用php弱类型1-9绕过 接着上传文件,这里主要是包括有一个目

    2024年02月07日
    浏览(44)
  • 攻防世界-WEB-easyupload

    1.新建.user.ini文件,内容如下 GIF89a auto_prepend_file=a.jpg 2.上传该文件,并用burp抓包,将Content-Type: application/octet-stream修改为 Content-Type: image/jpg 3.放包,结果如下 4. 新建a.txt文件,内容为 GIF89a ?=eval($_REQUEST[\\\'cmd\\\']);? 保存后将文件后缀修改为.jpg 5.直接上传该文件即可成功上传 PS:按

    2024年02月09日
    浏览(37)
  • 攻防世界-WEB-NewsCenter

    打开环境 有查询,猜测是sql注入 保存请求头到文件中 准备利用sqlmap 查找数据库 python sqlmap.py -r ./ 123.txt --dbs 查找表 python sqlmap.py -r ./1 23.txt --tables -D news 查找字段 python sqlmap.py -r ./ 123.txt --column -D news -T secret_table 显示字段信息 python sqlmap.py -r ./ 123.txt --dump -D news -T secret_table

    2024年02月09日
    浏览(37)
  • 攻防世界-web-easytornado

    题目描述:Tornado 框架。打开链接是一个简单的界面 1. 思路分析 看到有个/flag.txt,我们点击进去看下 发现传入了两个参数,一个是filename,还有一个是filehash 看到里面的内容,提示我们真正的flag在 /fllllllllllllag中 因此,读取到 /fllllllllllllag就可以获取到真正的flag了,但是我

    2024年02月16日
    浏览(38)
  • 攻防世界-WEB-Web_php_include

    打开靶机 通过代码审计可以知道,存在文件包含漏洞,并且对伪协议php://进行了过滤。 发现根目录下存在phpinfo 观察phpinfo发现如下: 这两个都为on 所以我们就可以使用data://伪协议 payload如下: 访问新连接 上面的payload就可以实现命令执行了 找了半天发现flag在fl4gisisish3r3.p

    2024年02月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包