免责声明:本文章仅供安全从业人员,了解CVE-2021-4034的原理,技术讨论,不允许将其用于非法用途。
什么是CVE?
CVE的英文全称是Common Vulnerabilities & Exposures(公共漏洞和暴露)。
危害等级
高危
liunx权限
基本权限 UGO
属主------->u 属组------->g 其他人------>o
图片出处:xiaosha
SUID、SGID、SBIT详解
读(read):r ---->4
写(write):w ---->2
执行: x(exec) ----->1
- SUID的基本权限位有x权限,标识符为s,代表数字为4,生效对象为用户位
- SGID的基本权限位有x权限,标识符为s,代表数字为2,生肖对象为用户组位
- SBIT的基本权限位有x权限,标识符为t,代表数字为1,生效对象为其他用户
- 因此 4+2+1=7 chmod 777 就是ugo都有读写执行权力
r w x rw- r--
属主权限 属组权限 其他人权限
SUID
suid通过s字符标识判定,当s出现在文件所有者的x权限时,如上图/usr/bin/passwd文件,状态位:-rwsr-xr-x,此时就可以判定为时suid。
- suid权限仅对二进制程序有效
- 该权限仅在执行该程序的过程中有效
- 执行者将拥有该程序拥有者的权限
SUID的目的:为了让本来没有相应权限的用户运行这个程序,可以短暂的享有该程序拥有者的权限。就比如上方图例,/usr/bin/passwd该二进制程序是用来修改密码的,但是linux系统中用户众多,有root、普通用户等等,这些用户都需要在特殊情况修改密码,比如在忘记登录密码时。
具体流程:
因为passwd的权限对任何用户都是可执行的,所以系统中不管什么用户都可执行passwd文件的拥有者是属于root当普通用户在执行passwd命令时,会在执行期间短暂拥有root权限普通用户借助root权限修改了/etc/shadow文件最后把密码修改成功这时候,在攻击者的角度,就可以利用此类拥有者为root的二进制程序,提权成功.
当在渗透过程中获取了shell,可以使用find命令查询系统上所有的s权限位文件,命令:
find / -perm -4000 -type f -ls
sgid
- sgid和suid差不多,先查看s是否在所属用户组的x位置上,如果在,那就是sgid
- sgid获得该程序所属用户组的权限
- sgid仅对二进制程序有用
- sgid主要用在目录上
注:sgid,如果用户在此目录下具有w,写的权限的话,若使用者在此目录下建立新文件,则新文件的群组与此目录的群组相同。
SBIT权限位
- sbit主要针对other来设置的,和suid,sgid大同小异,只是功能上不同而已
- sbit只对目录有效,当用户在该目录下新建文件或目录时,仅自己和root才有权利删除
- 最具代表的就是/tmp目录,之前在渗透项目中,获得了webshell,都要先进到/tmp目录下进行一系列下载之类的操作,因为/tmp目录,任何人都可以增加、修改文件(权限为rwx)
注:SBIT对文件不起作用
提权实例
这toto命令具有SUID权限,
echo "/bin/bash" > /tmp/id
chmod 777 /tmp/id
export PATH=/tmp:$PATH
./toto
将命令/bin/bash
写入文件/tmp/id
中,然后设置文件的执行权限为777
(允许任何人执行)。接着将/tmp
加入环境变量PATH
中,这将导致系统在查找应用程序时首先搜索/tmp
目录。最后,运行文件toto
,因为toto
不存在于$PATH
中,所以这个命令将在/tmp
目录中查找toto
文件并执行它。
获得john权限
接下里在john用户下执行sudo -l列出当前用户可以在目标系统上运行的所有 sudo
命令
-
Matching Defaults entries
显示当前用户的默认特权, -
env_reset
表示环境变量是受保护的 mail_badpass
表示用户输入错误密码时会向管理员发送邮件,secure_path
表示用户在使用 sudo 命令时要使用的特定路径。- 接着,这里列出了
john
用户可以以root
身份运行的仅一个命令,即/usr/bin/python3 /home/john/file.py
。这表明john
用户可以使用sudo
访问该命令,而无需提供root
用户的密码。 - 在这种情况下,
john
可以以root
身份在目标系统上运行/usr/bin/python3 /home/john/file.py
这个命令。
echo "import pty;pty.spawn('/bin/bash')" > file.py
sudo python3 /home/john/file.py