源码

<?php
highlight_file(__FILE__);
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']);
}
}
}
?>

分析源代码

知识点

  • get、post传参
  • md5弱匹配,或者是md5数组绕过
  • php反序列化
  • uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。

md5弱匹配

php的==判断两个变量时,它把每一个以”0e”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0e”开头的,那么PHP将会认为他们相同,都是0。可以用字符串QNKCDZO、314282422绕过

php反序列化

可以在本地测试correct的值。

1.png

得到correct=2

然后传递变量就可以得到flag

2.jpg