Linux提权---内核提权、Linux配置错误提权、定时任务提权

提权思路:通过一些现有的exp,上传到目标主机,执行exp,直接获取root权限

Linux->内核提权/第三方应用程序提权

一、内核提权 

1.1、脏牛漏洞

脏牛漏洞,又叫Dirty COW,存在Linux内核中已经有长达9年的时间,在2007年发布的Linux内核版本中就已经存在此漏洞。Linux kernel团队在2016年10月18日已经对此进行了修复。

漏洞范围

Linux内核 >= 2.6.22(2007年发行,到2016年10月18日才修复)

简要分析:该漏洞具体为,Linux内核的内存子系统在处理写入复制(copy-on-write, COW)时产生了竞争条件(race condition)。恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问。竞争条件,指的是任务执行顺序异常,可导致应用崩溃,或令攻击者有机可乘,进一步执行其他代码。利用这一漏洞,攻击者可在其目标系统提升权限,甚至可能获得root权限。

exp:

https://github.com/gbonacini/CVE-2016-5195
https://github.com/FireFart/dirtycow

复现: 

假设一开始获得的是普通用户bee的权限。

Linux提权---内核提权、Linux配置错误提权、定时任务提权_第1张图片

 1.    使用uname -a命令查看linux内核信息,发现在脏牛漏洞范围内,可以进行测试。Linux提权---内核提权、Linux配置错误提权、定时任务提权_第2张图片

 2.    将exp一下载到本地,使用gcc -pthread dirty.c -o dirty -lcrypt命令对dirty.c进行编译,生成一个dirty的可执行文件。Linux提权---内核提权、Linux配置错误提权、定时任务提权_第3张图片

 3.执行./dirty 密码命令,即可进行提权。Linux提权---内核提权、Linux配置错误提权、定时任务提权_第4张图片

 4.此时使用上图中的账号密码即可获取root权限。Linux提权---内核提权、Linux配置错误提权、定时任务提权_第5张图片

 还有就是其他的各种内核漏洞提权了。说实话,内核漏洞提权很难成功,因为内核提权对内核的版本,还有目标机器的环境要求很高(需要安装有gcc等编译环境 )。所以使用内核提权成功率很低。并且内核提权需要查看exp的源代码,不然可能连编译都不会。内核漏洞提权的步骤肯定是查看目标机器的内核版本等信息,查看命令上面有。或者执行脚本查看该内核可能存在什么漏洞。

1.2、SUID提权

SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了。

已知的可用来提权的linux可行性的文件列表如下:

nmap、vim、find、bash、more、less、nano、cp、git

以下命令可以发现系统上运行的所有SUID可执行文件。

#以下命令将尝试查找具有root权限的SUID的文件,不同系统适用于不同的命令,一个一个试

find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000-print2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} \;

利用find文件提权

假如我们现在拿到了一个网站服务器的shell,但是权限是ubuntu,我们现在需要提权到 root 用户权限。Linux提权---内核提权、Linux配置错误提权、定时任务提权_第6张图片

假如我们现在拿到了一个网站服务器的shell,但是权限是ubuntu,我们现在需要提权到 root 用户权限

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

Linux提权---内核提权、Linux配置错误提权、定时任务提权_第7张图片

我们随便找一个命令进行利用,我们就找find,先查看其信息,发现其确实是root用户权限的SUID的文件

我们先看一下是否能用find命令以root权限运行,发现确实可以以root权限运行

/usr/bin/find aaa.txt -exec whoami \;
/usr/bin/find aaa.txt -exec id \;

 Linux提权---内核提权、Linux配置错误提权、定时任务提权_第8张图片

1.3、Sudo提权(CVE-2019-14287)

漏洞背景

2019年10月14日, sudo 官方在发布了 CVE-2019-14287 的漏洞预警。

sudo 是所有 unix操作系统(BSD, MacOS, GNU/Linux) 基本集成的一个用户权限控制/切换程序。允许管理员控制服务器下用户能够切换的用户权限。

CVE-2019-14287 是管理员在配置文件中用了 ALL 关键词后造成的。但默认的 sudo 配置文件不受影响。

漏洞影响版本

   sudo < 1.8.28

利用条件

1.         sudo的版本号<1.8.28

2.         知道当前用户的密码

3.         当前用户存在于sudo权限列表

