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
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

末 初

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值