接口文档下的渗透测试(Swagger)
接口文檔背景
隨著前后端分離架構(gòu)的優(yōu)勢越來越明顯,前后端分離的應(yīng)用場景也越來越廣,如今前后端分離已成為互聯(lián)網(wǎng)項(xiàng)目開發(fā)的業(yè)界標(biāo)準(zhǔn)使用方式,而為了前后端程序員在實(shí)際開發(fā)中能夠有統(tǒng)一的接口文檔去調(diào)試,因此也隨著衍生出了很多API接口文檔以及調(diào)試工具,如swagger、docway、yapi、Web Api HelpPage等。再結(jié)合之前挖掘SRC以及甲方工作中也發(fā)現(xiàn)過多處這種問題,匯總案例,輸出一篇Swagger UI接口文檔下的測試文章。
認(rèn)識Swagger
Swagger是一個規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful 風(fēng)格的 Web 服務(wù),JAVA在金融機(jī)構(gòu)開發(fā)語言的地位一直居高不下,而作為JAVA屆服務(wù)端的大一統(tǒng)框架Spring,便將Swagger規(guī)范納入自身的標(biāo)準(zhǔn),建立了Spring-swagger項(xiàng)目,所以在實(shí)際測試環(huán)境中,基于spring框架的swagger-ui接口展示及調(diào)試文檔頁面最為常見。我們先來看某個Swagger UI頁面,如圖所示,接口中存在查詢用戶信息、上傳文件等多個敏感操作。
在每個接口中也有詳細(xì)的參數(shù)介紹,包括參數(shù)類型等,再也不用去fuzz接口參數(shù)了,直接根據(jù)參數(shù)類型構(gòu)造參數(shù)就完事了~
如何發(fā)現(xiàn)Swagger UI
1.通過js查找在網(wǎng)站的config等關(guān)鍵詞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.根據(jù)swagger組件特征固定title:Swagger UI
從功能找到切入點(diǎn)
在我們找到Swagger UI頁面后,應(yīng)快速瀏覽所展示的接口功能,根據(jù)功能點(diǎn)由高風(fēng)險到低風(fēng)險依次進(jìn)行安全測試。常見的接口安全測試點(diǎn)如下:接口越權(quán)(若接口文檔對應(yīng)的Web應(yīng)用提供注冊功能,可以用低權(quán)限用戶token嘗試水平越權(quán)查詢修改其他用戶信息,或者垂直越權(quán)嘗試進(jìn)行管理員操作)接口SQL注入(針對所有查詢接口)接口未授權(quán)訪問(重點(diǎn)針對管理員模塊,如對用戶的增刪改查)任意文件上傳(針對上傳接口進(jìn)行測試)測試信息泄露(重點(diǎn)針對用戶、訂單等信息查詢接口,以及一些測試數(shù)據(jù)等)。
案例:
1.越權(quán)
如下所示,在某個泄露的Swagger UI頁面中發(fā)現(xiàn)管理員添加用戶模塊以及分配權(quán)限模塊。
這里有個小坑點(diǎn),如果swagger頁面地址不是直接拼接在域名之后,如圖所示,直接請求很容易404。
所以一般需要添加swagger-ui.html之前的URI地址(示例為/api),才可以正常進(jìn)行訪問。
而此處管理員添加用戶接口也存在這種情況,將curl指令拷貝出來,添加上缺失的URI地址,直接測試訪問發(fā)現(xiàn)存在身份認(rèn)證。
但好在此swggaer對應(yīng)的web應(yīng)用提供了注冊功能。嘗試?yán)米缘牡蜋?quán)限用戶cookie去訪問,查看是否可以進(jìn)行垂直越權(quán)操作,將登錄后的cookie添加在curl請求-b參數(shù)中,再去訪問,成功垂直越權(quán)至管理員身份添加用戶。
再利用泄露的權(quán)限管理接口,為用戶成功添加管理員模塊權(quán)限。
2.接口SQL注入
根據(jù)查詢接口的參數(shù)進(jìn)行正常SQL注入即可,這里不再進(jìn)行演示。
3.未授權(quán)訪問
很多開發(fā)為了對接口測試方便,便取消了身份會話認(rèn)證,這也導(dǎo)致了未授權(quán)訪問出現(xiàn)的最為頻繁,想象一下幾十個功能接口光溜溜的躺在你的面前~
最常見的便是未授權(quán)查詢接口,只需要小小的點(diǎn)擊一下Excute,想要的東西便會出來。
4.文件上傳
文件上傳接口大部分均為純接口形式上傳文件,不存在前端校驗(yàn),可直接上傳相應(yīng)測試腳本文件進(jìn)行安全測試。
5.敏感信息泄露
因?yàn)閟wagger ui頁面泄露本身就屬于最大的敏感信息泄露,而相對于接口中的敏感信息泄露,大部分為在模塊中的測試數(shù)據(jù)泄露,而有些測試賬號也會有很大的權(quán)限。
?認(rèn)證限制突破思路
1.Swagger開啟了頁面訪問限制
如圖所示,某個swagger-ui.html頁面添加了登錄認(rèn)證。
除了進(jìn)行弱口令嘗試,還可以直接在swagger-ui.html前一層路徑后添加/v1/api-docs即可訪問接口(v1代表接口迭代版本,可以嘗試v2、v3等可能會有驚喜等著你~)
以json格式查看:
/swagger/v1/swagger.json
2.Swagger開啟了Authorize認(rèn)證
若Swagger在每個接口請求中開啟了嚴(yán)格的Authorize認(rèn)證,即使我們可以獲取所有的接口路徑,但因?yàn)闆]有身份會話,導(dǎo)致接口也無法執(zhí)行成功。
針對于接口開啟Authorize認(rèn)證也不要放棄,我們不要放棄每一個接口,此時更多可以去嘗試上傳/下載文件、修改密碼、登錄等模塊接口,這些接口也是不需要或者身份認(rèn)證最容易出現(xiàn)遺漏的地方,當(dāng)出現(xiàn)一個漏網(wǎng)之魚時,便可以點(diǎn)潰面,拿下接口權(quán)限。
如下在某個swagger頁面中,開啟了Authorize認(rèn)證,但通過查找發(fā)現(xiàn)一處邏輯缺陷,修改用戶賬號密碼時直接根據(jù)用戶賬號便可修改,可通過此缺陷直接重置管理員密碼。
在登錄接口嘗試登錄,發(fā)現(xiàn)可以成功登錄并獲取token。
因?yàn)楫?dāng)前swagger接口文檔開啟了Authorize認(rèn)證,大部分接口無法直接調(diào)試,此時獲得了管理員的token,便可對當(dāng)前swagger文檔中的所有接口進(jìn)行操作。
總結(jié)
不管是挖掘SRC還是日常的滲透測試中,發(fā)掘泄露的接口文檔可以輔助我們更好的進(jìn)行漏洞挖掘,而Swagger UI頁面中一般會包含大量的測試接口,在進(jìn)行上述漏洞總結(jié)點(diǎn)的安全測試時,還可以嘗試組合漏洞的利用,只要心(dan)夠(zi)細(xì)(da),從接口測試到getshell、內(nèi)網(wǎng)漫游也未嘗不可。?
總結(jié)
以上是生活随笔為你收集整理的接口文档下的渗透测试(Swagger)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 两个list获取交集,并集
- 下一篇: 模拟攻击者利用“域前置”(Domain