SQL注入漏洞之高阶手法 宽字节注入以及编码解释 以及堆叠注入原理说明

server/2025/2/6 20:54:31/

目录

 宽字节注入

编码区分

原理

函数

转译符号解释

注意

绕过方式详解

堆叠【Stack】注入攻击

注入语句


 宽字节注入

  • 在说宽字节注入之前 我们需要知道编码相关的知识点,这个有助于搞定什么是宽字节注入
  • 分清楚是ascii码是什么
  • 宽字节注入代码里面加入了addslashes()转移 拼接

编码区分

  • Ascii英文单词符号对应成数字没有涵盖中文 1个单词一个字节 8位二进制计算机保存二进制 数据映射到计算机种类。

  • Unicode 万国码统计编码表 统一4个字节 Unicode可变长度的gbk2312

    • 升级gbk 一个中文2个字节 【十进制 十六进制 八进制】都兼容的编码 可便长度编码

  • utf-8 英文一个字节 一个中文3个字节 其他国家可变字节 兼容性就更加号

    • 存任何语言节约空间,utf就不会出现什么问题。

  • url编码 百分号编码 % 百分号跟的 0x16进制数字 === ascii码

原理

  • 有些网站在注入的时候 做了防护措施

    • 措施就是反斜杠转义 绕不过编码 宽字节转移

      • %2F 反斜杠

函数

  • addslashes和mysql_real_escape_string 函数

转译符号解释

他们转义的字符是单引号(')、双引号(")、反斜线()与NUL(NULL 字符)

  •  转义的方式就是在这些符号前面自动加上 \ ,

  • 让这些符号的意义失效,或者可以理解为被注释掉了

  • 引号转义 防范的 \'

  • 不能返回 数字型的不需要加斜杠的

sql">// "select id,email from member where username='xx\' or  1=1 #'"

    绕过这种方式就是宽字节注入【GBK】反斜杠16进制编码 反斜杠0x5c

    sql">%5C GBK 反斜杠
    0x5c ascii对应16进制
    %23 # 0X23
    • \编码为%5C,我们一般在地址后添加%df。

    • URL编码 %27 单引号

      • 16进制 ascii对应16进制 0x27

    • %5C GBK 反斜杠加一个df 吃一个反斜杠 吃成一个汉字

      • 0x5c ascii对应16进制

    注意

    项目必须是GBK编码

    sql">"select id,email from member where username='xx0xdf0x5c' or  1=1 #'"
    注入语句: xx0xdf0x5c' or  1=1 # 宽字节注入必须是GBK编码
    • 但是URL编码就不行 使用gbk编码 使用ascii 16进制编码

    绕过方式详解

    • 斜杠不能转移 我们将斜杠转化成一个汉字,那么斜杠就没意义了 只要开启了反斜杠转移的情况下 使用了gbk连接数据库的情况下

    • 使用%df吃掉%5c 合成一个汉字让斜杠失去意义,那么单引号闭合就可以使用了

    sql">ss%df%5C' or 1=1 #
    xx0xdf0x5C' or  1=1 #

    • 添加后\变成了汉字,这样就绕过了。之后就和前面的一样了
    • 当然,还有双引号等,除了GBK还有GB2312等编码,有兴趣的可以整理一下所有的。

    堆叠【Stack】注入攻击

    • 一堆sql语句同时执行 分号分隔 如果堆叠注入能够生效 堆叠注入得效果是非常大的,

      • 后面的 增删改查的语句都可以使用

      • 删除数据库 导出数据库数据 等

    • 堆叠注入可执行多条语句 多语句之间以分号隔开。

    • 堆叠注入成功必须需要需要一个条件才能成功

      • 在 mysql 中php的函数里面 mysqli_multi_query 和 mysql_multi_query这两个函数(函数也叫做API)

      • 执行一个或多个针对数据库的查询

      • 多个查询用分号进行分隔

      • 堆叠注入的危害是很大

        • 可以任意使用增删改查的语句,例如删除数据库 修改数据库,添加数据库用户。但实际情况中

        • 如PHP为了防止sql注入,往往调用数据库的函数是mysqli_ query()函数,其只能执行一条语句

      • 分号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将对数据安全造成重大威胁。

    注入语句

    sql"> ?id=1;create table test like users --+  

    http://www.ppmy.cn/server/165501.html

    相关文章

    华为OD机试E卷 --矩阵扩散--24年OD统一考试(Java JS Python C C++)

    文章目录 题目描述输入描述输出描述用例题目解析JS算法源码Java算法源码python算法源码c算法源码题目描述 存在一个 m n 的 二维数组 ,其成员取值范围为 0 或 1。 其中值为 1 的成员具备扩散性,每经过 1s,将上下左右值为 0 的成员同化为 1。 二维数组的成员 初始值 都为 0…

    第一章 语音识别概述

    小爱同学,小度小度,天猫精灵,叮咚叮咚……我们身边好像突然就出现了一些可以和我们“聊天”的音箱,图所示为百度智能音箱。 智能音箱与传统音箱最大的区别就是能够听懂我们的语音,人们通过说话就能与电子设备沟通&…

    intra-mart实现简易登录页面笔记

    一、前言 最近在学习intra-mart框架,在此总结下笔记。 intra-mart是一个前后端不分离的框架,开发时主要用的就是xml、html、js这几个文件; xml文件当做配置文件,html当做前端页面文件,js当做后端文件(js里…

    WordPress使用(2)

    上一篇文章讲述了WordPress的基本安装,主要是docker方式的处理。本文章主要介绍WordPress安装后的其他设置。 1. 安装后设置 安装后碰到的第一个需求就是安装一个合适的主题,但WordPress默认的上传文件大小是2M,远远无法满足要求&#xff0…

    【mybatis】基本操作:详解Spring通过注解和XML的方式来操作mybatis

    mybatis 的常用配置 配置数据库连接 #驱动类名称 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #数据库连接的url spring.datasource.urljdbc:mysql://127.0.0.1:3306/mybatis_test? characterEncodingutf8&useSSLfalse #连接数据库的⽤⼾名 spring.dat…

    MATLAB中lineBoundary函数用法

    目录 语法 说明 示例 匹配行的边界 匹配行的开头和结尾边界 对行的边界求反 lineBoundary函数的功能是匹配行首或行尾。 语法 pat lineBoundary pat lineBoundary(type) 说明 pat lineBoundary 创建与一行的行首或行尾(包括 newline 字符)匹…

    通过 Docker 部署 Mastodon 服务器 的教程

    如何使用Edu邮箱申请Azure订阅并开通免费的VPS 想要免费获得 Azure 的VPS吗?拥有一个Edu邮箱就能让你轻松实现!Edu邮箱不仅可以帮助你申请 Azure 的学生订阅,还能免费使用 Adobe 和 Notion 等软件,让你的学习和工作更加便捷。如果…

    正则表达式详细介绍

    目录 正则表达式详细介绍什么是正则表达式?元字符转义字符字符类限定字符字符分枝字符分组懒惰匹配和贪婪匹配零宽断言 正则表达式详细介绍 什么是正则表达式? 正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想…