假设你要测试一个常见的登录页:
diff
网址:https://example.com/login
页面包含字段:
- 用户名:username
- 密码:password
- 登录按钮
测试目标:登录功能是否安全。
关注点:
List item
是否防 SQL 注入?
是否有暴力破解防护?
登录后是否存在越权问题?
是否使用 HTTPS?
Session 是否安全?
确认使用技术栈:
可能使用 PHP + MySQL(通过响应头或页面信息猜测)
抓包查看请求内容(用 Burp Suite 或 Fiddler):
pgsql
POST /login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
username=admin&password=admin123
识别潜在威胁:
威胁 | 问题 |
---|---|
SQL注入 | 用户名或密码字段是否直接拼接 SQL? |
弱密码 | 是否允许使用简单密码? |
暴力破解 | 是否有验证码或IP封锁机制? |
会话劫持 | 登录后使用的 Cookie 是否加了 HttpOnly 和 Secure? |
✅ SQL注入测试:
pgsql
admin' OR '1'='1
如果不加验证码就能登录进去了,说明存在 SQL 注入。
✅ 暴力破解测试:
使用 Burp Suite 的 Intruder 模块尝试多次猜密码(如字典攻击)
检查是否有限制机制,比如:
账号锁定
滑块验证码
IP 限制等
✅ 会话管理测试:
css
Set-Cookie: sessionid=abc123; HttpOnly; Secure
如果没有加 HttpOnly 或 Secure,说明会话容易被劫持。
✅ 越权测试:
arduino
https://example.com/admin
如果能访问说明存在越权漏洞。
✅ 敏感信息泄露:
用户不存在 / 密码错误
应该统一提示:“用户名或密码错误”,防止用户枚举。
漏洞名称 | 漏洞描述 | 复现步骤 | 严重性 | 修复建议 |
---|---|---|---|---|
SQL 注入 | 登录接口未对输入参数做转义 | 使用 admin’ OR ‘1’='1 成功登录 | 高 | 使用参数化 SQL 查询 |
弱密码策略 | 系统允许使用 “123456” 作为密码 | 注册用户并设置简单密码 | 中 | 增加密码复杂度要求 |
会话不安全 | Cookie 未加 HttpOnly | 抓包后查看响应头 | 高 | 在 Cookie 中添加 HttpOnly 和 Secure |