渗透技巧——Windows下NTFS文件的时间属性总结

本文介绍了在渗透测试中如何修改Windows NTFS文件的时间属性,包括CreateTime、AccessTime、LastWriteTime和MFTChangeTime,讨论了其在消除痕迹和取证中的作用。文章分享了使用WinAPI、NtQueryInformationFile等方法实现文件时间属性的读取和修改,并提供了相关代码和利用思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工具:NewFileTime  SetMace  

 

命令:

#先创建文件new-item gh.txt

 

#powershell显示文件的创建、最后修改、最后访问时间 属性

PS D:\godhat> (ls gh.txt).CreationTimeUtc
PS D:\godhat> (ls gh.txt).LastWriteTimeUtc
PS D:\godhat> (ls gh.txt).LastAccessTimeUtc

 

#powershell设置文件的创建、最后修改、最后访问时间属性

PS D:\godhat> (ls gh.txt).LastAccessTimeUtc="2019-12-31 22:33:44"
PS D:\godhat> (ls gh.txt).LastAccessTimeUtc

 

PS D:\godhat> (ls gh.txt).LastWriteTimeUtc="2019-12-31 11:22:33"
PS D:\godhat> (ls gh.txt).LastWriteTimeUtc

 

PS D:\godhat> (ls gh.txt).CreationTimeUtc="1949-10-01 14:00:01"
PS D:\godhat> (ls gh.txt).CreationTimeUtc

 

#目录/文件夹的时间属性修改,需要用到Get-ChildItem,如Fo1目录

$F=Get-ChildItem Fo1
$F[1].Name
$F[1].CreationTime

 

0x00 前言

在渗透测试中,如果需要在目标系统上释放文件,将会改变父目录的时间属性 ( AccessTime,LastWriteTime,MFTChangeTime ) ,如果需要覆盖目标系统上原有的文件,也会改变原有文件的时间属性 ( CreateTime,AccessTime,LastWriteTime,MFTChangeTime ) 。

站在渗透的角度,需要找到修改文件时间属性的方法,用来消除痕迹。

站在取证的角度,通过文件属性的异常能够找到攻击者的入侵痕迹。

本文将会介绍修改文件属性的方法和细节,分享实现代码,结合利用思路给出在取证上的建议。

0x01 简介

本文将要介绍以下内容:

· 基本概念

· 读取文件属性的方法

· 修改文件属性的方法

· 分享代码

· 利用思路

· 取证建议

0x02 基本概念

1、NTFS 文件系统中的时间属性

包括以下四个:

· CreateTime ( Created )

· AccessTime ( Accessed )

· LastWriteTime ( Modified )

· MFTChangeTime

前三个可通过右键 ->Properties 获得,如下图:

无法直接查看 MFTChangeTime。

MFTChangeTime 记录 MFT ( Master File Table ) 的修改时间,如果文件属性变化,就会更新 MFTChangeTime。

2、读取 MFTChangeTime 的方法

( 1 ) 通过 NtQueryInformationFile 读取

注:通过 WinAPI GetFileTime 无法获得。

( 2 ) 解析 NTFS 文件格式

Master File Table 中的 $STANDARD_INFORMATION ( 偏移 0x10 ) 和 $FILE_NAME ( 偏移 0x30 ) 包含完整的文件属性。

###3、Win7 系统默认 CreateTime 和 AccessTime 保持一致。

Win7 系统 ( 以及更高版本 ) 默认设置下,禁用了 AccessTime 的更新。

也就是说,只读取文件的操作不会改变文件属性 AccessTime,AccessTime 同 CreateTime 保持一致,这是为了减少硬盘的读写。

对应注册表位置 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlFileSystem,键值 NtfsDisableLastAccessUpdate。

数值 1 代表禁用,为默认配置,数值 0 代表开启,修改注册表后重启系统才能生效。

4、文件属性的变化规律

读取文件:不会改变文件属性。

覆盖文件:改变 4 个属性。

5、文件夹属性的变化规律

新建文件 / 删除文件 / 重命名文件:

改变父文件夹的 AccessTime,LastWriteTime 和 MFTChangeTime。

