Kamis, 20 Juli 2017

Make the bot 2. Beat captcha


Jika sebelumnya kita mencoba mengalahkan program executables, kali ini kita akan coba belajar bagaimana untuk membuat bot yang bekerja pada web.

Sebagai bahan belajar php saya, saya mencoba untuk membuat web pengisian captcha boong boongan. Karena saya hanya menuliskan angka captcha nya di web tersebut. Untuk mendapatkan flag, Kita harus memasukkan angka pada captcha sebanyak 500 kali.

1

Apabila kita memasukkan captcha maka

2

Web captcha tersebut dapat diakses di (will be added soon). Jika kalian ingin menjalankan web captcha ini di local, saya memberikan source code web tersebut bisa dilihat dibawah ini.

index.php

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Captcha Idiotequie</title>
  </head>
  <body>
    <?php
    $stat = file_get_contents('status');
    echo "This is your captcha ". $stat." \n";
    ?>
    <form action="receive.php" method="post">
      <input type="text" name="captcha">
      <input type="submit" name="login">
    </form>
  </body>
</html>

receive.php

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Receive</title>
  </head>
  <body>
    <?php
    $count = file_get_contents('counts');
    $stat = file_get_contents('status');
    $input = $_POST['captcha'];
    if($count>=500){
      echo "YES YOUR THE WINNER\n";
      echo "FLAG_HERE\n";
    }
    else if($stat===$input){
      echo "yes youre right". "\n";
      $newstat = fopen('counts', 'w');
      $more = 500-$count;
      echo "You need ". $more ." More\n";
      fwrite($newstat, $count+1);
      fclose($newstat);
    } else {
      echo "Try again dude\n";
    }
    $stat = fopen('status', 'w');
    $acak = rand();
    fwrite($stat, $acak);
    fclose($stat);
    ?>
  </body>
</html>

Dapat dilihat pada source code. Di index.php, kita akan mendapatkan nomor captcha yang diakses dari file status, lalu ditampilkan. Kita diharuskan untuk mengisi nomor tersebut dan mensubmit dengan metode post, agar di terima oleh receive.php. Di receive.php, inputan di cocokkan dengan file status tadi, setelah itu, isi dari file status itu dirubah dengan angka random kembali.

Karena itu bot yang kita buat harus mengambil nomor dari index.php lalu mengirimkannya dengan metode post ke parameter 'captcha' secara terus menerus.

Berikut adalah skrip python yang kita gunakan untuk menyelesaikan soal

import re
import requests


for i in range(0, 503):
    urlkirim = "http://localhost/captchaproject1/receive.php"
    urlambil = "http://localhost/captchaproject1/index.php"
    a  = requests.get(urlambil)
    print a.content
    num = re.search('captcha (.+?) ', a.content)
    number = num.group(1)
    b = requests.post(urlkirim, data={'captcha':str(number), 'login':'Submit'})
    print b.content

Kita coba jalankan di terminal.

alfakatsuki@justPC:~/Desktop$ python exploit.py
.
.
.
.
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Receive</title>
  </head>
  <body>
    YES YOUR THE WINNER
    CTF{DiDnt_NeeD_TENsoR_FLOW_to_Solve_THIS}
    yes youre right
You need -9 More
  </body>
</html>

alfakatsuki@justPC:~/Desktop$

Setelah menunggu beberapa saat, kita berhasil mendapatkan flagnya yaitu CTF{DiDnt_NeeD_TENsoR_FLOW_to_Solve_THIS}. Metode request sederhana dan mengekstrak data seperti ini sangat berguna baik untuk CTF ataupun untuk mengirimkan data atau mengambil data secara otomatis.

Cukup sekian cara sederhana untuk menggunakan python untuk membuat request pada halaman web. Semoga dapat bermanfaat bagi kita semua :).

Tidak ada komentar:

Posting Komentar