软件测试专栏(10/20):安全测试实战:OWASP Top 10漏洞检测与防护
本文导读安全漏洞可能导致数据泄露、财产损失甚至系统瘫痪。OWASP Top 10代表了当前最普遍、最危险的Web应用安全风险。本文将带你了解这些漏洞的原理掌握基本的检测方法并学习如何通过测试手段提前发现安全隐患。一、为什么安全测试不可或缺1.1 安全事件的代价近年来数据泄露事件层出不穷某电商平台因SQL注入导致千万用户信息泄露某社交应用因API越权漏洞被爬取数亿条数据。安全漏洞的经济损失平均可达数百万美元更不用说品牌声誉的损害。1.2 安全测试的定位安全测试应在软件开发生命周期的各个阶段开展需求阶段进行威胁建模识别潜在风险开发阶段进行SAST静态代码安全扫描测试阶段进行DAST动态应用安全测试、渗透测试运维阶段持续进行漏洞扫描和安全监控1.3 OWASP Top 10简介OWASP开放Web应用安全项目每几年发布一次Top 10列表总结当前最严重的Web安全风险。2021年版的关键风险包括排名风险类别A01访问控制失效A02加密机制失效A03注入漏洞A04不安全设计A05安全配置错误A06易受攻击和过时的组件A07识别和身份验证失败A08软件和数据完整性失败A09安全日志和监控失败A10服务端请求伪造SSRF下面重点介绍其中最常见、最容易通过测试发现的几类漏洞。二、注入漏洞最经典的威胁2.1 SQL注入原理SQL注入发生在应用程序将用户输入拼接到SQL查询语句中且未做充分过滤时。攻击者可构造特殊输入改变查询逻辑从而绕过认证、窃取数据甚至删除数据库。示例代码有漏洞# 危险的字符串拼接usernamerequest.form[username]queryfSELECT * FROM users WHERE username {username}cursor.execute(query)# 输入: admin OR 11防护措施使用参数化查询预编译语句对输入进行严格校验和转义使用ORM框架2.2 检测方法手动测试在输入框或URL参数中输入以下字符观察是否触发数据库错误单引号双引号1 OR 111 AND 11工具扫描SQLMap自动化检测和利用SQL注入的专业工具Burp Suite拦截请求后发送到Scanner进行扫描2.3 其他注入类型注入类型说明简单测试命令注入在输入中插入系统命令; ls或 LDAP注入操纵LDAP查询逻辑*)(uid*XPath注入操纵XML路径查询 or 11三、跨站脚本XSS3.1 XSS的危害与分类XSS允许攻击者将恶意脚本注入到用户浏览的网页中可窃取Cookie、会话令牌、执行钓鱼攻击等。类型特点示例反射型XSS恶意脚本嵌入URL需诱导用户点击?searchscriptalert(1)/script存储型XSS脚本存储在服务器所有访问用户中招评论区提交scriptstealCookie()/scriptDOM型XSS通过修改DOM环境执行不经过服务器#img srcx onerroralert(1)3.2 检测方法手工测试在输入框中输入以下payload看是否弹出警告框scriptalert(XSS)/scriptimgsrcxonerroralert(1)svgonloadalert(1)工具支持OWASP ZAP主动扫描可自动发现XSSBurp Suite Pro内置XSS扫描器XSStrike专门检测XSS的工具防护措施输出编码根据上下文对输出进行HTML/JS/CSS编码CSP内容安全策略限制可执行脚本来源使用XSS过滤库如DOMPurify四、访问控制失效4.1 常见表现形式访问控制失效指用户能够访问未经授权的资源或执行未授权的操作。常见问题包括越权访问普通用户可访问管理员页面如/admin水平越权用户A可查看用户B的数据修改URL中的ID不安全直接对象引用IDOR通过改变参数值访问他人资源4.2 检测方法越权测试步骤使用低权限账号登录记录请求中的资源ID尝试修改ID为其他用户/资源的ID观察是否返回了非授权数据示例测试场景GET /api/order?id1001 # 用户A的订单 修改为 GET /api/order?id1002 # 尝试查看用户B的订单防护措施服务端验证每个请求的用户权限使用随机、不可预测的资源ID如UUID禁止客户端直接操作数据库主键4.3 垂直越权检测尝试直接访问未授权的URL例如普通用户直接访问/admin/userlist未登录用户访问/dashboard检查是否跳转到登录页或返回403。五、安全配置错误5.1 常见配置问题问题风险默认用户名/密码admin/admin可轻易登录后台调试模式开启显示详细错误堆栈暴露代码路径目录列表开启可浏览服务器文件目录敏感文件未删除如.git、backup.sql可被下载不必要的HTTP方法DELETE、PUT等未禁用默认页面存在/phpinfo.php、/console等泄露信息5.2 检测方法信息收集使用Nikto或Nmap扫描常见敏感路径手工访问/robots.txt、/.git/HEAD、/backup.zip检查响应头是否泄露版本信息Server: Apache/2.4.49工具推荐NiktoWeb服务器扫描器Dirb/Dirbuster目录爆破工具WhatWeb识别Web技术栈防护措施禁用目录列表移除默认文件和管理后台确保错误信息不暴露敏感细节定期检查配置基线六、敏感信息泄露6.1 泄露途径与检测敏感信息可能出现在错误响应中数据库连接串、堆栈跟踪URL参数中token、密码前端源码注释中响应头中X-Powered-By暴露框架检测方法抓包检查请求和响应是否有明文密码、token查看网页源码搜索 “password”, “secret”, “key”, “token”使用Burp Suite的扩展如Sensitive Data Finder6.2 防护原则不在日志中记录敏感信息使用脱敏显示如手机号只显示后4位所有敏感传输使用HTTPS密码需加密存储bcrypt、argon2七、安全测试工具实战7.1 OWASP ZAPZAPZed Attack Proxy是一款开源的Web应用安全扫描器功能强大且易用。基本使用流程设置ZAP为浏览器代理默认localhost:8080手动浏览目标应用ZAP自动抓取请求运行主动扫描ZAP自动检测SQL注入、XSS等查看告警按风险等级排序导出报告优点免费、社区活跃、支持API集成。7.2 Burp SuiteBurp是渗透测试的行业标准社区版免费专业版提供主动扫描。常用模块Proxy拦截、修改请求Repeater手工重放、修改请求测试Intruder自动化参数爆破、FuzzingScanner自动发现漏洞专业版Decoder编解码数据典型使用场景抓取登录请求发送到Intruder设置用户名和密码为变量加载字典进行暴力破解测试7.3 自动化安全测试集成将安全扫描集成到CI/CD流水线使用OWASP ZAP的Docker镜像在每次构建后自动扫描使用Selenium ZAP API实现安全回归测试检出高危漏洞时阻止发布八、安全测试实践建议8.1 测试人员的安全测试清单检查项测试方法SQL注入输入特殊字符观察错误使用SQLMapXSS提交scriptalert(1)/script查看是否执行IDOR修改资源ID尝试访问他人数据敏感目录使用Dirb扫描常见备份、配置文件传输加密抓包检查登录、支付等敏感请求是否为HTTPS会话安全检查Cookie是否有HttpOnly、Secure标志登录锁定多次错误登录后是否锁定或验证码文件上传上传test.php、shell.jsp检查是否可执行8.2 安全测试的局限性自动化扫描器无法发现业务逻辑漏洞如优惠券无限使用安全测试不能保证100%无漏洞需要结合代码审计、威胁建模等多种手段8.3 建立安全测试体系评估风险等级优先测试涉及资金、数据、权限的功能制定测试策略手动渗透自动化扫描结合修复验证开发修复后复测确保补丁有效持续改进积累漏洞模式建立安全测试用例库下一篇文章预告测试框架开发pytest深度解析与插件体系我们将深入pytest测试框架的核心特性掌握fixture、参数化、钩子函数学习如何开发自定义插件构建高效的测试框架。点赞 收藏 关注不错过后续10篇干货更新