• SQL注入之宽字节注入


    宽字节注入涉及的函数

    addslashes() 函数返回在预定义字符之前添加反斜杠的字符串
    
    mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符
    
    mysql_escape_string() 转义一个字符串
    
    • 1
    • 2
    • 3
    • 4
    • 5

    什么是宽字节

    先了解一下什么是窄、宽字节以及常见宽字节编码:

    当某字符的大小为一个字节时,称其字符为窄字节.
    
    当某字符的大小为两个字节时,称其字符为宽字节.
    
    所有英文默认占一个字节,汉字占两个字节
    
    常见的宽字节编码:GB2312,GBK,GB18030,BIG5,Shift_JIS等
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    为什么会产生宽字节注入,其中就涉及到编码格式的问题了,宽字节注入主要是源于程序员设置数据库编码与PHP编码设置为不同的两个编码格式从而导致产生宽字节注入。

    宽字节注入是利用mysql的一个特性,使用GBK编码的时候,会认为两个字符是一个汉字。

    如果数据库使用的的是GBK编码而PHP编码为UTF8就可能出现注入问题,原因是程序员为了防止SQL注入,就会调用我们上面所介绍的几种函数,将单引号或双引号进行转义操作,转义无非便是在单或双引号前加上斜杠(\)进行转义 ,但这样并非安全,因为数据库使用的是宽字节编码,两个连在一起的字符会被当做是一个汉字,而在PHP使用的UTF8编码则认为是两个独立的字符,如果我们在单或双引号前添加一个字符,使其和斜杠(\)组合被当作一个汉字,从而保留单或双引号,使其发挥应用的作用。但添加的字符的Ascii要大于128,两个字符才能组合成汉字 ,因为前一个ascii码要大于128,才到汉字的范围 ,这一点需要注意。

    宽字节注入的原理

    在地址后先加一个%df,再加单引号,GBK编码中反斜杠的编码为%5c,而%df%5c表示繁体字“連”,所以这时单引号成功逃逸,例如:

    访问1%df'#,首先进行转义并编码,为:1%df%5c%27%23,即:1連'#
    代入数据库查询语句为:select* from<表名> where id='1連'
    配合后面的union查询就可获得我们想要的查询结果。
    
    • 1
    • 2
    • 3

    宽字节注入的条件

    1、数据库为GBK编码。
    2、使用了转义函数,将、POGETST、cookie传递的参数进行过滤,将单引号、双引号、null等敏感字符用转义符\进行转义。
    这样被处理后的sql语句中,单引号不再具有‘作用’,仅仅是‘内容’而已,换句话说,这个单引号无法发挥和前后单引号闭合的作用,仅仅成为‘内容’,具体如下:

    字符型注入 输入:id=1
    MySQL执行的语句为:select* from<表名> where id='1'
    若输入:id=1' and 1=1#
    MySQL执行的语句为:select* from<表名> where id='1\' and 1=1#'
    这样单引号就失去了作用,无法实现闭合。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    宽字节注入的方式

    root %df' or 1=1 #
    
    1
    
    • 1
    • 2
    • 3

    原理:在GBK编码中,反斜杠的编码是%5c,在输入%df后,使得添加反斜杠后形成%df%5c,而%df%5c是繁体字"連",单引号成功逃逸,爆出mysql数据库的错误。

    案例分析

    http://chinalover.sinaapp.com/SQL-GBK/index.php?

    在这里插入图片描述

    开始测试

    在url后面加上		id=1'
    
    • 1

    在这里插入图片描述

    发现单引号被转义
    
    • 1
    再添加%df
    
    id=1%df'
    
    • 1
    • 2
    • 3

    在这里插入图片描述

  • 相关阅读:
    Linux基础篇(6)---》常用命令大全(网络命令+关机重启命令)
    Mac PF命令防火墙
    Vue学习——组件(22)
    剑指offer(C++)-JZ10:斐波那契数列(时间复杂度O(logn)解法)
    深入理解 python 虚拟机:字节码教程(3)——深入剖析循环实现原理
    WEB自动化_强制等待与智能等待(显示等待、隐式等待)
    Oracle使用OMS备份数据(阁瑞钛伦特软件-九耶实训)
    UVA 10050【埃筛】【set】
    快手API接口解析,实现根据ID取商品详情
    LeetCode 面试题 03.06. 动物收容所
  • 原文地址:https://blog.csdn.net/weixin_53002381/article/details/126295736