2018 SharifCTF OldSchool-NewAge WriteUp
0. Introduction
요세는 귀찮아서 문제를 푼다음에 라업을 안올렸는데 블로그 스킨을 바꿔서 다시 올려본다.
이문제는 매우 쉬운데 오기가 생겨서 어렵게 풀어봤다.
1. Binary
RELRO | STACK CANARY | NX | PIE | RPATH | RUNPATH | FILE |
No RELRO | No canary found | NX enabled | No PIE | No RPATH | No RUNPATH | vuln4 |
대부분의 보호기법이 꺼져있다.
2. Vulnerability
명백한 bof 취약점이다. A를 꾹누르면 eip가 0x41414141로 바뀐다.
3. Exploit
eip가 바로 바뀌므로 rop로 Exploit을 할 수 있다. 하지만 서버에서는 조건이 하나 붙는다.
This time it is randomized...
You should find puts yourself
바로 plt를 사용할 수 없다는것이다. 하지만 바이너리에 puts를 사용하는 부분이 있으므로 rop를 할 수 있고 쉽게 풀린다.
그런데 codeblue의 simple memo pad를 풀때가 생각나서 연습도 할겸 strtab 포인터를 덮어서 exploit 했다.
exploit 조건이나 위치선정을 알아놨으니 다음에 그런문제가 나온다면 꼭 풀것이다.
Exploit plan
1. fgets를 이용해 bss에 fake_strtab을 작성
2. strcpy를 이용해 strtab overwrite
3. fflush@plt + 6를 호출해 system('/bin/sh') 호출
https://github.com/LYoungJoo/CTF/blob/master/pwn/2018/SharifCTF/OldSchool-NewAge.py