Java代码审计中的SSRF漏洞深度解析

2025-03-18 1 0

一、SSRF漏洞原理与危害

SSRF(Server-Side Request Forgery)服务端请求伪造漏洞,攻击者通过构造恶意请求使服务端发起非预期的网络请求,可能导致以下风险:

  1. 访问内部敏感系统(如数据库、管理后台)

  2. 端口扫描探测内网服务

  3. 文件协议读取本地文件(file://)

  4. 与其他漏洞形成链式攻击(如XXE+SSRF)

本文从java代码审计的角度去认识ssrf

二、Spring MVC HttpURLConnection 漏洞示例

完整漏洞代码

import org.springframework.web.bind.annotation.*;
import java.net.*;
import java.io.*;

@RestController
public class VulnerableController {

    @GetMapping("/request")
    public String requestUrl(@RequestParam("url") String urlString) throws IOException {
        URL url = new URL(urlString); // 漏洞根源:直接使用未校验的用户输入
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");

        // 读取响应内容
        StringBuilder response = new StringBuilder();
        try (BufferedReader in = new BufferedReader(
                new InputStreamReader(conn.getInputStream()))) {
            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
        }
        return response.toString();
    }
}

漏洞执行流程分析

  1. 攻击入口:攻击者访问 /request?url=http://attacker.com端点

  2. 参数注入urlString参数直接接收用户输入(如 http://192.168.1.1:8080

  3. 建立连接

    • new URL(urlString)未做任何校验即实例化URL对象

    • url.openConnection()根据协议创建实际连接(支持HTTP/HTTPS/FTP等)

  4. 发起请求conn.getInputStream()触发网络请求

  5. 数据泄露:读取响应内容并返回给攻击者

漏洞利用场景

GET /request?url=file:///etc/passwd HTTP/1.1
GET /request?url=http://169.254.169.254/latest/meta-data/ HTTP/1.1  # AWS元数据

三、Apache HttpClient 漏洞示例

完整漏洞代码

import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;

@GetMapping("/apacheRequest")
public String apacheRequest(String url) throws Exception {
    try (CloseableHttpClient client = HttpClients.createDefault()) {
        HttpGet request = new HttpGet(url); // 漏洞点:直接使用用户输入
        try (CloseableHttpResponse response = client.execute(request)) {
            return EntityUtils.toString(response.getEntity());
        }
    }
}

漏洞触发路径

  1. 请求构造HttpGet直接使用未过滤的URL参数

  2. 协议支持:默认支持 http/https/ftp/file等协议

  3. 攻击示例

// 探测Redis服务
client.execute(new HttpGet("http://127.0.0.1:6379"))

// 读取本地文件
client.execute(new HttpGet("file:///C:/Windows/win.ini"))

四、OkHttpClient 漏洞示例

完整漏洞代码

import okhttp3.*;

@GetMapping("/okHttpRequest")
public String okHttpRequest(String inputUrl) throws IOException {
    OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder()
        .url(inputUrl) // 漏洞核心:未校验的URL输入
        .build();

    try (Response response = client.newCall(request).execute()) {
        return response.body().string();
    }
}

漏洞利用特征

  1. 协议处理:支持 http/https/ftp/file/jar等协议

  2. 绕过技巧

// 使用302跳转绕过白名单检测
.url("http://safe.com/redirect?target=http://internal") 

// 使用非标准端口
.url

4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

AI助力Java代码审计 | SQL注入篇
Java反序列化-CC链,从0到0
针对Fortinet防火墙的勒索软件攻击报告揭示了可能的防御措施
[CISSP] [1] 访问控制入侵检测与网络防护
恶意PyPI包窃取云令牌,移除前下载量超1.4万次
信息收集-基础 | 端口扫描-WAF识别-蜜罐识别技术

发布评论