Hidden Alternative Data Streams的进阶利用技巧
source link: https://3gstudent.github.io/3gstudent.github.io/Hidden-Alternative-Data-Streams%E7%9A%84%E8%BF%9B%E9%98%B6%E5%88%A9%E7%94%A8%E6%8A%80%E5%B7%A7/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
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 常规利用
适用于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#naming-conventions
补充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、…文件
删除该目录下所有文件:
del *.*
但是不现实
使用短文件名
dir /x
找到…文件对应的短文件名为A535~1
del A535~1
2、特殊COM文件
del \\.\C:\test\ads\COM1
3、磁盘根目录
使用streams.exe
管理员权限:
streams.exe -d C:\
0x07 防御建议
对于用户来说,如果在系统中发现特殊名称的文件并且无法删除,需要提高警惕,也许其中会包含payload
对照本文,特殊文件及清除方法如下:
借助短文件名删除
(2) COM1-COM9
del \.\C:\test\ads\COM1
(3) 磁盘根目录
借助streams.exe查看和删除
0x08 小结
本文介绍了进一步隐藏ADS的利用技巧,结合攻击方式分享了具体的清除方法和防御建议,希望能够帮助大家
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK