经常渗透测试的师傅都知道,在目录扫描的时候经常能发现未授权的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技术支持:南京博盛蓝睿网络科技有限公司
南京思必达教育科技有限公司版权所有 百度统计