Начало
Зайдя на сайт, я в первую очередь ткнул мышью в ссылку на новость. Там присутствовал параметр id.
Я подставил кавычку:
Код:
http://site.com/news.php?id='
Выскочила всем до боли знакомая ошибка MySQL. Итак, уязвимость найдена. Вперёд!
РаскопкиПодбираем количество столбиков:
Код:
http://site.com/news.php?id=-1+order+by+5/*
Их 5. Делаем запрос:
Код:
http://site.com/news.php?id=-1+union+select+1,2,3,4,5/*
И тут.. Выскакивает ошибка! Значит, union отфильтровано. А жаль...(
Что ж, пойдем далее.. А именно, для начала посмотрим версию SQL:
Код:
http://site.com/news.php?id=23+AND+ASCII(lower(substring(VERSION(),1,1)))=52/*
И опять неудача - версия 4-я, значит отсутствует INFORMATION_SCHEMA. Придется брутить названия таблиц и полей.
Что ж, я взял дедик и поставил там брут. Вскоре был результат - есть интересная таблица params с полями name и param.
Делаем запрос:
Код:
http://site.com/news.php?id=17+(SELECT+ASCII(lower(substring(name,1,1)))+FROM+params+LIMIT+1,1)>1/*
Так я подобрал название первого параметр - он оказался email. Ничего хорошего.(
Второй параметр - news_count. Я понимал, что остается один шанс, но к моему разочарованию, обращение к третьему параметру ничего
не дало - либо не существовало третьей строки, либо к ней не было доступа.
Фееричный финал
Что ж, отчаиваться было рановато, ведь я только начал осматривать сайт! Было решено найти админку.
Это заняло 0.9 сек. - ровно столько я набирал на клавиатуре admin.php.)
Я увидел скромную админку с одной формой для пароля. Попытался ввести admin, password, и тому подобное - не прокатило.
Тогда я решил проверить админку на инъекцию в post-параметре. Кавычка ничего не дала, как и излюбленное всем советским народом ' or 1=1/*
Когда я уже собирался забить на все это, мне пришло в голову ввести еще пару безнадежных вариантов - 1=1 не прокатило, а вот
1=1/* пустило меня в админку!!
Подпрыгнув на стуле, я начал осматривать панель, столь коварно лишённую девственности..)
Через пару минут, я залил шелл - никакой фильтрации в заливке файлов не было.
К тому же, был отключен SAFE-mode, так что я получил практически полный доступ к управлению сайтом.
Заглянув в БД я убедился, что злосчастная 3-я строка действительно существовала, но у меня видимо не хватило на нее прав..)
Заключение
После съемки видео по данному взлому, я закрыл все уязвимости на сайте, а именно XSS, SQL-injections и ту обидную штуку в admin.php.
В этом мне помогли intval() и htmlspecialchars().
Люди! Всегда помните о трех волшебных цифрах - 2, 7 и 2. И делайте добро окружающим!)
(c) BECHED, ahco.ru