网络安全实战之靶场渗透技术
信息收集
端口掃描
nmap找到三個開放的 TCP 端口,FTP (21)、SSH (22) 和 Python 托管的 HTTP (5000):
發現存在ftp匿名登錄,使用ftp進行登錄。
Flask App
訪問5000端口,發現開啟了web服務。
在登錄框測試了一些常規漏洞,SQL注入和弱口令都沒有用。
【一一幫助安全學習,所有資源獲取處一一】
①網絡安全學習路線
②20份滲透測試電子書
③安全攻防357頁筆記
④50份安全攻防面試指南
⑤安全紅隊滲透工具包
⑥網絡安全必備書籍
⑦100個漏洞實戰案例
⑧安全大廠內部視頻資源
⑨歷年CTF奪旗賽題解析
網站上沒有什么有趣的東西,我們去注冊看看:
登錄之后,重定向到/dashboard這個目錄下。
“添加注釋”按鈕指向/add_note,它有一個表格。嘗試提交一個note進行測試。
它顯示在我的儀表板上。
嘗試各種 XSS 有效負載,但一切似乎都正確地轉義了。“Notes” ( /notes) 現在顯示我的筆記:
單擊它會導致/note/3并顯示注釋:
我將嘗試通過檢查其他注釋 ID(/note/1)。例如,點擊“升級到VIP”的鏈接顯示該選項當前不可用
漏洞發現
JWT解密
嘗試解密cookie。
Flask cookie 看起來很像 JWT。我將嘗試flask-unsign,一個用于解碼、暴力破解和制作 Flask cookie 的工具,它可以工作:
目錄爆破
沒有發現啥可以利用的地方,就繼續看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 使用秘密簽名,因此在不知道該密碼的情況下無法修改它們。可以進行暴力破解來測試弱密碼,并通過flask-unsign來提供該功能。–unsign-w,運行它會rockyou.txt返回錯誤:
它似乎將文件中的“123456”通過添加–no-lteral-eval. 我將添加它,它可以很快找到秘密:
以管理員身份訪問測試
生成一個管理員的cookie,然后替換到瀏覽器當中去。
eyJsb2dnZWRfaW4iOnRydWUsInVzZXJuYW1lIjoiYWRtaW4ifQ.YxvdIw.PpnxZ3h8WkIo_5JMIfhCDD7hXo8帶有 Cookie 的暴力用戶名
使用time將可能的用戶名生成一個cookie 列表。
代碼分析
這將獲取一個名稱列表并生成我需要的所有 cookie。這實際上很慢,運行時間超過 8 分鐘。這是因為每項工作都必須啟動,其中包括導入所有 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})向后追溯,我可以發現默認的 salt 是“cookie-session”。我知道或只是在文件頂部導入的其他內容。我可以使用它來生成我自己的腳本:
#!/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檢查每個 cookie,隱藏 302 響應(重定向回/login
枚舉到一個,解碼為blue,發現一個blue用戶。
使用登錄 Oracle 的暴力用戶名
使用wfuzz對所有用戶發送登錄請求,并注意任何不響應“無效憑據”的用戶。有一個文件: names.txt
它返回了一個有效的用戶名,blue(就像我通過制作 cookie 找到的一樣)。我將flask-unsign用來制作 cookie:
站點訪問/枚舉
無論我以哪種方式獲得blue的cookie,替換 Firefox 開發工具中的當前 cookie,然后重新加載/dashboard顯示我現在以blue登錄:
還有“導入筆記”和“導出筆記”按鈕。我稍后會回到這些。
發現FTP登錄的用戶和密碼。
FTP登錄
發現一個 是關于密碼安全的PDF,下載下來,然后進行分析。
發現了默認的用戶名格式。
以 ftp_admin 身份訪問 FTP
ftp_admin@Noter!有一個目錄files和一個PDF。目錄為空:
發現2個zip文件,將它們都下載到本地。
md 到 pdf 中的 RCE
使用unzip -l查看壓縮包文件內容。
使用diff命令比較2個壓縮包的區別。
我app.py將從每個中提取,并將它們重命名為app-1.pyand app-2.py:
繼續使用diff進行比較。運行diff app-1.py app-2.py顯示第一個對數據庫有不同的信任:
來源分析
該代碼很有趣,export_note_local在andexport_node_remote函數中有一個有趣的東西。每個人都會得到一個注釋,要么在本地讀取它,要么從給定的 URL 讀取它,然后用來針對它subprocess運行一個nodeJavaScript 程序。例如,來自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是一個用于將 Markdown 文件轉換為 PDF 的 CLI 工具。此軟件包的受影響版本容易受到遠程代碼執行 (RCE) 的影響,因為它利用庫灰質來解析前端內容,而不禁用 JS 引擎。
該package-lock.json文件將給出所需 JavaScript 包的版本。我將從檔案中提取它并通過以下方式找到它grep:
google搜索這個包和漏洞利用會返回一個頁面:
攻擊者可以將有效載荷放入傳入的降價中,這將導致 RCE。
獲取權限
反向殼
創建一個md文件,寫入反彈shell的語句來利用它。
本地先啟動一個80端口,然后使用nc進行監聽,接著使用網站的Export功能。
反彈Shell
獲得user.txt
獲得第一個user.txt文件,使用cat命令進行查看。
MySQL
我們在其中一個腳本中發現了 mysql 憑據。由于這是一個 CTF,這樣的事情總是會引起懷疑。
我們檢查mysql是否在本地運行:
我們在默認端口 3306 上看到它。我們還可以檢查服務,看看它是否以 root 身份運行
在 MySQL 中利用 UDF
這是。所以我們知道 mysql 以 root 身份運行,并且我們有 root 憑據來登錄它。使用 Exploit-DB 上的漏洞利用我們可以將源代碼復制到盒子中,編譯它,然后使用它在 mysql 中創建的共享庫以 root 身份執行代碼。
讓我們使用 searchsploit 獲取代碼:
本地開啟一個web服務,將文件下載到目標機器上。
接著使用gcc進行編譯。
然后下載到目標機器上。
MYsql登錄
在之前獲取到了機器的用戶和密碼,然后進行登錄。
權限提升
Raptor
漏洞利用:
有很多關于如何使用稱為 Raptor 的代碼來利用以 root 身份運行的 MySQL,我的想法是,我將編寫一個共享庫,將 SQL 中的命令運行到插件目錄中,然后添加一個命令來訪問它并以 root 身份執行。
我需要獲取漏洞利用文件的副本并使用注釋中的說明進行編譯:
將腳本文件上傳上去。
漏洞利用過程
1.創建一個foo表并將二進制文件讀入其中:
2.查看插件目錄
3.將二進制文件寫入上面的插件目錄,并將其作為用戶定義的函數加載:
4.測試文件權限。
5.運行。
mysql復制bash并將其更改為 SUID:
需要找一個文件運行的地方不是/dev/shm,因為它已經安裝nosuid:
而/tmp會正常工作。因為bash刪除 privs,運行它會返回一個非 root的 shell:
獲得root.txt
讀取root.txt
【一一幫助安全學習,所有資源獲取處一一】
①網絡安全學習路線
②20份滲透測試電子書
③安全攻防357頁筆記
④50份安全攻防面試指南
⑤安全紅隊滲透工具包
⑥網絡安全必備書籍
⑦100個漏洞實戰案例
⑧安全大廠內部視頻資源
⑨歷年CTF奪旗賽題解析
總結:
靶機主要是從信息收集開始,發現是flask搭建的,然后使用flask unsign進行解密,暴力破解。接著使用枚舉出的用戶進行FTP登錄,FTP登錄之后,下載pdf文件,發現管理員賬號和密碼規則,然后登錄FTP管理員,接著下載壓縮包,進行文件分析,發現可以使用CVE-2021-23639歷史漏洞可以獲取權限,在文件中發現存在mysql服務,接著進行權限提升,獲取到了root文件。
總結
以上是生活随笔為你收集整理的网络安全实战之靶场渗透技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AltRun调用cmd并刷新DNS
- 下一篇: 读书笔记2013第18本:《像外行一样思