ssrf漏洞攻击内网Redis复现

预备知识

  1. SSRF简介

    SSRF(Server-Side Request Forgery,服务端请求伪造),是攻击者让服务端发起构造的指定请求链接造成的漏洞。

    由于存在防火墙的防护,导致攻击者无法直接入侵内网;这时攻击者可以以服务器为跳板发起一些网络请求,从而攻击内网的应用及获取内网数据。

    大都是由于服务端提供了从其他服务器获取数据的功能,比如使用户从指定的URL web应用获取图片、下载文件、读取文件内容等。但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发送请求,并返回对该目标地址请求的数据。

    最常见的例子:攻击者传入一个未经验证的URL,后端代码直接请求这个URL,就会造成SSRF漏洞。

  2. SSRF的类型

    1)显示对攻击者的响应(basic):在服务器获取攻击者要求的URL后,把响应发送回攻击者。

    2)不显示响应(blind):在服务器获取攻击者要求的URL后,不会把响应内容发送给攻击者,需要通过查看服务器日志判断是否存在服务端请求伪造漏洞。

  3. 拓展攻击面

    结合gopher协议(信息查找系统)、攻击内网FTP、Telnet、Redis、FastCGI、Memcache,也可以进行get、post请求。

实验环境

操作系统:

CentOS:SSRF漏洞环境 + 模拟内网Redis服务;ip:10.1.1.100

Kali Linux:Redis服务 + 漏洞利用;ip:10.1.1.200

辅助工具:Mozilla Firefox、burpsuite

环境部署

1.在CentOS机器中,检测端口开放情况:# netstat -tunlp

保证Apache、MySQL、PHP都开启。

  1. 下载源码放到网站根目录/var/www/html下:

`cd /var/www/html

下载:# wget http://tools.hetianlab.com/tools/T039.zip

解压:# unzip T039.zip`

3.Kali机器用浏览器访问 http://10.1.1.100/ssrf.html检测环境是否搭建成功:

实验步骤

CentOS机器开启Redis服务,kali机器写定时任务到CentOS机器中。

  1. Redis服务安装时默认绑定IP为127.0.0.1,此处不需要设置,查看Redis配置文件redis.conf:

#find / -name redis.conf

#vi /root/redis-5.0.4/redis.conf
在这里插入图片描述

  1. CentOS机器开启Redis服务:

    cd /usr/local/bin

    ./redis-server /root/redis-5.0.4/redis.conf

在这里插入图片描述

  1. 查看kali机器的Redis版本:

    cd /usr/redis/

    ./redis-server –v

在这里插入图片描述

  1. 启动Redis服务器:

    ./redis-server

在这里插入图片描述

5.另外开启一个终端,测试启动:

  # cd  /usr/redis/

  # ./redis-cli  ping

在这里插入图片描述

 启动成功。

6.在kali机器写一个redis反弹shell的bash脚本:

  # vi  shell.sh

在这里插入图片描述

 保存退出;

Redis的第0个数据库中添加key为1,名为root的定时任务,value字段最后会多一个n是因为echo重定向最后会自带一个换行符,位置为CentOS机器的/var/spool/cron/,10.1.1.200为获取反弹shell的本地IP地址,666为反弹shell的监听端口,可随意设置。

通过gopher协议攻击Redis,如果内网中的Redis存在未授权访问漏洞,当Redis服务以root权限运行时,利用gopher协议攻击内网中的Redis,通过写入定时任务可以实现反弹shell。
  1. Kali机器另外开启一个终端,使用socat进行端口转发,获取Redis攻击的TCP数据包:
# socat  -v tcp-listen:2333,fork  tcp-connect:127.0.0.1:6379

在这里插入图片描述

将本地的2333端口转发到Redis服务器的6379端口,访问本地的2333端口其实是访问Redis服务器的6379端口。

2.另启一个终端执行脚本:#bash shell.sh 127.0.0.1 2333
在这里插入图片描述

3.查看捕获到的数据
在这里插入图片描述

4.利用脚本将数据转换成适配于gopher协议的URL,转换规则:

  1)如果第一个字符是 > 或者 < ,则丢弃该行字符串,表示请求和返回的时间;

  2)如果前三个字符是 +OK,则丢弃该行字符串,表示返回的字符串;

  3)将\r字符替换成 %0d%0a;

  4)将空白行替换成 %0a。
  1. 先将socat获取的数据保存为socat.log文件,然后执行脚本进行数据转换:
    在这里插入图片描述

保存文件。

# python  tran2gopher.py  socat.log

在这里插入图片描述

  1. nc开启监听:

    nc -lvvp 666

在这里插入图片描述

7.攻击CentOS机器的Redis服务:

在‘有回显的SSRF’处输入gopher://127.0.0.1:6379/_+数据转换的内容:
在这里插入图片描述

点击‘TEST IT’后查看监听结果:
在这里插入图片描述

成功获取反弹shell。

在浏览器的‘SEE THE RESULT’处也可以看到定时任务写入成功:
在这里插入图片描述

漏洞修复

1.限制协议为HTTP、HTTPS;

2.禁止30x跳转;

3.设置URL白名单或限制内网IP。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曲折上升

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值