浅析P牛版CC1链

admin 2022年3月23日20:12:30评论3 views字数 1130阅读3分46秒阅读模式

浅析P牛版CC1链

扫一扫关注公众号,长期致力于安全研究浅析P牛版CC1链

0x01 前言

在p牛安全漫谈的第九篇中,p牛贴出了简化版的CC1链。为什么要有简化版呢?

浅析P牛版CC1链

0x02 简化版CC1链分析

        是不是看起来非常的简单,短短六行代码即可。
        Transformer[] transformers = new Transformer[]{        new ConstantTransformer(Runtime.getRuntime()),        new InvokerTransformer("exec"new Class[]{String.class}, new Object[]{"calc"})};        Transformer transformer = new ChainedTransformer(transformers);        Map innerMap = new HashMap();        Map outerMap = TransformedMap.decorate(innerMap,null,transformer);        outerMap.put("test","xxxxx");
       首先来分析ConstantTransformer,在进行初始化之后,就无其它操作了
new ConstantTransformer(Runtime.getRuntime())

浅析P牛版CC1链

InvokerTransformer初始化如下,1传递方法名,2传递参数类型,3传递参数的值

浅析P牛版CC1链

ChainedTransformer的实现如下

浅析P牛版CC1链

也就说首先new之后transformer变量存储的内容如下

浅析P牛版CC1链

TransformedMap.decorate如下,这里可以看出直接能调用到有参构造。换种意思来说就是将transformer变量内容存入到了valueTransformer中

浅析P牛版CC1链

那么最后一个outerMap.put("test","xxxxx");就是最重要的一点了。 跟进put发现了transformValue方法

浅析P牛版CC1链

transformValue会调用:valueTransformer.transform(object)

浅析P牛版CC1链

而valueTransformer此时为ChainedTransformer,所以会调用到ChainedTransformer.transform()方法

浅析P牛版CC1链

浅析P牛版CC1链

在第一次循环执行之后,返回的Object是Runtime

浅析P牛版CC1链

然后将object当做参数带入,再次执行transform(),一个经典的命令执行

浅析P牛版CC1链

0x04 结尾

本文只是简单剖析,更详细的话,可以跟着断点进行一步步调试

11111
微信搜索关注 "安全族" 长期致力于安全研究

下方扫一下扫,即可关注浅析P牛版CC1链

浅析P牛版CC1链

原文始发于微信公众号(安全族):浅析P牛版CC1链

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月23日20:12:30
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   浅析P牛版CC1链https://cn-sec.com/archives/838522.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息