跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

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

精选回复

发布于

0x00 前言

在渗透测试中,如果需要在目标系统上释放文件,父目录的时间属性(访问时间、上次写入时间、MFT更改时间)会发生变化,如果需要在目标系统上覆盖原文件,原文件的时间属性(创建时间、访问时间、上次写入时间、MFT更改时间)也会发生变化。

从渗透的角度来说,需要想办法修改文件的时间属性来消除痕迹。

从取证的角度来看,可以通过文件属性的异常来发现攻击者入侵的痕迹。

本文将介绍修改文件属性的方法和细节,分享实现代码,并基于利用的思想给出取证建议。

0x01 简介

本文将介绍以下内容:

基本概念

读取文件属性的方法

修改文件属性的方法

共享代码

利用理念

证据收集建议

0x02 基本概念

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

包括以下四项:

创建时间(已创建)

访问时间(已访问)

上次写入时间(已修改)

MFTChangeTime

前三个可以通过右键-属性获得,如下图所示。

5-1.png

无法直接查看MFTChangeTime。

MFTChangeTime记录了MFT的修改时间(主文件表)。如果文件属性改变,MFTChangeTime将被更新。

2、读取MFTChangeTime的方法

(1)通过NtQueryInformationFile读取

注:

无法通过WinAPI GetFileTime。

(2)解析NTFS文件格式

MasterTable中的STANDARD _ INFORMATION(偏移量0x10)和FILE _ NAME(偏移量0x30)包含完整的文件属性。

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

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

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

对应注册表位置HKEY _本地_机器\系统\当前控制集\控制\文件系统,键值NtfsDisableLastAccessUpdate

值1表示禁用,这是默认配置,值0表示打开。只有修改注册表并重新启动系统后,系统才会生效。

4、文件属性的变化规律

读取文件:

文件属性不会被更改。

覆盖文件:

更改4个属性

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

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

更改父文件夹的AccessTime、LastWriteTime和MFTChangeTime

读取文件:

文件属性不会被更改。

覆盖文件:

文件属性不会被更改。

注:

可以借助SetMace进行测试。下载地址:

https://github.com/jschicht/SetMace

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

1、使用WinAPI GetFileTime和SetFileTime

可以操作三个文件属性:

创建时间(已创建)

访问时间(已访问)

上次写入时间(已修改)

无法操作MFTChangeTime。

(1)GetFileTime的使用

getFileTime到GetFileTime()

FileTimeToSystemTime()将FileTime转换为SystemTime,即UTC,这是同一个标准。

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

(2)SetFileTime的使用

sscanf()将输入时间数据转换为系统时间

通过SystemTimetoFileTime()转换SystemTimeToFileTime

LocalFileTimeToFileTime()将FileTime转换为相应的UTC FILETIME,即FileTime加上时区。考虑到时区的影响,与当前系统显示的时间一致。

代码是开源的,下载地址是:

https://github . com/3g student/home-of-C-Language/blob/master/file time control _ winapi . CPP

该代码实现了以下功能:

文件/文件夹查看时间(创建时间、访问时间、上次写入时间)

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

将文件A的时间复制到文件b。

2、使用NtQueryInformationFile和NtSetInformationFile

可以操作四种文件属性:

创建时间(已创建)

访问时间(已访问)

上次写入时间(已修改)

MFTChangeTime

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

https://github . com/rapid 7/meter preter/blob/master/source/extensions/priv/server/timestomp . c

增加了一些功能,下载地址:

https://github . com/3g student/home-of-C-Language/blob/master/file time control _ ntapi . CPP

该代码实现了以下功能:

文件查看时间(创建时间、访问时间、最后写入时间、MFTChangeTime)

文件被修改的时间。

将文件A的时间复制到文件b。

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

注:

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

3、使用驱动文件

(1) SetMace

可用下载地址:

https://github.com/jschicht/SetMace

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

但是时间信息不能修改,因为从nt6.x开始,Windows禁止加载未签名的驱动文件。如果可以绕过驱动程序保护,可以修改时间信息。

(2) WinHex

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

补充、文件资源克隆

资源黑客由powershell自动调用,克隆可执行文件(exe、dll、scr等)的资源信息。)

下载地址:

https://github.com/threatexpress/metatwin

注:

此工具不修改文件属性。

0x04 利用思路

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

将更改父目录的时间属性(访问时间、上次写入时间、MFT更改时间)

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

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

创建时间(已创建)

访问时间(已访问)

上次写入时间(已修改)

要进一步去除操作痕迹,需要用WinHex修改主文件表中的$STANDARD_INFORMATION(偏移量0x10)和$FILE_NAME(偏移量0x30)。

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

将更改原始文件的时间属性(创建时间、访问时间、上次写入时间、MFT更改时间)。

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

要进一步去除操作痕迹,需要用WinHex修改主文件表中的$STANDARD_INFORMATION(偏移量0x10)和$FILE_NAME(偏移量0x30)。

0x05 取证建议

1.检查文件/文件夹的时间属性MFTChangeTime,它位于两个位置:

主文件表中的$STANDARD_INFORMATION(偏移量0x10)

主表中的$FILE_NAME(偏移量0x30)

如果MFTChangeTime异常(晚于其他三个),一般可以认为文件被非法修改了。

你可以用工具套装。

0x06 小结

介绍了修改文件属性的方法和细节,分享了两个实现代码(FileTimeControl_WinAPI和FileTimeControl_NTAPI),结合利用的思路给出了取证的建议。

留下回复

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。