CTF write-up/hackctf

[hackctf] adult_fsb

youngsouk 2020. 1. 13. 04:13

https://github.com/balexios/glibc2.23/blob/master/stdlib/exit.c

 

balexios/glibc2.23

glibc version 2.23. Contribute to balexios/glibc2.23 development by creating an account on GitHub.

github.com

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호출