본 내용은 http://bananapayload.org에 본인이 작성했던 내용임.


본선 대회때는 passket 형님이 푸셨지만, 뭔가 갑자기 풀어보고 싶어서 다시 풀어봤습니다.

문제는 arm 환경의 shell 파일입니다. 실제 문제에서는 바이너리와, 데몬이 돌고있는 서버정보가 제공됩니다.


쉘에서 명령어를 찾을 수 없다는 오류 출력 부분에 fsb취약점이 존재한다.

데몬 프로그램에서는 사용자 입력을 정의된 명령어와 strncmp 로 비교 후 일치하면, 정해진 명령어를 system 함수로 수행합니다. strncmp 의 경우, 첫번째 인자(R0)로 사용자의 입력을 받기때문에 strncmp 의 got 를 system 함수의 plt 주소로 뒤집어 쓰면 간단하게 원하는 명령어의 수행이 가능합니다.


got의 주소에 시작에 null 값이 들어가게되는데, 사용자 입력을 통해서는 null 값의 입력이 불가능합니다. ㅠㅠ

하지만 데몬 프로그램은 친절하게 dumpcode 기능을 제공하고, 명령어 입력버퍼가 입력시마다 초기화되지 않으므로 해당 메모리 적당한 공간에 strncmp 의 got 주소를 저장하고 이를 이용하면 문제의 해결이 가능합니다.

0xbecdbcc4 에 strncmp 의 got 주소 인 0x00012080  를 저장하고, 그 got 주소에 system 함수의 plt 시작주소인 0x000087a4 를 저장하고 명령어를 수행하면 key 파일을 읽을 수 있습니다. 오옹!


  perl -e 'print "msi\n", "A"x32,"\xc4\xbc\xcd\xbe\n", "%73856c%14\$n\n", "%34724c%18\$n\n","cat hdcon_key\n"'|nc -v localhost 5555

다음과 같이 공격코드 작성 후 수행을 할 경우 다음과 같이 키를 확인 가능합니다.



심심하시면 풀어보시라고 바이너리 첨부합니다.ㅎ





'Hacking > Write up' 카테고리의 다른 글

화이트햇 콘테스트 웹(200) 문제 풀이  (0) 2013.11.05
Posted by EXSO
,