Pwn之简单patch

访客4年前黑客文章1120
本文首发于“合天智汇”公众号 作者:hope

1.引言

在攻防的时候不仅仅需要break,还需要fix将漏洞patch上。

2.工具

这里我使用的是keypatch这个ida脚本
下载地址:https://github.com/keystone-engine/keypatch/blob/master/keypatch.py

3.栈溢出的patch

漏洞原理

由于输入函数的输入长度超过了局部变量所开辟的空间,因此使得输入能够覆盖到返回地址

patch

简单了解原理之后,我们可以知道,栈溢出起始就是输入的长度过大,那么我们将输入长度修改到局部变量开辟空间的范围内即可

例子

32为情况下

我们可以看到,buf距离ebp(栈底)距离0x28,但是输入却能够输入0x100,很明显的栈溢出漏洞
可以看到这里参数为0x100,因为32位程序是通过栈传参的。
再装好keypatch之后,会在Edit选项栏中出现keypatch的选项,接着选中参数0x100,点击patch
将长度改成小于0x28即可,这里需要注意输入长度要为16进制。这里输入输入3个nop指令是因为这条指令本身Size为5,然后push 0x20为2,因此需要填充三个nop与原本的Size一致。
修改完毕后,保存即可
64位情况下
我们zhidao64位下是通过寄存器传参数的,因此我们再找长度的参数时,找到相应的寄存器即可
例如read函数的长度参数是通过rdx(edx)传入的,找到相应的寄存器按照上面 *** 修改即可。

4.格式化字符串的patch

漏洞原理

格式化字符串的漏洞是因为,程序中存在着格式化字符串输出函数,典型的printf,但是printf,只有格式化字符串参数,而没有后续的参数一,参数二,并且格式化字符串参数由我们所控制,从而导致了任意地址读写的漏洞触发。

例子

题目中存在着典型的格式化字符串漏洞,那么修改漏洞有几种 *** ,例如将printf函数修改为puts函数或者添加%s的参数。

*** 一

若程序中即存在printf函数,又存在puts函数,那么我们可以将printf函数修改为puts函数
我们找到puts函数的plt表地址,因为puts函数也是带一个参数,并且puts函数与printf函数的plt表地址长度一致,因此直接修改不会造成程序down掉
修改成puts函数的地址
修改成功后的效果,但是puts函数与printf函数还是有一点点区别的,因为puts函数是自动在输出的字符串尾部加入一个回车符,在有些比赛的check脚本中是通过比较两次输入与输出是否全等,就会导致这种patch *** 不能过关。
*** 二
加入一个%s参数
可以看到除了传递格式化字符串参数以为,程序还存在mov eax,0,我们可以利用该指令修改,但是想要修改为%s还有一个问题,程序中不存在%s这个字符,就需要我们手动添加进去
我们可以在.eh_frame这个段中填入%s这个字符串,这个段中的信息不会影响程序的正常运行。
记住填入的地址0x400c01
mov edi, offset 0x400c01; mov rsi,offset format;
完成参数修改
修改完成

堆之uaf漏洞

堆中较为常见的漏洞use after free
漏洞原理
由于堆块释放后没有给指针置空,使得被释放的堆块能够被修改或者重复使用,导致漏洞
例子
free完之后没有将指针置空,很明显的uaf漏洞,想要修补uaf漏洞,则将free之后的指针置空即可
可以看到在调用完free之后,没有多少空间可以写下新的汇编代码,因此需要与上一个 *** 一致,跳转到.eh_frame段上
call free指令修改为跳转指令,在.eh_frame段上写汇编代码
call 0x900; #调用free函数 mov eax, [rbp-0xc]; #取出下标值 cdqe; lea rdx, ds:0[rax*8]; lea rax, qword ptr [heap]; mov r8,0; #段地址不能直接赋予立即数 mov [rdx+rax],r8; jmp 0xD56;
patch效果
5.总结
  • 对于栈溢出来说,patch比较简单,只需要修改输入长度即可
  • 对于格式化字符串漏洞来说,若有puts函数则将printf函数修改为puts函数,若没有则在.eh_frame段上创造%s
  • 对于堆的uaf来说,漏洞patch思路很简单,只需要将指针置空即可,但是需要了解汇编代码。
6.参考文章
https://xz.aliyun.com/t/5868
7.相关实验
CTF-PWN练习
实验:CTF-PWN练习(合天网安实验室)
PWN是CTF竞赛中的主要题型之一,主要考查参赛选手的逆向分析、漏洞挖掘以及Exploit编写能力。通过由浅入深的方式,一步一步讲解栈溢出攻击原理与实践,同时详细介绍了Linux下GDB调试器的基本使用 *** 。

相关文章

选科学家上空间站是真的吗  选科学家上空间站怎么回事

选科学家上空间站是真的吗 选科学家上空间站怎么回事

中国载人航天工程总设计师周建平介绍:因空间站有大规模的空间科学研究任务和空间应用技术试验的任务,第三批航天员选拔不限于飞行员,还将包括飞行工程师和科学家。 中国空间站在轨建造阶段飞行任务的序幕已...

微信自动同步的操作步骤

也许在一年前或者说两年前以前,我们在付款的时候还是会选择用现金自掏腰包的方式成为我们日常支付的关键,在掏腰包的过程当中我们也可以轻而易举的看到我们这一天的消费以及我们的积蓄。但是自从有了各种各样的社交...

2018再见春天的说说朋友圈 春天再见的早安心语

2018再见春天的说说朋友圈 春天再见的早安心语

有很多大道理并不是文学语言能可循,你的敌人始终是你自己,笑一笑,美好的一天又开始了。有土壤和降水味儿的春季再见吧。2018再见了春天的说说微信朋友圈 春季再见了的早安心语。 2018春季再见的说...

没成熟的青西红柿能吃吗 蚂蚁庄园9月19日每日一题答案

没成熟的青西红柿能吃吗?不能;就是酸点,能吃。这是支付宝蚂蚁庄园小课堂2020年9月9日的题目,大家完成答题即可获取饲料奖励。西红柿是一种很受欢迎的食材,那么未成熟的西红柿是否可以食用呢?有兴趣的小伙...

黑客挖矿危害(手机感觉被黑客挖矿有什么影响)

黑客挖矿危害(手机感觉被黑客挖矿有什么影响)

本文目录一览: 1、现在挖矿炒币这么火爆,有什么风险吗? 2、非法挖矿是什么情况? 3、什么是黑客?黑客的危害性有哪些? 4、黑客的危害性 5、虚拟货币怎么挖矿? 6、公职人员参与...

袁和平的电影黑客帝国(袁和平 黑客帝国4)

袁和平的电影黑客帝国(袁和平 黑客帝国4)

本文导读目录: 1、《黑客帝国》哪一部是袁和平做武术指导的,还是全部都是? 2、能发下黑客帝国3:矩阵革命.720p.国英双语.BD中英双字的种子或下载链接么? 3、如何看待《黑客帝国》这部经...