视频营销案例,成都网站优化排名推广,济南中建设计院有限公司网站,婚庆网站建设需求分析MySQL超长字符截断又名SQL-Column-Truncation#xff0c;是安全研究者Stefan Esser在2008 年8月提出的。
在MySQL中的一个设置里有一个sql_mode选项#xff0c;当sql_mode设置为default时#xff0c;即没有开启STRICT_ALL_TABLES选项时#xff08;MySQLsql_mo…MySQL超长字符截断又名SQL-Column-Truncation是安全研究者Stefan Esser在2008 年8月提出的。
在MySQL中的一个设置里有一个sql_mode选项当sql_mode设置为default时即没有开启STRICT_ALL_TABLES选项时MySQLsql_mode默认即defaultMySQL对插入超长的值只会提示warning而不是error这样就可能会导致一些截断问题。
新建一张表测试表结构如下MySQL5.1
CREATE TABLE USERS(id int(11) NOT NULL, //长度为7username 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 usernameadmin;
只查询用户名为admin的用户但是另外两个长度不一致的admin用户也被查询出这样就会造成一些安全问题比如有一处管理员登录是这样判断的语句如下
$sql select count(*) from users where usernameadmin and password*******;
假设这条SQL语句没有任何注入漏洞攻击者也可能登录到管理页面。假设管理员登录的用户名为 admin那么攻击者仅需要注册一个admin”用户即
可轻易进入后台管理页面像著名的WordPress就被这样的方式攻击过。