풀면서 설마설마 했지만 정말로 지난 HITCON 때의 House of Orange에서 다루었던 File-Stream Oriented Programming을 통한 exploit이었다. (House of Orange write up: http://4ngelboy.blogspot.kr/2016/10/hitcon-ctf-qual-2016-house-of-orange.html) 사실 위 글이 너무 설명을 잘해놔서 따로 할 말은 없는듯. 이 테크닉만 안다면 정말 간단한 문제라 생각해서 100점이 배정된 듯 한데 처음 써보는 테크닉이라 조금 힘들었다. 바이너리 및 익스플로잇 주소https://github.com/Eyebrowmoon/ctf/tree/master/christmas2016/unlink
malloc, free를 사용하는 간단한 함수들로 이루어진 전형적인 쉬운 힙 익스플로잇 문제 핵심은 overflow가 발생하는 4번 routine으로 진입할 수 있느냐이다 동일한 크기의 fastbin chunk A, B를 할당받아 free A -> free B -> free A를 통해 fastbin 내의 next 포인터를 조작할 수 있는 환경을 구성한다. 이후 GOT쪽의 주소를 size로 활용하여 House of Spirit을 통해 routine 검사에 사용되는 변수의 값을 덮어썼다. 이후는 간단히 puts를 통한 GOT leak 이후 다시 메인으로 돌아와 system으로 점프. 아래는 바이너리와 익스플로잇https://github.com/Eyebrowmoon/ctf/tree/master/christma..
지난 HITCON 2016에서 pwn 문제들만 쭉 봤는데 문제들이 다들 너무 어려웠다 ㅜㅜ Pwn 문제중 팀에서 푸는데 성공한건 Shelling Folder와 Secret Holder인데 Shelling Folder는 같이 하시던 분이 풀어주셨다. 바이너리 크기는 매우 작은편. 열어보면 Small, Big, Huge size의 chunk들을 하나씩 할당받아 그곳에 값을 쓸 수 있게 되어있다. 문제는 그 안에 있는 값을 읽게 해주지는 않는다. 취약점은 wipe 함수에서 free 하기 전에 아무런 check routine이 없고, free 후에도 포인터를 그대로 남겨둔다는 점이다. 다만 huge는 할당을 시도하면 따로 mmap이 되기 때문에 small, big 2개로만 계속 시도하다 도무지 방법이 보이지 않..