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