第一点和第二点比较好容易理解,那么第三点当前用户存在于sudo权限列表这个怎么理解呢?

当 /etc/sudoers 文件存在如下形式的配置会导致漏洞的产生

hack ALL=(ALL, !root)  ALL

这句话的含义就是:

允许 hack 用户以非 root 权限之外的所有用户权限运行命令,也就是说hack用户拥有root权限以外的所有权限。但是这样的配置应该会出现在比较少的特殊情况。

漏洞复现

我们在/etc/sudoers配置文件中加上这一行

hack ALL=(ALL, !root)  ALL

Linux提权---内核提权、Linux配置错误提权、定时任务提权_第9张图片

二、Linux配置错误提权 

还有就是利用Linux的配置文件错误,导致 /etc/passwd 文件可写入提权:

当我们获得了某个Linux服务器的低权限之后,我们想要对该低权限账号进行提权,以执行更多的操作。

接下来我们的提权是利用 /etc/passwd 文件的可写入权限,导致我们写入一个其他用户进去。

首先,查看 /etc/passwd 的权限,发现任何用户都可以读写。

有关于 /etc/passwd 文件里面数据的每个属性

我们现在要做的就是自己构造一个用户,在密码占位符处指定密码,并且UID设置为0,将其添加到/etc/passwd 文件中。

首先,使用perl语言生成带有盐值的密码:

perl -le 'print crypt("WN521wn","addedsalt")'
echo "test:adAKDGTvydWk6:0:0:User_like_root:/root:/bin/bash" >>/etc/passwd

然后执行下面这条命令,成功将test用户的信息加入 /etc/passwd 文件 

  以用户名:test  密码: WN521wn 登录主机,登录成功后,是 root 权限

以下这条命令直接生成一个具有root权限的用户:sky,密码为:WN521wn。前提是这条命令的执行需要root权限。

useradd -p `openssl passwd -1 -salt 'user' WN521wn` -u 0 -o -g root  -G root -s /bin/bash -d /home/user sky

三、定时任务提权

系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root 用户的计划任务的。但是 /etc/ 内系统的计划任务可以被列出。默认这些程序以root权限执行,如果有幸遇到一个把其中脚本配置成任意用户可写,我们就可以修改脚本进行提权了。

ls -l /etc/cron*

使用该命令,列出的文件,查看 /etc/cron.daily 、/etc/cron.hourly、/etc/cron.monthly、/etc/cron.weekly 这四个文件夹内的文件,查看是否允许其他用户修改。如果 允许任意用户修改,那么我们就可以往这些文件里面写入反弹shell的脚本提权了。

cat /etc/crontab

四、明文root密码提权

大多数linux系统的密码都和/etc/passwd和/etc/shadow这两个配置文件息息相关。passwd里面储存了用户,shadow里面是密码的hash。出于安全考虑passwd是全用户可读,root可写的。shadow是仅root可读写的。

当我们的passwd和shadow一些权限配置不当就可能会导致提权

passwd文件

test:x:1000:1000::/home/test:/bin/bash

passwd 由冒号分割,第一列是用户名,第二列是密码,x 代表密码 hash 被放在 shadow 里面了(非root用户不可读)。

当我们的passwd文件给普通用户配置了写权限,那么我们就可以通过修改x为一段已知的密码的hash值来进行提权。

shadow文件

test:$6$Mqh9T8ip$4Ev.HJTBdyobrYaW/KzBlL0yx6wefeB.VDcE7KiDiwoUvGkqShU9jRK4cEZA2kBRsyH2fWjmbxc/ZyVWfXwFJ/:18849:0:99999:7:::

假如我们对shadow文件有读取权限我们就可以利用hash、john等对其进行爆破

这里以john为例进行演示,首先把passwd和shadow两文件放在同一文件下

john --user=test test.hash

Linux提权---内核提权、Linux配置错误提权、定时任务提权_第10张图片

五、密码复用提权

我们如果在主机上找到了其他应用或数据库的密码,那么很有可能root用户也用该密码。那么就可以尝试一下 su root 来提权了

六、第三方服务提权

我们还可以查看主机上其他的第三方服务,利用第三方服务的漏洞可以拿到主机的 root 权限。比如如果主机的mysql或tomcat是用root权限启动的,而我们又通过漏洞拿到了mysql或tomcat的权限,就相当于获得了root的权限。

你可能感兴趣的:(linux提权,linux,运维,服务器)