本篇文章给大家谈谈深入解析:JSP WebShell免杀技术揭秘,以及对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
前言
其他类型的webshell容易躲避反病毒的主要原因之一是它们具有eval函数,可以将我们的payload经过几层加密后解密,然后用eval执行,从而绕过检测防病毒软件。 但由于JSP的语法没有所谓的eval函数,不像PHP等语言那么灵活,而且很难变形,所以针对JSP的反杀工具相对较少,有相关文章也比较少。 在能找到的公开文章中,LandGrey的这篇文章非常好。它利用Java反射机制和Java类加载机制构建反病毒JSP后门。 不过文中的一些细节只是简单提及,对于没有学过JAVA的同学来说不太友好。而且这篇文章是在Ice Scorpion出现之前写的,并没有关于Ice Scorpion JSP shell的相关内容。那么今天这篇文章就给大家分享一下JSP的防杀姿势。基础知识
JSP标签
要在JSP页面中嵌入java代码,您必须首先了解JSP标签的基本知识。 %@ %页面命令,设置页面属性和功能信息% %java代码片段,此处不能声明方法%! %java代码声明,声明当前页面的全局变量或方法%=%Java表达式JSP中的字符串混淆方式
010- 1010 String a=new String(new byte[] { 121, 122, 100, 100, 77, 114, 54 } ); System.out.println("ASCII:"+a);ASCII
导入javax.xml.bind.DatatypeConverter; String b=new String(DatatypeConverter.parseHexBinary("797a64644d7236")); System.out.println("HEX:"+b);HEX
导入sun.misc.BASE64Decoder; String c=new String(new BASE64Decoder().decodeBuffer("eXpkZE1yNg==")); System.out.println("BASE64:"+c);imageBASE64
首先我们要知道为什么需要使用类反射来避免被杀类反射可以把我们想要调用的函数或者类的名字放到一个字符串的位置。此时就相当于我们在php中实现了变量函数,我们可以使用base64编码或者hex编码来混淆关键函数。 示例请参考白话中的Java Reflection类反射
类clz=Class.forName("test.Apple"); //获取类的Class对象实例 构造函数appleConstructor=clz.getConstructor(); //根据Class对象实例获取Constructor对象 对象appleObj=appleConstructor.newInstance(); //使用Constructor对象的newInstance方法获取反射类对象 方法setPriceMethod=clz.getMethod("setPrice", int.class); //获取方法的Method对象 setPriceMethod.invoke(appleObj, 14); //如果没有构造函数,使用invoke方法调用方法会更容易 类clz=Class.forName("test.Apple"); //获取类的Class对象实例 对象appleObj=clz.newInstance(); //直接获取clz类的实例化对象 方法setPriceMethod=clz.getMethod("setPrice", int.class); //获取方法的Method对象 setPriceMethod.invoke(appleObj, 14); //使用invoke方法调用方法镜像。从图中可以看到,我们使用类反射来调用Apple类中的setPrice和getPrice方法。 其实你也可以压缩一下,写在一行里。 Class.forName("test.Apple").getMethod("setPrice", int.class).invoke(Class.forName("test.Apple").newInstance(),20);但一般人当然不会这么写。使用反射调用对象方法的步骤
LandGrey的文章中提到的类加载是指获取Class对象的方式是 类rt=Class.forName("java.lang.Runtime");改为 类rt=ClassLoader.getSystemClassLoader().loadClass("java.lang.Runtime");在形式中。 然而,在Java文章中使用动态二进制加密实现一种新的一句话木马,Bingscorpion的作者直接传输二进制字节码进行类加载。 这也是Ice Scorpion能够实现小于1KB的JSP语句的原因:冰蝎可以做到动态解析二进制class字节码。学过Java的同学应该都知道,Java执行代码时,首先要编译生成一个.class字节码文件,然后才能执行由JVM 读取。实施。 也就是说,如果我们能够加载任意一个class文件,就相当于在PHP中实现了eval函数。 让我们以Ice Scorpion 为例 首先,编写一个用于命令执行的类并调整一个计算,但我们不编写main 函数,这意味着我们还没有让它运行。 封装测试; 导入java.io.IOException; 公共课计算{ @覆盖 公共字符串toString() { 尝试{ Runtime.getRuntime().exec("calc.exe"); } catch (IOException e) { e.printStackTrace(); } 返回“确定”; } }在项目中生成后,可以在out目录下看到编译后的二进制类文件。 图像然后对其进行base64,将其保存到文件中,并删除不必要的换行符 然后图像生成一个加载器类来加载我们的类文件 封装测试; 导入sun.misc.BASE64Decoder; 公共类加载器{ public static class Myloader extends ClassLoader //继承ClassLoader { 公共类get(byte[] b) { return super.defineClass(b, 0, b.length); } } 公共静态无效主(字符串[] args)抛出异常{ 字符串类Str="xxxxx关于深入解析:JSP WebShell免杀技术揭秘和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
【深入解析:JSP WebShell免杀技术揭秘】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
这篇文章讲的是如何利用 JSP 来隐藏 Web Shell 是吗?
有14位网友表示赞同!
感觉最近网络安全越来越注重隐蔽,比如这种“免杀”。
有12位网友表示赞同!
JSP 确实可以用来做很多东西,没想到还能用于Web Shell的攻击!
有8位网友表示赞同!
学习一下这方面的知识总是好的,防范的同时也能了解一下黑客是如何运作的。
有12位网友表示赞同!
这个作者 “yzddMr6” 听起来比较厉害的样子
有9位网友表示赞同!
看标题就感觉很专业啊,对 Web 安全没研究的我有点好奇。
有19位网友表示赞同!
免杀技术真的太可怕了,不知道现在有哪些最新的漏洞可以利用。
有7位网友表示赞同!
这种隐藏技术的学习价值很大,对于网络安全人员来说很有帮助。
有9位网友表示赞同!
希望文章能详细介绍一下 JSP 如何实现 Web Shell 的功能。
有12位网友表示赞同!
我觉得这篇文章应该对开发人员和安全 Researchers 都很有用
有5位网友表示赞同!
感觉这样的技术一旦被滥用后果不可估量,所以学习并掌握这些知识也是为了更好地保护自己。
有8位网友表示赞同!
想知道具体有哪些 JSP 的脚本可以用来构建 Web Shell 啊!
有17位网友表示赞同!
现在网络攻击越来越复杂化,学习防御技巧就显得尤为重要了!
有10位网友表示赞同!
分享这种技术可能会被不负责任的人利用,还是谨慎一些的好吧。
有7位网友表示赞同!
看了文章标题让我想到最近的一些高危漏洞,网络安全 really 是一个永远需要关注的话题!
有14位网友表示赞同!
希望这种技术能够应用在安全防护方面,帮助我们更好地维护互联网安全。
有5位网友表示赞同!
这个 “无杀” 的概念听起来很酷,学习一下这方面的知识可以拓宽眼界。
有15位网友表示赞同!
这种文章应该放在专业的安全网站上比较好,避免误导一些没有经验的人!
有6位网友表示赞同!
对网络安全感兴趣的小伙伴们可以去看看这个文!
有5位网友表示赞同!
相信作者 “yzddMr6” 肯定有丰富的安全知识,期待看到这篇关于 JSP 的文章!
有14位网友表示赞同!