Hidden Alternative Data Streams 的进阶利用技巧
0x00 前言
在渗透测试中,ADS(供选数据流/ alternate data stream) 通常用于在文件中隐藏 payload,这种方式最大的优点是不影响文件大小,普通用户很难察觉
为此,微软提供了 "dir /r"
操作,可用来查看文件的 ADS,同时,Win XP 以后的系统禁止用户从 ADS 里直接执行程序,限制了 ADS 的利用
然而,通过一些特殊用法和技巧,我们能够更好的隐藏 ADS,并且能够从 ADS 里直接执行程序 :)
说明:
写本文的初衷是偶然看到了一篇有趣的文章,作者:lex Inführ,地址如下: http://insert-script.blogspot.co.at/2012/11/hidden-alternative-data-streams.html
该文章介绍了一些绕过 ADS 检测工具的技巧,并给出了通过 wmi 执行 ADS 的方法
本文将基于 lex Inführ 的文章,结合我的研究心得,对 ADS 的利用技巧作扩充,分享如何清除这些特殊的 ADS,帮助大家提升对 ADS 的认识
0x01 简介
本文将要介绍以下内容:
- ADS 常规利用方法
- ADS 常规检测工具
- 特殊 ADS 对检测工具的绕过
- 特殊 ADS 的清除
- 防御建议
0x02 常规利用
ADS:
适用于 NTFS 文件系统,基础知识可参考如下文章: http://www.freebuf.com/articles/73270.html
创建 ADS:
对文件,命令行:
echo test1 > test.txt:ThisIsAnADS
创建成功后,test.txt 文件大小不变
对文件夹,命令行:
echo test1 > c:\test\ads\1:ThisIsAnADS
注: 需要绝对路径
查看文件中的 ADS:
命令行:
dir /r
如图
可获得文件夹和文件中包含的 ADS 信息
查看 ADS 内容:
命令行: more < test.txt:ThisIsAnADS
如下图,获得 ADS 的具体内容
删除 ADS:
命令行: more < test.txt > testcopy.txt
使用 more 命令查看文件的主数据流并输出,即可变相实现 ADS 的删除
如下图,testcopy.txt 不包含多余 ADS
注: more 命令在显示较长数据时会截断,逐屏显示输出,这里面就存在一个 bug,如果文件过大,导致 more 命令需要分屏显示的时候,就会造成数据显示不完整,导致文件生成失败
0x03 ADS 的执行
1、通过 wmi
命令行:
type putty.exe > test.txt:putty.exe
wmic process call create c:\test\test.txt:putty.exe
如图
程序执行后,进程名为 test.txt:putty.exe
2、通过 powershell
代码如下:
$ps = new-object System.Diagnostics.Process
$ps.StartInfo.Filename= "c:\test\test.txt:putty.exe"
$ps.StartInfo.RedirectStandardOutput = $True
$ps.StartInfo.UseShellExecute = $False
$ps.start()
0x04 常规检测工具
1、ADSCheck.exe
下载地址:https://sourceforge.net/projects/adscheck/
查看 ADS: 可查看指定文件夹下所有文件
命令: ADSCheck.exe c:\test\ads
如图
删除 ADS: 可删除指定路径下的所有 ADS
命令: ADSCheck.exe c:\test\ads /d
如图
2、Streams.exe
下载地址:https://technet.microsoft.com/en-us/sysinternals/streams.aspx
查看 ADS: 查看单个文件
命令: streams.exe c:\test\ads\test.txt
如图
删除 ADS: 删除单个文件的 ADS
命令: streams.exe -d c:\test\ads\test.txt
如图
实例测试:
浏览器下载的文件在打开时会弹框提示
如图
原因:下载的文件默认添加 adsZone.Identifier:$DATA
验证:查看 ADS:
more < putty_download.exe:Zone.Identifier:$DATA
获得内容如下:
[ZoneTransfer]
ZoneId=3
去除 ADS:无法使用 more 命令,因为 putty_download.exe 过大,需要分屏显示,导致文件生成失败
可使用 streams.exe
去除 ADS 后,打开文件不再弹框提示
0x05 特殊 ADS
1、...文件
创建特殊文件...
命令如下:
type putty.exe > ...:putty.exe
wmic process call create c:\test\ads\...:putty.exe
putty.exe 成功执行,进程名为 ...:putty.exe
特别的地方:
(1) ADS 被隐藏
- dir /r 无法查询
- 工具 ADSCheck.exe 和 streams.exe 显示不存在 ADS
如图
(2) 该文件无法被删除
尝试各种方法,无法删除,如图
2、特殊 COM 文件
创建特殊名称文件 COM1
注:
经测试,系统目前支持的文件名称为 COM1 至 COM9 必须有前缀 \\.\
,否则提示系统找不到指定文件
补充 1:
特殊名称 nul
也有同样效果,该方法由 Evi1cg 测试得出
补充 2:
其他特殊文件格式也可以隐藏 ADS,包括如下格式的后缀名:
CON、AUX、PRN、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8、LPT9
type putty.exe > \\.\C:\test\ads\LPT4:putty.exe
注:更多特殊文件名称可参考:
https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file
补充 3:
也可以使用前缀 \\?\
,具有相同效果
命令如下:
type putty.exe > \\.\C:\test\ads\COM1:putty.exe
wmic process call create \\.\C:\test\ads\COM1:putty.exe
注:执行 wmic process call create c:\test\ads\COM1:putty.exe
不会执行程序
putty.exe 成功执行,进程名为 COM1:putty.exe
特别的地方:
(1) ADS 被隐藏
- dir /r 无法查询
- 工具 ADSCheck.exe 和 streams.exe 显示不存在 ADS
(2) 无法直接删除
3、磁盘根目录
管理员权限
type putty.exe >C:\:putty.exe
wmic process call create C:\:putty.exe
putty.exe 成功执行,进程名为 :putty.exe
特别的地方:
(1) ADS 被隐藏
- dir /r 无法查到
- 使用 streams.exe 可以查看
(2) 无法直接删除
0x06 特殊 ADS 的清除
1、...文件
方法 1:删除该目录下所有文件:
del *.*
但是不现实
方式 2:使用短文件名
dir /x
如图
找到...文件对应的短文件名为 A535~1
命令行:del A535~1
成功删除
2、特殊 COM 文件
命令行:del \\.\C:\test\ads\COM1
3、磁盘根目录
使用 streams.exe
管理员权限:streams.exe -d C:\
0x07 防御建议
对于用户来说,如果在系统中发现特殊名称的文件并且无法删除,需要提高警惕,也许其中会包含 payload
对照本文,特殊文件及清除方法如下:
(1) ...
借助短文件名删除
(2) COM1-COM9
del \.\C:\test\ads\COM1
(3) 磁盘根目录
借助 streams.exe 查看和删除
0x08 小结
本文介绍了进一步隐藏 ADS 的利用技巧,结合攻击方式分享了具体的清除方法和防御建议,希望能够帮助大家。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 渗透技巧——程序的降权启动
下一篇: Covenant 利用分析
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论