-
-
[原创]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漏洞
添加%s
fomat到rdi,将buf改写到rsi。
patch前。
eh_frame写入'%s',0
patch后
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课