Konga任意用戶登錄分析
介紹
首先呢,先了解下Konga是什么東東(有點多余,知道有漏洞就行了!)
了解konga之前呢,先了解下Kong:
Kong是一款基于OpenResty(Nginx + Lua模塊)編寫的高可用、易擴展的,由Mashape公司開源的API Gateway項目。
Kong是基于NGINX和Apache Cassandra或PostgreSQL構建的,能提供易于使用的RESTful API來操作和配置API管理系統,所以它可以水平擴展多個Kong服務器,通過前置的負載均衡配置把請求均勻地分發到各個Server,來應對大批量的網絡請求。
那么它的功能呢,有以下這么幾點(百度抄來的):
- 高級路由、負載平衡、健康檢查——所有這些都可以通過管理 API 或聲明性配置進行配置。
- 使用 JWT、基本身份驗證、ACL 等方法對API 進行身份驗證和授權。
- 代理、SSL/TLS 終止以及對 L4 或 L7 流量的連接支持。
- 用于實施流量控制、req/res轉換、日志記錄、監控和包括插件開發人員中心的插件。
- 復雜的部署模型,如聲明式無數據庫部署和混合部署(控制平面/數據平面分離),沒有任何供應商鎖定。
- 本機入口控制器支持服務Kubernetes。
了解完Kong,我們再來說Konga,簡易來說,其實就是圖形化的用來管理Kong的一個系統。
漏洞描述
那么上面功能介紹也說了,它調用api呢是使用jwt做的身份驗證,一般沒有點安全意識的去docker裝個Konga誰還去專門去改下jwt的默認密鑰呢!
是不!
圖下:通過圖可看到默認key為:oursecret

那么我們再去看看他是通過那些參數去進行的jwt加密:
從圖下可看到:它是通過UID 進行jwt加密返回的。

漏洞復現
那么我們就可以去漏洞利用一下了:
首先呢,訪問jwt的官網:
https://jwt.io/#debugger-io
然后通過如圖的方式生成一個jwt-token,從箭頭處可看到一處放uid,一處放Konga的默認key。

通過左邊生成的token就可以以管理員身份訪問后臺任意接口了。
我們還是找個倒霉鬼實驗一番把:
首先呢我們訪問的這個接口是需要身份驗證的。

然后的我們把剛才jwt網站生成的token加到請求頭中:
可以看到,是成功獲取到數據的。

我們也可以試試用戶管理的接口:

好了,到這里就分析結束了。
這里多嘴說一句:
Konga的默認密碼為3個admin,我有理由相信100個你們中,有99個字典里不會有這個密碼!
反正我是沒有。