您有一份CTF代碼審計文件等待查收
0x01背景
上周總結了一些文件包含與偽協議結合的利用方法,本周就找一道例題進行演練。題目源自國外某挑戰平台,平台上還有許多其他有趣的challenges題目,小夥伴有興趣也可以上去好好玩耍一番。
題目地址:http://level3.tasteless.eu/index.php?file=
站點地址:http://chall.tasteless.eu/
0x02解題過程
首先訪問題目站點:
http://level3.tasteless.eu/index.php?file=發現給出了題目的源碼,所以本題便是要通過代碼審計獲取flag.
源碼信息:
源碼中展示的信息還是很直接的:
1.高亮讀取 index.php的源碼。
2.在提示信息中告知要讀取PHP.ini ,裡面有敏感信息。
3.包含了anti_rfi.php,並提示不允許進行遠程文件包含。
4.使用require_one包含了GET請求的file參數。
根據上面的代碼情況可以知道最重要的是第4點,所以可以使用如下思路進行解題。
1.讀取PHP.ini和anti_rfi.php,獲取足夠的信息。
2.繞過anti_rfi.php並遠程包含一句話。
3.使用PHP偽協議直接執行代碼。
從php.ini中得到了allow_url_include是on的狀態,所以可以使用PHP偽協議執行代碼,可以使用php://input的協議,成功執行了代碼。
此時需要獲取站點的目錄信息,由於allow_url_fopen是為off的狀態所以無法使用遠程文件包含執行命令了,也就無法直接用菜刀去連接並尋找flag,但是已經知道網站的根目錄/var/www/chall/level3
此時本想可以使用命令執行的函數執行命令獲取目錄信息,但是這裡似乎做了限制,無法執行系統命令,所以這裡需要介紹PHP的scandir()函數會將當先目錄下的目錄結構以數組的方式保存,請求http://level3.tasteless.eu/index.php?file=php://input [POST DATA:]得到flag文件的名稱。
訪問th3_th3_fl4g得到flag的值。
0x03小小總結
想必上周總結的偽協議與本周文件包含結合的利用方法小夥伴已經GET到了,解題過程大致有如下3步驟:
1.分析站點給出的源代碼。
2.判斷allow_url_fopen,allow_url_include的開啟狀態,來推測可以使用的偽協議。
3.使用相應的偽協議執行代碼獲取flag。
當無法判斷allow_url_fopen,allow_url_include的開啟狀態時,可逐一嘗試如下的請求判斷哪些能夠執行,如果有上傳功能那麼可能是考phar或zip等壓縮流的知識點。
PHP 讀文件和代碼執行的方式:
1.?file=data:text/plain,
2.?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
3.?file=php://input [POST DATA:]
4.?file=php://filter/read=convert.base64-encode/resource=xxx.php
0x04 擴展小知識
雖然本題allow_url_fopen是off的狀態,所以是無法使用遠程文件包含的,如果是ON的話就需要使用文件包含讀取文件,查看文件中的源碼了。
如使用讀取anti_rfi.php文件的源碼信息。
從源碼中可以看到使用了正則匹配匹配到了,返回hacker detected,但是並沒有匹配所以使用ftp://也是一個思路。
通往白帽子的奇妙世界


TAG:漏斗社區 |