Untuk mencegah penyalahgunaan, saya tidak menyebutkan nama operator.
Semuanya berawal dari fakta bahwa saya membeli kartu SIM dari operator dengan rencana tarif saat bayar. Ini adalah paket tarif yang paling umum yang populer di Rusia sebelum paket paket harga, yaitu, Anda membayar setiap menit, pesan, megabita, sementara Anda memiliki saldo yang perlu diisi ulang.
Di mana-mana saya memiliki Wi-Fi, dan komunikasi seluler agak diperlukan untuk panggilan masuk dan akses langka ke Internet seluler. Namun, masalah dengan operator Amerika adalah bahwa saldo akun Anda mungkin kedaluwarsa. Kemudian kadaluwarsa setelah 30 hari, yaitu, uang di akun itu habis terbakar. Itu bisa sepenuhnya ditransfer ke bulan berikutnya, tetapi untuk ini perlu untuk membuat setidaknya beberapa penambahan akun. Saya memutuskan untuk mengisi ulang minimal agar tetap terhubung.
Saya masuk ke Akun di situs web operator dan mencoba melakukan setoran dari kartu bank. Tidak seperti Rusia, jumlahnya tidak bisa dimasukkan di sini. Saya ditawari pilihan hanya beberapa jumlah, minimum adalah $ 5. Saya tidak membutuhkan begitu banyak, tetapi saya membayar uang ini setiap bulan untuk tetap berhubungan. Akibatnya, setelah beberapa bulan, "tidak berguna" beberapa puluh dolar terakumulasi di akun tersebut tanpa ada kesempatan untuk membelanjakannya.
Entah bagaimana lewat di outlet operator di salah satu pusat perbelanjaan, saya melihat kartu isi ulang biasa (kartu awal). Mereka dari denominasi yang sama ketika mereka ditawarkan untuk pembayaran di situs. Tetapi ternyata karena keinginan intuitif saya untuk bereksperimen, saya memutuskan untuk membeli kartu semacam itu, lagi-lagi seharga $ 5. Ketika tiba saatnya pembayaran, saya mulai mempertimbangkan kartu itu. Tampaknya prinsip yang sama seperti di Rusia (ketika kartu-kartu ini masih populer): Anda cukup memanggil perintah dengan nomor kartu dan mengaktifkannya, atau Anda dapat "berkeliaran" pada menu USSD (tim dari kategori * XXX #). Sekali lagi, karena beberapa keinginan untuk bereksperimen, saya memutuskan untuk memilih jauh dari menu. Di antara opsi-opsi itu diusulkan untuk mengetahui saldo, mengaktifkan kartu awal, mengisi kembali akun dengan kartu bank.
Di Rusia, saya entah bagaimana selalu hanya berurusan dengan memasukkan data kartu secara online, jadi membayar dengan kartu melalui menu seperti itu menarik bagi saya (setelah semua, pembayaran ini adalah topik diploma saya), meskipun tampaknya tidak aman (lagi-lagi di Rusia, biasanya dapat ditemukan di jendela terpisah dari bank yang mengakuisisi, tetapi tidak ditransfer ke penjual secara jelas), saya memutuskan untuk mencoba. Segera saya terkejut dengan tawaran untuk memasukkan jumlahnya. Artinya, mereka tidak menawarkan saya pilihan jumlah standar, seperti di tempat lain, tetapi mereka menyarankan agar saya memasukkan jumlahnya. Saya memilih $ 1, memasukkan detail kartu dalam langkah-langkah berikut dan pembayaran berlalu. Seperti yang Anda tebak, maka saya mencoba memasukkan $ 0,01, itu berlalu juga.
Orang bisa senang bahwa saya tidak perlu lagi mentransfer $ 5 setiap bulan ke saldo saya, tetapi hanya menghabiskan 1 sen dan menyelesaikan percobaan. Tetapi setelah beberapa jam saya ingin melihat kembali pada Akun di situs web operator dan opsi pengisian ulang.
Jadi Saya ditawari untuk mengisi formulir dengan perincian kartu, jumlah, dan sebagainya. Saya melacak bagaimana rupa permintaan POST ini dengan pengiriman formulir. Saya menyalin, menempel ke tukang pos, mencoba mengulangi permintaan. Server merespons dengan kesalahan, tampaknya beberapa token dalam formulir sudah habis.
Saya memutuskan untuk pergi dengan cara sederhana. Saya menawarkan untuk memilih jumlah dari daftar drop-down. Tentu saja ini adalah semacam
select
dengan daftar
option
.
<select class="selectpicker select form-control show-tick text field" title="Specify an amount.." id="billing_amount" name="billing_amount"> <option class="bs-title-option" value=""></option> <option value="REG10-5">$5</option> <option value="REG11-10">$10</option> <option value="REG12-30">$30</option> </select>
Hanya
value
jelas dikirim ke server. Apa artinya 5, 10, 30 setelah tanda hubung yang saya mengerti, ini adalah jumlah pengisian ulang, tetapi apa artinya nilai pertama? Apakah ada konstanta dalam kode sumber, atau jumlah dijumlahkan dari data?
Saya mencoba. Saya
REG12-0.01
di salah satu titik, memasukkan data kartu, mengirimkannya. Muncul pesan: โTerima kasih. Jumlah muatan $ 0,01 telah dikreditkan ke nomor prabayar Anda. " Jumlah yang sama didebet dari kartu. Segalanya tampak baik-baik saja. Anda dapat memilih jumlah berapa pun, meskipun saya sudah menemukan peluang ini melalui USSD, tidak masalah.
Namun inilah poin terpenting. Saya menerima pesan SMS ke nomor: "$ 30 dikreditkan ke akun Anda". Saldo akun bertambah dengan jumlah ini.
Ada banyak publikasi seperti itu dengan berbagai layanan populer di situs ini dan mungkin akan ada lebih banyak lagi. Dalam proses pengembangan sistem (terutama tidak di perusahaan dengan fokus TI yang ketat), praktis tidak ada tes / kontrol untuk keamanan / kerentanan dan sepertinya situasinya tidak akan membaik dalam waktu dekat. Untungnya, tidak ada data pengguna pribadi yang terpengaruh di sini. Eksperimen ini bahkan tidak dapat disebut peretasan, pada kenyataannya, pengiriman biasa dari jumlah yang diinginkan ke server terjadi, alih-alih penagihan operator memutuskan untuk mengisi saldo dengan jumlah ribuan kali lebih besar dari yang dipilih.