https://github.com/balexios/glibc2.23/blob/master/stdlib/exit.c
read를 실행한뒤의 레지스터를 활용해 libc leak, stack leak 까지 할 수 있다. 그래서 i의 값을 음수로 바꾸려 했지만 잘 안되서 포맷 스트링 버그를 할 때마다 0으로 바꾸어주면서 여러번 fsb를 할 수 있도록 했다.
그래서 libc leak 후 __free_hook을 one_gadget으로 덮어 둘 수 있다.
이 exit 함수의 cur->idx를 0으로 만들어 우회할 조건을 줄이고, cur -> next에 0이 아닌값을 집어넣어서 하면 free가 호출된다. 아까 덮어놨던 one_gadget으로 쉘을 딸 수 있다.
정리하면
1. read의 레지스터 활용 -> libc, stack leak
2. __free_hook -> one_gadget
3. exit의 루틴 활용&free호출
'CTF write-up > hackctf' 카테고리의 다른 글
[hackctf] pzshell (0) | 2020.01.14 |
---|---|
[hackctf] Unexploitable_4 (0) | 2020.01.13 |
[hackctf] wishlist (0) | 2020.01.12 |
Unexploitable_3 (0) | 2020.01.11 |
[hackctf] childheap (3) | 2019.11.29 |