网络安全实战之靶场渗透技术
信息收集
端口掃描
nmap找到三個(gè)開(kāi)放的 TCP 端口,FTP (21)、SSH (22) 和 Python 托管的 HTTP (5000):
發(fā)現(xiàn)存在ftp匿名登錄,使用ftp進(jìn)行登錄。
Flask App
訪(fǎng)問(wèn)5000端口,發(fā)現(xiàn)開(kāi)啟了web服務(wù)。
在登錄框測(cè)試了一些常規(guī)漏洞,SQL注入和弱口令都沒(méi)有用。
【一一幫助安全學(xué)習(xí),所有資源獲取處一一】
①網(wǎng)絡(luò)安全學(xué)習(xí)路線(xiàn)
②20份滲透測(cè)試電子書(shū)
③安全攻防357頁(yè)筆記
④50份安全攻防面試指南
⑤安全紅隊(duì)滲透工具包
⑥網(wǎng)絡(luò)安全必備書(shū)籍
⑦100個(gè)漏洞實(shí)戰(zhàn)案例
⑧安全大廠(chǎng)內(nèi)部視頻資源
⑨歷年CTF奪旗賽題解析
網(wǎng)站上沒(méi)有什么有趣的東西,我們?nèi)プ?cè)看看:
登錄之后,重定向到/dashboard這個(gè)目錄下。
“添加注釋”按鈕指向/add_note,它有一個(gè)表格。嘗試提交一個(gè)note進(jìn)行測(cè)試。
它顯示在我的儀表板上。
嘗試各種 XSS 有效負(fù)載,但一切似乎都正確地轉(zhuǎn)義了。“Notes” ( /notes) 現(xiàn)在顯示我的筆記:
單擊它會(huì)導(dǎo)致/note/3并顯示注釋:
我將嘗試通過(guò)檢查其他注釋 ID(/note/1)。例如,點(diǎn)擊“升級(jí)到VIP”的鏈接顯示該選項(xiàng)當(dāng)前不可用
漏洞發(fā)現(xiàn)
JWT解密
嘗試解密cookie。
Flask cookie 看起來(lái)很像 JWT。我將嘗試flask-unsign,一個(gè)用于解碼、暴力破解和制作 Flask cookie 的工具,它可以工作:
目錄爆破
沒(méi)有發(fā)現(xiàn)啥可以利用的地方,就繼續(xù)看cookie。
Flask Unsign解密
使用flask-unsign解密
flask-unsign --decode--cookie'.eJwlx0EKgCAQBdCrDH_torU3iZCQHC0wBUcpEO-e0OrxOnYfrZws0FsH1QmkHQeLQGHNjWxhSvmhmENgR1eCGUbh7z6ra2ms0IRLsjdDY3mdx_gAqEYfRw.YkOi3g.uAoRysM25q2FzuEUmYMaCRMQ4aA'{'_flashes': [('success', 'You are now logged in')], 'logged_in': True, 'username': '0xdf'}cookie:eyJsb2dnZWRfaW4iOnRydWUsInVzZXJuYW1lIjoiYWRtaW4ifQ.Yxvarg.S9d5IqA4nL7CBjzYp4CfnG8IoLk命令:
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOnRydWUsInVzZXJuYW1lIjoiYWRtaW4ifQ.Yxvarg.S9d5IqA4nL7CBjzYp4CfnG8IoLk'使用flask-unsign. Flask cookie 使用秘密簽名,因此在不知道該密碼的情況下無(wú)法修改它們。可以進(jìn)行暴力破解來(lái)測(cè)試弱密碼,并通過(guò)flask-unsign來(lái)提供該功能。–unsign-w,運(yùn)行它會(huì)rockyou.txt返回錯(cuò)誤:
它似乎將文件中的“123456”通過(guò)添加–no-lteral-eval. 我將添加它,它可以很快找到秘密:
以管理員身份訪(fǎng)問(wèn)測(cè)試
生成一個(gè)管理員的cookie,然后替換到瀏覽器當(dāng)中去。
eyJsb2dnZWRfaW4iOnRydWUsInVzZXJuYW1lIjoiYWRtaW4ifQ.YxvdIw.PpnxZ3h8WkIo_5JMIfhCDD7hXo8帶有 Cookie 的暴力用戶(hù)名
使用time將可能的用戶(hù)名生成一個(gè)cookie 列表。
代碼分析
這將獲取一個(gè)名稱(chēng)列表并生成我需要的所有 cookie。這實(shí)際上很慢,運(yùn)行時(shí)間超過(guò) 8 分鐘。這是因?yàn)槊宽?xiàng)工作都必須啟動(dòng),其中包括導(dǎo)入所有 Flask。
我可以深入研究一下flask-unsign源代碼,并跟蹤我用–sign.
@lru_cache() def get_serializer(secret: str, legacy: bool, salt: str) -> URLSafeTimedSerializer:"""Get a (cached) serializer instance:param secret: Secret key:param salt: Salt:param legacy: Should the legacy timestamp generator be used?:return: Flask session serializer"""if legacy:signer = LegacyTimestampSignerelse:signer = TimestampSignerreturn URLSafeTimedSerializer(secret_key=secret,salt=salt,serializer=TaggedJSONSerializer(),signer=signer,signer_kwargs={'key_derivation': 'hmac','digest_method': hashlib.sha1})向后追溯,我可以發(fā)現(xiàn)默認(rèn)的 salt 是“cookie-session”。我知道或只是在文件頂部導(dǎo)入的其他內(nèi)容。我可以使用它來(lái)生成我自己的腳本:
#!/usr/bin/env python3import hashlib import sys from flask.json.tag import TaggedJSONSerializer from itsdangerous import TimestampSigner, URLSafeTimedSerializerif len(sys.argv) < 2:print(f"{sys.argv[0]} [wordlist]")sys.exit()with open(sys.argv[1], 'r') as f:names = f.readlines()for name in names:cookie = URLSafeTimedSerializer(secret_key='secret123',salt='cookie-session',serializer=TaggedJSONSerializer(),signer=TimestampSigner,signer_kwargs={'key_derivation': 'hmac','digest_method': hashlib.sha1})print(cookie.dumps({"logged_in": True, "username": name.strip()}))使用wfuzz檢查每個(gè) cookie,隱藏 302 響應(yīng)(重定向回/login
枚舉到一個(gè),解碼為blue,發(fā)現(xiàn)一個(gè)blue用戶(hù)。
使用登錄 Oracle 的暴力用戶(hù)名
使用wfuzz對(duì)所有用戶(hù)發(fā)送登錄請(qǐng)求,并注意任何不響應(yīng)“無(wú)效憑據(jù)”的用戶(hù)。有一個(gè)文件: names.txt
它返回了一個(gè)有效的用戶(hù)名,blue(就像我通過(guò)制作 cookie 找到的一樣)。我將flask-unsign用來(lái)制作 cookie:
站點(diǎn)訪(fǎng)問(wèn)/枚舉
無(wú)論我以哪種方式獲得blue的cookie,替換 Firefox 開(kāi)發(fā)工具中的當(dāng)前 cookie,然后重新加載/dashboard顯示我現(xiàn)在以blue登錄:
還有“導(dǎo)入筆記”和“導(dǎo)出筆記”按鈕。我稍后會(huì)回到這些。
發(fā)現(xiàn)FTP登錄的用戶(hù)和密碼。
FTP登錄
發(fā)現(xiàn)一個(gè) 是關(guān)于密碼安全的PDF,下載下來(lái),然后進(jìn)行分析。
發(fā)現(xiàn)了默認(rèn)的用戶(hù)名格式。
以 ftp_admin 身份訪(fǎng)問(wèn) FTP
ftp_admin@Noter!有一個(gè)目錄files和一個(gè)PDF。目錄為空:
發(fā)現(xiàn)2個(gè)zip文件,將它們都下載到本地。
md 到 pdf 中的 RCE
使用unzip -l查看壓縮包文件內(nèi)容。
使用diff命令比較2個(gè)壓縮包的區(qū)別。
我app.py將從每個(gè)中提取,并將它們重命名為app-1.pyand app-2.py:
繼續(xù)使用diff進(jìn)行比較。運(yùn)行diff app-1.py app-2.py顯示第一個(gè)對(duì)數(shù)據(jù)庫(kù)有不同的信任:
來(lái)源分析
該代碼很有趣,export_note_local在andexport_node_remote函數(shù)中有一個(gè)有趣的東西。每個(gè)人都會(huì)得到一個(gè)注釋,要么在本地讀取它,要么從給定的 URL 讀取它,然后用來(lái)針對(duì)它subprocess運(yùn)行一個(gè)nodeJavaScript 程序。例如,來(lái)自export_node_local:
rand_int = random.randint(1,10000) command = f"node misc/md-to-pdf.js /pre>{note['body']}' {rand_int}" subprocess.run(command, shell=True, executable="/bin/bash")return send_file(attachment_dir + str(rand_int) +'.pdf', as_attachment=True)CVE-2021-23639
漏洞描述:
影響 md-to-pdf包,版本 <5.0.0
md-to-pdf是一個(gè)用于將 Markdown 文件轉(zhuǎn)換為 PDF 的 CLI 工具。此軟件包的受影響版本容易受到遠(yuǎn)程代碼執(zhí)行 (RCE) 的影響,因?yàn)樗脦?kù)灰質(zhì)來(lái)解析前端內(nèi)容,而不禁用 JS 引擎。
該package-lock.json文件將給出所需 JavaScript 包的版本。我將從檔案中提取它并通過(guò)以下方式找到它grep:
google搜索這個(gè)包和漏洞利用會(huì)返回一個(gè)頁(yè)面:
攻擊者可以將有效載荷放入傳入的降價(jià)中,這將導(dǎo)致 RCE。
獲取權(quán)限
反向殼
創(chuàng)建一個(gè)md文件,寫(xiě)入反彈shell的語(yǔ)句來(lái)利用它。
本地先啟動(dòng)一個(gè)80端口,然后使用nc進(jìn)行監(jiān)聽(tīng),接著使用網(wǎng)站的Export功能。
反彈Shell
獲得user.txt
獲得第一個(gè)user.txt文件,使用cat命令進(jìn)行查看。
MySQL
我們?cè)谄渲幸粋€(gè)腳本中發(fā)現(xiàn)了 mysql 憑據(jù)。由于這是一個(gè) CTF,這樣的事情總是會(huì)引起懷疑。
我們檢查mysql是否在本地運(yùn)行:
我們?cè)谀J(rèn)端口 3306 上看到它。我們還可以檢查服務(wù),看看它是否以 root 身份運(yùn)行
在 MySQL 中利用 UDF
這是。所以我們知道 mysql 以 root 身份運(yùn)行,并且我們有 root 憑據(jù)來(lái)登錄它。使用 Exploit-DB 上的漏洞利用我們可以將源代碼復(fù)制到盒子中,編譯它,然后使用它在 mysql 中創(chuàng)建的共享庫(kù)以 root 身份執(zhí)行代碼。
讓我們使用 searchsploit 獲取代碼:
本地開(kāi)啟一個(gè)web服務(wù),將文件下載到目標(biāo)機(jī)器上。
接著使用gcc進(jìn)行編譯。
然后下載到目標(biāo)機(jī)器上。
MYsql登錄
在之前獲取到了機(jī)器的用戶(hù)和密碼,然后進(jìn)行登錄。
權(quán)限提升
Raptor
漏洞利用:
有很多關(guān)于如何使用稱(chēng)為 Raptor 的代碼來(lái)利用以 root 身份運(yùn)行的 MySQL,我的想法是,我將編寫(xiě)一個(gè)共享庫(kù),將 SQL 中的命令運(yùn)行到插件目錄中,然后添加一個(gè)命令來(lái)訪(fǎng)問(wèn)它并以 root 身份執(zhí)行。
我需要獲取漏洞利用文件的副本并使用注釋中的說(shuō)明進(jìn)行編譯:
將腳本文件上傳上去。
漏洞利用過(guò)程
1.創(chuàng)建一個(gè)foo表并將二進(jìn)制文件讀入其中:
2.查看插件目錄
3.將二進(jìn)制文件寫(xiě)入上面的插件目錄,并將其作為用戶(hù)定義的函數(shù)加載:
4.測(cè)試文件權(quán)限。
5.運(yùn)行。
mysql復(fù)制bash并將其更改為 SUID:
需要找一個(gè)文件運(yùn)行的地方不是/dev/shm,因?yàn)樗呀?jīng)安裝nosuid:
而/tmp會(huì)正常工作。因?yàn)閎ash刪除 privs,運(yùn)行它會(huì)返回一個(gè)非 root的 shell:
獲得root.txt
讀取root.txt
【一一幫助安全學(xué)習(xí),所有資源獲取處一一】
①網(wǎng)絡(luò)安全學(xué)習(xí)路線(xiàn)
②20份滲透測(cè)試電子書(shū)
③安全攻防357頁(yè)筆記
④50份安全攻防面試指南
⑤安全紅隊(duì)滲透工具包
⑥網(wǎng)絡(luò)安全必備書(shū)籍
⑦100個(gè)漏洞實(shí)戰(zhàn)案例
⑧安全大廠(chǎng)內(nèi)部視頻資源
⑨歷年CTF奪旗賽題解析
總結(jié):
靶機(jī)主要是從信息收集開(kāi)始,發(fā)現(xiàn)是flask搭建的,然后使用flask unsign進(jìn)行解密,暴力破解。接著使用枚舉出的用戶(hù)進(jìn)行FTP登錄,FTP登錄之后,下載pdf文件,發(fā)現(xiàn)管理員賬號(hào)和密碼規(guī)則,然后登錄FTP管理員,接著下載壓縮包,進(jìn)行文件分析,發(fā)現(xiàn)可以使用CVE-2021-23639歷史漏洞可以獲取權(quán)限,在文件中發(fā)現(xiàn)存在mysql服務(wù),接著進(jìn)行權(quán)限提升,獲取到了root文件。
總結(jié)
以上是生活随笔為你收集整理的网络安全实战之靶场渗透技术的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AltRun调用cmd并刷新DNS
- 下一篇: 读书笔记2013第18本:《像外行一样思