• 博客园Logo
  • 会员
  • 周边
  • 捐助
  • 新闻
  • 博问
  • 闪存
  • 赞助商
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 简洁模式 ... 退出登录
    注册 登录
京亟
很多时候,我们以为面前是大海、是沟壑、是深渊,但是当你越过去回头再看的时候,那不过是溪流、是台阶、是浅滩。 联系方式:jinqiqaq@foxmail.com
博客园    首页    新随笔    联系   管理    订阅  订阅

S2-048

前言

    S2-048漏洞和struts2-struts1-plugin插件有关,该插件用于将Struts1的action也能在struts2上运行,提高兼容性(作用是我猜的~)

正文

    我们先看下这个插件对应的配置文件

可以看到我们访问名为saveGangster的action时,处理它的并不是SaveGangsterAction,而是插件中的一个action类org.apache.struts2.s1.Struts1Action,最后是将SaveGangsterAction类以一个参数的形式传给了Struts1Action。我们看下Struts1Action的内部实现:

可以看到其实还是调用了SaveGangsterAction的exec来处理业务,然后再取出request中的“action_message”属性进行循环放入getText方法中,getText我们之前分析过,里面会只需Ognl表达式。我们只需跟进SaveGangsterAction的exec中看下该属性是否可控就好了:

里面的逻辑其实很简单,就是获取了actionform(可控的)中的name参数后进行字符串拼凑用于生成ActionMessage,然后在addMessages方法中加入到了request属性中

测试一下:

poc用以前的就好了:

${#_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,#cmd='calc',#cmds={'cmd.exe','/c',#cmd},#p=new java.lang.ProcessBuilder(#cmds),#process=#p.start()}

不过感觉这个洞是也是难以批量啊。

参考文章

https://www.freebuf.com/vuls/140410.html

posted @ 2019-05-05 18:06  京亟QAQ  阅读(214)  评论(0)  编辑  收藏  举报
会员力量,点亮园子希望
刷新页面返回顶部
Copyright © 2024 京亟QAQ
Powered by .NET 8.0 on Kubernetes