南邮ctf反序列化

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

php中的序列化和反序列化

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

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;}