前言
做2023春秋杯春季赛时遇到的,发现是最新最热CVE,那就随手记之
漏洞范围
sudo -V
:1.8.0到1.9.12p1版本
概述
sudo使用用户提供的环境变量让用户选择他们所选择的编辑器。的内容其中一个变量扩展了传递给sudo_edit()
函数的实际命令。
然而,后者依赖于--
参数的存在来确定要编辑的文件列表。注入在一个已授权的环境变量中使用额外的--
参数可以更改此列表并导致特权通过编辑具有RunAs用户权限的任何其他文件来升级。这个问题发生在sudoers之后。
原理
太长,暂时不总结
总之就是利用vim等文本编辑器,进行sudoedit来修改root系统中的敏感文件
在之前的环境中注入额外的双破折号时,这种行为会导致混乱用于查找编辑器的变量。
EDITOR='vim -- /path/to/extra/file'
使用这个值,命令行将被解析为:
vim -- /path/to/extra/file -- /path/from/policy
实际题目
2023春秋杯春季赛sudo
先
sudo -l
查看授权的命令列表发现只有一个
sudoedit -- /etc/GAMELAB
同时一波尝试之后发现靶机的环境下只有
nano
一个编辑器那我们就直接执行payload
EDITOR='nano -- /etc/passwd' sudoedit -- /etc/GAMELAB
进入nano界面**(图片来自于csdn参考文章)**
修改用户名
将第一行的
root
改成xiaonannan
,就可以让xiaonannan访问/root目录下的/bin/bash从而执行root权限的命令Ctrl+O
然后按回车保存,然后Ctrl+x
就可以退出/etc/passwd
的nano编辑界面,然后发现没有完全退出(当时本人也很疑惑),仔细看上面文件名变成了
/tmp/GAMELAB
,因为我们的payload是EDITOR='nano -- /etc/passwd' sudoedit -- /etc/GAMELAB
,我们将环境变量设置成了/etc/passwd
所以sudoedit策略会先执行这个编辑改文件的命令,然后再执行sudoedit /etc/GAMELAB
这也证实了我们的想法,
GAMELAB
是个临时文件,然后我们再cat /etc/passwd
一下可以看到,root的用户名已经变成了xiaonannan
切换用户获取flag
su xiaonannan
然后输入对应密码,之后直接
cat /flag
法2
利用shadow文件修改root的密码(这里root的密码被锁定所以只能修改),可以参考我之前那篇关于shadow文件的博客