软链接提权的原理
低权限用户能够以 root 用户的权限执行某个脚本,该脚本中又使用到了诸如 chown
等命令修改文件的权限,且该文件又能够被低权限的用户所修改。因此低权限的用户可以删除该文件,然后创建一个同名的文件,但是这个文件是指向一个高权用户才能修改的文件,例如 /etc/passwd
。这样在低权用户在执行命令的时候就能够修改 /etc/passwd
这个文件的权限了,这样就相当于低权限用户能够越权操作了。
实验验证
- 在
Linux
上创建一个低权限用户testuser
,然后创建一个文件sudotest
,该文件的属主是testuser
。
文章图片
- 创建一个脚本文件
test.sh
,该脚本的属主是testuser2
,testuser
有权限执行该脚本。 配置sudo
免密切换执行,使得testuser
能够免密切换到root
执行test.sh
。
文章图片
文章图片
- 使用
root
用户在/etc
目录下创建文件zsudotest
,然后切换到testuser
用户,删除sudotest
文件,然后创建一个软链接指向/etc/zsudotest
。
文章图片
文章图片
- 执行脚本,可以看到脚本执行完成之后,本来是高权用户的文件
/etc/zsudotest
的属主被修改为了低权用户。
文章图片
文章图片
问题规避【Linux sudo 提权之软链接攻击】针对这种提权的问题,我们可以有如下的方式来减少提权的风险:
- 对于
chown
命令,我们使用的时候可以使用参数-h
,这样的话只会修改软链接这个文件的权限,不会修改链接到的文件的权限。 - 如果还有其它的高危命令,比如
rm
,mv
这些命令,最好是能够切换到文件对应的用户,然后再执行操作