介面文件下的滲透測試(Swagger)

墨痕訴清風發表於2020-10-15

介面文件背景

隨著前後端分離架構的優勢越來越明顯,前後端分離的應用場景也越來越廣,如今前後端分離已成為網際網路專案開發的業界標準使用方式,而為了前後端程式設計師在實際開發中能夠有統一的介面文件去除錯,因此也隨著衍生出了很多API介面文件以及除錯工具,如swagger、docway、yapi、Web Api HelpPage等。再結合之前挖掘SRC以及甲方工作中也發現過多處這種問題,彙總案例,輸出一篇Swagger UI介面文件下的測試文章。

認識Swagger

Swagger是一個規範和完整的框架,用於生成、描述、呼叫和視覺化 RESTful 風格的 Web 服務,JAVA在金融機構開發語言的地位一直居高不下,而作為JAVA屆服務端的大一統框架Spring,便將Swagger規範納入自身的標準,建立了Spring-swagger專案,所以在實際測試環境中,基於spring框架的swagger-ui介面展示及除錯文件頁面最為常見。我們先來看某個Swagger UI頁面,如圖所示,介面中存在查詢使用者資訊、上傳檔案等多個敏感操作。

在每個介面中也有詳細的引數介紹,包括引數型別等,再也不用去fuzz介面引數了,直接根據引數型別構造引數就完事了~

如何發現Swagger UI

1.通過js查詢在網站的config等關鍵詞js檔案中查詢:

2.通過路徑字典爆破以下為蒐集到swagger介面常見路徑,親測匹配率很高。

/swagger
/api/swagger
/swagger/ui
/api/swagger/ui
/swagger-ui.html
/api/swagger-ui.html
/user/swagger-ui.html
/libs/swaggerui
/api/swaggerui
/swagger-resources/configuration/ui
/swagger-resources/configuration/security

3.根據swagger元件特徵固定title:Swagger UI

從功能找到切入點

在我們找到Swagger UI頁面後,應快速瀏覽所展示的介面功能,根據功能點由高風險到低風險依次進行安全測試。常見的介面安全測試點如下:介面越權(若介面文件對應的Web應用提供註冊功能,可以用低許可權使用者token嘗試水平越權查詢修改其他使用者資訊,或者垂直越權嘗試進行管理員操作)介面SQL隱碼攻擊(針對所有查詢介面)介面未授權訪問(重點針對管理員模組,如對使用者的增刪改查)任意檔案上傳(針對上傳介面進行測試)測試資訊洩露(重點針對使用者、訂單等資訊查詢介面,以及一些測試資料等)。

案例:

1.越權

如下所示,在某個洩露的Swagger UI頁面中發現管理員新增使用者模組以及分配許可權模組。

這裡有個小坑點,如果swagger頁面地址不是直接拼接在域名之後,如圖所示,直接請求很容易404。

所以一般需要新增swagger-ui.html之前的URI地址(示例為/api),才可以正常進行訪問。

而此處管理員新增使用者介面也存在這種情況,將curl指令拷貝出來,新增上缺失的URI地址,直接測試訪問發現存在身份認證。

但好在此swggaer對應的web應用提供了註冊功能。嘗試利用註冊的低許可權使用者cookie去訪問,檢視是否可以進行垂直越權操作,將登入後的cookie新增在curl請求-b引數中,再去訪問,成功垂直越權至管理員身份新增使用者。

再利用洩露的許可權管理介面,為使用者成功新增管理員模組許可權。

2.介面SQL隱碼攻擊

根據查詢介面的引數進行正常SQL隱碼攻擊即可,這裡不再進行演示。

3.未授權訪問

很多開發為了對介面測試方便,便取消了身份會話認證,這也導致了未授權訪問出現的最為頻繁,想象一下幾十個功能介面光溜溜的躺在你的面前~

最常見的便是未授權查詢介面,只需要小小的點選一下Excute,想要的東西便會出來。

4.檔案上傳

檔案上傳介面大部分均為純介面形式上傳檔案,不存在前端校驗,可直接上傳相應測試指令碼檔案進行安全測試。

5.敏感資訊洩露

因為swagger ui頁面洩露本身就屬於最大的敏感資訊洩露,而相對於介面中的敏感資訊洩露,大部分為在模組中的測試資料洩露,而有些測試賬號也會有很大的許可權。

 認證限制突破思路

1.Swagger開啟了頁面訪問限制

如圖所示,某個swagger-ui.html頁面新增了登入認證。

除了進行弱口令嘗試,還可以直接在swagger-ui.html前一層路徑後新增/v1/api-docs即可訪問介面(v1代表介面迭代版本,可以嘗試v2、v3等可能會有驚喜等著你~)

以json格式檢視:

/swagger/v1/swagger.json

2.Swagger開啟了Authorize認證

若Swagger在每個介面請求中開啟了嚴格的Authorize認證,即使我們可以獲取所有的介面路徑,但因為沒有身份會話,導致介面也無法執行成功。

針對於介面開啟Authorize認證也不要放棄,我們不要放棄每一個介面,此時更多可以去嘗試上傳/下載檔案、修改密碼、登入等模組介面,這些介面也是不需要或者身份認證最容易出現遺漏的地方,當出現一個漏網之魚時,便可以點潰面,拿下介面許可權。

如下在某個swagger頁面中,開啟了Authorize認證,但通過查詢發現一處邏輯缺陷,修改使用者賬號密碼時直接根據使用者賬號便可修改,可通過此缺陷直接重置管理員密碼。

在登入介面嘗試登入,發現可以成功登入並獲取token。

因為當前swagger介面文件開啟了Authorize認證,大部分介面無法直接除錯,此時獲得了管理員的token,便可對當前swagger文件中的所有介面進行操作。

總結

不管是挖掘SRC還是日常的滲透測試中,發掘洩露的介面文件可以輔助我們更好的進行漏洞挖掘,而Swagger UI頁面中一般會包含大量的測試介面,在進行上述漏洞總結點的安全測試時,還可以嘗試組合漏洞的利用,只要心(dan)夠(zi)細(da),從介面測試到getshell、內網漫遊也未嘗不可。 

相關文章