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

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

漏洞名称:宽字节注入

漏洞描述:

宽字节注入是相对于单字节注入而言的,该注入跟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.kler.cn/a/231959.html

相关文章:

  • 活着就好20241118
  • Vue中的导航守卫有哪三种?分别有什么作用
  • Cuda和Pytorch的兼容性
  • DAY120java审计第三方组件依赖库挖掘FastjsonShiroLog4jH2DB
  • IPv6 NDP 记录
  • 【操作系统不挂科】<Linux进程概念(4)>选择题(带答案与解析)
  • 【Java万花筒】架构未来:Java ME与物联网的无缝融合
  • 电力负荷预测 | 基于GRU门控循环单元的深度学习电力负荷预测,含预测未来(Python)
  • 版本控制工具——Git
  • 用Matlab 2015a svmtrain函数训练的SVM model在2021b无法使用的解决方法
  • WPF绘制矢量图形并绑定到界面的方法
  • CTFshow web(php命令执行 37-40)
  • 高级数据结构与算法 | 布谷鸟过滤器(Cuckoo Filter):原理、实现、LSM Tree 优化
  • 汇编笔记 01
  • Unity类银河恶魔城学习记录4-7 P60 Counter‘s attack window 源代码
  • FlinkSql 窗口函数
  • 移动光猫gs3101超级密码及改桥接模式教程
  • SpringMVC 1.请求参数检查 2.全局异常处理 3.请求参数封装为Pojo
  • 了解海外云手机的多种功能
  • 学习 Redis 基础数据结构,不讲虚的。
  • Docker容器监控-CIG
  • 机器学习 | 深入集成学习的精髓及实战技巧挑战
  • Compose | UI组件(十五) | Scaffold - 脚手架
  • C++基础知识点预览
  • MVC框架学习
  • springboot项目启动报错:dynamic-datasource can not find primary datasource