BMZCTF:Bestphp

http://www.bmzclub.cn/challenges#Bestphp

在这里插入图片描述
index.php

<?php
    highlight_file(__FILE__);
    error_reporting(0);
    ini_set('open_basedir', '/var/www/html:/tmp');
    $file = 'function.php';
    $func = isset($_GET['function'])?$_GET['function']:'filters'; 
    call_user_func($func,$_GET);
    include($file);
    session_start();
    $_SESSION['name'] = $_POST['name'];
    if($_SESSION['name']=='admin'){
        header('location:admin.php');
    }
?>

open_basedir限制访问文件活动目录为:/var/www/html/tmp
call_user_func($func,$_GET);回调函数名和参数都可控,$_SESSION['name']可控
通过回调extract($file),覆盖掉$file = 'function.php',即可控制$file,进行文件包含

/index.php?function=extract&file=php://filter/convert.base64-encode/resource=function.php

function.php

<?php
function filters($data){
    foreach($data as $key=>$value){
        if(preg_match('/eval|assert|exec|passthru|glob|system|popen/i',$value)){
            die('Do not hack me!');
        }
    }
}
?>

admin.php

<?php
if(empty($_SESSION['name'])){
    session_start();
    #echo 'hello ' + $_SESSION['name'];
}else{
    die('you must login with admin');
}
?>

$_SESSION['name']可控,可以将shell写入session文件,然后包含利用。session的默认保存位置有如下:

/var/lib/php/sess_PHPSESSID
/var/lib/php/sessions/sess_PHPSESSID

/tmp/sess_PHPSESSID
/tmp/sessions/sess_PHPSESSID

测试了下发现session并不在/tmp下,应该在/var/lib下,但是open_basedir的限制,我们包含不了除指定目录下的任何其他文件,但是我们可以重新调用session_start(),并且设置save_path为我们可访问的目录下
在这里插入图片描述
在这里插入图片描述
然后覆盖$file去包含/tmp/sess_PHPSESSID
在这里插入图片描述
在这里插入图片描述

相关推荐
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:马嘣嘣 返回首页