宽字节注入是什么_sqlmap宽字节注入

宽字节注入是什么_sqlmap宽字节注入在一个 CTF 练习的网站 看到了一个宽字节注入的题目 我是一个 web 萌新 没什么经验 一开始也没有想到是宽字节 还是一位朋友给我提到的 让我猛然大悟 咳咳 做一些总结 练习题目网站地址 http ctf bugku com 一 了解一下宽字节注入原理 前提 1 我们都知道 在防御 SQL 注入的时候 大多说都是使用的过滤特殊字符 或者使用函数将特殊字符转化为实体 就是说在字符转义


在一个CTF练习的网站,看到了一个宽字节注入的题目,我是一个web萌新,没什么经验,一开始也没有想到是宽字节,还是一位朋友给我提到的,让我猛然大悟,咳咳。。。做一些总结。

练习题目网站地址:http://ctf.bugku.com。

一、了解一下宽字节注入原理

前提:

1、我们都知道,在防御SQL注入的时候,大多说都是使用的过滤特殊字符,或者使用函数将特殊字符转化为实体,就是说在字符转义,添加‘\’。这里第一条就是有这个机制。

2、设置宽字节字符集,这里为GBK字符集,GBK字符集占用两个字节。关键就在于这个设置字符集。通常有很多方法可以设置,例如:

(1) mysql_query,如mysql_query(“SET NAMES ‘gbk'”, conn)、mysql_query(“setcharacter_set_client = gbk”, conn)。

(2) mysql_set_charset,如mysql_set_charset(“gbk”,$conn)。

实现过程:当我们测试的时候,输入“%df‘”,这个时候如果php函数是使用的addslashes()的时候,会在冒号的前面加上’\’。也就变成了%df\’ 。对应的编码是%df%5c’.这时候网站字符集是GBK,MYSQL使用的编码也是GBK的话,就会认为%df\是一个汉“運’”,这样的话,单引号前面的\就不起作用了,从而转义失败,题目就会出现报错信息。

我们就以网站的题目测试一下:

1、查看网页源码

出现字符集gb2312,这时候就应该想到宽字节注入

2、报错测试可注入

出现了报错信息,因为构成的语句中会多出一个单引号。例如查询语句为:

name=addslashes(_POST[‘name’])

Select * from user where name=’$name’

将我们的%df’传递进去就变成了:

Select * from user where name=’%df\’’

这样我们的单引号和前面的闭合,多出一个原来的单引号,报错。

3、查询字段数:

%df’ order by 2 %23

这里%23表示注释,意指去将后面的语句注释掉包括什么多出的单引号和limit限制只能查询一行的语句。

经过几次测试,确定字段数为2.

4、判断数据库:

%df’ union select 1,database() %23

得到数据库的 名字。

5、接着根据题目提示,给出了表名和字段名,可以直接查询字段内容

%df’ union select 1,string from sql5.key where id=1 %23

个人见解

编程小号
上一篇 2025-08-19 20:17
下一篇 2025-03-09 15:57

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/114527.html