由MarkDown引发的XSS:

一般来说Markdown都会被转换为HTML代码,而程序员往往不会考虑到这层,都是使用的第三方库,这也利于我们进行攻击。比较常见的的Markdown漏洞语法为超链接以及标签可被闭合,接下来我们以非常著名的Editor.md这款程序来进行演示。

  1. 超链接:

图片1.png

在这里我们使用开发者工具来查看html代码:

图片2.png

一共有三个可插入点,分别是:

图片3.png

只需要将标签闭合或者直接使用伪协议即可:

图片4.png

但是为协议被过滤了,不过没关系事实上html属性的值是可以使用html实体化编码的,我们只需要将JavaScript中某个字符编码一下就可以了:

图片5.png

其他两处能够被注入的地方均被过滤掉了。

  1. 标签闭合,这里使用的是要说的程序不是Editor.md:

在目标程序新建笔记可以新建Markdown笔记:

图片6.png

而Markdown语法会被翻译成HTML代码,这一点从右边的预览栏就能看出来:

图片7.png

点开后就会打开百度,可以将它理解成一个a标签:
click
那么我们这里得代码就一共有两个注入点,分别是中括号里面的click对应了a标签中间的click,小括号中的url对应href后面的url。所以我们只需要构造payload就可以了:

图片8.png

通过进行闭合成功注入进了img标签。那么我们使用alert呢?

图片9.png

并没有弹窗,所以我们得重新找一个渲染点让他弹窗,最后我找到了历史记录:

图片10.png

其实到这里我又思考到了他同步到云端是不是云端的输出也没过滤?

服务端存储型XSS:

他在左侧有个同步到博客功能:

图片11.png
在打开此链接后:http://leanote.com/blog/post/5e7235d9ab64414a2200769e发现果然被写入数据库了

图片12.png

并且XSS漏洞还好被同步到web端的笔记:

图片13.png

客户端RCE:

在之前客户端的时候我就在想他到底是怎么去解析的JS,通过翻目录发现了:

图片14.png

打开login.html发现这不是登陆界面吗:

图片15.png

到这里我其实已经知道是Electron开发的了,因为很明显的前端界面,然后询问同事要了个软件叫Procmon,去监听软件情况,发现了:

图片16.png

不出我所料,果然是Electron框架,而Electron框架基于Note.js 因为之前有遇到NoteJS的站就了解了一下。知道NoteJS可以通过child_process来执行命令

8Io1j1.gif

超鸡肋远程利用:

本来以为不能远程利用的时候经过部门大佬提示,找了下导入导出的功能,发现可以进行导入导出:

图片17.png

而导出的文件内容为:

图片18.png

第一次导入发现目标会过滤script以及img标签,如图所示:

图片19.png

但是可以绕过,html属性前后可以跟空格,也就是说我可以这样:onerror=[空格]”payload”:

图片20.png

同时在web端还具有分享功能:
图片21.png

然后目标在移动到自己的分组中:

图片22.png

当他登陆客户端时查看历史记录时也会被触发:

图片23.png

写到最后:

客户端XSS和服务端XSS其实早在几个月前我就提交给了官方,但官方依然不重视,截止现在也没有修复。
https://github.com/leanote/leanote/issues/899

微信公众号:

qrcode_for_gh_c908b1e625bb_258.jpg