An interesting way of bypassing Windows Attachment Manager
0x00 前言
最近看到了一篇文章《Bypassing Windows Attachment Manager》,作者 rvrsh3ll@424f424f,文中介绍了他绕过 Windows Attachment Manager 的思路,很有趣。 恰好我对文中涉及到的 ADS 和 lnk 文件利用有过研究,所以,本文将结合我的一些心得,对该绕过方法做拓展介绍,并分享一个我在实际测试过程中发现的有趣问题
相关文章地址如下:《Bypassing Windows Attachment Manager》:http://www.rvrsh3ll.net/blog/informational/bypassing-windows-attachment-manager/
0x01 简介
本文将要介绍以下内容:
- Windows Attachment Manager 作用
- Windows Attachment Manager 实现方式
- Windows Attachment Manager 的绕过思路
- 特殊文件的构造
- 实际测试过程中发现的有趣问题
0x02 Windows Attachment Manager
简介
- 自 WinXp SP2 开始,微软推出的新功能
- 用来防止文件从非信任的途径下载后可以直接执行
- 非信任的途径包括邮件和互联网下载
如果发现文件来自于非信任的途径,那么该文件在打开时会弹框提示用户,需要用户确认才能执行,如图
被标记为 High-risk 的文件格式如下:
.ade,.adp,.app,.asp,.bas,.bat,.cer,.chm,.cmd,.com,.cpl,.crt,.csh,.exe,.fxp,.hlp,.hta,.inf,.ins,.isp,.its,.js,.jse,.ksh,.lnk,.mad,.maf,.mag,.mam,.maq,.mar,.mas,.mat,.mau,.mav,.maw,.mda,.mdb,.mde,.mdt,.mdw,.mdz,.msc,.msi,.msp,.mst,.ops,.pcd,.pif,.prf,.prg,.pst,.reg,.scf,.scr,.sct,.shb,.shs,.tmp,.url,.vb,.vbe,.vbs,.vsmacros,.vss,.vst,.vsw,.ws,.wsc,.wsf,.wsh
实现方式
不可信的文件在下载时会被添加 ADS:Zone.Identifier:$DATA
ADS 详细内容如下:
[ZoneTransfer]
ZoneId=3
也就是说,只要包含 ADS:Zone.Identifier:$DATA
,那么该文件在打开时就会弹框提示用户,需要用户确认才能执行
绕过思路
1、删除文件的 ADS,那么在打开该文件的时候就不会弹框
对于小文件,可以使用 Windows 默认命令 more
对于大文件,可使用工具 Streams
也可通过界面操作,如下图,选择 Unblock
2、改变传输途径
如果将文件复制到另一操作系统,原文件的 ADS 不会保存
也就是说,将之前下载的非信任文件通过可信方式复制到另一操作系统,那么该文件在新系统是不会被标记为“不可信”的
例如:
从互联网下载的文件 python-2.7.12.msi,默认被添加 ADS:Zone.Identifier:$DATA,打开时会弹框
现在将该文件拖到虚拟机中(该操作被认为是可信方式,不会被添加 ADS),而且原 ADS 不会保存,所以在打开该文件的过程不会弹框
0x03 特殊文件的构造
既然不可信的文件在下载时会被添加 ADS:Zone.Identifier:$DATA,那么如果是压缩后的文件呢?解压缩后是否还会包含 ADS?
测试系统: Win10x64
HTTP 服务器: Kali Linux
开启 HTTP 服务器功能:
python -m SimpleHTTPServer 80
1、尝试.exe+.rar
使用 WinRAR 将 putty.exe 压缩成 putty.rar,上传至 HTTP 服务器
注:Win10 系统默认无法解压缩.rar 文件,需要手动安装 WinRAR
测试系统通过 Chrome 下载 putty.rar,如图
使用 WinRAR 解压缩并打开文件,未弹框
结论 1:
.rar 内的压缩文件不会被添加 ADS
2、尝试.lnk+.rar
压缩 lnk 文件时会直接对 lnk 指向的源文件压缩,无法压缩 lnk 文件本身,测试失败
3、尝试.exe+zip
使用 WinRAR 将 putty.exe 压缩成 putty.zip,上传至 HTTP 服务器
测试系统通过 Chrome 下载 putty.zip
通过 Windows Explorer 打开 zip 文件,如下图
打开后弹框,提示用户,如下图
而使用 WinRAR 解压缩并打开文件,并未弹框
结论 2:
Windows Attachment Manager 不支持 WinRAR 这类第三方软件
4、尝试.exe+cab
接下来没必要测试需要第三方软件才能使用的压缩格式,应该继续寻找 Windows 系统默认支持的格式
比如.cab 文件
注:cab 文件可通过 makecab.exe 生成,系统默认包含
压缩类型包括:none,mszip,lzx
使用 makecab 将 putty.exe 压缩成 putty.cab,压缩类型选择 lzx,命令如下:
makecab /d compressiontype=lzx putty.exe putty.cab
如图
上传至 HTTP 服务器
测试系统通过 Chrome 下载
解压缩,保存文件,打开,弹框
将文件拖至任一路径,打开,不弹框
完整测试过程如图
gif 在线地址:
..//BlogPic/2017-5-10/2.gif
使用 Procmon 监控两种操作,区别如下图,此处需要继续研究,做更多的测试
注:Win10 Build 14393(1607) 及之前版本均存在这个问题,Win10 Build 15063(1703) 已经修复该问题
结论 3:
使用 cab 压缩文件,接着拖动文件保存,能够绕过 Windows Attachment Manager
5、尝试.lnk+cab
注:该方法来自 rvrsh3ll@424f424f 的文章,但我在测试的时候发现了另外一个有趣的问题
使用 makecab 将 test.lnk 压缩成 test.cab,压缩类型选择 lzx,命令如下:makecab /d compressiontype=lzx test.lnk test.cab
注:cab 文件能够压缩 lnk 文件本身,为了增加迷惑性,可以使用以下测试代码:
test.txt 中写入如下内容:/c start calc.exe
powershell 代码:
$file = Get-Content "c:\test\test.txt"
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("c:\test\test.lnk")
$Shortcut.TargetPath = "%SystemRoot%\system32\cmd.exe"
$Shortcut.IconLocation = "%SystemRoot%\System32\Shell32.dll,3"
$Shortcut.Arguments = $file
$Shortcut.Save()
生成的 lnk 文件参数被空格字符填充,实际 payload 被隐藏,如下图
将 test.cab 上传至 HTTP 服务器
测试系统通过 Chrome 下载
解压缩,保存文件,打开,弹框(同测试 4)
将文件拖至任一路径,打开,不弹框(同测试 4)
一个有趣的问题:
将 lnk 文件解压缩,保存文件,打开,弹框
接着右键查看 lnk 文件属性,再次打开 lnk 文件,不弹框,ADS 被清除
完整测试过程如图
gif 在线地址:..//BlogPic/2017-5-10/1.gif
结论 4:
在某些特殊情况下(Win10 Build 14393(1607) 之前的版本),ADS 会清除,导致能够绕过 Windows Attachment Manager
注:Win10 Build 10586 存在该问题,Win10 Build 14393(1607) 修复了该问题
0x04 补充
Win7 系统不存在以上问题,原因:
打开 cab 文件后,在保存文件时会弹框提示用户(该特性 Win10 不存在)
如图
0x05 小结
- 不可信的文件在下载时会被添加 ADS:Zone.Identifier:$DATA
- 如果将文件复制到另一操作系统,原文件的 ADS 不会保存
- 相比于 rar 和 zip 格式,使用 cab 格式压缩 lnk 文件更为合适
- lnk 文件欺骗性更高
- Win10 Build 15063(1703) 已经修复以上 bug
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论