java base64获取文件名_致远 OA 变种 BASE64 算法的加解密方法

本文介绍了致远OA中一个RCE漏洞的背景,重点分析了一个Base64算法的变种,该变种用于加密接口参数。作者通过源码分析和解密过程,揭示了该算法的工作原理,并提供了变种Base64与标准Base64之间的转换脚本。文章还讨论了利用该变种Base64的加密特性,使得在仅知密文情况下难以进行映射表爆破的情况。
摘要由CSDN通过智能技术生成

作者:kk

本文为作者投稿,Seebug Paper 期待你的分享,凡经采用即有礼品相送!

投稿邮箱:paper@seebug.org

在几天前,我就收到致远OA的RCE漏洞部分详情,但是并没有引起重视。当时获得的POC部分只包括了任意文件上传的数据包,但并没有其余详情,且数据包中重要数据都被编码过了。原以为又是一次恶作剧。没想到啊。 由于漏洞本身没什么好讲的,现在让我们来看看这个POC中涉及的编码算法,看看原始的POC中的编码数据是做什么的。 首先漏洞位置在htmlofficeservlet,通过一段时间的寻找我找到了一份旧的Seeyon OA的源码: https://github.com/zhf839428881/seeyon_v3x/

其中这个接口的实现在HtmlOfficeServlet.java文件内。

通过这份代码我们知道接口对参数的获取使用的是DBstep.iMsgServer2000.GetMsgByName方法。 关键代码:

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    
    CurrentUserToSeeyonApp.set(request.getSession());

    ApplicationContext ctx = (ApplicationContext) getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
    HandWriteManager handWriteManager = (HandWriteManager) ctx.getBean("handWriteManager");
    HtmlHandWriteManager htmlHandWriteManager = (HtmlHandWriteManager) ctx.getBean("htmlHandWriteManager");

    DBstep.iMsgServer2000 msgObj = new DBstep.iMsgServer2000();
    try {
    
        handWriteManager.readVariant(request, msgObj);

        msgObj.SetMsgByName("CLIENTIP", request.getRemoteAddr());

        String option = msgObj.GetMsgByName("OPTION");

        if ("LOADFILE".equalsIgnoreCase(option)) {
    
            handWriteManager.LoadFile(msgObj);
        }           
        else if("LOADSIGNATURE".equalsIgnoreCase(option))
        {
    
            ht
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值