【PortSwigger Academy】SQL 注入绕过登录 (Login Bypass)

本文仅用于技术研究,禁止用于非法用途。
Author:枷锁

PortSwigger Academy 实验指南:SQL 注入绕过登录 (Login Bypass)

本指南涵盖了 PortSwigger Web Security Academy 中 "SQL injection vulnerability allowing login bypass" 实验的完整流程。

1. 实验基本信息

  • 实验名称:SQL injection vulnerability allowing login bypass
  • 难度系数:入门级 (Apprentice)
  • 目标 :以 administrator 用户身份登录。
  • 官方直达链接点击访问实验页面

2. 核心原理分析

在正常的登录逻辑中,后端服务器会接收用户输入的用户名和密码,并将其嵌入到 SQL 查询语句中。

正常的 SQL 查询

假设后端代码如下:

复制代码
SELECT * FROM users WHERE username = 'USER_INPUT' AND password = 'PASSWORD_INPUT'

如果用户输入 alice123456,查询变为: SELECT * FROM users WHERE username = 'alice' AND password = '123456' 只有当用户名和密码完全匹配时,数据库才会返回该用户信息。

SQL 注入攻击逻辑

攻击者可以通过特殊的输入来改变 SQL 语句的结构 。本实验的关键在于利用 SQL 的注释符

  • 攻击载荷 (Payload)administrator'--

  • 注入后的 SQL 语句

    复制代码
    SELECT * FROM users WHERE username = 'administrator'--' AND password = '...'
  • 发生了什么?

    1. ': 闭合了 username 字段的左单引号。
    2. --: 这是 SQL 中的单行注释符(注意 -- 后面通常需要接一个空格)。
    3. 结果-- 之后的所有内容(包括密码验证部分)都被数据库忽略了。查询变成了:SELECT * FROM users WHERE username = 'administrator'

只要数据库中存在 administrator 用户,查询就会返回结果,服务器逻辑会认为"验证成功"并允许你以该用户身份登录。

3. 详细解题步骤

第一步:访问实验室

  1. 打开 实验主页

  2. 点击橙色按钮 "Access the lab"。系统会为你启动一个临时的虚拟环境。

第二步:进入登录页面

  1. 在实验室主页顶部,点击 "My account"

2.你会看到一个标准的登录表单,包含 UsernamePassword 两个输入框。

第三步:实施注入

  1. Username 输入框中输入:administrator'--

  2. Password 输入框中可以输入任意字符(因为这部分会被注释掉,填什么都不影响)。

  3. 点击 "Log in"

第四步:验证结果

  1. 如果操作正确,页面会跳转到账户详情页。

  2. 页面上方应显示 "Congratulations, you solved the lab!"

  3. 此时你的身份已成功变为 administrator

4. 常见问题与技巧 (Cheat Sheet)

关于注释符的差异

不同的数据库系统(DBMS)使用的注释符可能不同:

  • MySQL/PostgreSQL : -- (注意 -- 后面的空格) 或 #
  • Oracle : --
  • MS SQL Server : --

在本实验中,由于实验室环境的配置,-- 即可生效。

在 URL 中注入时要用 --+%20

如果你是通过浏览器地址栏或 Burp Suite 手动修改请求:

  • 空格在 URL 中会被编码。
  • 输入 administrator'-- (末尾带空格)在发送时,为了防止空格被浏览器修剪掉,通常写成 administrator'--+administrator'--%20
  • %20是url编码后的空格

5. 防御方案

作为开发者,防止此类攻击的最佳实践是:

  1. 使用参数化查询 (Prepared Statements):这是最有效的防御手段,确保输入被视为数据而非代码。
  2. 避免拼接字符串:永远不要直接将用户输入拼接到 SQL 语句中。
  3. 使用成熟的 ORM 框架:如 Hibernate、Entity Framework 等,它们通常内置了防御机制。

宇宙级免责声明​​

🚨 重要声明:本文仅供合法授权下的安全研究与教育目的!🚨

1.合法授权:本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法,可能导致法律后果(包括但不限于刑事指控、民事诉讼及巨额赔偿)。

2.道德约束:黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范,仅用于提升系统安全性,而非恶意入侵、数据窃取或服务干扰。

3.风险自担:使用本文所述工具和技术时,你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。

4.合规性:确保你的测试符合当地及国际法律法规(如《计算机欺诈与滥用法案》(CFAA)、《通用数据保护条例》(GDPR)等)。必要时,咨询法律顾问。

5.最小影响原则:测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。

6.数据保护:不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息,应立即报告相关方并删除。

7.免责范围:作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。
🔐 安全研究的正确姿势:

✅ 先授权,再测试

✅ 只针对自己拥有或有权测试的系统

✅ 发现漏洞后,及时报告并协助修复

✅ 尊重隐私,不越界

⚠️ 警告:技术无善恶,人心有黑白。请明智选择你的道路。

希望这个教程对你有所帮助!记得负责任地进行安全测试。

相关推荐
麦聪聊数据2 分钟前
企业数据市场建设(四):流程闭环与价值运营,让数据市场真正转起来
运维·数据库
正儿八经的少年8 分钟前
redis 的大 key 和热 key 详解
数据库·redis·缓存
AI砖家12 分钟前
多智能体系统实战:架构设计、数据库表设计与 Skill 体系
数据库·多智能体·skill·agent架构设计·agengt
yydbjx33 分钟前
KACHIE发圈更隐蔽,博容安可的侧键推杆是不是不如它?
安全·求救器·防身
治愈系贝壳35 分钟前
ARM --- day 6 时钟
linux·arm开发·学习
小五传输38 分钟前
自主可控建设指南:Serv-u替代方案,实现平滑迁移业务不中断
大数据·运维·安全
夜雪一千44 分钟前
MySQL查询条件的顺序是否影响查询效率
数据库·mysql
X-⃢_⃢-X1 小时前
十、Redis之布隆过滤器
数据库·redis·缓存
Nturmoils1 小时前
订单号查出了三笔,我以为是数据脏了,其实是自己写错了
数据库
ZKNOW甄知科技1 小时前
燕千云深度集成飞书:以AI之力,开启无感IT运维体验
大数据·运维·网络·数据库·人工智能·低代码·集成学习