Question9: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)

Writeup:

Prerequisite:

Wiki-Shellshock

简单的说一下就是,比如你在shell里输入fun(){ echo HelloWorld; };会定义函数fun(写在一行里面的时候记得大括号旁留空格),如果是fun = '(){ echo HelloWorld; };'的话,正常的shell会把它当做一个变量,但是存在的漏洞的bash在fun被载入环境变量的时候会把它解释为一个函数。这样我们可以在函数体后面加上我们要执行的代码,bash在载入环境变量的时候会执行你追加的代码。相关的实例在plusls的博客里有介绍。
更深入的原理可以在这篇文章里看到: https://coolshell.cn/articles/11973.html

题目已经告诉你是shellshock漏洞那就可以直接打了。
env指令可以直接定义环境变量,我们定义一个空的函数fun = '(){ :; };'(:在shell里表示空语句),然后再这个函数后面追加要执行的代码就能拿到shell.

最后构造的payload: env fun='() { :;}; /bin/cat flag' ./shellshock
这里用export写环境变量也可以。