Natas wargame (level 0 – 10) 詳解(1)

Natas 是一個 Web 資安的 wargame,蠻適合剛入門的新手玩玩

這邊分享一下我自己每關的思路,為了保有遊戲體驗,就不分享破關的帳密囉 😛

wargame 網址: https://overthewire.org/wargames/natas/natas0.html

每關的帳號/密碼: natasX/{password}

e.g. level0 ( http://natas0.natas.labs.overthewire.org/ )

帳號: natas0
密碼: natas0

下面就開始分享破關思路惹~


  • level 0

You can find the password for the next level on this page.

嗯,右鍵打開 web devtool(element tab) 就找到密碼了

  • level 1

You can find the password for the next level on this page, but rightclicking has been blocked!

常做網頁開發的應該都是用快捷鍵打開 web devtool (?
mac: cmd+option+I
windows: F12

有密碼了🎉

  • level 2

There is nothing on this page

再次打開 web devtool 會看到多了一個可疑的 img (1px*1px)

<img src="files/pixel.png">

直覺來測測 web server directory index (http://natas2.natas.labs.overthewire.org/files/)

嗯,密碼果然在 users.txt XD

  • level 3

There is nothing on this page

和上一關相同@@

打開 web devtool 看看有沒有其他提示

No more information leaks!! Not even Google will find it this time…

Google ? Search Engine 嗎?

測測 robots.txt ( http://natas3.natas.labs.overthewire.org/robots.txt )

看起來是有個不明目錄設定為 disallow ~ 試著進入後就會發現 users.txt

  • level 4

Access disallowed. You are visiting from “” while authorized users should come only from “http://natas5.natas.labs.overthewire.org/”

嗯….看起來提示是 Referrer 或是 Origin header,可以先試著打開 devtool 後,點擊 network tab,先複製第一個 request(copy as Curl),手動置換掉 Referrer header 為以下

curl 'http://natas4.natas.labs.overthewire.org/index.php' \
  ....
  -H 'Referer: http://natas5.natas.labs.overthewire.org/' \
  ....

就可以獲得密碼了

  • level 5

Access disallowed. You are not logged in

常見的登入機制會是 cookie/token,因此先檢查看看 web devtool 中 Application tab,是否有設定任何相關的 Cookie.

此時會發現一個 loggedin: 0 的 cookie,試著將值改為 1,重整就獲得密碼囉!

  • level 6

提示為一個表單配上 source code(php),會看到表單的是由以下這段邏輯檢驗

<?

include "includes/secret.inc";

    if(array_key_exists("submit", $_POST)) {
        if($secret == $_POST['secret']) {
        print "Access granted. The password for natas7 is <censored>";
    } else {
        print "Wrong secret";
    }
    }
?>

嗯….有個 includes/secret.inc 的 secret 檔,試著在網址列打入

http://natas6.natas.labs.overthewire.org/includes/secret.inc

獲得了 secret,填入表單 submit 後就有密碼了 ~

  • level 7

看起來有兩個 anchor link,分別會帶上不同的 GET query string,打開 web devtool 看看有沒有其他線索

hint: password for webuser natas8 is in /etc/natas_webpass/natas8

看起來可能有哪裡可以做 injection 拿到此路徑的資料

試試看連結帶上不同的 query string ( http://natas7.natas.labs.overthewire.org/index.php?page=/123 )

發現噴有以下的錯誤

Warning: include(/123): failed to open stream: No such file or directory in /var/www/natas/natas7/index.php on line 21

Warning: include(): Failed opening '/123' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/natas/natas7/index.php on line 21

明顯的會拿 query string 參數去 include 相關的路徑,這也就代表我們試試任意替換路徑 XD

試試 http://natas7.natas.labs.overthewire.org/index.php?page=/etc/natas_webpass/natas8

順利的獲得密碼了!

  • level 8

跟第六關幾乎一樣,不同的是表單檢驗邏輯做了更改

<?

$encodedSecret = "3d3d516343746d4d6d6c315669563362";

function encodeSecret($secret) {
    return bin2hex(strrev(base64_encode($secret)));
}

if(array_key_exists("submit", $_POST)) {
    if(encodeSecret($_POST['secret']) == $encodedSecret) {
    print "Access granted. The password for natas9 is <censored>";
    } else {
    print "Wrong secret";
    }
}
?>

看起來目標是要將 encode 過的 secret 反解回去 XD

將 encode 的 secret decode 回去

<?php
  echo base64_decode(strrev(hex2bin("3d3d516343746d4d6d6c315669563362")));
?>

獲得 secrect 後輸入表單就可以拿到密碼了

  • level 9

同樣的給了 source code 作為提示

<?
$key = "";

if(array_key_exists("needle", $_REQUEST)) {
    $key = $_REQUEST["needle"];
}

if($key != "") {
    passthru("grep -i $key dictionary.txt");
}
?>

查一下 passthru 的用法

 A common use for this is to execute something like the pbmplus utilities that can output an image stream directly

嗯,這段程式碼明顯的是有 command injection 的漏洞

試著打看看 ;ls -al; ,嗯…如實地印出了有哪些檔案

看得到此目錄是由 http authentication 做使用者驗證的,要由 .htpasswd 反解密碼不太可能

試著掃看看有沒有可疑的檔案?

;find / -name "*pass*"; 會發現有兩個可疑的目錄

/etc/natas_webpass
/etc/natas_pass

試著執行 ; ls -al /etc/natas_webpass; 發現裡面有各關的目錄及相應的權限

-r--r-----  1 natas10 natas9    33 Dec 20  2016 natas10

嗯….執行 ;cat /etc/natas_webpass/natas10 就拿到密碼了 ~

  • level 10

跟上關幾乎一模一樣,差在多了 injection 的惡意字元偵測

<?
$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");
    }
}
?>

不準你用 ;& XD

尋找看看其他 command injection 的方式,仔細看看 grep 的用法

我們可以先輸入 '.*' -l -r / 列出所有 natas10 可存取的檔案,進一步的看看哪些檔案較為可疑

會發現跟上關的目錄看起來是一樣的:

/etc/natas_webpass/natas10
/etc/natas_webpass/natas11

接下來我們試著輸入 '.*' -r /etc/natas_webpass/natas11

就獲得密碼了 ~

Leave a Reply