由 CSRF 引起的 XSS 漏洞小结

Posted 信安之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由 CSRF 引起的 XSS 漏洞小结相关的知识,希望对你有一定的参考价值。

偶然看到关于 ZZZCMS V1.6.6 版本存在后台 getshell 的文章,心想跟着复现一波,顺便练手。

http://www.iwantacve.cn/index.php/archives/250/

这篇文章中有一个操作,就是修改缓存文件,从而达到 getshell 的目的,而其中修改缓存文件的功能是写在 /adminxxx/save.php 中的 editfile() 函数。

在 V1.7.1 版本中,这个问题被修复了,但是很明显的可以观察到,这个地方还存在一个隐患,就是 CSRF。

代码分析

在 V1.7.1 版本中已经修复了后台 getshell 的问题。在代码的第 808 行处,对文件进行判断,如果是后台文件则不能修改。由于是需要修改后台的缓存文件,因此,此处无法再 getshell。

由 CSRF 引起的 XSS 漏洞小结

在代码的第 811 行,有一个白名单数组,这些路径里的文件都是可修改的。在观察这几个文件夹的内容,可以发现 template 文件夹里面存放许多 JS 文件。于是有一个大胆的想法,是否能修改这些 JS 文件,只要这些文件在 HTML 页面中被引用即可触发 XSS 呢? 

由 CSRF 引起的 XSS 漏洞小结

这里之所以修改 JS 文件而不是 PHP,是因为在代码第 818 处 create_fille()函数对可修改的文件后缀名进行了限制。如下图所示,可以看到 JS 不在后缀黑名单之内。

由 CSRF 引起的 XSS 漏洞小结

漏洞利用

根据上文的思路,先要利用 CSRF,于是先构建一个表单发起 POST 请求。表单内容如下:

由 CSRF 引起的 XSS 漏洞小结

当管理员在登录后台以后,点击该按钮就会发送一条 POST 请求修改/zzz17/template/pc/cn2016/js/img.js文件。

由 CSRF 引起的 XSS 漏洞小结

由 CSRF 引起的 XSS 漏洞小结

可以看到,回显显示了保存成功。我们观察一下 /zzz17/template/pc/cn2016/js/img.js 文件, 可以发现代码成功被注入进去了。

我们只要找到引用了这个文件的页面即可触发 XSS:

由 CSRF 引起的 XSS 漏洞小结

可以看到此处引用了 /zzz17/template/pc/cn2016/js/img.js 文件:

由 CSRF 引起的 XSS 漏洞小结

第一次打开页面加载 JS 文件时会触发弹窗,效果如下:

总结

这个漏洞的起因是由于 CSRF,而达到的效果是存储型 XSS。由于 CSRF 需要和管理员交互,因此可能利用起来的效果会大打折扣。而造成 XSS 的原因是因为对 JS 文件不重视,开发者应该没有想到可以利用修改文件这种方式注入恶意的 JS 代码。

把这个漏洞上报给 CVE 以后,发现最近挖到蛮多 CSRF 的,这种漏洞虽然和反射型 XSS 一样利用难度大,但达到的效果可能比 XSS 好的多得多。

以上是关于由 CSRF 引起的 XSS 漏洞小结的主要内容,如果未能解决你的问题,请参考以下文章

浅谈CSRF漏洞

网络攻击关于XSS和CSRF

详解CSRF漏洞攻击

用代码来细说Csrf漏洞危害以及防御

CSRF-漏洞分析

挖洞经验 | 利用XSS和CSRF漏洞远程实现PayPal合作方网站未授权账户访问