MySQL长字符截断的实现示例

作者:辰霖心 时间:2024-01-25 23:55:01 

MySQL超长字符截断又名"SQL-Column-Truncation",是安全研究者Stefan Esser在2008 年8月提出的。

在MySQL中的一个设置里有一个sql_mode选项,当sql_mode设置为default时,即没有开启STRICT_ALL_TABLES选项时(MySQLsql_mode默认即default),MySQL对插入超长的值只会提示warning,而不是error,这样就可能会导致一些截断问题。

新建一张表测试,表结构如下(MySQL5.1):

CREATE TABLE USERS(
id int(11) NOT NULL, //长度为7
username varchar(7)NOT NULL,
password varchar(12)NOT NULL ,
)

分别插入以下SQL语句(注入提示消息)。

①插入正常的SQL语句。

mysql> insert into users(id,username,password)values(1,'admin','admin');//成功插入,无警告,无错误

Query OK,1 row affected(0.00 sec)

②插入错误的SQL语句,此时的"admin "右面有三个空格,长度为8,已经超过了原有的规定长度。

mysql> insert into users(id,username,password)values(2,'admin       ','admin');
//成功插入,一个警告
Query OK,1 row affected,1 warning(0.00 sec)

③插入错误的SQL语句,长度已经超过原有的规定长度。

mysql> insert into users(id,username,password) values(3,'admin    x','admin');
//成功插入,一个警告
Query OK,1 row affected,1 warning(0.00 sec)

MySQL提示三条语句都已经插入到数据库,只不过后面两条语句产生了警告。那么最终有没有插入到数据库呢?执行SQL语句查看一下就知道了。

mysql> select username from users;

可以看到,三条数据都 * 入到数据库,但值发生了变化,此时在通过length来取得长度,判断值的长度。

mysql> select length(username)from users where id =1 ;

可以发现,第二条与第三条数据的长度为7,也就是列的规定长度,由此可知,在默认情况下,如果数据超出列默认长度,MySQL会将其截断。

但这样何来攻击一说呢?

面查询用户名为'admin'的用户就知道了。

mysql> select username from users where username='admin';

只查询用户名为admin的用户,但是另外两个长度不一致的admin用户也被查询出,这样就会造成一些安全问题,比如,有一处管理员登录是这样判断的,语句如下:

$sql = "select count(*) from users where username='admin' and password='*******;

假设这条SQL语句没有任何注入漏洞,攻击者也可能登录到管理页面。假设管理员登录的用户名为 admin,那么攻击者仅需要注册一个"admin”用户即可轻易进入后台管理页面,像著名的WordPress就被这样的方式攻击过。

来源:https://blog.csdn.net/cyynid/article/details/129261347

标签:MySQL,字符截断
0
投稿

猜你喜欢

  • python中创建一个包并引用使用的操作方法

    2023-05-19 03:06:09
  • 如何使用五行Python代码轻松实现批量抠图

    2023-10-06 08:05:20
  • Win7系统下mysql 5.7.11安装教程详解

    2024-01-28 12:54:48
  • XML教程 WEB页面工具语言XML的定义

    2008-05-29 10:54:00
  • ASP怎么谈到应用到类的?

    2008-03-10 11:21:00
  • python 实现12bit灰度图像映射到8bit显示的方法

    2022-11-22 01:37:32
  • 不到20行代码用Python做一个智能聊天机器人

    2021-07-21 08:43:40
  • Oracle中的translate函数和replace函数的用法详解

    2024-01-16 15:46:29
  • three.js实现炫酷的全景3D重力感应

    2024-04-25 13:12:37
  • python中的print()输出

    2023-06-27 18:07:03
  • 如何利用ASP实现邮箱访问

    2007-09-29 12:27:00
  • 解决Django数据库makemigrations有变化但是migrate时未变动问题

    2024-01-15 16:55:39
  • Centos下升级php5.2到php5.4全记录(编译安装)

    2024-05-05 09:18:30
  • Python创建二维数组实例(关于list的一个小坑)

    2021-04-29 19:28:13
  • 详解vue组件开发脚手架

    2024-05-09 15:15:34
  • Oracle 函数大全

    2009-07-23 14:29:00
  • SQL对数据进行按月统计或对数据进行按星期统计的实例代码

    2024-01-28 08:41:47
  • JavaScript实现九宫格抽奖

    2024-04-16 09:32:06
  • Python socket处理client连接过程解析

    2022-04-30 15:44:31
  • Python tkinter布局与按钮间距设置方式

    2023-09-28 23:43:27
  • asp之家 网络编程 m.aspxhome.com