1. 程式人生 > 實用技巧 >[MRCTF2020]Ez_bypass

[MRCTF2020]Ez_bypass

0x01

開啟頁面首先可以得到的是一段php程式碼,進行程式碼美化以後放到PhpStorm中進行審計。

還可以得到的就是頁面上的一些提示資訊:Please input first;總之先審一審程式碼。

0x02

第一部分

先看程式碼的第一部分,也就是第一層if迴圈。這裡要求的是通過get的方式傳入兩個引數id和gg。如果沒有傳入兩個引數就會在頁面上輸出Please input first,也就和我們頁面上的提示資訊對應起來。還有就是包含了檔案flag.php

<?php
include 'flag.php';
$flag='MRCTF{i like u flag}';
if(isset($_GET
['gg'])&&isset($_GET['id'])) { $id=$_GET['id']; $gg=$_GET['gg']; // 通過get方式獲取兩個變數。id gg xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx } else { die('Please input first'); }

第二部分

第二層if判斷,在這層進行一個md5強碰撞,滿足條件後會在頁面輸出You got the first step。否則我輸出You are not a real hacker!

這裡進行的測試,先傳遞如id=1&gg=1可以看到頁面上輸出了You are not a real hacker!,繼而進行下一步,傳入兩個值不同但MD之後的值相同的字串。頁面輸出了You got the first step

if (md5($id) === md5($gg) && $id !== $gg) {//md5 強碰撞
        echo 'You got the first step';
           xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
     } else {
        echo "You are not a real hacker!";
    }   
id=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
& gg=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

第三部分

這一部分要求通過post的方式獲取一個引數passwd,後面的if判斷中都是在對passwd進行判斷。

首先要求passwd不為空,其次是passwd必須不是一個數字,最後passwd==1234567

很明顯的,這裡是一個php弱型別的問題哈,只需要post傳入 passwd=1234567a即可滿足判斷語句,最後 highlight_file('flag.php');輸出flag.php

 if(isset($_POST['passwd'])) {
            $passwd=$_POST['passwd'];
            //通過POST傳入一個引數passwd ,並要求passwd不是數字,但是要求passwd==1234567
            //然後輸出flag.php
            if (!is_numeric($passwd)) {
                if($passwd==1234567) {
                    echo 'Good Job!';
                    highlight_file('flag.php');
                    die('By Retr_0');
                } else {
                    echo "can you think twice??";
                }
            } else {
                echo 'You can not get it !';
            }
        } else {
            die('only one way to get the flag');
        }

0x03

總結一下,這道題主要考察的點就是

1.md5強碰撞

2.php弱型別的比較