通杀漏洞CVE-2021-4034提权原理和应用

免责声明:本文章仅供安全从业人员,了解CVE-2021-4034的原理,技术讨论,不允许将其用于非法用途。

什么是CVE?

CVE的英文全称是Common Vulnerabilities & Exposures(公共漏洞和暴露)。

危害等级

高危

liunx权限

基本权限 UGO

属主------->u 属组------->g 其他人------>o

 

文件的权限分为三种即 r w x ,
r: Read 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
w Write 对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
执行
x execute 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限

图片出处: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。

  1. suid权限仅对二进制程序有效
  2. 该权限仅在执行该程序的过程中有效
  3. 执行者将拥有该程序拥有者的权限

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贺越洋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值