首页 > 其他分享 >SSRF漏洞修复

SSRF漏洞修复

时间:2024-11-15 16:47:01浏览次数:3  
标签:domain return 修复 SSRF URL 漏洞 import public String

介绍

SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种有攻击者构造形成由服务器端发起请求的一个安全漏洞。攻击者可以利用该漏洞服务器端应用程序向攻击者选择的任意域发出HTTP请求。

简单来说两个地址A,B,两个网址都在同一个服务器下,用户只有访问A的权限,通过服务器伪造命令,利用A的权限登录B。

危害

  • 对服务器所在内网或本地进行端口扫描,获取到服务的banner信息

  • 攻击运行在内网或本地的应用程序

  • 对内网web应用进行指纹识别,通过访问默认文件实现

  • 攻击内外网的web应用,使用get参数实现struts2,sql注入等。

  • 下载内网资源,利用file协议读取本地文件。

  • 利用Redis未授权访问,HTTP CRLF注入达到getshell

修复

通过配置白名单修复问题

//校验过程
public boolean ssrfFilter(String externalUrl) throws MalformedURLException {
​
        URL url = new URL(externalUrl);
        String domain = url.getHost();
        if (!domainFilter(domain)){
            return false;
        }
        String secondaryDomain = getSecondaryDomain(domain);
        //从配置或者redis中获取白名单
        List<String> whiteList = new ArrayList<>();
   
​
        for (Iterator<String> it = whiteList.iterator(); it.hasNext();) {
            String value = it.next();
            if(secondaryDomain.equals(value)){
                return true;
            }
        }
        return false;
    }
​
    private static String getSecondaryDomain(String domain) {
        String[] domains = domain.split("\\.");
        return domains[domains.length - 2] + "." + domains[domains.length - 1];
    }
​
//域名有效字符校验,防止使用反斜线等特殊字符进行绕过
    private static boolean domainFilter(String domain) {
        String regex = "[^a-zA-Z0-9\\.-]";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(domain);
        return !matcher.find();
    }
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
​
public class SSRFFilter implements Filter {
​
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        
    }
​
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
​
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;
​
        // 检查所有请求参数
        Enumeration<String> parameterNames = httpRequest.getParameterNames();
        while (parameterNames.hasMoreElements()) {
            String parameterName = parameterNames.nextElement();
            String[] parameterValues = httpRequest.getParameterValues(parameterName);
​
            for (String parameterValue : parameterValues) {
                if (isPotentialUrl(parameterValue)) {
                    if (!ssrfFilter(parameterValue)) {
                        // 拒绝访问并返回错误响应
                        httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "URL is not allowed.");
                        return;
                    }
                }
            }
        }
​
        // 如果URL在白名单中或不是URL参数,则继续处理请求
        chain.doFilter(request, response);
    }
​
    //URL检测
    private boolean isPotentialUrl(String input) {
        return input.matches("^(https?|ftp):\/\/([a-zA-Z0-9-\.]+\.[a-zA-Z]{2,6})(:[0-9]+)?(\/[a-zA-Z0-9_\-\/]*)*(\?[a-zA-Z0-9_&=\-%]*)?(#[a-zA-Z0-9_\-]*)?$");
    }
​
    @Override
    public void destroy() {
        
    }
}
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
​
@Configuration
public class FilterConfig {
​
    @Bean
    public FilterRegistrationBean<SSRFFilter> ssrfFilter() {
        FilterRegistrationBean<SSRFFilter> registrationBean = new FilterRegistrationBean<>();
​
        registrationBean.setFilter(new SSRFFilter());
        registrationBean.addUrlPatterns("/*");
​
        return registrationBean;
    }
}

标签:domain,return,修复,SSRF,URL,漏洞,import,public,String
From: https://blog.csdn.net/m0_52796363/article/details/143803190

相关文章

  • 微信公众号商家收银台小程序系统存在前台SQL注入漏洞
    免责声明:本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在使用本......
  • 本地权限提升漏洞分析
    7.16版本之前的OracleVirtualBox容易受到通过符号链接的影响,导致任意文件删除和任意文件移动。当我们可以进行任意文件删除和任意文件移动时,我们就可以利用windows的机制使用该漏洞进行提权。本篇为CVE-2024-21111本地提权漏洞的漏洞分析。前言本篇为CVE-2024-21111......
  • 【安全工具】Web漏洞扫描十大工具(非常详细),零基础入门到精通,看这一篇就够了
    文章目录漏洞扫描十大工具AwVSNexposeOpenVASWebScarabWebInspectWhisker/libwhiskerBurpsuiteWiktoWatchfireAppScanN-StealthNmapp0fISSNessusXprobe文末福利漏洞扫描十大工具AwVSAwVS是一款知名的Web网络漏洞扫描工具,它通过网络爬虫测试你的网站安全,检测流行......
  • 如何修复苹果手机上的绿屏 - 快速简便的解决方案
    今天,我们正在解决一个困扰很多苹果手机用户的问题——苹果手机绿屏!如果你遇到过这种情况或认识遇到这种情况的人,请继续关注,因为今天我们将深入探讨如何通过几种简单的方法修复苹果手机上的绿屏。方法1:强制重启手机首先要尝试的是简单的强制重启苹果手机。让我们看看这是否......
  • 1day未公开EyouCMS文件包含RCE漏洞 新接口
     0x01产品概述    1day未公开EyouCMS文件包含RCE漏洞 新接口用描述管理和发布于一体的智能化平台,广泛应用于新闻、媒体和各类内容创作机构。该平台支持多终端、多渠道的内容分发,具备素材管理、编辑加工、智能审核等功能,通过AI技术辅助内容创作与数据分析,提升内容......
  • #渗透测试#SRC漏洞挖掘#蓝队基础之网络七层杀伤链04 终章
    网络杀伤链模型(KillChainModel)是一种用于描述和分析网络攻击各个阶段的框架。这个模型最初由洛克希德·马丁公司提出,用于帮助企业和组织识别和防御网络攻击。网络杀伤链模型将网络攻击过程分解为多个阶段,每个阶段都有特定的活动和目标。通过理解和监控这些阶段,防御者可以更有......
  • #渗透测试#SRC漏洞挖掘#蓝队基础之网络七层杀伤链03
    免责声明本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。                            ......
  • 【linux漏洞】环境搭建
    第一步:设置环境1.1安装所需工具在开始之前,确保你的Linux机器上安装了以下工具:GCC(GNU编译器集合):用于编译我们的易受攻击程序。GDB(GNU调试器):用于调试程序和检查内存。Python:用于制作payload。pwntools(可选):一个帮助开发漏洞利用的Python库(后期有用)。你可......
  • openssh 漏洞修复 openssl升级 OpenSSH_9.8p1麒麟系统
    第一步:准备好要升级的包下图所示使用命令:yuminstall*.rpm或rpm-ivh*rpm 如果使用yuminstall*.rpm安装不了,在使用rpm-ivh*rpm提示已有旧的版本可以使用  rpm-Uvh*.rpm可以替换安装,根据不通的系统有可能安装后会重启不成功, 所以需要使用:sudosystemctls......
  • 月薪从5K到13.2W,白帽子黑客到底有多赚钱?一文带你如何靠挖漏洞赚取海量收益
    大家好,我是程序员晓晓近年来,由于技术发展和国家支持,信息安全行业正处于一个发展迅猛的时期。有越来越多有技术、有想法的白帽子参与到维护互联网安全的行动中去。大数据时代,信息安全的使命更值得我们深思和探讨。不掌握一门安全技术,不会Web攻防,还配拥有13.2W的月薪吗?接......