一、背景描述
萍萍发现他表弟的三舅在家族群中发了分享即提现的链接,于是萍萍把链接分享给了我们,于是就有了下面的内容。
二、正文
链接在手机微信中打开后显示的页面如下所示,内容大概就是分享给他人即可获得红包;上面那个微信红包的图片也是他们设计的。
1、流程分析
分享的链接模样大概如下所示,域名跟路径是该团队利用的其他站点的XSS漏洞,后面的参数看似无用,但是却是后面流程中用来判断跳转逻辑的重要因素,我推测的是该团队有很多SEO的客户,用这些参数值来判断是哪一个用户,类似用户的token。该链接笔者在这里暂称为入口点。
http://victim.com/xss.html?dman=c2.example.cn&?lang=xbwlih×=mikan76ha2
点击的链接,即入口点有两个,一个是某度的链接一个是某宁的链接,为什么有两个呐,当用户分享该页面时,入口点可能会变,比如我是从某度的入口点进去的,但是我分享给萍萍后,分享的是某宁的那个链接,这个逻辑位于攻击者C2服务器的JS文件中。而这两个入口点可以起到双线并进,互为后背的作用。
在XSS Payload中引入了攻击者存放在阿里云OSS中的JS代码,该代码用来提取入口点的dman参数拼装成攻击者C2服务器1的一个JS路径,然后执行。
C2服务器1的这个JS文件中会提取入口点的lang参数,然后拼接成待跳转的URL,跳转到C2服务器2中的一个页面,并进行跳转。
在C2服务器2中的这个页面里,会校验用户的设备信息,根据设备信息进行不同的内容呈现,控制分享给其他人的页面URL。
2、某宁存储型XSS
跟进一下第二个入口点,某宁的一个存储型XSS。是一个HTML页面,URL类似下面这个样子。攻击者输入时将图片的URL替换为了XSS Payload,输出时利用JSONP获取数据时响应包的Content-Type误配置为了text/html,导致可以当作HTML代码直接解析。
笔者在追踪漏洞点的时候,以失败告终,目标系统存在多个端WEB、APP、小程序等,在测试的端中发现输出点Content-Type都是text/plain无法解析html代码,攻击者应该是找了一个不容易发现的输出点。
3、某度存储型XSS
跟进一下第一个入口点,某度的一个存储型XSS。是一个HTML页面,URL类似下面这个样子。
http://victim.com/download/source.html
XSS Payload如下所示,推测可能是利用大小混用绕过某度对script关键字的检测,然后将引入第三方JS文件的代码放在字符串中,并进行base64编码,利用拆分与赋值绕过某度对eval跟atob关键字的检测,实现对字符串的base64解码,并调用eval函数执行。
base64编码前的内容如下所示,创建一个script标签并指向一个外部的JS文件。
现在我已经将Payload分析的差不多了,于是我开始尝试寻找漏洞点在哪里。直接访问域名跟逐个路径都不可以,没有什么有效内容。然后利用搜索语法找到了该站点一些有效的访问链接。
进去之后的页面如下所示,通过入口点URL的里面包含的download关键字,推测很可能是在上传功能中,于是尝试了图片上传功能。
上传接口的URL类似如下所示:
https://victim.com/upload/path1/path2
上传成功后,对应的访问地址如下所示:
https://victim.com/donwload/path1/path2
1、于是我尝试在上传时,将filename的值修改为html后缀,在访问时发现呈现的仍旧是图片。
2、于是将URL改为黑帽SEO团队那种格式的URL,http://victim.com/upload/path1.html,在访问时发现呈现的仍旧是图片。于是我推测本站很可能是根据文件的字节头来判断文件的格式。
3、于是我将文件内容修改为xxxx,发现可以正常显示。推测可能利用了浏览器的内容嗅探机制,不然黑帽SEO团队无法利用成功。
4、于是我将文件内容修改为
5、于是我将文件内容修改为
而黑帽SEO团队在文件后面添加的html后缀也是可以去掉的,并不会根据后缀名称来解析。
关于浏览器的内容嗅探机制可以看我之前在Blog中写的一篇文章:http://www.teagle.top/index.php/archives/192/
三、总结
1、攻击者利用了两个入口点互为后背;
2、攻击者利用了大厂的域名作为入口点来规避微信的一些风控策略;
3、在某度的存储型XSS中利用了内容嗅探机制与WAF绕过;
4、在某宁的存储型XSS中利用了一个存在缺陷的不容易发现的一个输出点。