0x00 为什么要提权
当我们取得一个简单的命令交互式界面后,往往因为非root权限所作出的操作会被限制,提权所作出的就是进一步扩大我们的执行权限,操作空间。(本文主要分析提权的应对思路,具体操作可以自己进行科普)
0x01 内核提权
在实际环境中,内核提权是最常使用的提权方法,通杀的内核提权很难找到,但是可以根据不同的系统进行针对性的策略
内核提权是利用Linux内核的漏洞进行提权的,内核漏洞进行提权一般包括三个环节:
1、对目标系统进行信息收集,获取到系统内核信息及版本信息;
2、根据内核版本获取其对应的漏洞以及EXP
3、使用找到的EXP对目标系统发起攻击,完成提权操作
1.信息收集
whoami # 查看当前用户权限,如果是root用户就不用提权;
uname -a # 查看linux操作系统内核信息
uname -r # 查看内核版本
cat /proc/version # 查看linux系统当前操作系统版本信息
cat /etc/issue # 查看linux当前操作系统发行版本信息
cat /etc/redhat-releas # 查看linux当前操作系统发行版本信息
cat /etc/*-release # 查看linux当前操作系统发行版本信息
2.使用SearchSploit(kali自带的工具)
输入searchsploit -m 9479.c
就会自动复制该文件到当前目录
3.将文件上传到被攻击机上编译运行
0x02 sudo提权
在Linux/Unix中,/etc/sudoers文件是sudo权限的配置文件,其中储存了一些用户或组可以以root权限使用的命令
受影响版本:
sudo: 1.8.2 - 1.8.31p2
sudo: 1.9.0 - 1.9.5p1
检测方法:
以非root用户登录系统,并运行如下命令:
sudoedit -s /
- 如果响应一个以sudoedit:
开头的报错,那么表明存在漏洞。
- 如果响应一个以usage:
开头的报错,那么表明补丁已经生效。
cat /etc/sudoers
查看root ALL=(ALL:ALL)ALL附近是否有新的用户痕迹
0x03 suid提权
SUID (Set UID)是Linux中的一种特殊权限,其功能为用户运行某个程序时,如果该程序有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而是程序文件所属的属主。但是SUID权限的设置只针对二进制可执行文件,对于非可执行文件设置SUID没有任何意义.
在执行过程中,调用者会暂时获得该文件的所有者权限,且该权限只在程序执行的过程中有效. 通俗的来讲,假设我们现在有一个可执行文件ls
,其属主为root,当我们通过非root用户登录时,如果ls
设置了SUID权限,我们可在非root用户下运行该二进制可执行文件,在执行文件时,该进程的权限将为root权限
查找具有 SUID 权限位文件
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;
0x04 明文root密码提权
[注册名]:[口令]:[用户标识号]:[组标识号]:[用户名]:[用户主目录]:[命令解析程序]
/etc/passwd
Linux系统使用一个专门的文件来将用户的登录名匹配到对应的UID值,我们可以使用命令 sudo nvim /etc/passwd 进行查看,包含了一些与用户相关的信息。
root:x:0:0::/root:/bin/bash
kato:x:1000:1000:kato:/home/kato:/usr/bin/zsh
其实这个文件有很多条信息,我只单独列出这两条。很清晰的看到每条信息由7个字段组成,由:隔开。 字段包含如下信息: 1️⃣ 登录用户名 2️⃣ 用户密码(进行了别的处理,这里x简单表示,加密后存储在/etc/shadow文件中) 3️⃣ 用户账户的UID(数字形式) 4️⃣ 用户账户的组ID(GID)(数字形式) 5️⃣ 用户账户的文本描述(称为备注字段) 6️⃣ 用户HOME目录位置 7️⃣ 用户的默认shell
大多数linux系统的密码都和/etc/passwd和/etc/shadow这两个配置文件息息相关。passwd里面储存了用户,shadow里面是密码的hash。出于安全考虑passwd是全用户可读,root可写的。shadow是仅root可读写的,当管理员的passwd和shadow一些权限配置不当就可能会导致提权
当shadow可读时借助工具john
john --wordlist=字典文件 + shadow文件
0x05 计划任务提权
大概思路就是,对于可能存在的权限配置不当的有root
权限的计划任务,使我们普通用户也拥有修改权限,我们修改其中的内容,为bash、less、more
等赋予SUID
权限,与SUID
提权结合,使之提权成功。
系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root用户的计划任务的。但是/etc/内系统的计划任务可以被列出。
利用如下的命令可以列出一些计划任务。
ls -l /etc/cron*
cat /etc/crontab
这里我们如果遇到有权限配置为777
即-rwxrwxrwx
的计划任务,我们就可以对文件内容进行修改,进行提权。cp /bin/bash /tmp/bash; chmod u+s /tmp/bash;
对bash
赋予SUID
权限。 当然,如果对vim、less、find
等命令赋权均可cp /bin/vim /tmp/vim ; chmod u+s /tmp/vim; //为vim赋值
接下来等到任务执行即可。
0x06第三方服务提权
0x07 rbash
1.什么是rbash
它与一般shell的区别在于会限制一些行为,让一些命令无法执行
2.如何设置一个rbash
cp /bin/bash /bin/rbash # 复制一个bash,重命名为rbash
useradd -s /bin/rbash test # 设置用户test登陆的shell为rbash
mkdir -p /home/test/.bin # 在test用户下新建一个.bin目录存放可以执行的命令
rbash逃逸