DIMICTF xml_parser write up
최근에 H3X0R 서버를 돌아보다가 현이가 저장해놓았던 CTF 목록 중에 DIMI-CTF가 있길래 한 번 풀어보았다.
(난 참고로, DIMI-CTF 당시 포너블을 아예 1도 할 줄 몰랐었기 때문에 포너블은 하나도 못풀었다.)
Analyse
먼저 checksec를 통해서 어떤 보호기법이 걸려있는지 확인해보자.
카나리와 PIE가 걸려있지 않으니 쉽게 풀 수 있을 듯하다.
그럼 이제는 헥스레이를 통해서 구체적으로 어떤 기능이 있는지 확인해보자.
메인 함수에서는 read() 함수로 사용자로부터 xml 문자열을 1024byte만큼 받고 있다. 사용자에게서 xml을 받기 전에 memset으로 모두 널바이트로 초기화하는 것도 보인다.
다음은 xml_parse() 함수를 헥스레이로 본 것이다.
while(1)문으로 xml 태그를 파싱하고 그 안에 있는 내용들을 저장한 후, 출력한다. 취약점이 있을 만한 곳은 strncpy() 함수밖에 없다.
밑에 malloc() 으로 heap 공간 할당 후, strncpy() 함수를 호출한 부분은 heap exploit 문제라면 유용하게 사용했겠지만, 적어도 이 문제를 풀 때는 쓸모가 없다ㅜㅜㅠ
위에 contents를 parsing하는 부분에서 취약점이 나타난다.
xml_string - src 라는 것이 어떤 의미가 있는 건지는 정확히 모르겠지만,
취약점이 발생한다.
공격 시나리오
/home/xml_parser/flag 라는 문자열이 있다. ctrl + x 로 이 문자열을 어디서 사용하나 봤는데, 아니나 다를까!
real_flag()라는 함수가 있었다. RET을 0x080489F8 값으로 덮어쓰면 플래그를 얻을 수 있는 거시다!!@#@!!
그리고 EIP값은 <a>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</a> 이런 값을 집어넣어서 변조하면 된다.
Exploit
segmentation fault가 뜬다. core 파일을 확인해보니까
EIP가 정상적으로 바뀐 것을 알 수 있다. 그럼 이제 Offset을 정확히 구하기 위해 다음 사이트를 이용하겠다.
오프셋을 구했으니, 이제 페이로드를 짜보자.
이렇게 만들어따.
이렇게 /home/xml_parser/flag 파일이 정상적으로 읽히는 것을 알 수 있다. ㅅㅅ
(/home/xml_parser/flag 파일은 임의로 만든 파일입니다)
'write-ups > CTF' 카테고리의 다른 글
plaid ctf 2013 ropasaurusrex write up (0) | 2017.12.14 |
---|---|
codegate 2017 EasyMISC write up (0) | 2017.12.13 |
화이트햇 콘테스트 familiar write-up (0) | 2017.11.07 |
Kiwi CTF write up (0) | 2017.10.16 |
defcamp CTF write up (0) | 2017.10.03 |