声明
所提供的工具资料仅供学习之用。这些资料旨在帮助用户增进知识、提升技能,并促进个人成长与学习。用户在使用这些资料时,应严格遵守相关法律法规,不得将其用于任何非法、欺诈、侵权或其他不当用途。本人和团队不对用户因使用这些资料而产生的任何后果负责,包括但不限于因操作不当、误解资料内容或违反法律法规而导致的损失或损害。用户应自行承担使用这些资料的风险,并在使用前进行充分的了解和评估。
介绍
SQL注入是指Web应用程序对用户输入的数据没有判断或过滤不严,攻击者可以在Web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,让数据库执行非授权的任意查询,从而进一步得到相应的数据信息。
简单来说就是通过将恶意的SQL语句拼接在原来正常的SQL语句后面,使数据库直接执行新的SQL语句。
原理
参数用户可控
前端传给后端的参数内容是用户可以控制的。
参数带入数据库查询
传入的参数拼接到正常SQL语句,且带入参数库查询。
分类
请求方式
POST
数据不会包含在URL中,通过提交表单数据
GET
数据被包含在URL中
注入点属性
整数型
无需闭合
字符串型
需要字符通过闭合
页面的回显
有回显
看到注入的SQL语句在数据库上执行的结果
无回显
不能看到SQL语句在数据库上执行的结果
注入方式
联合注入(Union注入)
使用UNION操作符将多个SELECT语句的结果合并到一个结果集中。攻击者可以利用这种方式从数据库中获取多个表的数据。
-1’ union select 1,2,3--+
堆叠注入
允许执行多条SQL语句的注入方式。攻击者可以在一条输入中构造多条SQL语句,以执行多个操作或获取多个结果。
1';insert into users(id,username,password) values ('38','less38','hello')--+
报错注入
利用数据库的错误信息来获取敏感信息的注入方式。当数据库执行错误的SQL语句时,可能会返回错误信息,攻击者可以利用这些信息来构造注入攻击。
1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
盲注
布尔注入
基于布尔逻辑判断的注入方式。攻击者通过构造不同的输入来观察应用程序的响应,从而判断是否存在注入漏洞以及获取敏感信息。
kobe' and 1=1#和kobe' and 1=2#
只显示存在或不存在
延时注入
使用数据库延时特性进行的注入攻击。攻击者通过构造特殊的SQL语句来使数据库执行延时操作,从而判断注入是否成功或获取敏感信息。
' and if(1=1,sleep(10)) #
注入成功时,会延迟10秒
绕过方式
注释符绕过
基本注释符
使用
--+、#、或/*注释内容*/
等注释符来绕过某些过滤规则。
构造闭合
如,sql语句 and '1'='1,这样接收源码前面的引号被 id=1’ 中的后引号所闭合,源码中的后引号会被 '1'='1 中的前引号所闭合,从而不用注释符就逃逸出引号。
大小写和特殊编码绕过
大小写绕过
使用大小写混合的方式来绕过过滤规则。
如将 select 改为 Select。
特殊编码绕过
将需要注入的语句换成其他编码形式,如十六进制、ASCII编码、Unicode编码等。
如Test 可以等价于 CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。
空格和特殊字符绕过
空格绕过:使用多种方式来代替空格,
如 /**/、()、回车(URL编码中的 %0a)、Tab键等。
特殊字符绕过:对于某些被过滤的特殊字符,可以使用其等价形式或编码形式来绕过。
关键字和函数绕过
双写关键字绕过
将关键字如 select 等只使用 replace() 函数置换为空,此时可以使用双写关键字绕过。
如select 变成 seleselectct。
等价函数绕过
使用功能相同的函数来替换被过滤的函数。如,sleep() 可以使用 benchmark() 函数进行替代;substr()、substring()、mid() 可以相互取代;ord() 和 ascii() 在处理英文时效果一样(但处理中文等时不一致)。
逻辑运算符和比较符绕过
逻辑运算符绕过
使用 && 代替 and,使用 || 代替 or,使用 | 代替 xor,使用 ! 代替 not。
比较符绕过
使用 like、rlike、regexp 或大小于号 <、> 来绕过等号 = 的过滤。此外,还可以使用 greatest()、least()、strcmp() 等函数来进行比较操作。
引号和逗号绕过
引号绕过
当引号被过滤时,可以使用十六进制编码、ASCII编码或宽字节编码等方式来绕过。
如users 的十六进制字符串是 7573657273,则可以使用 0x7573657273 来代替。
逗号绕过
在SQL盲注中,如果逗号被过滤,可以使用 from for 语法、join 关键字、like 关键字或 offset 关键字来绕过。
内联注释和等价替换
内联注释绕过
将一些特有的仅在MySQL上的语句放在 /!.../ 中,这些语句在其他数据库中不会被执行,但在MySQL中会执行。
等价替换
使用功能相同的语句或表达式来替换被过滤的部分。
如,union select 可以替换为 union select * from (select 1) a join (select 2) b join (select 3) c。
其他绕过方式
使用浮点数
在某些情况下,可以使用浮点数来绕过过滤规则。
如select * from users where id=8E0 union select 1,2,3。
URL编码
对关键字进行URL编码来绕过过滤规则。
如or 1=1 可以编码为 %6f%72%20%31%3d%31。
红队全栈教学
可在公众号回复“红队”获取群链接
OSCP+
原文始发于微信公众号(泷羽Sec-Ceo):SQL注入的入门指南
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论