最新消息:图 床

一個CTF GAME引發的php內核分析

COOL IAM 215浏览 0评论

作者:xd_xd
作者博客:http://xdxd.love/

solveme.peng.kr winter sleep

solveme是一個CTF的練習平台,其中winter sleep題目是這樣的。

<?php
   error_reporting(0);
   require __DIR__.'/lib.php';
   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>';
   }
   highlight_file(__FILE__);

輸入一個字符串,通過is_numric的判斷,要大於5184000小於777600,最後通過sleep函數,就可以輸出flag。顯然,如果輸入一個較大的數,會sleep很長時間。需要一個數大於5184000,然後int之後又要是一個很小的數。

解決的方案是這樣的:

<?php
echo 60 * 60 * 24 * 30 * 2;
echo "/n";
echo 6e6;
echo "/n";
echo (int)'6e6';
echo "/n";
echo 60 * 60 * 24 * 30 * 3;

可以看以上腳本輸出內容:

5184000
6000000
6
7776000

使用科學計數法。

看了一些writeup,只是給出了解決的辦法,但是並沒有詳細的說明,為什麼會這樣。有的地方提到說是弱類型,雖然這幾次比較存在類型的自動轉換,但是跟我理解的弱類型的自動轉換存在差異。所以想要探究一番。

黑盒測試

转载请注明:IAMCOOL » 一個CTF GAME引發的php內核分析

0 0 vote
Article Rating
Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x