Как не печально, но действительно как я и предполагал было слито множество баз и снесено множество сайтов, в этом можно убедится зайдя на любой форум посвященный dle, даже на тот же forum.dle-news.ru или просто форум для программистов, а сколько народу еще промолчали

Мое личное мнение, то что celsoft не правильно публикует патчи и баг-фиксы, так как любой юзер, даже плохо знающий php может сравнить 2 файла, разобраться в исходном коде и "поломать" множество сайтов, ради интереса или просто слить базу у конкурента, как это собственно произошло. Нужно просто обновлять весь дистрибутив, и разослать уведомления, что нужно перезалить движок, тем самым становится сложнее найти ту самую "дыру" в коде и взломов было бы меньше, но не как не вылаживать отдельным патчем и тем более делать его доступным для скачивания всем подряд. Вообщем это проблемы только SoftNews Media Group и они их решают как считают нужным.
Собственно перейду к самому багу и рассмотрим его подробнее, надеюсь все уже обновились. Для начала вот часть исходного кода, бага
- Код: Выделить всё
} elseif( intval( $_GET['douser'] ) ) {
$douser = intval( $_GET['douser'] );
$lostid = $_GET['lostid'];
$row = $db->super_query( "SELECT lostid FROM " . USERPREFIX . "_lostdb WHERE lostname='$douser'" );
if( $row['lostid'] == $lostid ) {
Как мы видим переменная
$lostid не проверяется и никак не фильтруется, а
if( $row['lostid'] == $lostid ) { говорит о том, что она должна быть равна значению поля
lostid с базы, но если передать переменную
$douser которой нету в таблицы
_lostdb, и переменную
$lostid оставить пустой, то они будут равны так как mysql вернет
null и переменной
$lostid тоже равно нулю, тем самым выражение
if( $row['lostid'] == $lostid ) будет истинным
if(0==0) следовательно выполнится php код генерации и вывода нового пароля в браузер и мы получим новый пароль пользователя,
id которого мы передали в переменной
$douser.
Вывод: Если сделать запрос http://site.ru/index.php?do=lostpassword&douser=
ID Юзера которого ломаем, например если ломаем админа, то будет "1" (http://site.ru/
index.php?do=lostpassword&douser=1), то получим новый пароль и полный доступ к сайту, а в некоторых случаях еще получим пизд*, и проломленный череп с переломанными ребрами.
Вообщем не делаем глупостей, и у Вас, и у других все будет отлично
