SQL注入的入门指南

admin 2025年1月20日23:15:42评论14 views字数 2325阅读7分45秒阅读模式

声明

所提供的工具资料仅供学习之用。这些资料旨在帮助用户增进知识、提升技能,并促进个人成长与学习。用户在使用这些资料时,应严格遵守相关法律法规,不得将其用于任何非法、欺诈、侵权或其他不当用途。本人和团队不对用户因使用这些资料而产生的任何后果负责,包括但不限于因操作不当、误解资料内容或违反法律法规而导致的损失或损害。用户应自行承担使用这些资料的风险,并在使用前进行充分的了解和评估。

介绍

SQL注入是指Web应用程序对用户输入的数据没有判断或过滤不严,攻击者可以在Web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,让数据库执行非授权的任意查询,从而进一步得到相应的数据信息。

简单来说就是通过将恶意的SQL语句拼接在原来正常的SQL语句后面,使数据库直接执行新的SQL语句。

原理

参数用户可控

前端传给后端的参数内容是用户可以控制的。

参数带入数据库查询

传入的参数拼接到正常SQL语句,且带入参数库查询。

分类

请求方式

POST

数据不会包含在URL中,通过提交表单数据

SQL注入的入门指南

GET

数据被包含在URL中

SQL注入的入门指南

注入点属性

整数型

无需闭合

SQL注入的入门指南

字符串型

需要字符通过闭合

SQL注入的入门指南
SQL注入的入门指南

页面的回显

有回显

看到注入的SQL语句在数据库上执行的结果

SQL注入的入门指南

无回显

不能看到SQL语句在数据库上执行的结果

SQL注入的入门指南
SQL注入的入门指南
SQL注入的入门指南

注入方式

联合注入(Union注入)

使用UNION操作符将多个SELECT语句的结果合并到一个结果集中。攻击者可以利用这种方式从数据库中获取多个表的数据。

-1’ union select 1,2,3--+
SQL注入的入门指南

堆叠注入

允许执行多条SQL语句的注入方式。攻击者可以在一条输入中构造多条SQL语句,以执行多个操作或获取多个结果。

1';insert into users(id,username,password) values ('38','less38','hello')--+
SQL注入的入门指南
SQL注入的入门指南

报错注入

利用数据库的错误信息来获取敏感信息的注入方式。当数据库执行错误的SQL语句时,可能会返回错误信息,攻击者可以利用这些信息来构造注入攻击。

1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
SQL注入的入门指南

盲注

布尔注入

基于布尔逻辑判断的注入方式。攻击者通过构造不同的输入来观察应用程序的响应,从而判断是否存在注入漏洞以及获取敏感信息。

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+

SQL注入的入门指南

原文始发于微信公众号(泷羽Sec-Ceo):SQL注入的入门指南

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月20日23:15:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SQL注入的入门指南http://cn-sec.com/archives/3651964.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息