슈퍼 단순한 32bit 리눅스 데몬이 주어진다.
메인함수는 아래처럼 단순하게 accept-fork 를 수행하는 데몬이다.
fd 핸들러 함수 sub_804877C 를 보면 슈퍼 간단하다.
0으로 초기화된 6바이트 스택버퍼상에 5바이트를 recv 하고
이를 system 으로 넘기고 끝.
한마디로 5바이트 이내의 linux command 만 실행하게 해주는데
문제는 inet.d 슈퍼데몬이 아니기때문에 system 의 결과를 볼수없다.
고민끝에 아래와같은 묘안을 떠올려서 단 5바이트의 system 실행으로
완전한 리모트쉘을 얻을 수 있었다.
1. "sh<&4" 로 fd 4번(network socket)으로부터 표준입력을 받는 shell 을 실행
2. "sh 0<&4 1>&4" 로 fd 4번과 stdio 를 모두 리다이렉션시킨 완전한 shell 을 다시 실행
3. 완전한 리모트쉘 획득!
리눅스 IO 리다이렉션만 알면 아주 간단하다 ㅋ
'Games > CTF' 카테고리의 다른 글
SECUINSIDE 2013 reader (0) | 2013.05.28 |
---|---|
SECUINSIDE 2013 127.0.0.1 (2) | 2013.05.28 |
PlaidCTF 2013 ropasaurusrex (5) | 2013.04.23 |
JFF2 Hunter (0) | 2013.03.19 |
DEFCON20 PWN100 (0) | 2013.03.19 |