1. 程式人生 > >natas通關小遊戲(未完待續)

natas通關小遊戲(未完待續)

level 0 -> level 1

You can find the password for the next level on this page.(你可以在此介面找到下一級別的程式碼)

於是檢視原始碼,發現答案在註釋中

natas:gtVrDuiDfck831PqWsLEZy5gyDz1clto

 level 1 -> level 2

You can find the password for the next level on this page, but rightclicking has been blocked!(你可以在此介面找到下一級別的密碼,但是右鍵單擊已被阻止)

F12檢視原始碼,發現答案在註釋中

natas2:ZluruAthQk7Q2MqmDeTiUij2ZvWy2mBi

level 2 -> level 3

There is nothing on this page(此頁面沒有任何內容)

natas3:sJIJNW6ucpu6HPZ1ZAchaDtwd7oGrD14

level 3 -> level 4

There is nothing on this page(此頁面沒有任何內容)

還是檢視原始碼,發現註釋中有提示

<!-- No more information leaks!! Not even Google will find it this time... -->

頁面跳轉

User-agent: * 
Disallow: /s3cr3t/

第一行:* 表示所有搜尋引擎

第二行:Disallow 表示禁止訪問,後面接目錄或檔名

發現user.txt,單擊開啟,得到密碼

natas4:Z9tkRkWmpt9Qr7XrR5jWRkgOU901swEZ

level 4-> level 5

Access disallowed. You are visiting from "http://natas4.natas.labs.overthewire.org/" while authorized users should come only from "http://natas5.natas.labs.overthewire.org/"(訪問不被允許,只能來自某個特定的URL)

知識點:HTTP Referer是header的一部分,當瀏覽器向web伺服器傳送請求的時候,一般會帶上Referer,告訴伺服器我是從哪個頁面連結過來的首先F12開啟火狐瀏覽器的開發者工具,切換到網路(Network)選項,重新載入,檢視頁面請求,發現瀏覽器請求http://natas4.natas.labs.overthewire.org頁面的請求頭的Referer:http://natas4.natas.labs.overthewire.org

可以利用hackbar構造referer:http://natas5.natas.labs.overthewire.org

頁面跳轉,得到密碼

natas5:iX6IOfmpN7AYOQGPwtn3fXpbaJVJcHfq

level 5 -> level 6

Access disallowed. You are not logged in(訪問不被允許,你沒有登入)

明明登入了卻說沒登入,這裡涉及http協議的一個知識點cookie了。http協議是一種無狀態的協議,每次穿輸完資料就會斷開連線,這時候就靠cookie進行身份驗證了。cookie由伺服器分配器給瀏覽器,儲存了會話狀態和身份資訊,之後每次http 請求,都會帶上cookie資訊給伺服器,伺服器會根據cookie資訊做出不同的響應。

於是我們F12檢視網路選項發現cookie中的loggedin=0,用hackbar改為1即可

natas6:aGoY4q2Dc6MgDq4oL4YtoKtyAg9PeHa1

 level 6 -> level 7

頁面提示Input secret :,和一個提交按鈕以及view sourcecode按鈕。可知需要提交一個特定的引數才會返回密碼。

首先檢視原始碼,發現關鍵程式碼

<?

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

頁面成功跳轉,但是為空白頁面無任何資訊,說明程式碼被解析,檢視原始碼,得到secret

<?
$secret = "FOEIUWGHFEEUHOFUOIU";
?>

輸入,點選提交,返回密碼

natas7 : 7z3hEENjQtflzgnT29q7wAvMNfZdh0i9

level 7 -> level 8

檢視原始碼發現有一句話被註釋掉了

<!-- hint: password for webuser natas8 is in /etc/natas_webpass/natas8 -->

通過瀏覽器F12檢視頁面請求,發現訪問Home和About都是GET方式提交引數訪問的,而不是直接跳轉,加上這句可以猜測是檔案包含漏洞,隨意構造引數(例:about1)測試一下,有如下資訊

證明確實是檔案包含漏洞,於是將/etc/natas_webpass/natas8作為引數傳入,得到密碼

natas8 : DBfUBfqQG69KvJvJ1iAbMoIpwSNQ9bWe

 level 8 -> level 9

檢視原始碼,發現關鍵程式碼

<?

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

這是一道資訊保安加密問題

base64_encode是進行base64加密

strrev是將字串倒過來

bin2hex是將assic碼轉化為十六進位制

於是構造

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

得到oubWYf2kBq,輸入後點擊提交得到密碼

natas9 : W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl

 level 9 -> level 10

<?
$key = "";

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

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

知識點:

passthru()函式用來執行外部命令的

grep -i 為不分大小寫匹配查詢

既然呼叫系統命令,可以嘗試命令注入,先用;截斷,在構造檢視命令 cat /etc/natas_webpass/natas10;

得到密碼

natas10 : nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu

level 10 -> level 11

For security reasons, we now filter on certain characters(出於安全原因,我們過濾掉了某些字元)

檢視原始碼,發現;|&被過濾了,但是grep支援正則表示式,於是可以構造 .* /etc/natas_webpass/natas11提交

natas11:U82q5TCMMQ9xuFoI3dYX61s7OZD9JKoK