接口文档下的渗透测试(Swagger)
接口文檔背景
隨著前后端分離架構的優勢越來越明顯,前后端分離的應用場景也越來越廣,如今前后端分離已成為互聯網項目開發的業界標準使用方式,而為了前后端程序員在實際開發中能夠有統一的接口文檔去調試,因此也隨著衍生出了很多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/security3.根據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、內網漫游也未嘗不可。?
總結
以上是生活随笔為你收集整理的接口文档下的渗透测试(Swagger)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 两个list获取交集,并集
- 下一篇: 模拟攻击者利用“域前置”(Domain