繼續上一篇securityoverridehacking challenge 解題思路匯總的工作,這次把Advanced給弄完了。這當中主要涉及了關於php的一些攻擊方法,可以以此為基礎做一個深入的了解。
3 Advanced
3.1 PHP Sucks
利用PHP中==的跨比較而產生的漏洞。最終目的是要$input=="0000". 這個好辦,php中,任何數字型字串最後都會轉換成數字去做比較,所以input可以是任意個0。不過Filter最後加了個正規判斷<span>preg_match</span>
<span>(</span>
<span>"/^[d]{1,}$/D"</span>
) <span></span>。意思就是不能為純數字。也比較簡單,利用0的特性嘛(小學知識:0等於0的負數),於是輸入-0就好了。
<span></span>PS: 關於php的弱類判斷法則
http://php.net/manual/en/types.comparisons.php
<span></span>
3.2 Obfuscated PHP:
。這題沒有什麼快捷方法,手動清理。清除註解和分號後程式碼量其實不多,然後把一些該解碼的解碼,函數該回傳的直接替換,就能把程式碼邏輯理清楚了。整理完後程式碼邏輯如下:
session_start(); $_u=array();
u[1]= 'substr'; // substr函數$_u[2]='base64_decode'; // decode方法 $_§§§§§§§§ =preg_split('/(?!\##$$$uu)= /',_SERVER['QUERY_STRING']); // 可以簡單理解為按=分割 ${"_g_1"} = urldecode($_§§§§§§§[0]); // key
"_g_2"} = _GET[${"_g_1"}]; // value if(LEVENSHTEIN(${"_g_1"},${"_g_2"})==0){// 參數的key和value必須一樣 validate_result(${"_g_2"});
};
function validate_result($result){value). if($result === 'phpinfo ();'){
$_SESSION["solved_advanced_2"] = true;
echo "Good luck. Back to thechallenges main page.
Please note that you willonly get feedback if you solved this challenge. Wrong attempts do not generateany output at all.
";mm
'code.php');
?>
之後就很簡單了,建構一個符合要求的url即可。
3.3 Upload bypass
要求你bypass過濾程序,上傳一個php腳本。常規思路:1 直接上傳.php檔案(失敗)。 2 上傳.php文件,但修改post內容中的contentType為image/jpg(失敗)。 3 上傳正常jpg文件,隱藏php腳本(Linux指令cattest.php>>image.jpg或使用工具來新增註釋,盡量保證圖片簡單或純色,以免某些圖片字元幹擾php解析)。透過第三步,這個問題就解決了。
接下來也研究了一下怎麼執行jpg中的php腳本這個問題,在查閱資料以及自己試驗後,基本上只有這兩種方法比較可行:
· require這個jpg檔include('images/' . $_GET['test.jpg']);
require('images/' . $_GET['test.jpg']);include(' images/' . $_POST['test.jpg']);include('images/' . $_POST['test.jpg']);include('test.jpg');
require('test. jpg');?>
· 在/etc/apache2/mods-available/php5.conf中設定 php 既然題目中已經提到了存在local file inclusiong這個漏洞的存在,那麼想利用第一種方法執行php腳本就很簡單了,大致是利用注入的方法去控制include或者require中的變量,使得腳本執行。 3.4 Local File Inclusion/WAF Bypass 3.3的研究,我的是/challenges/advanced/uploads/Ac3sk9j.jpg,我不知道是不是大家都一樣)。 3.3已經提到了,php中如果有include或require等函數,就可以用來執行jpg中的php程式碼。進入3.4,觀察後發現url帶有參數page,嘗試隨意修改,果然給了錯誤提示:test.phpcannot be found。那麼目標就很明確了,修改page參數,將路徑指定到jpg檔。利用路徑中,..代表上一級資料夾,很容易寫出相對路徑來../uploads/Ac3sk9j.jpg。嘗試請求,結果為:uploads/Ac3sk9j.jpg.phpcannot
be found。有兩點不如人意:1)../給過濾掉了;2)檔案名稱為Ac3sk9j.jpg.php而不是Ac3sk9j.jpg。於是分別尋找解法: · 對於某種特定字串被過濾的情況,最簡單的就是string replace了。對應的破解方法很簡單,拼湊類似aabb的字串就好了。中間的ab在被過濾後,就會產生新的ab了。這裡寫成….//就可以了。所以stringreplace的過濾方法和沒有是一樣的。 · .php後綴問題。顯然網站對任何請求路徑都加了.php後綴。 Google了一下繞過策略,主要有兩種:1)利用檔案路徑最大長度4096bytes,然後透過新增任何個/.來建構超長的檔案路徑。想了想,這麼長的url估計直接會被伺服器攔截回傳414,於是就沒有嘗試了;2)利用C中字串終止符,在.php之前加入終止符,表示截斷。比較普遍都是拿%00舉例,不過試了一下沒成功。後來在某個範例中查到了
以上就介紹了securityoverridehacking challenge 解題思維總結——Advanced,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。
修改.htaccess原理一樣(簡單嘗試了一下,沒有成功)