从代码角度看防范sql注入可从(从代码角度看防范sql注入可从哪里进行)

  宽字节注入

  

  宽字节注入源于程序员设置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),从而单引号逃逸出来就会引发注入漏洞。

从代码角度看防范sql注入可从(从代码角度看防范sql注入可从哪里进行)

  实验一下,我们看到报错

  分析一下报错信息

  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


【免责声明】:

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

【关于转载】:

本站尊重互联网版权体系,本站部分图片、文章大部分转载于互联网、所有内容不代表本站观点、不对文章中的任何观点负责、转载的目的只用于给网民提供信息阅读,无任何商业用途,所有内容版权归原作者所有
如本站(文章、内容、图片、视频)任何资料有侵权,先说声抱歉;麻烦您请联系请后台提交工单,我们会立即删除、维护您的权益。非常感谢您的理解。

【附】:

二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!

注:本站资源来自网络转载,版权归原作者和公司所有,如果有侵犯到您的权益,请第一时间联系我们处理!

-----------------------------------------------------------------------------------------------------------

【版权声明】:

一、本站致力于为源码爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的源码下载文件为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、如有内容侵犯您的版权或其他利益的,请编辑邮件并加以说明发送到站长邮箱。站长会进行审查之后,情况属实的会在三个工作日内为您删除。
-----------------------------------------------------------------------------------------------------------


内容投诉
源码村资源网 » 从代码角度看防范sql注入可从(从代码角度看防范sql注入可从哪里进行)

1 评论

您需要 登录账户 后才能发表评论

发表评论

欢迎 访客 发表评论