이번에 풀어볼 문제는 https://ctf.j0n9hyun.xyz/ 에 Pwnable 문제인 Poet문제이다.

문제를 보고 일단 실행시켜 보았다.
위와 같이 시와 시인을 적으라는 문구가 출력되고 입력을 해야한다. 그리고 1,000,000점을 획득해야 한다는 문구를 보니 점수를 많이 획득해야 한것 같다.

gdb-peda에 있는 checksec을 이용해 poet파일의 보호 기법을 검색해 보았더니 NX-bit 보안기법만 존재 했다.

main
main함수를 Ida를 이용해 뜯어보면 위와 같은 그림이 나오고 크게 get_poem, get_author, rate_poem, reward 함수가 보인다.
main함수 내부를 살펴보면 dword_6024E0이 1000000이 되면 break되고 reward인 flag를 획득 할 수 있는 것 같다.
get_poem

poem을 입력받아 return해주고 dword_6024E0를 0으로 초기화 해주는 함수인 것 같다.
get_author

gets 함수를 사용해 unk_6024A0를 입력 받는 함수같다.
rate_poem

이 함수에서 점수가 체점되는 것 같다.
main에서 확인 했듯이 1,000,000점이 되면 flag를 획득할 수 있는데 ESPR, eat, sleep, pwn, repeat, CTF, capture, flag단어 한 개당 100점을 획득하니까 10000번 사용하면 되는데 문제에서 의도한 것은 10000번 사용하는 것이 아닌거 같으니까 일단 함수만 살펴보고 넘어 간다.
reward

flag를 출력해주는 함수이다.
문제 풀이
입려하는 곳(unk_6024A0)와 입려받는 곳(dword_6024E0)의 주소 차이를 비교해 보면
unk_6024A0 (6300832)
dword_6024E0 (6300896)
64만큼의 주소차이가 보인다.
결론 : unk_6024A0에서 gets함수를 이용해 bof를 일으켜 64칸 뒤에 있는 dword_6024E0에 값을 1,000,000으로 변경해 주면 될 것 같다.
"A"*64 + 1,000,000를 payload 하면 되는 문제이다.

payload는 위와 같이 작성했다.

'Security > Pwnable' 카테고리의 다른 글
| [Pwnable] dreamhack Basic_BOF #2 문제 풀이 (0) | 2022.04.21 |
|---|---|
| [Pwnable] dreamhack basic_exploitation_000 문제 풀이 (0) | 2022.04.21 |
| [Pwnable] HackCTF ROP 문제 풀이 (1) | 2021.01.20 |
| [Pwnable] HackCTF Gift 문제 풀이 (0) | 2021.01.20 |
| Dreamhack-Memory Corruption - C(1) (0) | 2021.01.20 |