• 当前位置: 首 页 > 教育百科 > 学历/技能 > 正文

    代码审计 | 发现项目的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
    猜您喜欢
    最热文章

    暂不支持手机端,请登录电脑端访问

    正在加载验证码......

    请先完成验证