一次眼熟的webshell混淆探索(二)

admin 2023年12月15日01:06:35评论52 views字数 1716阅读5分43秒阅读模式

今年hvv的事了,能有2也是可以,发发...

工具解反反编译

工具链接如下,老外写的可以识别混淆

https://github.com/java-deobfuscator/deobfuscator

点击下载jar包

一次眼熟的webshell混淆探索(二)


https://github.com/java-deobfuscator/deobfuscator-gui

点击下载gui

一次眼熟的webshell混淆探索(二)

和上面的jar包放在一个目录下,双击gui打开。

一次眼熟的webshell混淆探索(二)

对拿到的恶意样本进行检测混淆测试,这个工具只支持jar输入,但是会把里面的class都检测混淆一遍,所以这里把恶意class 压缩到zip里面,改成jar后缀就好了。

一次眼熟的webshell混淆探索(二)

一次眼熟的webshell混淆探索(二)

选detect 检测 检测到加密算法是zelix

一次眼熟的webshell混淆探索(二)

把zelix混淆都加进去

然后选DebugRulesAnalyzer 或者 DeleteUselessClasses 点击run 解混淆 生成一个out.jar 解压打开得到class

这是攻击者混淆后的 a() 反编译不出来

一次眼熟的webshell混淆探索(二)

解混淆以后的 a()函数都被成功反编译出来了

一次眼熟的webshell混淆探索(二)

可以看到密钥就是k() 函数的值

一次眼熟的webshell混淆探索(二)

一次眼熟的webshell混淆探索(二)

动态调试解混淆

这里要模仿客户的web环境,可以多准备几个版本的tomcat或者其他中间件

这里用maven 和tomcat 搭建一个debug环境

这里写一个servlet加载类

import javax.servlet.ServletException;  import javax.servlet.annotation.WebServlet;  import javax.servlet.http.HttpServlet;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse;  import java.io.IOException;  import java.nio.file.Files;  import java.nio.file.Paths;  import java.util.Scanner;    @WebServlet(name = "index",value = "/hello")  public class MyServlet extends HttpServlet {      @Override      protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {          MyClassLoader myClassLoader=new MyClassLoader();          byte[] bytes = Files.readAllBytes(Paths.get("todo.class"));          Class aClass = myClassLoader.defineClass(bytes);             try {            Object o = aClass.newInstance();          } catch (InstantiationException e) {              e.printStackTrace();          } catch (IllegalAccessException e) {              e.printStackTrace();          }         new Scanner(System.in).nextLine();          super.doGet(req, resp);      }  }      class MyClassLoader extends ClassLoader{      public Class defineClass(byte[] var1) {          return super.defineClass(var1, 0, var1.length);      }  }


 先给newInstance打断点

一次眼熟的webshell混淆探索(二)

断到以后再去给defineClass打断点 拿到想要加载的byte,总之这些个混淆的东西最后都是要去触发类加载的。

一次眼熟的webshell混淆探索(二)

b 里面就是要加载的类  这里直接  new一个 保存下来即可

new FileOutputStream("1234.class").write(b)

一次眼熟的webshell混淆探索(二)

一次眼熟的webshell混淆探索(二)

一次眼熟的webshell混淆探索(二)

成功解开拿到webshell

一次眼熟的webshell混淆探索(二)


最后,感谢一起度过今年hvv的L0ne1y

原文始发于微信公众号(FXDSecurity):一次眼熟的webshell混淆探索(二)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月15日01:06:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一次眼熟的webshell混淆探索(二)https://cn-sec.com/archives/2301144.html

发表评论

匿名网友 填写信息