覆盖文件:不会改变文件属性。

注:可借助 SetMace 进行测试,下载地址:https://github.com/jschicht/SetMace

0x03 读取和修改文件属性的方法

1、使用 WinAPI GetFileTime 和 SetFileTime

能够操作三个文件属性:

· CreateTime ( Created )

无法对 MFTChangeTime 进行操作

( 1 ) GetFileTime 的使用

通过 GetFileTime ( ) 获得 FileTime。

通过 FileTimeToSystemTime ( ) 将 FileTime 转换为 SystemTime,即 UTC,同一标准。

通过 SystemTimeToTzSpecificLocalTime ( ) 将 SystemTime 转换为 LocalTime,即 UTC 加上时区,考虑时区的影响,同当前系统显示的时间保持一致。

( 2 ) SetFileTime 的使用

通过 sscanf ( ) 将输入的时间数据转换为 SystemTime。

通过 SystemTimeToFileTime ( ) 将 SystemTime 转换为 FileTime。

通过 LocalFileTimeToFileTime ( ) 将 FileTime 转换为对应 UTC 的 FILETIME,即 FILETIME 加上时区,考虑时区的影响,同当前系统显示的时间保持一致。

实现代码已开源,下载地址:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/FileTimeControl_WinAPI.cpp

代码实现了以下功能:

· 查看文件 / 文件夹的时间 ( CreateTime,AccessTime,LastWriteTime )

· 修改文件 / 文件夹的时间

· 将文件 A 的时间复制到文件 B

2、使用 NtQueryInformationFile 和 NtSetInformationFile

能够操作四个文件属性:

我在实现上直接引用了 Metasploit 中 timestomp 的代码,地址如下:

https://github.com/rapid7/meterpreter/blob/master/source/extensions/priv/server/timestomp.c

添加了部分功能,下载地址:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/FileTimeControl_NTAPI.cpp

· 查看文件的时间 ( CreateTime,AccessTime,LastWriteTime,MFTChangeTime )

· 修改文件的时间

· 将时间设置为最小值 ( 1601-01-01 00:00:00 )

注:暂时不支持对文件夹的操作。

3、使用驱动文件

( 1 ) SetMace

可供参考的下载地址:https://github.com/jschicht/SetMace

SetMace 能够正常读取文件和文件夹的时间信息 ( 包括 MFTChangeTime ) 。

但无法修改时间信息,这是因为自 nt6.x 开始,Windows 禁止加载未经签名的驱动文件,如果能够绕过驱动保护,就能修改时间信息。

( 2 ) WinHex

付费版的 WinHex 支持对硬盘文件的写入操作,可以用来修改时间信息。

补充、文件资源克隆

通过 powershell 实现自动化调用 Resource Hacker,对可执行文件 ( exe,dll,scr 等 ) 的资源信息进行克隆。

下载地址:https://github.com/threatexpress/metatwin

注:这个工具不会修改文件属性。

0x04 利用思路

1、在目标系统上释放文件

将会改变父目录的时间属性 ( AccessTime,LastWriteTime,MFTChangeTime ) 。

可以使用SetMace查看属性的变化。

修改文件夹的时间属性可使用 0x03 中的FileTimeControl_WinAPI,能够修改以下三项内容:

想要进一步清除操作痕迹,需要借助 WinHex 修改 Master File Table 中的 $STANDARD_INFORMATION ( 偏移 0x10 ) 和 $FILE_NAME ( 偏移 0x30 ) 。

2、覆盖目标系统上原有的文件

将会改变原有文件的时间属性 ( CreateTime,AccessTime,LastWriteTime,MFTChangeTime ) 。

可以使用 FileTimeControl_NTAPI 读取和修改时间属性。

0x05 取证建议

1、查看文件 / 文件夹的时间属性 MFTChangeTime,位于两个位置:

· Master File Table 中的 $STANDARD_INFORMATION ( 偏移 0x10 )

· Master File Table 中的 $FILE_NAME ( 偏移 0x30 )

如果 MFTChangeTime 存在异常 ( 时间晚于其他三个 ) ,一般情况下可认为该文件被非法修改。

可使用工具SetMace

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值