一.題目分析
這邊提示使用了Git,試著訪問.git看是否存在.git泄露
瀏覽了一下,很多都是亂碼,想著用githack將git庫克隆下看一下
二.操作
python2 GitHack.py http://url/.git
訪問了一下flag.php,沒啥發現,在看一下index.php
審計一下:
僅展示部分代碼
第一思路使用文件包含(發現不行)
我在這邊發現有一個require_once第一想法就是通過文件包含漏洞,所以去找這個$file參數。
$file會從前端的$page獲取數據并在前面拼接template/ ,在后面還有對這個參數的過濾,
①如果參數含有..就會終止整個程序并且返回Detected hacking attempt
②如果$file傳的文件路徑要是不存在則會終止程序,返回That file doesn't exist
所以如果要通過文件包含去滲透就需要繞過這兩個防護,這邊最初想法在后面文件包含部分可能就需要eval(system('cat ./template/flag.php')),后面發現這邊還沒到require_once的時候就以及會執行cat ./template/flag.php了。這邊是因為assert也會把內部的字符串當成php命令執行
第二思路通過assert()
php版本在7.3以下會存在assert()會執行字符串中的php代碼
①測試
?page=%27).phpinfo();//
%27代表'
%27)閉合前面的strop函數? ? ? ? .作為字符串的分隔符號,最后會執行phpinfo()這邊沒閉合assert,但是內部的其他函數是完整合法所以不影響函數執行,但是這邊閉合了assert反而無法執行了,這邊自己也不知道。
成功顯示了
②打開目標文件
').system('cat ./templates/flag.php');//
') or print_r(file_get_contents('templates/flag.php'));//
', '..') or eval($_REQUEST['hacker']); //
第三個句子,得用蟻劍去連接,但是我自己不愛用蟻劍所以就沒有演示了
這道題目做完我也有點問題,希望有人給我解答一下,為什么通過git庫下載下來的flag.php文件沒法看到我們想要的flag,但是我們在進行滲透的時候也是去cat這個文件,為什么可以得到,還有就是為閉合assert()卻反而沒法滲透成功