CTF에서 first solve 땄던 문제 목표는 cheat 메뉴에서 power overwhelming을 입력하면 system(cmd)를 실행해 주는 부분이다. 다만 이 cmd는 전역에 박혀있고 정상적으로는 세팅할 방법이 없다. 처음 시도한 방법으로는 유저를 바꾸면서 아이템 개수를 초기화해주지 않는 것을 이용한 버그이다. 이를 이용해 몬스터를 만들면서 cmd 주소로 heap spray를 해두면 item linked list를 실제 아이템 개수보다 더 많이 따라가게 되면서 heap spray 해둔 값까지 따라가게 될 것이라 생각하였다. 그러나 heap spray를 하기 위해서는 monster를 할당했다 free하는 과정이 필요했고, 이 chunk가 unsorted bin에 들어가게 된다. 그리고 이후의 c..
입력을 받을 때 buffer 크기를 0x20단위로 올림하여 그 크기만큼의 스택 공간을 확보한다. 그런데 이 때 입력을 다 받고 NULL 문자를 박아주지 않기 때문에 strlen 함수를 호출하면 뒤의 stack frame pointer까지 센다. 이를 이용해 echo 함수에서 우선 stack leak을 얻을 수 있다. 다시 echo rev 함수에서 이를 이용하여 rsp를 조작하고, 이를 이용하여 ret instruction이 실행될 때 shellcode로 뛸 수 있도록 세팅해둔다. (세팅은 echo나 메뉴 고를 때 입력을 엄청 길게 넣어서 해두면 된다) https://github.com/Eyebrowmoon/ctf/blob/master/secuinside2017/ohce/solver.py