[旧文系列] Struts2历史高危漏洞系列-part6:S2-059/S2-061

本文详细分析了Struts2框架中的S2-059和S2-061两个高危漏洞,包括漏洞原理、复现过程、PoC代码及修复措施。揭示了OGNL表达式二次解析带来的风险及如何通过沙盒机制进行防御。

关于<旧文系列>

<旧文系列>系列是笔者将以前发到其他地方的技术文章,挑选其中一些值得保留的,迁移到当前博客来。

文章首发于奇安信攻防社区:
https://forum.butian.net/share/601
https://forum.butian.net/share/602
https://forum.butian.net/share/603
时间:2021-08-31


前言

尽管现在struts2用的越来越少了,但对于漏洞研究人员来说,感兴趣的是漏洞的成因和漏洞的修复方式,因此还是有很大的学习价值的。毕竟Struts2作为一个很经典的MVC框架,无论对涉及到的框架知识,还是对过去多年出现的高危漏洞的原理进行学习,都会对之后学习和审计其他同类框架很有帮助。

传送门:
[旧文系列] Struts2历史高危漏洞系列-part1:S2-001/S2-003/S2-005
[旧文系列] Struts2历史高危漏洞系列-part2:S2-007/S2-008/S2-009
[旧文系列] Struts2历史高危漏洞系列-part3:S2-012/S2-013/S2-015
[旧文系列] Struts2历史高危漏洞系列-part4:S2-016/S2-032/S2-045
[旧文系列] Struts2历史高危漏洞系列-part5:S2-052/S2-053/S2-057


S2-059

官方漏洞公告:

https://cwiki.apache.org/confluence/display/WW/S2-059

影响版本:Struts 2.0.0 - Struts 2.5.20

漏洞复现与分析

从漏洞公告可获悉,该漏洞的场景是:当Struts2的标签属性值引用了action对象的参数值时,便会出现OGNL表达式的二次解析,从而产生RCE风险。

注:虽然官方漏洞公告里说该漏洞影响到2.5.20版本,但实际上公开的用于2.5.16版本的命令执行的PoC在2.5.20版本则失效。原因后面会说到。

下面使用Struts2 2.5.16版本进行复现、分析和调试。构造一个符合条件的应用,关键代码如下:

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>S2-059 demo</title>
</head>
<body>
<s:a id="%{id}">your input id: ${id}
    <br>has ben evaluated again in id attribute
</s:a>
</body>
</html>

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值