Linux Shell Shock漏洞利用和实战

漏洞介绍:

Shellshock,又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全漏洞,首次于2014年9月24日公开。许多互联网守护进程,如网页服务器,使用bash来处理某些命令,从而允许攻击者在易受攻击的Bash版本上执行任意代码。这可使攻击者在未授权的情况下访问计算机系统。——摘自维基百科

漏洞实验环境搭建:

1、 以root权限安装4.1版本的bansh。下载地址:
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

Linux Shell Shock漏洞利用和实战

3、 链接:

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

4、 检查漏洞是否存在:

Env x=’() { :; };echo vulnerable’ bash -c “echo this is a test”

Linux Shell Shock漏洞利用和实战

5、 如果上一步输出vulnerable,那么让/bin/sh指向/bin/bash

Sudo ln -sf /bin/bash /bin/sh

漏洞真身复现:

 Export foo=’() { :; }; echo hello world’

Linux Shell Shock漏洞利用和实战

Bash读取了环境变量,在定义foo之后就直接调用了后面的函数,一旦调用bash,自定义语句就直接触发。

  1. 攻击Set-UID程序。
    我们知道system()函数将调用“/bin/sh -c”来运行指定的命令,这也意味着/bin/bash会被调用。你能够利用shellshock漏洞来获取权限吗?首先确保安装了带有漏洞版本的bash版本,并让/bin/sh指向/bin/bash
    Linux Shell Shock漏洞利用和实战

编辑如下C代码:
Linux Shell Shock漏洞利用和实战
并给其赋一个SUID权限。
Linux Shell Shock漏洞利用和实战
成功拿到root权限:
Linux Shell Shock漏洞利用和实战

重点函数还是C代码中的setuid(geteuid());可以尝试,如果这段代码被删除,那么就无法成功提权。

原理分析:

我们这里使用该语句的原因是希望read uid = effective uid
这就说明如果real uid 和effective uid相同的话,定义在环境变量中的内容 在该程序中任然有效,但是两个uid如果不同,环境变量失效,就无法发动攻击了,这可以从bash的源代码中得到印证。
Linux Shell Shock漏洞利用和实战