经典的MySQL Duplicate entry报错注入
来源:互联网 发布:日本tpp知乎 编辑:程序博客网 时间:2024/06/10 01:49
SQL注射取数据的方式有多种:
- 利用union select查询直接在页面上返回数据,这种最为常见,一个前提是攻击者能够构造闭合的查询。
- Oracle中利用监听UTL_HTTP.request发起的HTTP请求,把QuerySet反弹回攻击者的主机。当然,HTTP服务器对URL的长度有一定限制,因此每次可返回的数据量不可过多。
- 基于错误消息取数据,前提是页面能够响应详细的错误描述。它的一个优点是,我们可能不必太费力去猜测和闭合SQL(可以构造子查询,让MySQL在子查询中报错)。
- 盲注,页面不会显示错误消息。常见基于布尔的盲注、基于时间的盲注,此类注射点利用价值相对要低一点,猜解数据的时间较长。
本篇简单说明非常经典的基于错误回显的MySQL注射。最重要的,就是理解下面的SQL查询:
上面的这条SQL将报错: Duplicate entry '1' for key 'group_key'
如下图
1. 为什么MySQL注射要用information_schema库?
答案是这个库是MySQL自带的,安装之后就创建好了,所有账号都有权限访问。攻击者无需猜解库名、表名。跟Oracle注射使用dual类似。
2. 如何利用报错取数据?
利用报错,攻击者把目标数据concat连接到floor()函数的前后即可。
例如,下面的语句用于获取MySQL Server版本,构造:
通过报错,即可知道当前数据库是5.5.28。0x5e5e5e是3个尖括号的16进制表示。 自动化SQL注射工具通常会在目标数据前后做类似的标记,方便程序提取。
加上标记,也可以方便攻击者在大的页面中搜索。
3. 为何这条语句会报错?
rand(0)是把0作为生成随机数的种子。首先明确一点,无论查询多少次,无论在哪台MySQL Server上查询,连续rand(0)生成的序列是固定的。
应用floor函数(取浮点数的整数部分)后,结果变成了:
可以看到,第二行和第三行的值都是1。这也是最终引起MySQL报错Duplicate entry的地方。
实际上,我们分开执行下面的两种查询,都是不会出错的:
上面的查询根据x列的值进行分组,得到:
得到information_schema.character_sets总共有39行:
请注意,这里x的值出现的是0。
c) 将上述语句结合后即报错
select count(*), floor(rand(0)*2) x from information_schema.character_sets group by x;
我们预期的结果, 其实是:
然而MySQL在内部处理中间结果的时候,出现了意外,导致报错。
参考链接: SQL Injection attack - What does this do?
转自 http://www.lijiejie.com/mysql-injection-error-based-duplicate-entry/
- 经典的MySQL Duplicate entry报错注入
- mysql报错:Duplicate entry ‘1’ for key ‘PRIMARY’
- Mysql 报错Duplicate entry '值' for key '字段名'的解决
- AndroidStudio打包报错:duplicate entry
- 系统日志报"mysql Duplicate entry '*' for key 1"的错误
- mysql InnoDB表插入操作报duplicate entry for primary 却查询不到重复的主键
- mysql 主键自增 但是报主键重复的异常问题探究- Duplicate entry
- mysql "email"字段 的属性项没有设置成UNSIGNED,但是添加'0'到email字段报错:#1062 –Duplicate entry '1' for key 'email',求解
- 【报错】Duplicate entry '0' for key 'PRIMARY'
- androidstuido报错之Java.util.zip.ZipException: duplicate entry
- 报错 1062:Duplicate entry '4294967295' for key 'PRIMARY'
- MySQL Duplicate entry 问题备注
- Duplicate entry导致mysql主从复制中断的事故
- Mysql错误:Duplicate entry '127' for key 'PRIMARY'的解决方法
- mysql出现Duplicate entry '0' for key 'PRIMARY'的错误
- Android:打release包时遇到的一个花式报错-ZipException: duplicate entry:xx/xx/xx/xx.class
- mysql报错注入
- MySQL 报错注入
- CentOS 6/Linux 安装Mongodb 2.6.5
- 友盟反馈中发现的这样的问题,对下文没有考证,最终对2.3版本通过绕过Parserable 和 serializable方式解决的,留此只做备忘
- Linux内核驱动学习(四)----内存管理子系统
- Mysql复制表结构、表数据
- SEAndroid安全机制对Binder IPC的保护分析
- 经典的MySQL Duplicate entry报错注入
- git filter-branch 命令介绍
- VC获取系统时间、程序运行时间(精确到秒,毫秒)的五种方法
- jqGrid使用记录
- leetcode 日经贴,python code -Gas Station
- 代码大全第二版读书笔记 第三部分-变量 十、使用变量的一般事项
- MFC 多线程及线程同步
- 【JSP开发】JSP入门演示和静态包含与动态包含
- 动漫推荐之轻声密语