今天來分享下我是如何自動提取 swagger 中配置的 API 接口的,在此之前,先來了解下 swagger 是什麼?下面是 chatgpt 的回答:
總結起來就是一套方便開發人員設計、構建 API 的框架,國內外應用非常廣泛,大家在日常信息收集的時候經常會遇到這樣的系統,比如通過谷歌語法可以輕鬆找到:
還可以使用網絡空間搜索引擎,比如 fofa:
足以看出使用量是非常廣泛來,當然,還有很多是隱藏在網站目錄中的,需要通過目錄枚舉來發現這類系統。隨便打開一個看看這個系統長什麼樣:
上圖是配置的一些 API 接口信息,點擊其中任意一個接口,會有該 API 詳細的信息,比如:
手工測試時,可以根據接口的描述,進行鍼對性的測試,即方便了開發人員,如果存在未授權訪問的情況下也方便的攻擊者,而我們作爲白帽子,這種系統可以擴展我們測試範圍,從而發現更多問題。
所以對於企業而言,這種系統,可以設置訪問權限,僅限相關開發人員訪問,或者將其設置內網訪問,儘量不要將其映射至外網,從而降低這類信息比惡意利用的風險。
今天的主要目的是如何通過編寫腳本自動化提取其中的接口,從而實現自動化測試,適用於大量目標的測試。
【----幫助網安學習,以下所有學習資料免費領!加vx:yj009991,備註 “博客園” 獲取!】
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC漏洞分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS)
通過查看網站訪問的數據包,可以發現所有接口信息是通過 api 返回數據,再通過前端的 javascript 進行格式化成方便操作的頁面,所以我們只需要找到那個返回數據的接口,進行分析提取即可,如圖:
上面的案例是 openapi 的 3.0 版本,下面是 swagger 2.0 版本:
經過分析,發現,不同版本的格式有略微的差別,所以在做自動化分析的時候,需要根據不同版本做相應的處理。
從上面的案例同樣可以看出,返回接口數據的接口不太一樣,第一個是 swagger.json,第二個是 swagger-docs,所以在收集這類數據接口的時候,需要指定常見接口名稱和路徑的字典,從而發現更多可以返回 API 數據的接口。
下面分別以這兩個版本的接口作爲案例,解析其中的 API,然後在參數部分添加默認值,輸出 API 接口列表,從而應用在其他漏洞掃描器中進行漏洞探測。
1、基於 openapi 3.0 版本,提取接口列表
核心其實就是寫一個函數將接口數據中的參數增加默認值後輸出即可,一個完整的接口配置如圖:
其中 statusCode 是路徑中的參數,可以將默認值設爲 1,get 表示該接口是通過 GET 方法請求,parameters 就是需要配置的接口參數,name 就是參數的名稱,schema 就是參數的類型是數字,我們在自動提取的時候,可以根據參數的類型設置默認值,也可以直接都設置成數字,根據自己的需要來。
簡單寫了一個解析函數,輸出的結果如圖:
2、基於 swagger 2.0 版本,提取接口列表
方法其實大同小異,只是格式不同而已,解析出的格式如圖:
關於參考腳本可以前往【滲透測試那些事兒】知識星球獲取,由於代碼並不成熟,所以就不公開分享了,互聯網上也有同類型的腳本可以參考:
在實現解析單個腳本的能力之後,那麼就是如何收集更多類似接口,這裏推薦 nuclei 的 POC 模板,也可以根據自己的經驗進行添加:
比如我們剛纔測試的目標:
第一個目標測試出了一個 js 文件,第二個沒有測試出來,說明這個 POC 中配置的字典並不全面,這種情況,自己可以將未收錄的路徑添加到 POC 中,從而擴展工具的能力。
轉載自:信安之路 作者:myh0st
更多網安技能的在線實操練習,請點擊這裏>>