建议收藏:SQL注入基础与各个数据库中的常用命令

前言


这是一个 SQL 注入笔记,其中包含了很多常用的payload,涵盖了 5 种最流行的数据库及其衍生产品(MySQL、PostgreSQL、MSSQL/SQL Server、Oracle、SQLite)。

某些payload包含占位符,这些占位符在使用前需要被替换为具体的值。占位符以<>表示,并且使用大写字母,例如。替换时需替换整个占位符(包括<>)。

避免使用 OR(OR 1=1)


除了打 CTF之外,其他情况都要避免使用涉及 or 表达式的注入(例如 ’ or 1=1 --),除非只能用or。

原因:

  1. 登录绕过不稳定

“OR 1=1” 在某些情况下可以绕过登录验证,但其效果并不稳定。通常是期望 SQL 查询返回一行匹配的数据(例如用户名和密码都正确)。如果使用 “OR 1=1”,查询可能会返回多行数据(例如整个user表),这可能导致目标拒绝登录请求。例如,查询 SELECT * FROM users WHERE username = ‘’ OR 1=1 AND password = ‘’ 会返回所有用户,但如果目标只在查询返回单行时才允许登录,这种方法就会失效。相比之下,使用其他方法(如注释掉密码检查部分并配合有效用户名)可能更可靠,即 “OR 1=1” 的通用性不足。

  1. 可能导致数据库崩溃

在某些场景(如搜索功能)中注入 “OR 1=1” 会导致数据库返回表中的所有行。如果数据库表非常大,这种操作可能会引发性能问题,甚至导致数据库过载或系统崩溃。

  1. 数据操作风险高

当 “OR 1=1” 用于 UPDATE 或 DELETE 语句时,可能会意外修改或删除大量数据。例如,在重置密码的场景中,注入 “OR 1=1” 可能会导致所有用户的密码都被更改,而不仅仅是目标用户。这种操作可能引发数据丢失或损坏,风险极高。

安全的 or payload

---------------------

常用的测试方法


以下是一个简单通用的方法,用于发现基本的 SQL 注入漏洞,通过逐步操作来检测是否存在 SQL 注入。


第一步:尝试使用单引号让原有的 SQL 语句报错

首先,我们需要在某个有效的输入值中注入单引号(')或双引号("),以尝试让目标本身的sql语句报错。例如:

  • 假设有一个搜索功能,搜索关键词 fuck 返回 23 个结果。

  • 在搜索关键词后附加单引号,变为 fuck’,然后提交。

  • 如果结果变为 0 个(或者直接报错),说明 SQL 语句可能因为我们插入了单引号而发生改变。注意:这也可能是因为 fuck’ 本身是一个无效的搜索词,但后续步骤可以帮助我们确认。


第二步:尝试修复目标的sql语句检查是否恢复原始响应

可以尝试用以下方法替换注入的单引号,看看是否能恢复到原始响应(即 23 个结果)。依次尝试以下替换:

  • 将 fuck’ 替换为 fuck’ '(单引号后加空格和另一个单引号)

  • 将 fuck’ 替换为 fuck’||’

  • 将 fuck’ 替换为 fuck’+’

  • 将 fuck’ 替换为 fuck’ AND ‘1’='1

  • 将 fuck’ 替换为 fuck’ – -

如果某个替换后的搜索词(如 fuck’ ')再次返回 23 个结果,说明原始响应被恢复了,就表示这个搜索功能很可能存在 SQL 注入。


第三步:处理整数值的情况

如果以上方法都无法恢复原始响应,可能是因为我们注入的字段是一个整数值(而不是字符串)。在这种情况下,尝试以下方法:

  • 将 fuck’ 替换为 fuck – -

  • 将 fuck’ 替换为 fuck AND 1=1

  • 将 fuck’ 替换为 fuck AND 1=1 – -

同样,如果某个替换后的搜索词恢复了原始响应(23 个结果),则说明可能存在 SQL 注入。


第四步:确认 SQL 注入漏洞

为了进一步确认是否存在 SQL 注入,可以尝试以下方法:

方法 1:尝试 UNION 方法

  • 构造一个 UNION 注入 payload,例如 fuck’ UNION SELECT 1,2,3 – -。

  • 如果返回结果异常(例如有额外的数据或有明显的数据库报错),则可以确定存在sql注入。

方法 2:注入布尔值 payload

  • 构造两个布尔值 payload:

  • fuck’ AND ‘1’='1(应该返回原始响应,即 23 个结果)

  • fuck’ AND ‘1’='0(应该返回 0 个结果)

  • 如果结果符合预期(第一个 payload 返回 23 个结果,第二个返回 0 个结果),则基本上可以确认存在 SQL 注入漏洞。

识别数据库


一旦通过上面的方法发现了sql注入,可以通过下面这些payload来识别到底是什么数据库。

在这里插入图片描述

注释


注释语法可用于在 SQL 语句中添加注释,可以用于注释位于注入语句后的那些原本的内容,以及绕过某些过滤。需要注意"–“注释需要在”–"后加上空格才有效,而 /*comment*/ 是行内注释。

在这里插入图片描述

字符串连接


这些函数/操作符可用于将两个或多个字符串连接在一起。

在这里插入图片描述

子字符串


这些函数可以用来选择一个字符串的子字符串。START 值应设置为 1(而不是 0),以便从第一个字符开始提取子字符串。还包括无逗号的版本,用于绕过某些 WAF(Web 应用防火墙)或过滤机制。
在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

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

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

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

在这里插入图片描述

最后

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。

干货主要有:

①1000+CTF历届题库(主流和经典的应该都有了)

②CTF技术文档(最全中文版)

③项目源码(四五十个有趣且经典的练手项目及源码)

④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

⑥ CTF/渗透测试工具镜像文件大全

⑦ 2023密码学/隐身术/PWN技术手册大全

扫码领取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值