后渗透痕迹清理

后渗透痕迹清理 --- 事了拂衣去,深藏身与名

渗透成功了,权限拿到了。但别急着庆祝------你的每一步操作都在服务器上留下了痕迹:登录日志、远程桌面连接记录、上传过的文件、执行过的命令......如果不清掉这些,蓝队半天就能追到你第一台跳板机。痕迹清理不是渗透的收尾工作,而是伴随渗透全过程的操作。


一、痕迹清理的核心认知

1.1 什么是痕迹清理?

抹除或替换因渗透操作而遗留的渗透痕迹,通常发生在后渗透阶段或目标已达成时,也用于隐蔽持久化操作。

1.2 三个关键认知

认知 说明
🔴 无法绝对清除 只要和计算机有接触,就一定会有痕迹
🔴 第三方日志无解 远程日志平台(ELK/Splunk)的结构对本地清理基本免疫
🟢 边渗透边清理 痕迹清理伴随渗透全程,而不是事后补救

目的:

  • 为下一步渗透争取时间
  • 提高隐蔽性,降低被发现的概率

二、Windows 痕迹清理

2.1 Windows 日志机制

知己知彼------要先知道日志怎么产生,才知道怎么清理。

复制代码
操作发生 → 缓存为内存内容 → wevtutil.exe 解析为 XML → 转换为可读日志

日志基本结构: 时间 + 地点 + 用户 + 操作


2.2 Windows 日志类型

日志类别 内容 路径
系统 驱动程序、内核、服务、注册表操作 %SystemRoot%\System32\Winevt\Logs\System.evtx
安全 登录、注销、权限使用、账户管理 %SystemRoot%\System32\Winevt\Logs\Security.evtx
应用程序 应用程序记录的事件 %SystemRoot%\System32\Winevt\Logs\Application.evtx

2.3 蓝队必知事件 ID(清理时重点关照)

事件 ID 含义
4624 成功登录
4625 登录失败
4634 用户注销
4648 使用明文凭据登录
1074 系统即将关闭
6005 / 6006 系统启动 / 关闭

2.4 清理用户操作痕迹

日志级别:

级别 含义
信息 正常操作
警告 潜在问题
错误 发生问题
关键 严重故障

⚠️ 清理日志这个操作本身也是一条日志。完全清除不可能,追求的是最大化隐蔽。


2.5 清理 3389 远程桌面痕迹

RDP 连接会在系统多个位置留下痕迹。

痕迹位置:

位置 内容
文档\Default.rdp RDP 连接文件
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Terminal Server Client\ 连接目标账号密码

批处理清理脚本核心逻辑:

bash 复制代码
# 删除注册表中的 RDP 记录
reg delete "HKCU\Software\Microsoft\Terminal Server Client\Default" /va /f
reg delete "HKCU\Software\Microsoft\Terminal Server Client\Servers" /f

# 删除 Default.rdp
attrib Default.rdp -s -h
del Default.rdp

2.6 日志文件的全面清理

方法一:wevtutil 命令行
bash 复制代码
# 列出所有日志名称
wevtutil el

# 清理三大核心日志
wevtutil cl system
wevtutil cl application
wevtutil cl security
方法二:PowerShell
powershell 复制代码
Powershell -Command "&{clear-Eventlog -Log Application,System,Security}"
Get-WinEvent -ListLog Application,Setup,Security -Force | %{Wevtutil.exe cl $_.Logname}
方法三:MSF / CS
bash 复制代码
# MSF 一键清理
meterpreter> clearev

# CS 使用相关插件

2.7 停止日志记录 --- 核心技巧

与其一条条清理,不如让日志根本不产生

Invoke-Phant0m(PowerShell 版)

专门定位 svchost.exe 中负责记录日志的线程,将其全部 Kill。

powershell 复制代码
powershell
import-module .\Invoke-Phant0m.ps1
Invoke-Phant0m

缺点: Kill 线程后,必须重启设备才能恢复日志功能。

EventCleaner(C 版,强烈推荐)

能够挂起日志记录线程而非杀死,渗透完成后可恢复。

bash 复制代码
EventCleaner.exe suspend    # 挂起日志线程 → 不再产生日志
EventCleaner.exe normal     # 恢复线程 → 日志功能恢复

2.8 最近使用的文件清理

即使删除了文件,「最近使用的文件」中仍会保留最近 20 个文件的记录。

bash 复制代码
del /f /s /q "%userprofile%\Recent\*"

2.9 文件的覆写删除

普通删除可以在短时间内被恢复。用覆写方式让恢复变得不可能。

bash 复制代码
# 覆写单个文件
cipher /w:C:\test

# 格式化整个盘符
format 盘符

2.10 伪造时间戳

不光要清理痕迹,还要让文件看起来一直都那样

powershell 复制代码
# 核心逻辑:随机选择系统中已有文件的时间戳,覆盖到目标文件上
$(Get-Item $path).LastAccessTime = $随机时间
$(Get-Item $path).LastWriteTime = $随机时间
$(Get-Item $path).CreationTime = $随机时间

三、Linux 痕迹清理

Linux 万物皆文件------日志是文件,历史记录是文件。比 Windows 更容易清理,但也更容易因批量删除而引起怀疑。


3.1 SSH 连接痕迹

bash 复制代码
# 不记录 SSH 公钥在本地
ssh -o UserKnownHostsFile=/dev/null -T root@xxx.xxx.xxx.xxx /bin/bash -i

3.2 History 命令历史清理

History 运行原理:

复制代码
1. 登录 Shell → 从 .bash_history 加载历史记录到内存
2. 执行命令 → 追加到内存中的历史记录缓冲区
3. 退出 Shell → 将缓冲区写回 .bash_history 文件

清理方式:

bash 复制代码
# 清空当前缓存(伪删除)
history -c

# 用空缓存覆盖文件(真删除)
history -w

# 删除指定命令
history | grep "keyword"        # 找到目标命令编号
history -d 编号                  # 逐条删除

# 批量删除(只保留前 15 行)
sed -i '15,$d' .bash_history

# 当前 Shell 不再记录历史
unset HISTORY HISTFILE HISTSAVE HISTZONE HISTLOG

# 禁用所有历史记录
echo "HISTSIZE=0" >> /etc/profile
source /etc/profile
HISTSIZE=0 && HISTFILESIZE=0

3.3 Linux 日志文件清理

核心日志文件:

文件 内容
/var/log/lastlog 所有用户最后一次登录时间
/var/log/utmp 当前登录用户信息
/var/log/wtmp 用户登录历史记录
/var/log/secure 安全相关日志(SSH 登录等)
/var/log/messages 系统通用日志
~/.bash_history 命令历史

清理命令:

bash 复制代码
# 清空各类日志
echo > /var/log/lastlog
echo > /var/log/utmp
cat /dev/null > /var/log/secure
cat /dev/null > /var/log/messages

3.4 针对性修改/删除 --- 高级手法

直接清空整文件太明显,精准修改特定行才是隐蔽之道。

sed 替换
bash 复制代码
# 修改:替换特定字符串
sed -i 's/原始IP/伪造IP/g' 目标日志文件

# 删除:移除包含特定内容的行
sed -i '/要删除的内容/'d 目标日志文件
grep -v 反选删除
bash 复制代码
# 把不含关键词的行保留为新文件
cat 目标文件 | grep -v 要删除的关键字 > 篡改后文件
cat 篡改后文件 > 目标文件

3.5 二进制日志文件修改

wtmpbtmp 等是二进制文件,不能直接 sed。需要先转换再改。

bash 复制代码
# 二进制 → 文本
utmpdump /var/log/wtmp > /var/log/wtmp.txt

# 编辑文本
vim /var/log/wtmp.txt
:%s/10.0.0.1/192.168.5.5/g    # 全文替换 IP

# 文本 → 二进制
utmpdump -r < /var/log/wtmp.txt > /var/log/wtmp

3.6 文件强力删除 --- 无法恢复

bash 复制代码
shred -f -u -z -v -n 6 目标文件
参数 说明
-f 必要时强制修改权限
-n 6 覆盖 6 次(默认 3 次)
-u 覆盖后删除
-z 最后一次用 0 覆盖以隐藏操作
-v 显示详细信息

3.7 时间戳修改

bash 复制代码
# 查看文件时间戳
stat 文件名

# 修改系统时间 → 修改文件时间
date -s "20230201 16:43:53"
touch -r 参考文件 目标文件       # 把参考文件的时间赋给目标文件
hwclock --hctosys               # 硬件时间同步给系统

3.8 Moonwalk --- Linux 日志快照与恢复

Moonwalk 是一个 400KB 的单二进制文件,能保存渗透前系统日志状态并在渗透后恢复

bash 复制代码
moonwalk start      # 备份当前日志状态
# ... 进行渗透操作 ...
moonwalk stop       # 恢复日志到渗透前状态!

特性:

  • 极小体积,curl 快速拉取
  • 5 毫秒内执行所有命令
  • 不留 Shell 痕迹

3.9 BleachBit --- 全面清理工具

开源的系统清理工具,支持 Windows 和 Linux。清理缓存、Cookies、历史记录、临时文件。相当于 Linux 上的 CCleaner。


四、Windows vs Linux 痕迹清理对比

对比维度 Windows Linux
日志形态 EVTX 二进制文件 文本文件为主
清理难度 高(二进制 + 注册表) 低(万物皆文件)
停止日志 EventCleaner 挂起线程 停 rsyslog 服务
核心工具 wevtutil / EventCleaner / MSF clearev sed / grep / shred / moonwalk
注意事项 365 日志也有记录 直接清空易被察觉

五、痕迹清理核心原则

复制代码
1. 能单条删除就单条删 --- 不要整文件清空,太明显
2. 文件删除用覆写 --- 普通删除可能被恢复
3. 伪造时间痕迹 --- 让文件看起来像一直存在
4. 伪造 IP / 用户名 --- 用 sed 替换真实 IP 为假 IP
5. 边渗透边清理 --- 不是事后一次性操作
6. 停日志 > 清日志 --- EventCleaner suspend 才是王道
7. 网络隧道也是隐藏 --- 端口转发 = 网络连接痕迹隐藏

写在最后: 痕迹清理是渗透测试中最被低估的环节。蓝队逆向追踪你的能力,取决于你留下的痕迹有多少。一个合格的渗透测试工程师,进攻时知道怎么打,撤退时更知道怎么抹掉脚印。不留痕迹,才是最高级的渗透。


后渗透痕迹清理至此结束。至此,从 Web 打到内网、从提权到横向移动、从权限维持到痕迹清理------整套渗透测试攻防链笔记已全部完成。

相关推荐
YUJIANYUE2 小时前
AspFox-类NetBox的ASP+Access迷你单文件服务器V202609
运维·服务器
xixiaoyunya2 小时前
只备份数据远远不够:服务器系统备份的完整方案与实践
服务器·网络·数据库
fengyehongWorld2 小时前
linux Capability中的CAP_NET_BIND_SERVICE
linux·运维·服务器
汉拓3D数字化2 小时前
SolidWorks PDM服务器配置怎么选?冷备份vs热备份vs分布式
运维·服务器·科技·自动化·系统·软件
2501_915921432 小时前
抓包工具对比:Charles、TraceEagle、Wireshark、Fiddler 与 Proxyman
网络协议·计算机网络·网络安全·ios·adb·https·udp
handler012 小时前
【Linux】动态库、静态库使用与原理
linux·运维·服务器·c++·c·动态库·静态库
MSTcheng.2 小时前
【Linux学习】Linux学习第四弹——Linux基本指令3
linux·windows·学习·操作系统·指令
我不是程序员三三3 小时前
怎么监控电脑?企业办公终端监控建设实战与合规要点
服务器·数据库·电脑
筝筝ba3 小时前
OpenBMC 自动化测试中的多进程陷阱:从 Execute Process 返回异常到 output.xml 损坏问题分析
xml·linux·运维·服务器·网络