vulnhub-Muzzy-CTF

下載地址:https://www.vulnhub.com/entry/muzzybox-1,434/

前言:

CTF的思維確實不一樣,這個靶機早出來了,但是卡在最後題不會,對,我就是在等第三題的解答。作爲小白,大家一起學習吧。之後打算做一些ctf的靶機,雖然和滲透有區別,但是感覺還是可以彌補一些知識上的空白。

Kali:192.168.1.4

目標機:192.168.1.30

信息收集:

漏洞挖掘:

訪問80端口,是個做ctf的靶場。總共三道題。

第一題:

題目如下。

大致翻譯是:華盛頓大學爲學生建立了一個線上圖書館。僅僅“Principal”是“Authotized”。你是否可以繞過它獲取flag。

訪問兩個網址得到如下頁面:

英文自行翻譯吧。根據提示,我們先下載上面這張圖,然後上傳,得到如下頁面:

因爲看到文件上傳,肯定是打開bp,上傳木馬啥的,但是,我並沒有找到它上傳到哪去了,所以放棄。期間我上傳過一些其他圖片,服務器爲500報錯。對比信息和上傳的圖片,結合題目提示,猜測可能存在一個圖片文字識別的程序,從圖片中讀出文字,然後對比是否通過,然後返回信息。因此,我把圖片p成如下的樣子(字體是微軟雅黑,因爲字體也會影響到程序的識別):

命名爲idcard.png,上傳,獲得如下界面,獲取flag。

記住這個pin值123456789,第二個要用。

第二題:

題目翻譯如下:在數據泄露之後,學校開發了一個新網站,但是不知道爲什麼一直在維護中,你能列出當前目錄並讀取flag文件嗎?連接:IP:8989

訪問網址後,發現一堆報錯(下圖只是一部分):

一個一個點開看的時候,發現都有一小段代碼,我以爲是代碼審計,但是仔細觀察後,發現事情並沒有那麼簡單,因爲代碼看不出任何突破口。

最下面有個提示:

翻譯如下:對於代碼執行,你可以將鼠標放在列表上,右上角會出現一個命令框。

根據提示,點擊命令框,需要輸入pin值,就是剛剛的pin值(做太快,沒有截圖)。之後就可以執行代碼(我剛開始還以爲是個可以執行系統命令的命令框,當然,現在也差不多)。

Python中os模塊可以執行系統命令,這下就很簡單了。導入模塊,執行系統命令就行。執行命令a=os.popen(“ls -al”),a.read()。得到結果,發現flag文件夾。

列舉flag文件夾,發現一個ctf2.py,讀取文件,獲取flag(看不清算了,就是在下面的圖裏面)。

第三題:

題目翻譯:在系統受損後,root用戶使用bash ls和sudo ls來審覈文件,你有其他的辦法去獲取/root/Final_Flag.txt嗎?鏈接:IP:15000/page?name=muzzy。

看着這個網址,我第一反應就是文件包含漏洞。但是我輸入/etc/passwd之後,他給我返回了這個東西:

於是我想到了xss,但是在此處意義不大。難道藏着其他文件要爆破目錄?一頓操作,洗洗睡覺。但是在第二個題的時候,好像可以getshell啊,能不能去審計一下第三題的源碼。先去第二題getshell吧。

代碼就是Python反彈shell那個代碼。這一題可能是要提權。查找s權限也沒有可利用的東西。從系統提權,系統爲Linux4.15(但是,洗洗睡吧)。在我一頭霧水的時候,我打開了百度,開始面向百度的ctf之旅,於是我找到了模板注入這個漏洞,就是服務器端模板(flask之類)把用戶的輸入給解析了,至於漏洞詳情嘛,我也還在學習,總之先把這道題給做了吧。在第三題的url的name後面寫入“{{7*8}}”,頁面返回了56,也就是說服務器後端把“7*8”給解析了。

說明存在模板注入漏洞,所以接下來手注,也可以用工具。

輸入{{“”.__class__}},__class__這個函數時返回類型的。返回結果是“str”,字符型。

我們可以先找到該頁面的基類,然後去找找我們可以利用的方法(函數)。基類用__bases__方法。輸入{{“”.__class__.__bases__}},發現基類是object。

接下來尋找子類。輸入{{“”.__class__.__bases__[0].__subclasses__()}}。就會發現有超級多的子類,圖太長了,不上圖了,接下來就是找到適合的類,看了一波,發現了一個os類(還是用工具比較好,我是看了半天才看到了os)。

對於這個類不陌生,它可以執行系統命令,其中有system函數和popen函數。接下來就調用這個類來getshell。這個類在第117的位置。輸入{{“”.__class__.__bases__[0].__subclasses__()[117].__init__.__globals__[popen](“ls”).read()}},之後就可以執行任意命令了。最後找到一個叫no_flag.txt的文件。

讀取一下。

這應該是使用ssh登錄。登錄成功:

因爲不能使用sudo,所以只能想想其他辦法,歸根結底是提權。接下來的提權,涉及到了我的知識盲區。

查看環境變量,發現該用戶是在/usr/local/sbin下,之後在路徑目錄下僞造ls文件。

保存,在kali打開監聽,在目標機中執行ls文件,即可獲得flag。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章