OverTheWire: Natas level10

반응형


OverTheWire 문제풀이 - Natas

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

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

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

[링크] Natas 바로가기


Natas level10

Natas10에 접속하면 다음과 같은 화면이 뜬다. Find words containing 이라며 단어를 검색하라고 한다. 하지만 전과 다르게 하나의 문구가 추가되어 있는데 번역하면 "보안상의 이유로 특정 문자를 필터링합니다." 라고 한다. 소스를 살펴볼 필요가 있겠다.

[View sourcecode]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
For security reasons, we now filter on certain characters<br/><br/>
<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 != "") {
    if(preg_match('/[;|&]/',$key)) {
        print "Input contains an illegal character!";
    } else {
        passthru("grep -i $key dictionary.txt");
    }
}
?>
</pre>
cs

다중 명령어를 사용하기 위해 필요한 특수문자 ; | & 등이 필터링 되어 있는것을 알 수 있다. 아마 저 특수문자를 사용하면 "Input contains an illegal character!"라는 경고화면이 나오도록 출력될 것이다. 여기서 우리가 해결해야 할 과제는 저 세가지의 특수문자를 사용하지 않고도 다른 명령어를 사용하는 법을 찾는 것이다.

그 해답은 간단하다. 리눅스 쉘을 생각해보면 명령어를 입력하고 실행시키는 과정에서 찾을 수 있는데 바로 엔터, 즉 개행문자가 명령어를 실행시켜준다는 것을 알 수 있다. 만약 $key 부분에 개행문자를 넣어 엔터를 실행시킨다면? grep은 무시하고 다른 명령어를 실행시킬 수 있을 것이다. 이를 이용하여 다음과 같이 코드를 짜볼 수 있다.

"" echo "\n" cat /etc/natas_webpass/natas11


그럼 위와 같이 다음 레벨에 대한 패스워드를 얻을 수 있다.

next level password : U82q5TCMMQ9xuFoI3dYX61s7OZD9JKoK


반응형

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

OverTheWire: Natas level12  (0) 2017.07.14
OverTheWire: Natas level11  (0) 2017.07.12
OverTheWire: Natas level9  (0) 2017.04.27
OverTheWire: Natas level8  (0) 2017.04.26
OverTheWire: Natas level7  (0) 2017.04.24
TAGS.

Comments