ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sql注入之宽字节注入

2022-02-07 20:32:14  阅读:188  来源: 互联网

标签:编码 字节 字符 引号 gbk sql 注入


sql注入之宽字节注入

在介绍宽字节注入之前,首先引入php的一个防御函数和一种编码格式GBK

魔术引号 magic_quotes_gpc

这是php自带的一种防御函数,该函数会解析用户提交的数据,如post,cookie等提交过来的数据,并对这些数据中的特殊字符添加转义符号'\',以确保数据不会出现致命错误。单引号,双引号,反斜线等都会被加上反斜线。

而对于sql注入,某些特殊字符是不可或缺的,所以如何绕过该函数也就成了问题。

GBK编码格式

gbk全称为《汉字内码拓展规范》,gbk是一种多字符编码。他使用了双字节编码方案,也就是说使用gbk方案的汉字,占用两个字节。一个utf-8编码的汉字,则占用3个字节。

举例子:

0xD5 0x5c对应汉字‘誠’

宽字节注入原理

如果程序员设置数据库编码为非英文编码那么就有可能产生宽字节诸如人。

假如数据库mysql的编码设置为了SET NAMES 'gbk'或是SET character_set_client = gbk,这样的设置就有可能引发编码转换从而导致注入漏洞。

其根本原因是: 宽字节注入就是PHP发送请求到Mysql时,mysql如果设置了上诉字符编码转换规则,则会跟我们故意设置的字节相结合组成一个gbk编码规则下的双字符而引起编码转换后,绕过了斜线转义。

例如,如果我们对注入数据加上后引号,魔术引号就会对其进行转义。

select * from users where id =-'1'' limit 0,1

在magic_quotes_gpc的作用后,变为如下形式

select * from users where id ='1\'' limit 0,1

然后sql语句就读不到引号内的那个单引号而把它当作引入的普通字符处理。

那么这个时候就可以使用宽字节注入了。因为’\‘的编码是%5c,然后我们可以构造以%5c结尾的一个gbk字符。而%df %5c就刚刚好是这样的一个gbk编码。

构造输入字符1%df'#

经过phpurl解码后变为10xdf'#

经过魔术引号转义,添加转移符号,转换为如下形式10xdf0x5c'#

所以注入语句最终为


select * from users where id ='1�\'#' limit 0,1

其中�\即为那个

标签:编码,字节,字符,引号,gbk,sql,注入
来源: https://www.cnblogs.com/Samforrest/p/15869066.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有