• [TSCTFJ 2019]bypass


    [TSCTF-J 2019]bypass

    1.源码审计

    <?php
        highlight_file(__FILE__);
        if(md5($_GET['pass']) == md5($_GET['username']) && $_GET['pass'] != $_GET['username']){
            if(strpos($_GET['username'],"tsctf") === 0){
                if(file_get_contents($_POST['file']) === "TSCTF-J{fake_flag}"){
                    echo file_get_contents("/flag");
                }else{
                    echo "Sorry1";
                }
            }else{
                echo "Sorry2";
            }
        }else{
            echo "Sorry3";
        }
    ?>
    

    这里出现问题,拿脚本爆破两个0e开头的MD5值会在php中无法判断为相等,因为无法保证构造后MD5除e外都是数字。只能采取fastcoll的方式。



    2.fastcoll构造

    使用fastcoll生成两个文件

    <?php
    #将碰撞好的1.txt和2.txt放置于此目录下
    #post传参必须传urlencode后的数据
    function  readmyfile($path){
        $fh = fopen($path, "rb");
        $data = fread($fh, filesize($path));
        fclose($fh);
        return $data;
    }
    echo '二进制hash '. md5( (readmyfile("1.txt")));
    echo "<br><br>\r\n";
    echo  'URLENCODE '. urlencode(readmyfile("1.txt"));
    echo "<br><br>\r\n";
    echo 'URLENCODE hash '.md5(urlencode (readmyfile("1.txt")));
    echo "<br><br>\r\n";
    echo '二进制hash '.md5( (readmyfile("2.txt")));
    echo "<br><br>\r\n";
    echo  'URLENCODE '.  urlencode(readmyfile("2.txt"));
    echo "<br><br>\r\n";
    echo 'URLENCODE hash '.md5( urlencode(readmyfile("2.txt")));
    echo "<br><br>\r\n";
    

    查看输出

    二进制hash 5ca55246d9caad2305da4298d3b86f9c<br><br>
    URLENCODE tsctf%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%87%FB%E0%5E%03%F3r%29%D1%F1%C2%B6f%1D%8F%D5%AF%94%84%05%B6%19SW%1B%0AAy%EC%2C%3C%FE_%0C%B9%00Z%E3%B0%02g%5Cj%FA%27%94Re%B6%E8S%91u%E9e%B3c%23%93QL%14%D5%E6%8C%8C%603%E2%8B%1F%ACU2K55%11%D9.%3C-%A0A%01%86%1E%2B%D1%1A%06%BC%EC%C6%FD%E7f%1D%A6Y%F6L%DC%0FZ%3E%3D%8F%13%BD%D9%2A%1C%A0U%B0%C3%9E%E5c%9D%15%AA%5D%13%0B%8F%D8<br><br>
    URLENCODE hash 5cbc4b96c3df09a5afdbb0ccdd25ae49<br><br>
    二进制hash 5ca55246d9caad2305da4298d3b86f9c<br><br>
    URLENCODE tsctf%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%87%FB%E0%5E%03%F3r%29%D1%F1%C2%B6f%1D%8F%D5%AF%94%84%85%B6%19SW%1B%0AAy%EC%2C%3C%FE_%0C%B9%00Z%E3%B0%02g%5Cj%FA%27%14Se%B6%E8S%91u%E9e%B3c%23%93%D1L%14%D5%E6%8C%8C%603%E2%8B%1F%ACU2K55%11%D9.%3C-%A0%C1%01%86%1E%2B%D1%1A%06%BC%EC%C6%FD%E7f%1D%A6Y%F6L%DC%0FZ%3E%3D%8F%13%3D%D9%2A%1C%A0U%B0%C3%9E%E5c%9D%15%AA%DD%13%0B%8F%D8<br><br>
    URLENCODE hash 1fe20bf9a505d5edb8816b7cb80ef309<br><br>
    
    

    将两个urlencode传入

    <?php
    $pass="tsctf%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%87%FB%E0%5E%03%F3r%29%D1%F1%C2%B6f%1D%8F%D5%AF%94%84%05%B6%19SW%1B%0AAy%EC%2C%3C%FE_%0C%B9%00Z%E3%B0%02g%5Cj%FA%27%94Re%B6%E8S%91u%E9e%B3c%23%93QL%14%D5%E6%8C%8C%603%E2%8B%1F%ACU2K55%11%D9.%3C-%A0A%01%86%1E%2B%D1%1A%06%BC%EC%C6%FD%E7f%1D%A6Y%F6L%DC%0FZ%3E%3D%8F%13%BD%D9%2A%1C%A0U%B0%C3%9E%E5c%9D%15%AA%5D%13%0B%8F%D8";
    $username="tsctf%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%87%FB%E0%5E%03%F3r%29%D1%F1%C2%B6f%1D%8F%D5%AF%94%84%85%B6%19SW%1B%0AAy%EC%2C%3C%FE_%0C%B9%00Z%E3%B0%02g%5Cj%FA%27%14Se%B6%E8S%91u%E9e%B3c%23%93%D1L%14%D5%E6%8C%8C%603%E2%8B%1F%ACU2K55%11%D9.%3C-%A0%C1%01%86%1E%2B%D1%1A%06%BC%EC%C6%FD%E7f%1D%A6Y%F6L%DC%0FZ%3E%3D%8F%13%3D%D9%2A%1C%A0U%B0%C3%9E%E5c%9D%15%AA%DD%13%0B%8F%D8";
    
    print (md5(urldecode($pass)));
    echo "\n";
    print (md5(urldecode($username)));
    echo "\n";
    if(md5(urldecode($pass))==md5(urldecode($username)) && $pass != $username){
        if(strpos($username,"tsctf") === 0){
            echo "yess";
        }else{
            echo "Sorry2";
        }
    }else{
        echo "Sorry3";
    }
    
    ?>
    

    本地测试成功

    5ca55246d9caad2305da4298d3b86f9c
    5ca55246d9caad2305da4298d3b86f9c
    yess
    

    注意

    post传参必须传urlencode后的数据``

  • 相关阅读:
    农夫安全第二季课程-3.vmware ESXIv2
    六、表达式:前缀&&后缀
    五、数据类型(1):整数&&带小数点的数
    四、变量和常量
    三、简单的输入输出
    二、第一个C程序:Hello World!
    一、环境的安装Dev-C++
    .Net基础之5——复杂数据类型
    .Net基础之4——流程控制
    .Net基础之3——运算符
  • 原文地址:https://www.cnblogs.com/LLeaves/p/12838930.html
Copyright © 2020-2023  润新知