Senin, 20 Mei 2013

CTF IDSECCONF 2013 - Medium Programing - Write Up

Challenge Selanjutnya Medium Programing berikut challengenya
Tahu ini kan? hmm, yang pastinya tahu dong, secara sudah mengerjakan Easy Programming (semoga bukan online tools :p )
Oke kasusnya adalah mencari yang bukan prima dalam dokumen itu. kalau sudah dapat gabungkanlah, sebab itu akan menjadi Key/Flag

Happy Fun Coding!!!



Cara Pertama : File PDF tersebut berisi deretan angka , saya memikirkan untuk bagaimana membaca file PDF dan melakukan slicing untuk setiap page namun page yang ada ada 29818 banyak sekali, setelah saya berpikir ini akan ruwet sekali dari library membaca PDF sampe baca setiap page yang diload ke memory akan berat, melihat pengalaman sebelumnya di easy programing mungkin komputer akan hank, well cara ini kurang baik.

Cara Kedua :  Mengkonversikan content yang ada didalam PDF menjadi 1 file text. lalu dirapihkan menjadi perbaris content dan membandingkan dengan bilangan prima yang sudah ada (http://primes.utm.edu/lists/small/millions/) dengan diff . cara ini saya pikir terlalu ruwet.

Cara Ketiga : Cara selanjutnya membaca konten file text tersebut setelah itu karena menggunakan Comma Delimiter saya melakukan slicing dan memasukannya kedalam Array setelah melakukan pengecekan 1 persatu. saya pikir ini cara yang lebih baik.

Tahapan:
  1. install xpdf , saya pakai Fedora jadi saya install dengan perintah "yum install xpdf" pada terminal
  2. Pada direktori yang menyimpan file medium.pdf , ketikan perintah "pdftotext medium2.pdf medium.txt"
  3. kalo kita buka di File editor, disini saya pakai sublime2, mungkin temen" juga bisa membuka dengan vim, nano, dan lainnya tampak konten memiliki "pembatas koma" , pembuka "[", dan penutup "]" . pada saat saya mengconvert file tersebut line terakhir tidak terkonversi jadi saya tidak memerlukan penutup "]" dan number terakhir juga saya cek ialah bilangan prima jadi tidak dibutuhkan.
  4. Berikut ini adalah source code yang saya buat, dan save menjadi exploit.php:
  5.  <?php  
     /*  
      * To change this template, choose Tools | Templates  
      * and open the template in the editor.  
      */  
     function is_prime($i) {  
       if ($i == 2)  
         return true;  
       if ($i % 2 != 1 || $i == 1)  
         return false;  
       $d = 3;  
       $x = sqrt($i);  
       while ($i % $d != 0 && $d < $x)  
         $d += 2;  
       return (($i % $d == 0 && $i != $d) * 1) == 0 ? true : false;  
     }  
     //$raw = "[2, 3, 4, 5, 6, 7, 8, 9, 10, 190130639";  
     echo "Baca File \n";  
     $raw = file_get_contents('./medium.txt');  
     //die($raw);  
     echo "Pecah File \n";  
     $bilangan = explode(",", $raw);  
     echo "Buka Key.txt";  
     $fp = fopen('key.txt', 'w');  
     echo "Cek Prima \n";  
     foreach ($bilangan as $unprime) {  
       $clean = trim(str_replace("[", "", $unprime));  
       $key = (is_prime($clean) === FALSE) ? $clean : ""; //bukan prima  
       fwrite($fp, $key);  
     }  
     echo "Tutup Key.txt\n";  
     echo "Finished \n";  
     ?>  
    
  6. selanjutnya saya jalankan pada direktori yang menyimpan medium.txt. lalu kita jalankan exploit script tersebut "php exploit.php". Berhubung cukup memakan waktu bisa ngerjain Challenge yang lain atau ngupi-ngupi dulu.
  7. Setelah selesai dia akan membuat file "key.txt" selanjutnya tinggal membaca file key.txt tersebut dengan perintah pada terminal "cat key.txt". berikut adalah hasil keynya
 [X-Ace@AtsukoMaeda Medium Programing]$ cat key.txt   
 1084956205735190077777  

Viola, tinggal masukin key tersebut kedalam input key pada Challengen CTF tersebut  :D