Ломаем форум за 5 минут nikitozz Хакер, номер #072, стр. 072-072-2 2.0.8 под скальпелем Версия 2.0.8 содержит не менее опасную ошибку в сценарии просмотра приватных сообщений privmsg.php. Здесь, если передаваемый скрипту параметр folder установлен в значение savebox, происходит забавная штука: $ pm_sql_user .= "AND ( ( pm.privmsgs_to_userid ..."; Обрати внимание, к переменной $pm_sql_user из внутреннего адресного пространства программы дописывается некоторый кусок sql-запроса. Это все здорово, ведь по задумке программиста $pm_sql_user – переменная внутренняя и, поскольку ранее она не использовалась, по большому счету нет разницы, дописывать или присваивать ей новое значение. Но вот если случится так, что переменная будет инициализирована раньше, это приведет к непредсказуемым результатам, ведь исходное значение будет добавлено в реализуемый sql-запрос. Если в настройках PHP указан параметр register_globals=On и удаленный пользователь посылает методом GET параметр pm_sql_user, PHP автоматически инициализирует переменную с этим же названием, в результате чего становится возможным модифицировать выполняемый запрос. Чтобы лучше понять, как это работает, можно просто определить pm_sql_user произвольным значением: pm_sql_user=lala. В результате скрипт выдаст ошибку примерно следующего содержания: SQL Error : 1064 You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'lalaAND ( ( pm.privmsgs_to_userid = 3 AND pm.privmsgs_type... Обрати внимание, в какую часть запроса добавилась твоя строка «lala». Несложно догадаться, что для осуществления sql-injection нужно дополнить запрос корректным объединением UNION и закомментировать остальную часть запроса. В результате получается примерно такая строка: 31337%20UNION%20SELECT%20username,null,user_password,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null%20FROM%20phpbb_users%20WHERE%20user_id=1 %20LIMIT%201/* Если все ок, тебе на экран будет выведена табличка с логином и паролем администратора. Меняя значение user_id, можно добиться того, что на экране будут выведены пароли всех остальных пользователей. Расшифровка паролей После всех этих манипуляций встает естественный вопрос: что делать, когда уже получен хэш пароля? На самом деле полноценно использовать полученную строку напрямую невозможно: ведь это как бы сигнатура реального пароля. Тебе наверняка известно, что для взлома md5 есть два способа. Первый – обратиться к африканскому шаману и сплясать ритуальный танец с бубном, а второй – попросту перебрать все возможные варианты. Я советую всем использовать отличную программу для перебора хэшей, которая называется md5Inside. Ее можно найти на нашем диске либо на сайте http://ired.inins.ru/xa. Программа не требует установки, и все, что нужно, – это создать текстовый файл, куда построчно поместить ломаемые хэши. Например, вот так: |