这题是 shellshock 漏洞的实际应用,之前在整理 web 渗透的时候接触过,但是没有利用过,现在遇到了就记下来。
之前的文章里对 shellshock 简单介绍 过,这里再推荐一篇 shellshock 详细介绍
题目是这样的:
直接 ssh 上去看一下
目录下有 4 个文件,其中 shellshock 是设置了 s 标识的。
看看源码
代码很简单,一开始调用 setresuid 和 setresgid 把进程的 ruid、euid 和 suid 设置为进程当前的 egid,由于设置了 s 标识,因此 egid 实际上是 root 所在用户组的 id。接着调用了 bash,注意到这里是以 root 的身份调用的。
既然是 shellshock,先试试最简单的
发现输出了 test。分析一下这条指令实际上做了什么。首先在当前环境中定义了一个 X 函数,函数体是 { :; }
,实际上类似于 return true
,之后在函数体外多加了一条语句 echo "test"
,这条语句会在后面调用 /home/shellshock/bash
fork 新的 bash 进程时被调用,这里的调用是在初始化环境的时候调用的,换句话说,就是 fork 出来的新 bash 进程会在初始化自己的环境时执行函数定义后面的语句
我们知道 shellshock 中以 root 身份调用了 bash,那只要用同样的方法,让这个 bash 进程在初始化环境的时候输出 flag 就行了,于是可以:
得到结果