OverTheWire Natas [Level9] - WriteUp
문제 정보
Username: natas9
Password: Sda6t0vkOPkM8YeOZkAGVhFoaplvlJFd
URL: http://natas9.natas.labs.overthewire.org
그림 1은 natas9 사이트에 접속한 화면이다. 해당 사이트에 접속을 하면 단어들을 찾을 수 있다.
apple을 입력하니 apple을 포함한 단어들을 웹에 표시해준다.
소스코드보기를 통해 해당 페이지는 어떻게 구성되어있는지 확인한다.
입력한 값을 key에 저장을 한 후 passthru함수로 grep 명령어를 수행한다.
grep -i key값 dictionary.txt는 대소문자를 구분하지 않고 dictionary.txt에서 단어를 찾는다.
여기서 해당 취약점이 존재한다.
리눅스에서 ; 를 사용하면 해당 명령어를 실행하고 그 다음 명령어를 실행한다.
공격 명령어 : grep -i ;cat /etc/passwd; dictionary.txt
위 명령어를 수행하면 앞에 grep -i 에서 오류가 뜨고 다음 명령어인 cat /etc/passwd가 실행되고 그다음 dictionary.txt가 실행되는데 이것또한 오류가 뜬다. 따라서 cat /etc/passwd 명령어만 실행되어 표시해준다.
;cat /etc/passwd;를 입력하여 /etc/passwd 파일의 내용을 출력하였다.
natas9의 비밀번호는 /etc/natas_webpass/natas9 파일안에 저장되어있기 때문에 ;cat /etc/natas_webpass/natas10;로 해당 비밀번호를 읽을 수 있을 것이다.
;cat /etc/natas_webpass/natas10;를 입력하여 natas10의 비밀번호를 출력하였다.
natas10 Credentials
Username : natas10
Password : D44EcsFkLxPIkAAKLosx8z3hxX1Z4MCE
결론
해당 페이지는 커멘드 인젝션 취약점이 존재한다.
커멘트 인젝션 취약점이란 웹 애플리케이션 내에서 시스템 명령어를 실행하는 기능이 있을 때 발생한다.
시스템 명령어를 입력하는 부분에서 입력값 검증이 없으면 공격자가 입력값을 조작하여 공격자가 원하는 명령어를 수행할 수 있다.
대응방안
세미콜론(;), 파이프(|), &&, ||와 같은 다중 명령어를 수행하는 기호들을 필터링을 한다.
취약한 함수를 사용하지 않는다.