Sql漏洞注入之宽字节注入

本文详细探讨了SQL宽字节注入攻击,包括常见符号、字符集及其特点,特别是GBK编码在MySQL中的处理。宽字节注入利用字符转换,通过特定编码绕过转义,实现SQL注入。文中提供了练习示例,解释了如何利用宽字节注入攻击,并给出了防御措施,如设置`mysql_set_charset`和使用`mysql_real_escape_string`。
摘要由CSDN通过智能技术生成

绕过–宽字节注入攻击

宽字节注入攻击

由于sql注入的盛行,不少网站管理员都意识到了这种攻击方式的厉害,纷纷想出不少办法来避免,例如使用一些 Mysql 中转义的函数 addslashes,mysql_real_escape_string, mysql_escape_string等等。其实这些函数就是为了过滤用户输入的一些数据,对特殊的字符加上反斜杠“\”进行转义。

  • Addslashes()函数:对get、post、cookie等传递的参数中的’、“、\、null等进行转义
  • mysql_real_escape_string()函数:转义如\x00、\n、\r、\、’、“、\x1a等
  • mysql_escape_string:注意,php5.3中已经不使用。

常用符号:

空格 :%20

单引号: %27

#: %23

\ :%5C

字符集:

在了解宽字节注入之前,我们先来看一看字符集是什么。字符集也叫字符编码,是一种将符号转换为二

进制数的映射关系。

几种常见的字符集:

  • ASCII 编码:单字节编码

  • latin1 编码:单字节编码

  • gbk 编码:一个字符占1个字节**,两个字节以上叫宽字节**,设置“set character_set_client=gbk”(gbk编码设置),通常导致编码转换的注入问题,尤其是使用php 连接mysql数据库的时候

    一个gbk汉字占两个字节,取值范围是(编码位数):第一个字节是(129-254),第二个字节(64-254),

    当设置gbk编码后,遇到连续两个字节,都符合gbk取值范围,会自动解析为一个汉字

  • UTF-8 编码:使用一至四字节编码, 0x00–0x7F 范围内是一位,和 ASCII 保持一致。其它字符用二至四个字节变长表示。 由于ASCII表示的字符只有128个,因此网络世界的规范是使用UNICODE编码,但是用ASCII表示的字符使用UNICODE并不高效。因此出现了中间格式字符集&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值