当前位置: 首页 > article >正文

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

目录

 宽字节注入

编码区分

原理

函数

转译符号解释

注意

绕过方式详解

堆叠【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 字符)

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

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

  • 引号转义 防范的 \'

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

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

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

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

    • URL编码 %27 单引号

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

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

      • 0x5c ascii对应16进制

    注意

    项目必须是GBK编码

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

    绕过方式详解

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

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

    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()函数,其只能执行一条语句

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

    注入语句

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

    http://www.kler.cn/a/525092.html

    相关文章:

  • 【性能优化专题系列】利用CompletableFuture优化多接口调用场景下的性能
  • git中有关old mode 100644、new mode 10075的问题解决小结
  • Solon Cloud Gateway 开发:Route 的过滤器与定制
  • 元素的显示与隐藏
  • 记忆力训练day07
  • QT 笔记
  • LeetCode:96.不同的二叉搜索树
  • Vue 3 中的 toRef 与 toRefs:使用与案例解析
  • Deepseek技术浅析(一)
  • 单细胞-第四节 多样本数据分析,下游画图
  • Helm Chart 详解:从入门到精通
  • nodeJS 系统学习-章节4-回调函数
  • 图片上传实现图片预览的功能
  • 浏览器同源策略:从“源”到安全限制的全面解析
  • 【力扣每日一题】存在重复元素 II 解题思路
  • C ++ 1
  • SpringCloudGateWay和Sentinel结合做黑白名单来源控制
  • 计算机的错误计算(二百二十五)
  • gesp(C++六级)(6)洛谷:P10109:[GESP202312 六级] 工作沟通
  • C++ ——— 仿函数
  • 【2024年华为OD机试】(B卷,100分)- 模拟消息队列 (JavaScriptJava PythonC/C++)
  • FreeRTOS从入门到精通 第十三章(信号量)
  • Linux 信号驱动IO
  • 基于Springboot的健身房管理系统【附源码】
  • es6中关于let的使用以及案例,包括但不限于块级作用域,不允许重复声明,没有变量提升,暂存性死区,不与顶层对象挂钩
  • [SUCTF 2018]MultiSQL1