对一个 Web 登录页面进行安全测试

示例:对一个 Web 登录页面进行安全测试

假设你要测试一个常见的登录页:

diff

网址:https://example.com/login
页面包含字段:
- 用户名:username
- 密码:password
- 登录按钮

安全测试流程 + 示例操作

1️⃣ 需求分析

  • 测试目标:登录功能是否安全。

  • 关注点:

    1. List item

    2. 是否防 SQL 注入?

    3. 是否有暴力破解防护?

    4. 登录后是否存在越权问题?

    5. 是否使用 HTTPS?

    6. Session 是否安全?

2️⃣ 信息收集

  • 确认使用技术栈:
    可能使用 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

3️⃣ 威胁建模

识别潜在威胁:

威胁 问题
SQL注入 用户名或密码字段是否直接拼接 SQL?
弱密码 是否允许使用简单密码?
暴力破解 是否有验证码或IP封锁机制?
会话劫持 登录后使用的 Cookie 是否加了 HttpOnly 和 Secure?

4️⃣ 安全测试执行

✅ SQL注入测试:

  • 在用户名处输入:
pgsql

admin' OR '1'='1

如果不加验证码就能登录进去了,说明存在 SQL 注入。

✅ 暴力破解测试:

  • 使用 Burp Suite 的 Intruder 模块尝试多次猜密码(如字典攻击)

  • 检查是否有限制机制,比如:

    1. 账号锁定

    2. 滑块验证码

    3. IP 限制等

✅ 会话管理测试:

  • 登录后抓包查看 Set-Cookie 响应:
css

Set-Cookie: sessionid=abc123; HttpOnly; Secure

如果没有加 HttpOnly 或 Secure,说明会话容易被劫持。

✅ 越权测试:

  • 登录普通用户后,尝试访问管理员页面:
arduino

https://example.com/admin

如果能访问说明存在越权漏洞。

✅ 敏感信息泄露:

  • 登录失败时是否提示太详细?比如:

用户不存在 / 密码错误

应该统一提示:“用户名或密码错误”,防止用户枚举。

5️⃣ 漏洞报告(举例)

漏洞名称 漏洞描述 复现步骤 严重性 修复建议
SQL 注入 登录接口未对输入参数做转义 使用 admin’ OR ‘1’='1 成功登录 使用参数化 SQL 查询
弱密码策略 系统允许使用 “123456” 作为密码 注册用户并设置简单密码 增加密码复杂度要求
会话不安全 Cookie 未加 HttpOnly 抓包后查看响应头 在 Cookie 中添加 HttpOnly 和 Secure

6️⃣ 修复验证

  • 开发修复后,重新尝试 SQL 注入输入,看是否还有效。
  • 检查 Cookie 是否添加了正确属性。
  • 检查是否增加了验证码或登录限制。

你可能感兴趣的:(安全测试,安全性测试,测试工具)