Linux suid提权
当成功通过web端口服务渗透时,我们获取的一般是www-data权限。一些敏感的操作,例如无法读取/root下的重要文件,无法添加用户,开端口等等。
suid是什么
什么是suid?suid全称是Set owner User ID up on execution。这是Linux给可执行文件的一个属性,因为有的文件或命令执行的时候需要使用root权限,但是为了方便就引入一个suid,即上面的s属性,当其他用户执行此文件的时候,就会以root身份执行。
这里就涉及到了Effective UID和Real UID以及Saved UID
- Effective UID: 程序实际操作时生效的UID
- Real UID: 执行该程序的用户的实际UID
- Saved UID: 在高权限用户降权后,保留的其原本UID
提权需求
并不是只要有suid就可以提权了,而是需要程序的所有者是0号或其他super user,同时拥有suid权限,才可以提权。
通常情况下Effective UID
和Real UID
相等,所以普通用户不能写入只有UID=0号才可写的/etc/passwd
;有suid的程序启动时,Effective UID就等于二进制文件的所有者,此时Real UID就可能和Effective UID不相等了。只有这个程序的所有者是0号或其他super user,同时拥有suid权限,才可以提权。
提权
寻找可以满足条件的文件
1 | find / -perm -u=s 2>/dev/null |
寻找到全部的带有suid的文件
nmap
1 | nmap --interactive |
使用nmap的udp或tcp syn扫描时,需要用到root权限,所以有些管理员图方便会直接给namp上s权限,而nmap 5.20(使用nmap -v查看nmap版本)之前有一个interactive交互模式(nmap –interactive),在nmap effective uid为0时,可以通过这个模式获得root权限交互式命令行,成功提权。
find
1 | find / -exec command |
find命令自带-exec参数,可以执行命令,如果find具有suid,那么就可以提权到root
还要一些常见的bash, more, less, cp等
nano,vim等编辑器
这类编辑器具有suid权限就可以直接任意读取文件了
1 | which nano //找到nano的地址 |
不知道为什么nano可以顺利提权,但是vim不行。没得到suid。但是vim获取到了可以读任意文件的权限,不能修改。nano则可以读取和修改(nano看到是获取到了suid)。有点玄学……