黑帽SEO
免费发布泛目录 蜘蛛池 黑帽SEO工具

WebShell免杀之JSP

  其他类型的webshell容易免杀的一个主要原因是有eval函数,能够把我们的加密几层后的payload进行解密然后用eval执行,从而绕过杀软的检测。

  然而由于JSP的语法没有所谓的eval函数,不像php等语言那么灵活,变形困难,所以JSP的免杀马比较少,相关的文章也比较少。

  能找到的公开文章中,LandGrey大佬的这一篇文章写的非常好,利用Java反射机制和Java类加载机制来构造免杀的JSP后门。

  但是文章中部分细节仅为一笔带过,对于没有学过JAVA的同学不太友好。并且这篇文章写在冰蝎出现之前,没有对冰蝎JSPshell免杀的相关内容。所以今天这篇文章就跟大家一起分享一下JSP的免杀姿势。

  在JSP页面中嵌入java代码,首先要了解一下JSP标签的基本知识。

  ASCII

  HEX

  BASE64

  image

  首先要知道为什么免杀需要用到类反射

  类反射可以把我们想要调用的函数或者类的名字放到一个字符串的位置。

  此时也就相当于我们实现了php中的变量函数,就可以利用base64编码或者hex编码等来混淆关键函数。

  例子参考大白话说Java反射

  使用反射调用对象方法的步骤

  如果没有构造函数的情况下就更简单了

  image

  从图中可以看到,我们用类反射调用了Apple类中的setPrice跟getPrice方法。

  其实也可以压缩一下写成一行的形式

  不过当然正常人是不会这么写的。

  在LandGrey大佬的文章中提到的类加载的意思是将获得Class对象的方式由

  Class rt=Class.forName(“java.lang.Runtime”); 改成

  Class rt=ClassLoader.getSystemClassLoader().loadClass(“java.lang.Runtime”);的形式。

  但是冰蝎作者在利用动态二进制加密实现新型一句话木马之Java篇中对于类加载是直接传送二进制字节码。

  这也是为什么冰蝎能够实现不到1KB的JSP一句话的原因:冰蝎可以做到动态解析二进制class字节码。

  学过java的同学应该都知道,java执行代码的时候都要先编译生成.class字节码文件,才能被jvm所执行。

  那么也就是说,如果我们能够实现任意class文件的加载,也就相当于实现了php中的eval函数。

  我们就用冰蝎中的例子

  首先写一个命令执行的类,调一个calc,但是我们不写主函数,也就是说我们先不让他运行。

  在项目里生成之后,在out目录下可以看到编译好的二进制class文件。

  image

  然后把它base64,保存到文件里,去除多余的换行

  image

  接着生成一个loader类,用于加载我们的class文件

  运行后成功调用计算器。

  image

  我们用类加载的方式成功执行了系统命令。

  JAVA执行系统命令的核心就是

  image

  经过二分法分析,发现特征码是在这一句。不知道什么是二分法分析的看我以前的两篇webshell免杀文章。

  然后发现D盾对于JSP中只要有exec就会报一级。

  imageWebShell免杀之JSP

  那么我们就可以利用类反射的方法来隐藏掉exec函数。

  可以看到成功执行了whoami命令

  image

  那么接下来就是把他放到jsp里面。

  这时候就可以两个都免杀了

  image

  image

  其实还有很多方式值得去探索,就比如命令执行一句话那里。

  我们可以在shell里只放类加载函数,而不含具体的payload。

  然后写一个命令类,类里接收一个String类型的参数,作为所要执行的cmd语句。然后把它编译成二进制class,通过GET型或者POST型传过去。

  其中cmd参数也从GET传入,经过shell发送到命令执行类中,就相当于实现了php中形如

  的回调函数后门。

  其中有一个师傅已经实现了菜刀的远程加载类,文章地址:http://p2j.cn/?p=1627

  不过所有的jar包都放在作者的博客上,也就是说每个shell都会先访问他的博客,还是建议自己搭建。

  套路都是差不多的,自己多动手,想一想,你肯定能做的比我更好。

未经允许不得转载:黑帽SEO-实战SEO技术培训、泛目录站群、蜘蛛池、流量技术教程 » WebShell免杀之JSP
分享到: 更多 (0)

黑帽SEO-实战SEO技术培训、泛目录站群、蜘蛛池、流量技术教程

不做韭菜坚决不做韭菜