关于<旧文系列>
<旧文系列>系列是笔者将以前发到其他地方的技术文章,挑选其中一些值得保留的,迁移到当前博客来。
文章首发于奇安信攻防社区:
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

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

被折叠的 条评论
为什么被折叠?



