經常滲透測試的師傅都知道,在目錄掃描的時候經常能發現未授權的swagger-ui.html和api-docs。
聲明:文中所涉及的技術、思路和工具僅供以安全為目的的學習交流使用,任何人不得將其用于非法用途給予盈利等目的,否則后果自行承擔!
0x01 簡述
經常滲透測試的師傅都知道,在目錄掃描的時候經常能發現未授權的swagger-ui.html和api-docs。
該接口會清晰的列出項目中存在的api,并貼心的放出需要的參數,方便后續進行未授權測試或者構造惡意參數值。
那么這個api-docs是怎么形成的呢?怎么在白盒審計階段提前將它扼殺掉,或者開發要怎么修復這個呢?
下面將會詳細說明這個問題。
0x02 項目配置Swagger2
要使用swagger-ui,Java項目需要引入swagger2依賴包。
包括但不限于以下類型
或者
它們都有一個共同點,就是包含關鍵詞swagger,這就可以正則匹配關鍵詞判斷Java是否使用依賴包。
單純引入依賴是不夠的,項目還需要進行如下配置。
創建一個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()
);
}
}
配置完畢,然后啟動項目,未授權訪問 http://xxx.com:port/swagger-ui.html#/
http://192.168.23.1:7321/v2/api-docs?group=v1
這就是我們在滲透過程遇到的api-docs未授權訪問。
0x03 如何修復swagger2未授權訪問
Swagger權限控制 https://blog.csdn.net/qq_38530648/article/details/121715440
配置enable(false)
當然還有一種更優雅的寫法,通過注解賦值
在application.properties配置true or false
配置false后訪問api-docs,swagger已經關閉
如果開發需要使用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
配置開發環境,測試環境,生產環境的切換
Spring注解@Profile實現開發環境,測試環境,生產環境的切換
https://mp.weixin.qq.com/s/9LGjY3oEZPkmQDTjD0QSGw
只要在開發環境配置 enable的值是false就可以了。
0x04 總結
在白盒審計中,我們關注是否引入swagger的依賴包,關鍵詞為swagger。
然后看他的swagger配置類的enable值是true還是false。
原諒來源:https://mp.weixin.qq.com/s/2rq_jTN7SyCFHyLNufJSCA
來源:本文內容搜集或轉自各大網絡平臺,并已注明來源、出處,如果轉載侵犯您的版權或非授權發布,請聯系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權及插圖屬于原作者。
Copyright?2013-2024 JSedu114 All Rights Reserved. 江蘇教育信息綜合發布查詢平臺保留所有權利
蘇公網安備32010402000125
蘇ICP備14051488號-3技術支持:南京博盛藍睿網絡科技有限公司
南京思必達教育科技有限公司版權所有 百度統計