[MRCTF2020]Ez_bypass
阿新 • • 發佈:2020-12-08
0x01
開啟頁面首先可以得到的是一段php程式碼,進行程式碼美化以後放到PhpStorm中進行審計。
還可以得到的就是頁面上的一些提示資訊:Please input first;總之先審一審程式碼。
0x02
第一部分
<?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'); }
第二部分
這裡進行的測試,先傳遞如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強碰撞