freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

99+
挖洞经验 | 从MicroStrategy入手发现Facebook的XSS漏洞
clouds 2020-07-06 17:42:34 220720
该篇文章讲述了作者围绕Facebook采用的第三方应用MicroStrategy Web SDK,经源码分析发现存在于Facebook网站中的两个反射型漏洞(rXSS),在前一篇文章中,作者就已经在MicroStrategy身上发现了SSRF漏洞收获了$30000的奖励。这里我们继续来看看他发现rXSS漏洞的过程。

第一个XSS漏洞发现过程

由于Facebook生产环境网站中采用了MicroStrategy Web SDK,因此,有了上一次漏洞发现,这里我着重把关注点放到MicroStrategy的文件上传功能上,寄希望能实现webshell上传。
针对https://m-nexus.thefacebook.com预建任务端点taskProc的枚举后,我发现其存在的一个注册且可访问的文件上传功能-uploadFile:
MicroStrategy说明书中没有太多关于该功能的解释,我只好手动对它进行了一些分析。我把完整的MicroStrategy Web SDK部署在了我的本地系统中,开始查找这个uploadFile功能相关的Java类,有了线索-com.microstrategy.web.tasks.UploadFileTask”:
在jd-gui帮助下,我把SDK中的每个jar文件进行了反编译,然后在WebTasks.jar文件中发现了“com.microstrategy.web.tasks.UploadFileTask” 的身影:
可以观察到,它确实支持文件上传和相关的处理功能。首先,它会检查与上传文件名匹配的URL参数fileFieldName,然后检查文件扩展名格式,如果是excel类型文件(xlsx、xls),它会调用方法parseUploadedExcelFile,如果是其它文件则调用parseUploadedFile:
MicroStrategy Web SDK对parseUploadedExcelFile的调用过程会执行一个有效身份会话的校验,所以,从这点来看,至少是不可利用的。但是,在parseUploadedFile的调用过程中,却完全不需要校验身份会话。
从代码分析来看,这里的文件上传功能仅只是从HTML上传页面中处理上传文件,然后把其文件内容显示给客户端,并不会把上传文件存储到服务端中。因此,前面我想上传webshell的想法就基本无望了。
但是我注意到,这里的UploadFileTask类在处理上传文件后的加载显示过程中,没有采取任何输出格式编码,这可能会导致主网站m-nexus.thefacebook.com中的任意JS代码执行。
从上可以看出,至少反射型XSS漏洞是存在的,那如何利用呢?接下来,我创建了一个网页式的Payload:
不幸的是,由于无法控制上传文件的内容,所以XSS的漏洞利用也是无效的。原因在于,表格或弹窗形式的文件上传操作中,不允许用户指定内容。
咋办呢?经过反复试验,我创建了一个很小的HTML+JavaScript代码文件,在其中嵌入了一个针对https://m-nexus.thefacebook.com/*******的典型POST操作,去触发一个alert(document.domain)的XSS执行。
我只需把上述文件托管在我的网站中,然后把其文件链接发送给受害者,只要他点击访问,即会触发https://m-nexus.thefacebook.com/的XSS执行:
从Burp中的响应内容可以看到,m-nexus.thefacebook.com响应回来的HTML/JS代码确实没有输出格式编码:
利用该XSS漏洞,攻击者可以在受害者客户端中实现信息收集窃取、结合DOM进行迷惑点击等危险操作。漏洞上报后,Facebook给了我一个相对较高的赏金奖励。

第二个XSS漏洞发现过程

没过几天,我又在MicroStrategy Web SDK的预建任务中枚举发现了用于抓取wiki-pedia内容的wikiScrapper任务-wikiScrapperTask,它用参数searchString来匹配获取wiki-pedia中的相关数据内容。
然后我发现,如果我在其中给定形如http:// 或 https://的网站URL字符串,它就会执行针对相应http:// 或 https://网站的内容抓取操作,且是任意网站都行。而且同样的是,它在加载给定网站的Web内容时,也没采用任何输出格式编码,所以基于上述第一个XSS漏洞分析来看,这里应该同样会存在XSS漏洞。
要执行针对任意网站任意web页面的抓取,需要满足两个条件。一个是网站页面须是带标签的HTML页面,另一个就是其中须包含一个表格格式,且其表格标签必须包含一个wikitable的维基表格类。
为了实现漏洞利用,我在匿名Web页面托管服务HTML Pasta中创建了满足上述两个条件的页面,生成了相应的文件链接-craftierduskydolphin.htmlpasta.com:
然后,在m-nexus.thefacebook.com的wikiScrapper任务参数searchString中传入上述文件链接,形成以下URL,直接在浏览器中打开,即成功触发了XSS:
https://m-nexus.thefacebook.com/servlet/taskProc?taskId=wikiScrapper&taskEnv=html&taskContentType=json&searchString=https://{PASTE_LINK_HERE}&shouldSuggest=false&publicDataSuggestionURL=&publicDataSearchURL=&publicDataPageURL=
同样的,从Burp中的响应内容可以看出,Facebook服务端对HTML/JS代码的输出未采取输出格式编码:
该漏洞上报后,Facebook同样给了我一个较高的赏金奖励。

总结

我用上述源码分析方式前后发现了m-nexus.thefacebook.com上的3个XSS漏洞,收到了将近了一万美金的奖励。m-nexus.thefacebook.com现已不能再公开访问了。经验就是,当我们针对目标站点找不到线索时,可以深入看看其中部署的第三方应用。

参考来源

# xss # facebook漏洞 # MicroStrategy
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 clouds 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
clouds LV.9
I'm a robot , don't talk to me , code to me.
  • 348 文章数
  • 612 关注者
挖洞经验 | 获取国际象棋对战网站Chess.com五千万用户信息
2021-02-24
挖洞经验 | 多种针对开启HTTP PUT方法的漏洞利用
2021-02-23
挖洞经验 | 以账户更新方式实现某大公司网站普通用户到管理员的提权
2021-02-22
文章目录