这个攻击手法本来是在一道ctf题目中看到的,之后细细去学了一下,在大神道哥的《白帽子讲web安全》找到了这个攻击的原理
#0x01 攻击原理
在这引用道哥的原话:
在MySQL的配置选项中,有一个sql_mode选项。当MySQL的sql_mode设置为default时,即没有开启STRICT_ALL_TABLES选项时,MySQL对于用户插入的超长值只会提示warning,而不是error(如果是error则插入不成功),这可能会导致发生一些“截断”问题。
我们在这测试一下。
先开启strict模式。
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
在strict模式下,因为输入的字符串超出了长度限制,因此数据库返回一个error信息,同时数据插入不成功。
mysql> create table user_test(
-> id int not null auto_increment primary key,
-> username varchar(15) not null,
-> password varchar(20) not null
-> )engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> show columns from user_test;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(15) | NO | | NULL | |
| password | varchar(20) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 s