Фатальная проверка Master-lame-master Хакер, номер #071, стр. 071-052-2 Жаль, что я не был подключен к Мегафону :). Я не мог быть уверенным в исправности скрипта, но все же мне требовалось проверить его функциональность. Забив в поле для номера телефона рандомный мобильник и наколбасив тестовый набор символов, я нажал кнопку «Send». Спустя несколько секунд скрипт выплюнул какую-то дебаговую инфу. Приглядевшись, я узрел в ней обмен между сценарием и SMTP-сервером и понял, что скрипт просто шлет текст SMS на определенный e-mail в домене sms.megafonural.ru, таким образом добиваясь отправки сообщения. У меня лишь не укладывалось в голове, зачем нужно постить такую конфиденциальную информацию. Можно ведь просто сообщить юзеру, что текст успешно отправлен. Внезапно у меня появилась еще одна идея. А что если скрипт не проверяет параметры на спецсимволы? Подставлять в качестве текста |id| или %00 глупо - PHP переварит их как миленький. А вот попробовать заюзать баг функции system() вполне реально. Баг проявит себя в двух условиях: если переменная не проверяется на символ «;» и если в сценарии используется системный вызов. Изначально я попробовал вставить точку с запятой в текст, но к желаемому результату это не привело. По крайней мере, вывод скрипта говорил о том, что мессага успешно отправлена. Тогда я решил вставить специальный символ в номер телефона. Но не просто вставить, а воткнуть команду перед телефоном, обрамив ее «;». В ответ сценарий вернул мне драгоценную информацию. Теперь я мог с уверенностью сказать, что хакер-негодяй, беспокоивший моего приятеля, при взломе пользовался этой веселой SMS-лазейкой. Но помимо дефейса, который взломщик мог совершить и под nobody-правами, он оставлял загадочную папку в корне файловой системы. А вот это было уже интересней. Как он это делал, я пока не знал. Порутай через WWW Из-за файрвола хакер никак не мог воспользоваться бэкдором. Таким образом, взломщик мог либо закачать шпионский php-сценарий, который выполнял произвольные команды, либо вообще наслаждаться дыркой в sms-скрипте без привлечения дополнительных средств. Чтобы прояснить ситуацию, я выполнил команду ls -la. К моему удивлению, Apache был грамотно настроен: все документы имели отличный от nobody UID, что не позволяло хакеру положить файл на Web. По-видимому, конф настраивал старый администратор, потому как способностей моего приятеля для настройки suexec явно не хватило. Я еще раз загрузил скрипт, чтобы узнать версию ядра. В ответ я получил число 2.4.20. Поскольку все служебные префиксы отсутствовали, стало ясно, что ядро никто не патчил и можно было добыть рута через обычный mremap-exploit. Но сплойт запускает /bin/bash, возможностями которого через WWW никак не воспользоваться. Следовательно, таинственный взломщик модифицировал сплойт и выполнял под рутом произвольную команду. Раньше я не думал об этом, но теперь у меня созрел план нового метода обхода файрвола. Оставалось только применить его на практике. |