
前言(一年前的一个XSS,已经修复,这里关注分析)
本想百度某个知识点时,点击此CSDN链接竟然弹窗了!竟然弹窗了!竟然弹窗了!重要的事说三遍。
链接地址:https://bbs.csdn.net/topics/390816889

那还不赶紧研究下呢!
分析过程
通过分析和抓包,确定来源于这个post请求:这个请求功能是通过搜索关键字返回相关的关键字博客链接和说明

默认的返回包数据太多,不利于JS调试,修改返回包插入2条包含XSS代码的数据,可看到这里数据已经经过HTML实体编码了。

那么既然弹窗了,肯定是本地js解析了,就是不知道是在script里直接执行还是写出文档进行执行(写出文档那么要把html实体编码转换为正常的字符才行)
下断点,可看到loadData这个函数负责解析返回数据的,这里t拼接时还是实体编码字符

继续走,可看到html()函数把实体编码转换为正常字符:

" <li class="right-item cebian_item" data-report-click={"mod":"popu_728","dest":"https://blog.csdn.net/selah1/article/details/84366274"} data-report-view={"mod":"popu_728","dest":"https://blog.csdn.net/selah1/article/details/84366274"}><a href=https://blog.csdn.net/selah1/article/details/84366274 target="_blank"><div class="content clearfix"><h5 class="" title=很郁闷 window.location.href 竟然没有权限>很郁闷 window.location.href 竟然没有权限h5><span class="time">2012-12-10span><span class="read so_read"> <svg class="icon no-active hover-hide" aria-hidden="true"><use xlink:href="#yuedushu">use>svg>59span>div><div class="right-item-desc">很郁闷alert('xss');div>a>li> <li class="right-item cebian_item" data-report-click={"mod":"popu_728","dest":"https://download.csdn.net/download/duck_arrow/3900053"} data-report-view={"mod":"popu_728","dest":"https://download.csdn.net/download/duck_arrow/3900053"}><a href=https://download.csdn.net/download/duck_arrow/3900053 target="_blank"><div class="content clearfix"><h5 class="" title=jsp 刷新父页面>jsp 刷新父页面h5><span class="time">2011-12-09span><span class="read so_read"> <svg class="icon no-active hover-hide" aria-hidden="true"><use xlink:href="#yuedushu">use>svg>15span>div><div class="right-item-desc"><script>alert(document.cookie);script>"div>a>li>"
写出文档就弹窗了:

漏洞利用
这个post包我只发现只有打开论坛帖子链接时才会发送,打开普通博客链接则不会发送。
所以,需要在论坛发一个帖子,帖子的标题改成和你已经发表了的一篇博客有关,那么打开此帖子就会通过关键字找到你的博客帖子。

然后就是修改你的博客帖子,里面插入xss代码,反正这个jS函数会进行html实体转换。
尴尬的一点来了:修改博客内容插入XSS代码,打开这个论坛帖子,发现博客内容没有变,应该这个POST读取的是以前缓存的博客,也不知道什么时候能把缓存更新了才行。
