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