首页
社区
课程
招聘
[原创]AWD_pwn_ptach记录
2023-6-18 14:26 15701

[原创]AWD_pwn_ptach记录

2023-6-18 14:26
15701

前言

本文记录入门patch时做的一些题目。

1.Caesar_x64(x64_scanf_gets)

第一处,scanf()漏洞。

图片描述

patch思路。

将rdi存储的字符串地址指向'%2d',0
图片描述
在eh_frame段构造字符串'%2d',0'%2d'的hexstr表示为253264。
图片描述
edit->patch programe->change bytes。
图片描述
写入后。
图片描述
在指令lea rdi, qword ptr [aD]处按ctrl+alt+k。
将其改为mov rdi,offset 0x4020B0h,并patch。
图片描述
修改后。
图片描述

第二处,gets()漏洞。

图片描述

patch思路。

精简汇编指令,利用多余的nop直接修改汇编代码。
源汇编代码。
图片描述
题目中没有可以很好替代gets的指令,(可以自己试着修改汇编调用scanf函数)。
这里将指令长度精简加工一下,利用多出来的nop指令来进行read系统调用。
sys_read对寄存器要求,rax=0x0h;rdi=0(读入);rsi=[rbp+s](读取位置);rdx=0x100h(读入大小);
修改后。
图片描述

第三处,gets()漏洞。

图片描述
与第二处gets()大同小异。
图片描述

2.ret2text(x32_gets)

gets()漏洞。

图片描述

patch思路

由于没有可替代的安全函数,所以在eh_frame段构造系统调用,
先从call gets跳到eh_frame构造系统调用处的。
图片描述
系统调用结束,跳回call _gets的下一条指令地址,0x08048515h
32位系统调用寄存器要求eax=0x3h(sys_read);ebx=0(读入);ecx=edx(读入位置,因为jmp到eh_frame前,edx保存的就是[ebp+var_4]的地址,所以这里直接把edx给ecx即可,但要注意先后顺序);edx=0x8h(读入大小);在eh_frame完成patch以后,可以按c建来查看汇编格式。
图片描述

3.pwn2_sctf_2016(x32_int_ovf)

整数溢出漏洞(int)

图片描述

patch思路

图片描述
jle(有符号小于等于则跳转(同JNG))改为jbe(无符号小于等于则跳转(同JNA))
图片描述

4.goodluck(x64_fmt)

格式化字符串漏洞

图片描述

patch漏洞

添加%sfomat到rdi,将buf改写到rsi。
patch前。
图片描述
eh_frame写入'%s',0
图片描述
patch后
图片描述
图片描述


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2023-6-18 18:49 被jelasin编辑 ,原因:
收藏
点赞5
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回