티스토리 뷰

CTF write-up

SCTF 2018 noleak

marshimaro aSiagaming 2018. 7. 9. 14:25
reference


크게 3개의 메뉴가 있고, hidden으로 system("echo flag")가 있다.
해당 system 메뉴는 의미가 없지만, system 함수를 줬다는 것에서 딱히 leak이 없이 진행할 수 있다는 것을 말하는 것 같았다.



메뉴 1번에서 보면, UAFchunk라고 이름지은 곳에 150-1 바이트만큼 fgets로 입력을 받게된다.
이는 아래의 3번 메뉴에서 BOF형태로 이어지게되는데, 위에서 free한 chunk를 다시 쪼개서 사용하고, index가 해당 바운더리를 넘어가므로 일종의 UAF가 발생하게 된다.



while 루프에서 0xc7만큼 해당 chunk에서 값을 스택으로 복사해오므로, index 변수 값도 임으로 설정해줄 수 있어서, 적당히 계산하고 진행하면 stack canary를 넘어서 덮을 수 있게 된다.
다만, input의 길이상, 3개의 가젯만을 사용할 수 있는데, 어떻게 이걸 구성해주느냐가 핵심이다.

프로그램 흐름을 다시 바꾸기에는 1,2번 file descriptor가 닫히기때문에, 바로 쉘을 실행시켜야만 한다.