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

宽字节注入漏洞原理以及修复方法

漏洞名称:宽字节注入

漏洞描述:

宽字节注入是相对于单字节注入而言的,该注入跟HTML页面编码无关,宽字节注入常见于mysql中,GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际上只有两字节。宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,当%df’ 被PHP转义(开启GPC、用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\’,其中\的十六进制是 %5C ,那么现在 %df\’ = %df%5c%27,如 果 程 序 的 默 认 字 符 集 是 GBK等 宽 字 节 字 符 集 , 则 MYSQL用 GBK的 编 码 时 , 会 认为 %df%5c 是一个宽字符,也就是x’,也就是说:%df\’ = %df%5c%27=x’,有了单引号可以注入了.

检测条件:

1、 Web业务运行正常。
2、 Php+mysql的搭配,则需要进行检测。

检测方法:

检测时,了解了其原理为:php 使用php_escape_shell_cmd这个函数来转义命令行字符串时是作为单字节处理的 而当操作系统设置了GBK、EUC-KR、SJIS等宽字节字符集时候,将这些命令行字符串传递给MySQL处理时是作为多字节处理的,如:http://localhost/gbk.php?username=%df%27 //多字节编码
%df%27=運' //看,出单引号了,后面就可以构造了
http://localhost/test/b.php?username=%df%27 or1%23
sql语句类似这样: SELECT * FROMdemo WHERE username = '運' or 1#' LIMIT 1
这样就可以注入,或者id=%df’%20or%201=1%20limit%201,1%23&pass=

修复方案:

1、 改Windows下的MySQL配置文件一般是 my.ini,Linux下的MySQL配置文件一般是my.cnf,在初始化连接和字符集之后,使用SET character_set_client=binary来设定客户端的字符集是二进制的。character_set_client指定的是SQL语句的编码,如果设置为 binary,MySQL就以二进制来执行,这样宽字节编码问题就没有用武之地,如:

mysql_query(‛SET character_set_client=binary‛);

2、 转义数据:一些合法的数据可能在无意中破坏 SQL 语句本身的格式。使用
mysql_escape_string() 或者所使用数据库提供的转移函数。如果没有提供这样的 函 数 , addslashes() 也 是 不 错 的 最 后 选 择 . 原 理 是 ,mysql_real_escape_string与addslashes的不同之处在于其会考虑当前设置的字符集,不会出现前面e5和5c拼接为一个宽字节的问题。

http://www.lryc.cn/news/296847.html

相关文章:

  • 【Linux】SystemV IPC
  • iview 页面中判断溢出才使用Tooltip组件
  • 如何使用websocket
  • C++ 调用lua 脚本
  • Centos 内存和硬盘占用情况以及top作用
  • 【数据结构】堆(创建,调整,插入,删除,运用)
  • v-if 和v-for的联合规则及示例
  • 各互联网企业测绘资质调研
  • C++自定义函数详解
  • flask+vue+python跨区通勤人员健康体检预约管理系统
  • Spring Boot动态加载Jar包与动态配置技术探究
  • Lua metatable metamethod
  • HCIA-HarmonyOS设备开发认证V2.0-3.2.轻量系统内核基础-任务管理
  • 中小型网络系统总体规划与设计方法
  • 以管理员权限删除某文件夹
  • JenkinsGitLab完成自动化构建部署
  • JVM 性能调优 - 参数基础(2)
  • 大型软件编程实例分享,诊所门诊处方笺管理系统多台电脑同时使用的软件教程
  • Java基于微信小程序的医院挂号系统
  • 你是在独立思考,还是在被洗脑?
  • 在django中集成markdown文本框
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Slider组件
  • django admin 自定义界面时丢失左侧导航 nav_sidebar
  • JSP原理简述
  • C/C++ - 异常处理
  • 十、项目开发总结报告(软件工程)
  • 在 VMware 虚拟机上安装 CentOS系统 完整(全图文)教程
  • 吉他学习:右手拨弦方法,右手拨弦训练 左手按弦方法
  • 【初识爬虫+requests模块】
  • 微信小程序(三十八)滚动容器