write-ups/CTF

codegate 2016 watermelon write up

2018. 7. 26. 22:53



요즘 에이틴으로 활약하고 있는 에이프릴 이나은ㅠㅠㅠ

우리 집 주변에서 에이틴 촬영했었다거ㅠㅜㅜㅠㅜ


Vulnerability & Attack vector 

 IDA의 구조체 기능을 이용해서 풀면 소스를 읽기 굉장히 편할 것이다. 해당 문제에서 사용되는 구조체 구조 자체도 간단하고, 구조체를 사용하는 부분이 눈에 확실히 보이는 것도 있고.


 내가 해당 바이너리의 구조체를 알게된 부분은 playlist를 출력하는 부분이다. 다음과 같은 형식으로 정의되어 있다. 



 그리고 해당 바이너리에서 특징적인 기능을 하는 함수들은 모두 구조체 배열의 주솟값을 인자로 받는다. 


 해당 프로그램의 취약점은 총 3개이다. OOB 하나, BOF 둘. BOF 같은 경우는 read() 함수로 의도적인 취약점을 넣은 부분도 있고, 그냥 넣은 부분도 있다. 




 먼저 BOF 같은 경우는 scanf("%s", &name); 을 통한 BOF와 Playlist를 ㅈ수정하는 부분에서 read() 함수를 통한 의도적 BOF 취약점이 존재한다. 


 OOB 또한 플레이리스트를 수정하는 부분에서 발생한다. 



Index를 받고 해당 Index를 그대로 사용하기 때문에 발생한다. 근데 OOB로 풀게되면 오히려 돌아가는 꼴이 되어 버리기 때문에 그냥 read() 함수에서 발생하는 취약점을 이용하였다. 


Exploit

 Modify 할 때 ROP code를 넣어주고, 그것을 통해서 쉘을 획득하면 된다.