https://img2024.cnblogs.com/blog/3305226/202503/3305226-20250331155133325-143341361.jpg

CNVD 实战笔记:通过 Java 代码审计挖掘 SSRF 漏洞

CNVD 实战笔记:通过 Java 代码审计挖掘 SSRF 漏洞

首先通过搜索关键词来寻找cms中ssrf的使用

/**
 * 审计的函数
 * 1. URL
 * 2. HttpClient
 * 3. OkHttpClient
 * 4. HttpURLConnection
 * 5. Socket
 * 6. ImageIO
 * 7. DriverManager.getConnection
 * 8. SimpleDriverDataSource.getConnection
 */

当搜索到OkHttpClient时发现了存在一个工具类调用封装了okhttp3 ,不过只主要支持http协议。接着向上找调用查看url变量是否可控

image-20251011063008623

这里就只记录发现漏洞的一条线,实战需要每条都寻找,向上寻找到了fetchRemoteFile调用

image-20251011081354076

一直找到了路由处,发现有利用的可能。查看权限校验这还是一个未授权的接口,权限具体过程就不细说了

image-20251011081511653

可以看到此处逻辑,会获取type参数,然后isExternalUrl校验这是否是一个外部url,如果是外部url直接报错

image-20251011081550384

校验的逻辑非常简单,判断是否以http://,https://开头,相当于做了过滤

image-20251011081836920

通过校验后便会在url后面加上拼接上/index.json作为参数传入。我们先接着看后面的代码

public static JSON fetchRemoteJson(String fileUrl) throws RebuildException {
    String content = fetchRemoteFile(fileUrl);
    if (JSONUtils.wellFormat(content)) {
        return (JSON) JSON.parse(content);
    }
    throw new RebuildException("Unable to read data from RB-Store");
}

接着来看fetchRemoteFile,判断fileUrl是不是以http开头,如果是以http开头则直接调用get获取其内容,如果不是http开头,会拼接一些乱七八糟的url导致无法利用。可是前面对外部的url已经进行了校验。

不过在这停留想了一段时间后发现了,这里判断是的http,但是上面校验的是http://,https://。这就导致了前面的校验和后面的判断不统一(很多漏洞的原理),存在有绕过的可能,于是我便尝试以http:/,https:/行动

image-20251011082144007

写了测试类后发现是可以办到的,okhttp3库能够解析http:/ ,https:/

image-20251011082907603

接着还需要解决url后面拼接/index.json,这个的处理方法其实还是蛮多的,这里选择用参数抵消掉后面拼接的index.json让其成为一个无效参数带过去即可

例如:http://10.82.189.40:18080/setup/load-index?type=http:/127.0.0.1:80/2.txt?x=

可以看到成功的获取了我放在服务器的内容,但由于之后会进行json解析导致只有json格式才会回显。相当于就是无回显ssrf,能让其访问任意的http资源,但是无回显,危害程度就比较低了。不过算是一次实战经验。

image-20251011083402322

posted @ 2025-10-11 08:40  kudo4869  阅读(32)  评论(0)    收藏  举报