一題關於PHP的CTF


if(isset($_GET['time'])){ 
        if(!is_numeric($_GET['time'])){ 
                echo 'The time must be number.'; 
        }else if($_GET['time'] < 60 * 60 * 24 * 30 * 2){ 
                        echo 'This time is too short.'; 
        }else if($_GET['time'] > 60 * 60 * 24 * 30 * 3){ 
                        echo 'This time is too long.'; 
        }else{ 
                sleep((int)$_GET['time']); 
                echo $flag; 
        } 
                echo '<hr>'; 
}

這里用is_numeric檢查是否為數字,而后面用(int)將字符型數字轉為數字型數字,那么我們來比較一下這兩個函數對字符型數字的處理。
        前者支持普通數字型、科學記數法型、部分支持十六進制0x型,在前者支持的形式中,后者不能正確轉換的類型有十六進制型、科學計數法型(部分)。
        因此本題flag在部分環境下可以是?time=0x4F1A01或者部分環境下是?time=5.184001e6,而在部分環境下是無解的。
5.184001e6 = 5184001


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM