Suatu kali saya meretas ke salah satu server telegram. Bukannya itu sesuatu yang menarik, dan kerentanannya sendiri standar. Fakta bahwa telegram berhubungan dengan keamanan dan mengapa selama bertahun-tahun tidak ada yang mengeksploitasi kerentanan agak mengejutkan. Tetapi orang yang tidak melakukan apa pun tidak salah!

Kembali pada Mei 2017,
kyprizel menarik perhatian pada kenyataan bahwa desktop telegram dapat mengunggah arsip ZIP ke servernya
tdesktop.com . Ternyata kemudian, bukan hanya ZIP, tetapi di dalamnya ada informasi tentang crash aplikasi, sehingga pengembang dapat belajar dalam keadaan apa crash itu terjadi. Selain itu, pengembang mendapatkan akses ke mereka melalui antarmuka web, dilihat dari formulir otentikasi. Saya menambahkan host ke catatan dan lupa dengan aman.

Saya ingat tentang dia setelah sekitar satu tahun ketika studi mendatang dibahas dalam obrolan. Pada saat itu, file root error_log, di mana, seperti yang Anda duga, kesalahan ditulis. Minimal, ada path file lengkap, tetapi selain itu, kesalahan favorit adalah "Anda memiliki kesalahan dalam sintaks SQL Anda". Tapi kami semua malas, dan dalam bug bug saya biasanya mencoba untuk tidak berpartisipasi, jadi semuanya tetap seperti itu.

Setahun berlalu, saya diundang untuk berbicara di konferensi
#PartyHack di Kazan. Dan ketika Anda tidak memiliki bahan untuk berbicara, Anda melihat catatan. Apa yang kita punya di sana? Host mencurigakan di Telegram.
Karena server menggunakan PHP, yang dibuktikan dengan crash.php, saya memutuskan untuk membahas file dengan ekstensi ini sedikit, kemudian saya menemukan info.php, di mana isi dari fungsi phpinfo () berada. Hal pertama yang saya perhatikan adalah menggunakan server web Apache. Bagaimana bisa begitu? Seluruh telegram adalah nginx, dan ini Apache! Dan siapa yang menggunakan apache pada 2019?

Apa yang pertama terlintas dalam pikiran ketika Anda mendengar Apache? Saya langsung ingat tentang mod_status, yang dibangun dengan itu secara default. Modul ini menghasilkan halaman dengan keadaan server saat ini, tentang sumber daya sistem, permintaan server, dan kecepatan pemrosesan mereka. Paling sering, jalan menuju itu adalah / server-status, jarang hanya / status. Untuk memahami seberapa populer kesalahan administratif ini, ingatlah bahwa itu tergantung pada situs web apache.org selama bertahun-tahun
Selama bertahun-tahun saya telah mengumpulkan jalur ke file dan direktori yang berpotensi berbahaya dalam proyek fuzz.txt , jadi status server ada di sana.Secara umum, perlu diperhatikan dalam status server bahwa ia juga menunjukkan alamat IP klien yang mengirim permintaan ke server. Tetapi dalam kasus ini, semua permintaan berasal dari 127.0.0.1 ke domain virtual preston-desktop.com. Nginx di depan hanya mem-proksi semua permintaan ke apache lokal, jadi tidak ada pengungkapan informasi pengguna. Namun, layak menempatkan server-status untuk dipantau, berikut adalah
skrip kecil yang dibuat di atas lutut yang menempatkan baris unik dalam database sqlite. Untuk waktu yang singkat, banyak tautan unik dikumpulkan, tetapi pada dasarnya ini adalah permintaan untuk pembaruan (menunjukkan versi), dan hampir tidak ada unduhan. Setelah beberapa saat saya melihat admin.

Terlepas dari kenyataan bahwa kami memiliki panjang garis terbatas, dapat dilihat dari log bahwa administrator sesekali mengunduh log gugur untuk analisis lebih lanjut, dan parameter lucu __login dan __token dilewatkan di sana. Dan permintaan POST dalam tangkapan layar adalah milikku.
Melihat sumbernya, Anda dapat melihat dua metode menarik.
Yang pertama adalah
query_report , yang memiliki opsi tambahan apiid, versi, dmp, dan platform. Ini mengembalikan apakah lebih banyak log diperlukan tentang crash aplikasi, atau jika versi sudah segar dan kesalahan diketahui. Mekanisme itu dibuat agar tidak terlalu banyak, tetapi hanya mengoreksi yang sebenarnya.

Yang kedua adalah
laporan itu sendiri. Sudah tanpa parameter tambahan. Jika sebuah kata telah kembali ke permintaan sebelumnya yang menunjukkan perlunya mengirim dump, file tersebut dikirim.

Di sana Anda dapat melihat bahwa data dikirim menggunakan multipart, di mana nama file adalah report.telegramcrash, dan aplikasi tipe konten / octet-stream.

Dengan demikian, Anda dapat mencoba mengunggah file Anda sendiri dan menguji kerentanan yang terkait dengan membongkar ZIP dan potongan unggahan lainnya.

Dan saya lebih jauh akan mencoba mengirim beban yang berbeda untuk menemukan setidaknya beberapa jenis kerentanan, jika bukan karena satu trik. Jika kami mengganti nama parameter terkenal dari permintaan lain, nilai valid yang kami ambil dari status server, ke dalam metode laporan, kami dapat mencoba menggunakan serangan rahasia dari semua peretas web.
Menggunakan kekuatan megazord (kutipan tunggal) dalam parameter platform, dimungkinkan untuk mengamati perilaku anomali sumber daya.

Ada tanda kutip - kesalahan, tidak ada tanda kutip - semuanya baik-baik saja. Untuk memverifikasi validitas, Anda dapat menulis beberapa ekspresi logis, misalnya platform = mac 'AND' a '=' a. Jawabannya adalah Selesai, seperti halnya unggahan file yang berhasil.
Yah, tidak heran mereka datang dengan otomatisasi, jadi saya decoupling sqlmap, yang sudah menjadi berdebu karena tidak adanya tindakan. Mengantisipasi pertanyaan - semuanya dikonfigurasi dengan baik, pengguna dalam DBMS tidak diistimewakan.

Dikirim ke security@telegram.org, beberapa saat kemudian saya menerima surat yang didambakan tentang penghargaan $ 30.000.
Hanya bercanda, $ 2000 untuk sqli, dan $ 500 untuk phpinfo dan status server, yang juga bagus. Dan serigala aman dan domba penuh, atau sebaliknya.

Saya tidak meretas pengguna (korespondensi Anda aman), saya tidak dapat mengembangkan serangan lebih lanjut, server dengan dump pengguna acak (yaitu crash dumps tanpa informasi tentang pengenal di telegram, telepon, pesan, dan obrolan) adalah nilai yang meragukan. Secara teori, akan mungkin untuk memompa crash dan mempelajari dan mengeksploitasi mereka sendiri. Setelah mengetahui bagaimana telegram dijatuhkan, adalah mungkin untuk menjatuhkannya dari korban, dan kemudian mempelajari segala sesuatu yang dapat diperas dari log musim gugur, jika memang bisa diunduh melalui injeksi ini.
Asli yang unik.