sql约束攻击(SQL Column Truncation)

本文介绍了SQL Column Truncation攻击的原理和手法。在MySQL的非strict模式下,超长值插入只会产生警告而非错误,导致数据截断问题。攻击者利用此特性,即使输入被过滤,仍能通过末尾空格字符的处理,实现水平越权,例如将'admin '视为'admin',从而获取管理员权限。

这个攻击手法本来是在一道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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值