Target crack: memecahkan kata sandi login terenkripsi dari Trojan asp, memecahkan kata sandi Trojan asp. Karena tidak ada deskripsi versi Trojan, saya tidak tahu nama spesifik Trojan tersebut.
Ada dua metode cracking: mengganti ciphertext dengan password terenkripsi dan menggunakan ciphertext dan algoritma enkripsi untuk mendekripsi password. Yang pertama sebenarnya bukan sebuah celah sama sekali.
Tujuan cracking: hanya untuk bersenang-senang.
Jika saya tidak bisa mendapatkan kode sumber asp, maka saya tidak punya peluang untuk memecahkan kata sandinya. Seorang teman dari Tiongkok mengatakan bahwa dia telah memperoleh akses ke halaman web, tetapi tidak dapat mengubah halaman beranda. Dia menemukan ada Trojan ASP di dalamnya, tetapi kata sandinya dienkripsi. Lalu ada animasi ini. Oke, terlalu banyak omong kosong, jadi bersiaplah, penjelasan ini akan cukup panjang.
Kode kunci untuk verifikasi kata sandi login asp Trojan adalah sebagai berikut:
jika Epass(trim(request.form("password")))="q_ux624q|p" maka
respon.cookies("kata sandi")="8811748"
...
<%
akhir pilih
fungsi Epass (lulus)
temppass=StrReverse(kiri(lulus&"zxcvbnm,./",10))
kuil=len(lulus)
kata sandi mm = ""
untuk j=1 sampai 10
mmpassword=mmpassword+chr(asc(mid(temppass,j,1))-templen+int(j*1.1))
Berikutnya
Epass=ganti(mmpassword,"'","B")
fungsi akhir
%>
Tentunya fungsi Epass digunakan untuk mengenkripsi password yang dimasukkan, kemudian ciphertext yang diperoleh dibandingkan dengan ciphertext aslinya. Jika Anda memiliki sedikit dasar pemrograman, terutama VB, maka algoritma enkripsi di Epass sekilas akan jelas. Jika tidak, maka tidak masalah. Saya yakin Anda akan segera memahaminya setelah penjelasan saya. Dalam fungsinya, variabel yang menyimpan kata sandi adalah pass. pass&"zxcvbnm,./" Hubungkan konten yang ada dengan zxcvbnm,./ untuk mendapatkan string baru. left(pass&"zxcvbnm,./",10) mengambil 10 digit pertama. Fungsi StrReverse membalikkan urutan string 10 digit yang dihasilkan. len(pass) mendapatkan panjang kata sandi. Di bawah ini adalah satu lingkaran. Ambil kode Ascii dari setiap bit dalam string yang diperoleh - panjang kata sandi + pembulatan (posisi karakter * 1.1), lalu ubah nilai yang diperoleh menjadi karakter dan sambungkan kembali. Terakhir, ganti semua karakter ' pada string yang diperoleh dengan B, sehingga ciphertext dihasilkan. Jika kami mengekstrak algoritma enkripsi dan mengganti ciphertext asli dengan milik kami sendiri, kata sandi yang sesuai juga akan menjadi kata sandi Anda. Tapi seperti yang saya katakan, ini sebenarnya bukan celah.
Jika kita memasukkan cinta, proses enkripsinya adalah sebagai berikut:
Cinta
lovezxcvbnm,./ 'Hubungkan
lovezxcvbn 'Ambil 10 besar
nbvcxzevol 'Pesanan terbalik
N
110(ascii)-4(digit)+int(1(posisi)*1.1)=107
Kode ASCII dari 107 adalah k, dan seterusnya.
k`ucy|hztsKita
dapat mengurangi kata sandi melalui ciphertext dan algoritma enkripsi. Mulailah dari langkah terakhir algoritme dan teruskan ke atas. Langkah terakhir adalah mengganti semua ' dengan B. Apakah perlu mengganti B kembali dengan '? Selama kita bisa mendapatkan ciphertext final, kemungkinan passwordnya berbeda. Jika ada 10 B, maka jumlah password asli adalah 2 pangkat 10. Meskipun hanya ada satu password asli, semua 1024 password tersebut benar. Jika Anda ingin memecahkannya dengan sempurna, Anda dapat mencoba menulis sendiri semua kombinasinya.
Maka langkah ini bisa diabaikan.
Algoritma diatas sudah sangat jelas,
chr(asc(mid(temppass,j,1))-templen+int(j*1.1))
kita hanya perlu mengganti + dan - saja.
chr(asc(mid(temppass,j,1))+templen-int(j*1.1))
Tapi ada masalah lain. Kami tidak tahu panjang kata sandinya sebelumnya. kata sandinya antara 1-10 digit terlalu panjang.
Kemudian kita dapat menggunakan perulangan dari 1 hingga 10 untuk menemukan semua kemungkinan kata sandi, dan kemudian menggunakan fungsi StrReverse untuk membalik urutannya.
Jadi bagaimana kita menentukan kata sandi mana yang akhirnya kita dapatkan? Anda dapat menggunakan pass&"zxcvbnm,./" untuk melihat apakah ada digit pertama zxvbnm,./ di akhir kata sandi.
Nah ini password aslinya. Lalu jika passwordnya 10 digit maka akan selalu benar karena tidak akan ada koneksi nantinya. Jadi kita mungkin mendapat dua jawaban.
Berikut ini adalah fungsi dekripsi yang saya tulis:
fungsiCcode(kode)
untuk Templen1=1 hingga 10
kode mm=""
untuk j=1 sampai 10
mmcode=mmcode+chr(asc(mid(kode,j,1))+templen1-int(j*1.1))
Berikutnya
Ccode=strReverse(mmcode)
respon.tulis "Kata Sandi"&templen1&":"&Kode&"<br>"
jika mid(Ccode,templen1+1,10-templen1)=left("zxcvbnm,./",10-templen1) dan Templen1<>10 maka
hasil=kiri(Ccode,templen1)
Berikutnya
respon.tulis "Kata sandi terakhir:"&hasil
Fungsi akhir
sudah siap. Algoritme mungkin tidak sepenuhnya dikuasai dalam waktu sesingkat itu. Ini normal. Kemudian saya akan melampirkan dokumentasi dan kode sumber ASP yang dienkripsi dan didekripsi dalam paket terkompresi mempelajarinya dengan cermat. Demikian pula password 10 selalu benar. Kemudian kita akan mengambil ciphertext asli di asp dan melihat apa hasilnya. Oke, Anda bisa masuk dengan kedua kata sandi tersebut. Untuk pengujian, saya mengasumsikan IIS secara lokal. Jika server web tidak dapat diatur secara lokal, Anda dapat menghubungi saya dan menulisnya dalam bahasa lain.