从rbash到root:一次完整的Linux提权实战复盘

2 人参与

那天下午,我盯着屏幕上一行“-rbash: cd: restricted”的红色报错,心里那股不服输的劲儿一下子就上来了。这感觉,就像你明明拿到了房子的钥匙,却被告知只能待在玄关,连客厅的沙发都不能碰。作为一个总喜欢在系统里“溜达”的人,这种束缚简直让人抓狂。所以,我决定,非得从这该死的rbash里“越狱”出去,拿到那个至高无上的root权限不可。下面就是那次折腾的完整复盘,每一步都充满了意外和惊喜。

困在“玄关”:初探rbash的铜墙铁壁

一开始,我简直像个无头苍蝇。cd命令被禁,大部分常用命令都返回“command not found”,连想看看当前目录下有什么文件,按Tab键都没反应。那种感觉,太憋屈了。但我知道,慌没用,得先摸摸这个“牢房”的墙壁有多厚。我试了几个最基础的命令:echo $shell 确认了是rbash,echo $PATH 发现路径被限制得死死的,只有寥寥几个目录。这摆明了就是不想让你乱跑。

转机,往往藏在最不起眼的地方

就在我有点沮丧的时候,我试了试 help 命令。嘿,它居然能用!虽然列出的都是内建命令,但其中有一个 enable。我心里一动,试着输入 enable -n 想看看能不能禁用某些限制,结果系统提示我可以查看所有内建命令的状态。顺着这个思路,我发现了突破口:有些内建命令,比如 . (source) 和 printf,并没有被完全锁死。

我尝试用 printf 拼接字符串,看看能不能绕过去。比如 printf "/bin/ls",它只是打印出来,并不执行。但当我把它和命令替换结合起来:`printf "/bin/ls"`,奇迹发生了——当前目录的文件列表唰地一下出来了!那一刻,我差点从椅子上跳起来。原来,rbash对某些命令替换和变量扩展的过滤,并没有想象中那么严密。

打开第一道锁:从执行命令到启动编辑器

能执行 /bin/ls 只是万里长征第一步。我的目标是得到一个更自由的shell环境。我想到,很多编辑器都有执行外部命令的功能。我试探性地输入 vi,居然打开了!虽然功能可能受限,但vim的命令模式可是个“后门”大户。

在vim里,我按下了冒号进入命令模式,然后输入 :set shell=/bin/bash,回车。接着,输入 :shell。屏幕闪烁了一下,熟悉的bash提示符出现了!我尝试输入 cd /etc,成功了!我已经突破了rbash的文件系统访问限制。不过,此时的用户权限还是原来的普通用户,vim就像给我递了一把能打开房间里所有门的万能钥匙,但房子的主人(root)我依然不是。

向王座进发:寻找提权的“梯子”

有了相对自由的bash,接下来就是经典的提权环节了。我首先干了三件事:

  • sudo -l 看看当前用户能免密以root身份运行什么命令。结果令人失望,不在sudoers里。
  • find / -type f -perm -4000 2>/dev/null 查找所有SUID权限的文件。这可是提权的宝库。
  • 检查有无任何世界可写的敏感文件或目录,比如cron job、系统服务脚本等。

查找SUID命令的结果给了我惊喜。我发现了一个老版本的 nmap(5.10版本以前)。我记得这个版本的nmap有个“交互模式”,可以在里面执行系统命令。我立刻尝试:nmap --interactive,果然进去了。在nmap的提示符下,我输入了 !sh

屏幕再次闪烁。当我看到新的命令提示符是 # 而不是 $ 时,我知道,成了。我输入 id,显示uid=0(root)。那一刻的成就感,比打通关任何游戏都来得强烈。我从一个连自家客厅都去不了的“访客”,变成了拥有整个系统生杀大权的“主人”。

复盘后的那点凉意

这次从rbash到root的旅程,像一次精心设计的密室逃脱。它让我明白,没有绝对安全的“牢笼”。rbash的限制看似全面,但一个未被妥善过滤的命令替换、一个遗留的具有危险功能的SUID程序,就足以让整个防御体系土崩瓦解。

作为防御方,这次经历给我泼了一盆冷水:仅仅启用rbash是远远不够的。必须定期审计SUID/SGID文件,移除不必要的程序;对sudo权限进行最小化分配;并且,永远不要低估一个拥有哪怕最微小执行权限的持久攻击者。而对于我们这些喜欢钻研的人来说,这种“破解”的乐趣,大概就在于不断寻找那个被所有人忽略的、细微却关键的裂缝吧。系统静默,只有光标在root提示符后闪烁着,仿佛在诉说刚才那场无声战役的波澜壮阔。

参与讨论

2 条评论
  • 暗影之主

    rbash这限制真够烦的,连cd都用不了

    回复
  • 聚会中央空调

    用printf绕过的思路挺巧妙的,我之前也试过类似方法

    回复