經(jīng)常滲透測試的師傅都知道,在目錄掃描的時候經(jīng)常能發(fā)現(xiàn)未授權(quán)的swagger-ui.html和api-docs。
聲明:文中所涉及的技術(shù)、思路和工具僅供以安全為目的的學習交流使用,任何人不得將其用于非法用途給予盈利等目的,否則后果自行承擔!
0x01 簡述
經(jīng)常滲透測試的師傅都知道,在目錄掃描的時候經(jīng)常能發(fā)現(xiàn)未授權(quán)的swagger-ui.html和api-docs。
該接口會清晰的列出項目中存在的api,并貼心的放出需要的參數(shù),方便后續(xù)進行未授權(quán)測試或者構(gòu)造惡意參數(shù)值。
那么這個api-docs是怎么形成的呢?怎么在白盒審計階段提前將它扼殺掉,或者開發(fā)要怎么修復這個呢?
下面將會詳細說明這個問題。
0x02 項目配置Swagger2
要使用swagger-ui,Java項目需要引入swagger2依賴包。
包括但不限于以下類型
或者
它們都有一個共同點,就是包含關(guān)鍵詞swagger,這就可以正則匹配關(guān)鍵詞判斷Java是否使用依賴包。
單純引入依賴是不夠的,項目還需要進行如下配置。
創(chuàng)建一個java文件 Swagger2Configuration
package org.example.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
@Configuration
@EnableSwagger2
public class Swagger2Configuration {
/**
* 配置 Swagger 2
* 注冊一個 Bean 屬性
* enable():是否啟用 Swagger,啟用后才能在瀏覽器中進行訪問
* groupName():用于配置 API 文檔的分組
*/
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(true) // 是否開啟swagger
.groupName("v1")
.select()
// 過濾路徑
//.paths(PathSelectors.ant())
// 指定掃描的包
.apis(RequestHandlerSelectors.basePackage("org.example.controller"))
.build();
}
private ApiInfo apiInfo() {
/*作者信息*/
Contact contact = new Contact("admin", "https://hello.world", "xxxx@qq.com");
return new ApiInfo(
"Swagger 測試接口文檔",
"Spring Boot 集成 Swagger 測試接口文檔",
"v1.0",
"https://hello.world",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList()
);
}
}
配置完畢,然后啟動項目,未授權(quán)訪問 http://xxx.com:port/swagger-ui.html#/
http://192.168.23.1:7321/v2/api-docs?group=v1
這就是我們在滲透過程遇到的api-docs未授權(quán)訪問。
0x03 如何修復swagger2未授權(quán)訪問
Swagger權(quán)限控制 https://blog.csdn.net/qq_38530648/article/details/121715440
配置enable(false)
當然還有一種更優(yōu)雅的寫法,通過注解賦值
在application.properties配置true or false
配置false后訪問api-docs,swagger已經(jīng)關(guān)閉
如果開發(fā)需要使用swagger,可以采用下面的辦法。
配置swagger認證
需要引入新的依賴包
在swagger配置類上添加注解 @EnableSwaggerBootstrapUI
在appliction.properties中添加如下語句:
swagger.basic.enable=true
swagger.basic.username=admin
swagger.basic.password=admin123
swagger.production=false
swagger2.enabled=true
切記swagger.production 不可設置為true,否則將屏蔽所有資源
https://blog.csdn.net/luChenH/article/details/96598433
配置完畢再次訪問界面
不會影響正常api的使用
http://192.168.23.1:7321/xtreamvul/
輸入密碼后可以正常使用 admin/admin123
配置開發(fā)環(huán)境,測試環(huán)境,生產(chǎn)環(huán)境的切換
Spring注解@Profile實現(xiàn)開發(fā)環(huán)境,測試環(huán)境,生產(chǎn)環(huán)境的切換
https://mp.weixin.qq.com/s/9LGjY3oEZPkmQDTjD0QSGw
只要在開發(fā)環(huán)境配置 enable的值是false就可以了。
0x04 總結(jié)
在白盒審計中,我們關(guān)注是否引入swagger的依賴包,關(guān)鍵詞為swagger。
然后看他的swagger配置類的enable值是true還是false。
原諒來源:https://mp.weixin.qq.com/s/2rq_jTN7SyCFHyLNufJSCA
來源:本文內(nèi)容搜集或轉(zhuǎn)自各大網(wǎng)絡平臺,并已注明來源、出處,如果轉(zhuǎn)載侵犯您的版權(quán)或非授權(quán)發(fā)布,請聯(lián)系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內(nèi)容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權(quán)及插圖屬于原作者。
Copyright©2013-2025 ?JSedu114 All Rights Reserved. 江蘇教育信息綜合發(fā)布查詢平臺保留所有權(quán)利
蘇公網(wǎng)安備32010402000125
蘇ICP備14051488號-3技術(shù)支持:南京博盛藍睿網(wǎng)絡科技有限公司
南京思必達教育科技有限公司版權(quán)所有 百度統(tǒng)計