宽字节注入
宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而导致的注入漏洞。
具体原理如下:
1.正常情况下当GPC开启或使用addslashes函数过滤GET或POST提交的参数时,黑客使用的单引号 '就会被转义为: ';
2.但如果存在宽字节注入,我们输入%df%27时首先经过上面提到的单引号转义变成了%df%5c%27(%5c是反斜杠),之后在数据库查询前由于使用了GBK多字节编码,即在汉字编码范围内两个字节会被编码为一个汉字。然后MySQL服务器会对查询语句进行GBK编码即%df%5c转换成了汉字“運”,而单引号逃逸了出来,从而造成了注入漏洞。
现在基本上都会将mysql的连接配置为“setcharacter_set_client=binary”来解决这个问题,所以这篇文章将介绍出现在php中因为字符编码转换导致的注入问题。
使用GBK编码
这里纠正一些人的观念,GBK编码是数据库编码,跟前台的编码无关,比如我这代码<meta charset="utf-8" />就是使用了UTF-8。当我们正常请求这个网站的时候,数据库执行的是 select * from news where id = '1'
我们按照上节课讲的加个单引号,我们看是什么样子
我们输入的变成了 select * from news where id = '1'' ,在mysql里面,反斜杠是转义符,相当于,把我们输入的1' 拿到数据库有没有匹配的项。
那这样我们是不是没有办法注入了?
那么本节课的重点就来了。因为数据库使用的是GBK的编码,的编码是%5c我们可以使用%df来吃掉它,那什么叫吃掉呢?
%df%5c在GBK编码中是属于一个字符"運",我我们输入id=1%df%27的时候,程序检测到有单引号(%27),就默认在它前面加了一个转义符(%5c)数据库查询的就是select * from news where id = '1%df%5c%27'
之前说过,%df%5c = 運
这样我们的%27也就是单引号就逃出转义了,我们又是可以构造注入语句了
我们来测试一下
现在这种写法已经很少了,有些程序员有这个安全意识,就把代码改成了这样
GBK转UTF-8
我们来看看,关键的代码
原理其实跟前言里第2条是一样的,我们输入%df%27时首先经过上面提到的单引号转义变成了%df%5c%27(%5c是反斜杠),然后%df%5c正好属于gbk的汉字编码范围,经过iconv转换到utf-8编码转换后变成了汉字“運”,从而吞掉了反斜杠使得单引号逃脱出来。
utf-8转gbk
测试代码
这里我们就要用点逆向思维了
这里我们思考下“錦”这个字,它的utf-8编码是e98ca6,它的gbk编码是e55c,而上面提到过反斜杠正好为5c。
所以如果我们将title设置为:錦’,首先经过addlashes函数或GPC对单引号转义变为:錦’,然后会经过icnov函数会对”錦”转化为gbk编码,最后就是: %e5%5c%5c%27。反斜杠被转义了( %5c%5c),从而单引号逃逸出来就会引发注入漏洞。
实验一下,我们看到报错
分析一下报错信息
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''xE5''' at line 1
''xE5''' xE是属于一个字符,这就多出了一个,反斜杠是转义符,',这样的话,转义符就转义了第二个,导致单引号逃出来,我们就可以继续注入了。
作者:sqler
来源:https://bbs.ichunqiu.com/thread-15899-1-1.html
“炼石杯”网络空间安全技能大赛
以赛促学、以技会友
更有诸多大奖等你拿
详情咨询QQ群:478091920
温馨提示
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请后台提交工单处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请后台提交工单!
【免责声明】:
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
【关于转载】:
本站尊重互联网版权体系,本站部分图片、文章大部分转载于互联网、所有内容不代表本站观点、不对文章中的任何观点负责、转载的目的只用于给网民提供信息阅读,无任何商业用途,所有内容版权归原作者所有
如本站(文章、内容、图片、视频)任何资料有侵权,先说声抱歉;麻烦您请联系请后台提交工单,我们会立即删除、维护您的权益。非常感谢您的理解。
【附】:
二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!
注:本站资源来自网络转载,版权归原作者和公司所有,如果有侵犯到您的权益,请第一时间联系我们处理!
-----------------------------------------------------------------------------------------------------------
【版权声明】:
一、本站致力于为源码爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的源码下载文件为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、如有内容侵犯您的版权或其他利益的,请编辑邮件并加以说明发送到站长邮箱。站长会进行审查之后,情况属实的会在三个工作日内为您删除。
-----------------------------------------------------------------------------------------------------------
源码村资源网 » 从代码角度看防范sql注入可从(从代码角度看防范sql注入可从哪里进行)
1 评论