WeChall_PHP-Local File Inclusion(LFI)
PHP - Local File Inclusion(LFI)
題目:
中文翻譯如下:
核心代碼:
$filename = 'pages/'.(isset($_GET["file"])?$_GET["file"]:"welcome").'.html'; include $filename;代碼詳解:
- 當要 判斷一個變量是否已經聲明的時候 可以使用 isset 函數
- 判斷表達式是否成立?表達式1:表達式2(三目運算符)
如果條件成立,執行表達式1,否則執行表達式2 - include:運行指定文件
從以上代碼中看出,我們每次輸入的文件名都會在最后加上.html,我們需要刪除.html,在php<5.3.4版本之前,是存在00截斷漏洞的,因此我們可以嘗試使用00截斷
%00截斷介紹:
%00截斷,例如1.php%00.txt,白名單在測試時會直接將這個帶入,判斷后綴名(因為此時1.php%00.txt是一個字符串整體),但執行該代碼時,會自動截斷%00后面的內容,只要記住會刪除包括%00及后面的所有內容解題過程:
-
首先題目提到,需要執行solution.php,那么我們直接訪問試試看呢
(中文釋義:您不能直接執行此腳本。請在up/index.php中使用LFI vuln包含它。) -
這是最簡單的本地文件包含,這里不能直接在lfi目錄下執行solution.php,需要使用到../,看到下方有文件包含,因此,我們先在題目中選擇一個進去看看
如下圖:
-
我們在url中再來試試下面的測試
(中文釋義:
PHP警告(2):include(pages / solution.php.html):無法打開流:/ home / wechall / www / wc5 / www / challenge / training / php / lfi / up / index中沒有這樣的文件或目錄 .php(54):eval()‘代碼 行 1
PHP警告(2):include():無法在/ home / wechall / www / wc5 / www / challenge中打開’pages / solution.php.html’以包含(include_path =’。:/ usr / share / php’) /training/php/lfi/up/index.php(54):eval()'d代碼 行 1)
- 看到這個顯示up中沒有中沒有solution.php.html,猜想可能是html的問題,于是我們使用00截斷
結果如下圖:
- 這回是刪除了,但是還是沒有顯示,于是我們返回上面幾層目錄看看
根據這個我們才看出,solution.php是在lfi目錄下,因此,我們使用…/來訪問(注:這里直接使用http://www.wechall.net/challenge/training/php/lfi/solution.php是不行的,他強制要求你使用本次文件包含) - 最后在http://www.wechall.net/challenge/training/php/lfi/up/index.php?file=solution.php%00中重新構造url,構造時需要注意,solution.php在lfi目錄下,但他代碼在執行中會增加一個pages目錄,本來我們使用下面這個構造就可以
但執行后卻是下圖所示這時(注:它這時的目錄為http://www.wechall.net/challenge/training/php/lfi/up/index.php?file=pages/../solution.php%00):
多了一個pages目錄,我們需要到達lfi目錄就需要使用兩個../,第一個../跳出pages,第二個../跳出up到達lfi。最后,構造的url為
www.wechall.net/challenge/training/php/lfi/up/index.php?file=../../solution.php%00執行結果為:
成功完成LFI
總結
以上是生活随笔為你收集整理的WeChall_PHP-Local File Inclusion(LFI)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教你快速清理运存,提升 iPhone 运
- 下一篇: WeChall_PHP-0817