Каждый день ты заходишь в сеть, смотришь
почту, сидишь в чате, болтаешь по ICQ со своей
подружкой или с одной из них. Но кто
помогает тебе в этом, кто обеспечивает
доступ в сеть Internet? Конечно же это твой
любимый провайдер! Большинство людей,
пользующихся услугами провайдеров, считают,
что серверами провайдера рулят злостные
админы и что провайдера взломать
невозможно. Многие "начинающие" хакеры
с детства мечтают о взломе хоть какого-нибудь
хиленького провайдера. Сегодня я расскажу
тебе насколько убогой может быть защита
даже у достаточно крупных провайдеров.
Интернет ломка
Я в последнее время привык ходить в
Интернет за свои кровные денежки. Плохая,
конечно, привычка, но ведь бедных
пользователей обижать нельзя. В очередной
раз когда у меня закончились деньги для
доступа в сеть, я грустным взглядом смотрел
на страницу пополнения счета (провайдер
предоставлял доступ для регистрации счета).
Требовалось ввести всего то четыре
трехзначных числа. Я в свою очередь пытался
их угадать, но несколько десяток попыток
ничего не дали. Тогда было принято решение,
что нужно принимать кардинальные меры.
Проверка на вшивость
Так как единственными параметрами скрипта,
которые можно изменять, являются эти самые
трехзначные числа (секретный код карты), то
я решил начать именно с них. Для начала
состоялась проверка на внедрение кавычки в
каждое поле. Ничего не выходит, хотя
надеяться на данную ошибку было глупо.
Сразу понятно, что скрипт запрашивает пин-код
из базы данных. Необходимо было узнать
каким образом он это делает. Я просмотрел
HTML-код страницы и обратил внимание на то,
что в поле ввода каждого числа стоит
ограничение на три символа. Сохранив
страницу себе на диск, я убрал это
ограничение и проверил как будет
реагировать скрипт, называемый index.php, на
чрезмерно длинную строку. И что же мне
сказал скрипт на это? Он выдал ошибку
функции, помимо этого указал мне абсолютный
путь к скрипту в котором произошла ошибка.
Дело в том, что сам Index.php ничего не выполняет,
а операции с пин-кодами и подобной ерундой
выполняет скрипт /inc/index.inc,
который вызывается методом include. Я составил
список некоторых слов, которые могли быть
потенциальными названиями файлов в
директории /inc/, добавил к ним расширение "inc"
и натравил с помощью сканера на сайт.
Отыскалось еще два файла: header.inc и footer.inc.
Оказалось, что сам скрипт index.php ничего не
стоит, он полностью состоит из файлов index.inc,
header.inc и footer.inc. Зачем было так извращаться?
Читаетем творчество Веб-мастера
Я не сказал самого главного. Как ты думаешь,
что я получил на запрос всех этих скриптов?
Конечно их содержание. Веб-мастер даже не
потрудился засунуть в папку /inc/ банальный .htaccess
и прописать запрет на чтение этих файлов.
Таких наивных людей еще поискать нужно. Так
вот, все самое интересное и храниться в файле
под неброским названием index.inc. Сейчас мы его
и посмотрим. Именно скрипт index.inс и
производит все тонкие манипуляции с
логинами и паролями. После того, как
пользователь вводит пин-код карты (пусть
будет 123 123 123 123), скрипт преобразует его в
вид 123-123-123-123 не производя никаких изменений
или проверок. Почему же ругнулся скрипт?
Скрипт, отправляя данные, считает, что длина
полученного значения на превышает 50
символов. А так как мы ввели больше 50, то он
не смог отправить базе данных это значение.
Хотя я итак зашел слишком далеко, я не
решился действовать дальше, а просто
написал администратору о данной дыре на
страницах его сайта (гениальная глупость).
Как и полагается, в ответ - тишина. Однако на
следующий день дырочка была аккуратно
заштопана, а директории /inc/ внезапно не
стало. Мало того, в скрипт добавили проверку
не только на длину кода, но и на отсутствие в
коде каких либо символов не являющихся
цифрами.
Меняем шило на мыло
Вы, наверное, думаете, что это все? А не тут
то было. Я понял, что исправленные "inc"
файлы перемещены в другую директорию. Как я
уже говорил, скриты были в директории /inc/, а
стали в /include/. Я все еще поражаюсь наивности
веб-мастера. index.inc так же доступен для
чтения. Дело в том, что на сайте провайдера
есть два скрипта для пополнения счета. Для
тех у кого есть деньги и для тех у кого
деньги кончились. Для тех у кого кончились
мы рассмотрели выше. Это единственная
страница, которая доступна, если у абонента
кончились деньги. Если же у абонента есть
деньги на счете, то он должен пополнять счет
в другом разделе на другой странице. Когда я
проверил этот скрипт, то в нем оказалась
такая же ошибка, как и в первом случае. Я не
стал писать админу, так как не люблю
неблагодарных людей. Пущай посидят дырявые.
Уязвимость на сайте существует и по сей
день.
Пошутим?!
Помимо этого существует еще некоторая
ошибка, причем как в исправленном скрипте,
так и в уязвимом. Если вместо всех цифр в
поле ввода ввести нули, то есть пин-код
станет 000-000-000-000, то при осуществлении SQL -
запроса 0 подходит под любое значение, так
же как и переменная "null". Поэтому на ваш
счет якобы зачисляется 999 рублей, то есть
максимальная сумма, т.к. скрипт оперирует с
трехзначными суммами. Однако, проверив счет,
обнаруживаешь, что ничего не начислилось, а
жаль ;-). Зато я удачно подшутил с помощью
этого над несколькими своими знакомыми и
друзьями.