欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

实战工具:PHPGGC详解

来源:本站整理 作者:佚名 时间:2019-08-08 TAG: 我要投稿

在之前我们分析了php下序列化攻击的一些知识点:
由浅入深剖析序列化攻击(一)
 

https://www.myhack58.com/Article/60/61/2019/93995.htm

由浅入深剖析序列化攻击(二)
https://www.myhack58.com/Article/60/61/2019/94171.htm

由浅入深剖析序列化攻击(三)

https://www.myhack58.com/Article/60/61/2019/95434.htm
今天我们来分析一下php序列化的武器库:PHPGGC。
PHPGGC 是一款能够自动生成主流框架的序列化测试payload的工具,类似 Java 中的 ysoserial,支持大量主流框架的序列化exp一键生成。
但因为工具作者的时间有限,不能做到实时更新。而本文旨在分析phpggc原理,并为其添加拓展,以便我们加入最新的,自己需要的exp生成模块。
phpggc流程分析
当我们运行:
phpggc Laravel/RCE1 system id
我们跟踪一下具体流程。
初始化流程

在创建对象时,我们下断点,发现首先程序会进行load_gadget_chains():

紧接着程序会寻找定义申明过的class:


经过array_filter,将程序自己构造的gadget取出:
$classes = array_filter($classes, function($class) {
            return is_subclass_of($class, '\\PHPGGC\\GadgetChain') &&
                   strpos($class, 'GadgetChain\\') === 0;
        });

然后是取出模块名:

我们跟进get_name(),就可以发现,例如:GadgetChain\ZendFramework\FD1经过处理会变成ZendFramework/FD1:

然后将模块名与类申明形成映射关系:
$gcs = array_combine($names, $classes);

至此为止,初始化过程完成。
exp生成
然后初始化完成后,我们成功创建了PHPGGC对象x,然后调用其generate方法进行exp生成:
$x->generate();
首先是从我们的cmdline获取脚本运行参数,并将其解析:

例如我们此时解析出的参数:

同时如果发现我们没有input参数,就会友好性的打出help界面。
然后代码就会来到gadget chain的获取:
$gc = $this->get_gadget_chain($class);

这里就用到了之前的模块名和类名的映射关系,通过我们传入的模块名迅速找到已申明的类。
然后在需要时,再将其包含进来:

我们跟进该函数:

根据命名规则,程序会在其目录gadgetchains下寻找对应文件夹,例如我们对应的目录为:
/phpggc/gadgetchains/Laravel/RCE/1
然后获取其目录下的gadgets.php,拿到对应的类的定义。
然后就是利用我们定义的chain.php构造序列化了:
$parameters = $this->get_type_parameters($gc, $parameters);
$generated = $this->serialize($gc, $parameters);

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载