代码审计 | 发现项目的swagger-ui未授权访问

:2024年09月06日 进击的HACK
分享到:

经常渗透测试的师傅都知道,在目录扫描的时候经常能发现未授权的swagger-ui.html和api-docs。

声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!

0x01 简述

经常渗透测试的师傅都知道,在目录扫描的时候经常能发现未授权的swagger-ui.html和api-docs。

该接口会清晰的列出项目中存在的api,并贴心的放出需要的参数,方便后续进行未授权测试或者构造恶意参数值。

那么这个api-docs是怎么形成的呢?怎么在白盒审计阶段提前将它扼杀掉,或者开发要怎么修复这个呢?

下面将会详细说明这个问题。

0x02 项目配置Swagger2

要使用swagger-ui,Java项目需要引入swagger2依赖包。

包括但不限于以下类型

io.springfox

springfox-swagger2

2.9.2


io.springfox

springfox-swagger-ui

2.9.2


或者

io.springfox

springfox-boot-starter


io.swagger

swagger-models

1.6.2


它们都有一个共同点,就是包含关键词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认证

需要引入新的依赖包

com.github.xiaoymin

swagger-bootstrap-ui

1.9.6


在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

[我要纠错]
文:王振袢&发表于江苏
关键词: 声明 文中 涉及 技术 思路

来源:本文内容搜集或转自各大网络平台,并已注明来源、出处,如果转载侵犯您的版权或非授权发布,请联系小编,我们会及时审核处理。
声明:江苏教育黄页对文中观点保持中立,对所包含内容的准确性、可靠性或者完整性不提供任何明示或暗示的保证,不对文章观点负责,仅作分享之用,文章版权及插图属于原作者。

点个赞
0
踩一脚
0

您在阅读:代码审计 | 发现项目的swagger-ui未授权访问

Copyright©2013-2024 JSedu114 All Rights Reserved. 江苏教育信息综合发布查询平台保留所有权利

苏公网安备32010402000125 苏ICP备14051488号-3技术支持:南京博盛蓝睿网络科技有限公司

南京思必达教育科技有限公司版权所有   百度统计

最热文章
最新文章
  • 卡尔蔡司镜片优惠店,镜片价格低
  • 苹果原装手机壳