首頁  >  文章  >  後端開發  >  securityoverridehacking challenge 解題思路總結-Advanced

securityoverridehacking challenge 解題思路總結-Advanced

WBOY
WBOY原創
2016-08-08 09:19:18904瀏覽

繼續上一篇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
修改.htaccess原理一樣(簡單嘗試了一下,沒有成功)

既然題目中已經提到了存在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教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn