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

清理缓存
