南邮ctf反序列化

Author Avatar
Geroge Lee 3月 29, 2017
  • 在其它设备中阅读本文章

php中的序列化和反序列化

把复杂的数据类型压缩到一个字符串中 serialize() 把变量和它们的值编码成文本形式 unserialize() 恢复原先变量 <!--more--> eg:

$m = array('Moe','Larry','Curly');
$n = serialize($m);
print_r($n);echo "<br />";
print_r(unserialize($n));

结果:a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i:2;s:5:"Curly";} Array ( [0] => Moe [1] => Larry [2] => Curly )

解题过程

**1、**地址:http://115.28.150.176/php1/index.php

**2、**代码

**3、**解释代码

先定义一个类just4fun,类里面有两个成员enter和secret;判断是否存在通过GET提交的pass变量,再判断提交的语句中是否有'',存在就去掉''。 将$pass反序列化然后赋值给$o,后面就是判断$o->secret和$o->enter是否相等,相等就输出flag

**4、**构造Poc

由于php支持引用赋值,它意味着两个变量指向了同一个数据,没有拷贝任何东西 结果pass=O:8:"just4fun":2:{s:5:"enter";N;s:6:"secret";R:2;}