OverTheWire: Natas level9

반응형


OverTheWire 문제풀이 - Natas

* Bandit는 웹 보안 관련 문제입니다.

* 개인적인 문제풀이로 해답을 보시기 전에 직접 풀어보시기를 권해드립니다.

* 반드시 연습용으로 제공된 환경에서만 작업하시기 바랍니다. 악용으로 일어난 사태는 절대로 책임지지 않습니다.

[링크] Natas 바로가기


Natas level9

Natas9에 접속하면 다음과 같은 화면이 뜬다. Find words containing 이라며 단어를 검색하라고 한다. 단어를 검색하면 Output에 출력해주는 것 같다.


임의의 문자열을 입력했더니 입력한 문자열이 포함된 단어들이 Output에 출력되는 모습을 볼 수 있다. 어떠한 취약점이 있는지 소스를 살펴볼 필요가 있다. 


[소스 분석]

소스보기를 통해 해당 페이지의 index-source.html 소스를 살펴볼 수 있다. 소스는 다음과 같다.

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

문제해결에 필요한 소스들만 뽑아왔다. input 값으로 입력받은 값을 needle 로 보내는데 needle 값이 있다면 passthru 함수로 grep 명령어를 실행하도록 되어 있다. passthru 는 php에서 외부명령어를 실행시켜주는 함수이다. grep 명령어로 dictionary.txt 라는 파일을 참조해서 문자열이 포함된 단어를 나열하고 있다. passthru 함수 덕분에 php에서 명령어를 실행할 수 있는데 이를 이용하면 우리가 원하는 명령어도 실행할 수 있다. 예를 들어, 다중명령어를 사용한다면 grep을 실행시킨 후에 다른 명령어를 추가로 실행시킬수 있지 않을까?


바로 적용해보면 된다. 다중명령어를 쓰는 방법은 여러가지가 있지만 ;(세미콜론)을 이용해서 grep 명령 뒤에 다른 명령어를 써보겠다.

> ""; pwd

""; 로 빈문자열을 넘겨주고 grep 명령어를 종료시킨뒤에 다중명령어를 이용해서 pwd 명령어를 실행시켜보았다. 결과는 위와같이 정상적으로 pwd 명령어가 실행되어 현재 디렉터리의 위치를 Output으로 출력해주는 모습을 확인할 수 있다.


이를 활용하여 natas10번의 패스워드가 있는 파일을 cat 명령어로 읽어주면 다음 레벨의 패스워드를 얻을 수 있다. 이번 문제는 passthru 함수가 가지는 취약점을 가지고 문제를 푸는 방식이었다.

next level password : nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu

반응형

'War Game > natas' 카테고리의 다른 글

OverTheWire: Natas level11  (0) 2017.07.12
OverTheWire: Natas level10  (0) 2017.07.12
OverTheWire: Natas level8  (0) 2017.04.26
OverTheWire: Natas level7  (0) 2017.04.24
OverTheWire: Natas level6  (0) 2017.04.20
TAGS.

Comments