Kalo Lo punya website basis joomla, jangan lupakan hal sekecil reset token.
http://www.target.com/
Apabila kita tambah " index.php?option=com_user&view=reset&layout=confirm " dan muncul Token Box reset password, itu tandanya situs joomla Lo ada bug pada http://www.target.com/components/com_user/models/reset.php
LIHAT UN-PATCHED RESET.PHP
cari code berikut ini pada reset.php :
Masalah diatas ada pada :function confirmReset($token) { global $mainframe; $db = &JFactory::getDBO(); $db->setQuery('SELECT id FROM #__users WHERE block = 0 AND activation = '.$db->Quote($token)); // Verify the token if (!($id = $db->loadResult())) { $this->setError(JText::_('INVALID_TOKEN')); return false; } // Push the token and user id into the session $mainframe->setUserState($this->_namespace.'token', $token); $mainframe->setUserState($this->_namespace.'id', $id); return true; }
Jadi jika user memasukkan Single Quote (karakter ‘ ) pada Token box maka query yang terlihat jadi seperti ini :$db->setQuery('SELECT id FROM #__users WHERE block = 0 AND activation = '.$db->Quote($token)
Lihat setelah tanda sama dengan yang terakhir. Tanda petik yang dimasukkan membuatnya menjadi empty quote (kutipan kosong) yang akan “diluluskan” begitu saja untuk menjalankan fungsi password reset.SELECT id FROM jos_users WHERE block = 0 AND activation = ''
PATCHING
Untuk mencegah user melakukan penetrasi dengan memasukkan Single Quote pada kotak Token maka Achev cukup menambahkan kode penambal. Kode ini akan membuat apabila ada user yang memasukkan karakter ‘ akan menampilkan pesan Error. Kode-nya seperti ini :
Ternyata Achev ini bisa berbahasa Indonesia dan dia tahu bahwa yang kemarin melakukan defacing terhadap situsnya adalah orang Indonesia. Sehingga dia memakai bahasa Indonesia dalam pesan error-nya (walaupun ancamannya untuk melapor ke FBI rasanya terlalu berlebihan). Pesan tersebut bisa diganti dengan yang lainnya.if(strlen($token) != 32) { $this->setError(JText::_('Woy Mau Ngapain Lo??? Gw Laporin FBI neh...!')); return false; }
Kode tersebut diletakkan dibawah potongan kode :
Sebagai perbandingan, klik link berikut untuk melihat file reset.php yang udah di-patch oleh Achev.function confirmReset($token) { global $mainframe;
LIHAT PATCHED RESET.PHP
0 komentar: