未经授权的网络渗透、入侵、攻击均属违法犯罪,本文仅作网络安全学习参考,严禁用于任何非法用途!
木马的起源与概念
特洛伊木马(Trojan Horse),这个名字源于公元前十二世纪希腊与特洛伊之间的一场战争。古希腊围攻特洛伊许久却无法攻下,于是有人想到了个办法。制作了一个很高很大的木马作为战神马,内部可装士兵,佯攻几天后装作无功而返,留下木马。特洛伊解围后认为自己胜利了,还看到了敌人留下的木马,便作为战利品收入城中,全城举杯庆祝。到了午夜时分,藏匿于木马中的士兵便打开了城门,四处纵火,城外伏兵涌入,很容易便得到了城池。
在如今,我们常将寄宿在计算机中的未授权的远程控制程序称为特洛伊木马。它可以计算机管理员未发觉的情况下执行命令、泄露用于信息、甚至可以窃取管理员用户权限。如今已成为黑客常用的工具之一。
一句话木马
传统木马是直接植入木马,其隐蔽性低,且体积量大,极易被发现;一句话木马则十分简短,且其是先绕过WAF,在WAF接收数据后,再往里面传输用于执行的代码,使其更难被发现。
首先来看一句话木马原形:
拆解其含义:
@:表示后面即使执行错误也不报错;
eval()函数:表示括号内的语句字符串什么的都当做代码运行;
$_POST【‘cmd’】:表示从页面中获得cmd这个参数值;
<?php ?>:php代码要写在<?php />里面,服务器才能认出来这是php代码,然后去解析。
基本原理
接收通过 POST 传来的 cmd 参数,把里面的内容当代码执行。
当你想执行什么代码,就把什么代码放进cmd里。
例如 ,我想让cmd=echo'q',则可以:
将cmd代入可变成:
由此可以看出,相比我直接执行木马,一句话木马的目的更模糊,因此其可以骗过杀毒软件的查杀。
一句话木马的简单免杀
随着安全防护技术的不断提升,传统的一句话木马越来越容易被WAF检测到。
为了增强木马的隐蔽性,也就出现了木马的变形。
以下是一些简单的木马免杀方式。
assert绕过
如果过滤了eval,可以使用assert绕过
字符串拼接绕过
我们把函数名 / 代码拆分成多个字符串,用 .(PHP 字符串拼接符)拼接,检测规则无法识别拆分后的特征,但 PHP 解析时会自动合并为完整代码,正常执行。
或者可以用substr_replace()函数:
向上图代码,用substr_replace()函数对代码进行替换拼接,将assexx的第四位和第五位进行替换,即用rt换xx,最后拼接成asseert。
那么同理,若长度为0时,我们向代码替换0个字符,即为插入。
除此之外还有一种拼接方法:
利用函数绕过
可以利用函数来构造一句话木马:
先构造函数,再调用函数。
修改请求
如果POST请求和GET请求被过滤了,可以采用request请求:
利用魔术方法
可以构造一个类,然后用魔术方法绕过
编码绕过
可以通过对函数名/代码进行加密再解密的方式绕过WAF
比如说用base64编码对$_POST['cmd']进行加解密:
同理,URL编码:
又比如说用Unicode编码对函数名加密:
HTML实体编码:
协议绕过
协议绕过是指使用PHP支持的各种协议来读取或执行远程代码,从而绕过WAF的检测。
例如,可以使用php://input协议来读取POST数据并执行
文件包含漏洞
Windows 系统会自动删除文件名末尾字符,直接绕过后缀检测
比如我上传muma.php,我可以将php写成php1、php2等等,最后检测只会检测到php。
—— E N D ——