Добро пожаловать обратно, начинающие кибервоины!
Залоговое обеспечение снова из неизвестного места на Украине.
Сегодня мы подробно рассмотрим SQLMap, один из самых мощных инструментов для SQL-инъекций. Это первая часть серии из четырёх, в которой мы рассмотрим, как вручную тестировать и эксплуатировать уязвимости, углубимся в автоматизацию с помощью Nuclei и доркинга Python, научимся взламывать сервер и, наконец, разберём реальный случай полной компрометации сервера с помощью SQLi.
Несмотря на то, что он опустился на третье место в рейтинге OWASP Top 10, эксплойты с использованием инъекций всё ещё живы и широко используются. Более того, многие веб-сайты, включая правительственные, по-прежнему широко доступны. Иногда можно встретить простую инъекцию с ограничением по времени , которая работает медленно и скучно, но всё же приводит к утечке данных. В других случаях инъекция с использованием объединения позволит быстро и без проблем выгрузить целые базы данных.
Инъекции на основе ошибок довольно распространены и легко обнаруживаются. Инъекции на основе булевых значений также работают хорошо и довольно легко контролируются.
Но вот в чём дело — SQLi непредсказуем . Один сайт может выглядеть совершенно уязвимым, но ничего не дать, а другой может казаться надёжным, но раскрыть всё через одну полезную нагрузку. Как и в алхимии, вы не узнаете наверняка, пока не протестируете. И всегда стоит попробовать.
Начнём с основ. Зачастую вам не придётся переусердствовать, поскольку SQLMap справится с большей частью работы за вас. Я обычно использую простые полезные данные и не перехожу сразу к сложным, потому что это может привести к тому, что вы упустите реальную уязвимость. Даже слишком раннее изменение параметров, таких как –risk или –level, может привести к сбою полезной нагрузки.
Возьмём пример сайта российского интернет-провайдера. Команда проста. Обычно я использую уровни с 3 по 5. Более низкие уровни не давали результатов, если только это не был какой-нибудь очень устаревший сайт, и, честно говоря, вам не стоит тратить на них время.
Начните с уровня риска 1 , особенно если вы не уверены, есть ли у вас брандмауэр. Переход сразу к риску 3 — неразумный шаг, если вы не уверены, что ситуация полностью открыта.
Теперь попробуем выгрузить их данные с помощью --dump . Нас интересуют база данных биллинга ( -D billing ) и таблица users11 ( -T users11 ). В конце добавим --columns для перечисления столбцов.
Вы также можете использовать –users и –passwords для сброса внутренних данных.
Флаг –users извлекает пользователей и пароли из базы данных. Полезно проверить, связаны ли какие-либо из них с ограничениями по IP-адресам. Если вы видите * , это означает, что все IP-адреса разрешены — это хорошо для нас.
–passwords выгрузит хеши паролей, если они доступны. В случае успеха откроется новый вектор атаки. Мы подробнее рассмотрим это позже.
Давайте теперь проверим второй пример, в котором более высокий риск и уровень работают отлично и на самом деле дают лучшие результаты.
Вот мебельный магазин в Москве. Несмотря на то, что сайт выглядит довольно современным, параметр id= может быть подменён из-за плохой очистки входных данных.
На этот раз мы снова выберем –level=4 и –risk=3 .
Для дальнейшего продвижения нам потребуется выгрузить таблицу пользователей с именами пользователей и хэшами. Но имейте в виду: пользовательские форматы хэшей не взламываются SQLMap. Если это не удастся, не удивляйтесь. Просто экспортируйте их и используйте Hashcat или John the Ripper .
После взлома попробуйте войти на исходный сайт . Тогда вы сможете нанести реальный ущерб, получив доступ к панелям администратора, изменив контент и, возможно, даже найдя новые точки входа.
Мы в деле! Это было легко. Но теперь давайте поднимем градус и рассмотрим более интересную задачу.
А теперь немного пофантазируем. На этот раз наша цель — сайт gov.ru. Из соображений безопасности операций (OPSEC) я не буду раскрывать, какой именно, но уроки всё равно применимы.
Иногда обычные полезные данные SQLMap не работают, обычно из-за брандмауэра (WAF), который фильтрует подозрительные запросы. Именно здесь на помощь приходят скрипты-подмены. Один из моих любимых — randomcase.
Он рандомизирует регистр вашей полезной нагрузки, что помогает обойти WAF, которые полагаются на строгое сопоставление с шаблоном.
Ещё один флаг, который вы могли заметить, — --no-cast . Он указывает SQLMap не приводить типы данных. Это может быть полезно после того, как вы обнаружите работающую инъекцию. До этого он может вам помешать.
Существует множество скриптов взлома, разработанных для разных брандмауэров. Если вам удастся определить, какой брандмауэр запущен, у вас будет больше шансов подобрать правильную комбинацию для его обхода.
Экспериментируйте. Со временем вы найдёте те, которые подходят именно вам.
Перейдем к другой цели — веб-сайту правительства города Хабаровска .
Краткая история: Хабаровск — крупный город на Дальнем Востоке России, расположенный недалеко от границы с Китаем. Он известен своим военным значением и некоторыми сомнительными биологическими программами в советское время. Этот сайт похож на городской архив . Мы собираемся его изучить.
Теперь внимательно посмотрите на функцию поиска. Она отображает результаты в виде понятной таблицы. Вот вам и подсказка: нужно знать, сколько столбцов возвращается. Если в вашем объединении используется неправильное количество столбцов, оно не будет работать.
Используйте это: –union-col=4
Здесь мы знаем, что таблица возвращает четыре столбца, поэтому мы сопоставляем её. Кроме того, использование символа объединения (случайной строки или идентификатора) иногда может помочь стабилизировать полезную нагрузку и избежать ложных срабатываний.
Не забудьте добавить скрипты защиты от несанкционированного доступа. Вы можете даже накладывать их друг на друга, только убедитесь, что они не конфликтуют друг с другом.
Мы заложили основу, охватив основы SQL-инъекций, поработав с SQLMap, разобравшись в роли скриптов взлома и поработав с реальными целями, такими как российские компании и правительственные сайты.
В следующей части мы сделаем еще один шаг и автоматизируем весь процесс с помощью Nuclei, инструментов доркинга и пользовательских рабочих процессов, чтобы масштабировать разведку и нацеливаться еще умнее.
Увидимся во второй части!
Залоговое обеспечение снова из неизвестного места на Украине.
Сегодня мы подробно рассмотрим SQLMap, один из самых мощных инструментов для SQL-инъекций. Это первая часть серии из четырёх, в которой мы рассмотрим, как вручную тестировать и эксплуатировать уязвимости, углубимся в автоматизацию с помощью Nuclei и доркинга Python, научимся взламывать сервер и, наконец, разберём реальный случай полной компрометации сервера с помощью SQLi.
Топ-10 OWASP
Несмотря на то, что он опустился на третье место в рейтинге OWASP Top 10, эксплойты с использованием инъекций всё ещё живы и широко используются. Более того, многие веб-сайты, включая правительственные, по-прежнему широко доступны. Иногда можно встретить простую инъекцию с ограничением по времени , которая работает медленно и скучно, но всё же приводит к утечке данных. В других случаях инъекция с использованием объединения позволит быстро и без проблем выгрузить целые базы данных.
Инъекции на основе ошибок довольно распространены и легко обнаруживаются. Инъекции на основе булевых значений также работают хорошо и довольно легко контролируются.
Но вот в чём дело — SQLi непредсказуем . Один сайт может выглядеть совершенно уязвимым, но ничего не дать, а другой может казаться надёжным, но раскрыть всё через одну полезную нагрузку. Как и в алхимии, вы не узнаете наверняка, пока не протестируете. И всегда стоит попробовать.
Простая полезная нагрузка
Начнём с основ. Зачастую вам не придётся переусердствовать, поскольку SQLMap справится с большей частью работы за вас. Я обычно использую простые полезные данные и не перехожу сразу к сложным, потому что это может привести к тому, что вы упустите реальную уязвимость. Даже слишком раннее изменение параметров, таких как –risk или –level, может привести к сбою полезной нагрузки.
Возьмём пример сайта российского интернет-провайдера. Команда проста. Обычно я использую уровни с 3 по 5. Более низкие уровни не давали результатов, если только это не был какой-нибудь очень устаревший сайт, и, честно говоря, вам не стоит тратить на них время.
Начните с уровня риска 1 , особенно если вы не уверены, есть ли у вас брандмауэр. Переход сразу к риску 3 — неразумный шаг, если вы не уверены, что ситуация полностью открыта.
Теперь попробуем выгрузить их данные с помощью --dump . Нас интересуют база данных биллинга ( -D billing ) и таблица users11 ( -T users11 ). В конце добавим --columns для перечисления столбцов.
Вы также можете использовать –users и –passwords для сброса внутренних данных.
Флаг –users извлекает пользователей и пароли из базы данных. Полезно проверить, связаны ли какие-либо из них с ограничениями по IP-адресам. Если вы видите * , это означает, что все IP-адреса разрешены — это хорошо для нас.
–passwords выгрузит хеши паролей, если они доступны. В случае успеха откроется новый вектор атаки. Мы подробнее рассмотрим это позже.
Давайте теперь проверим второй пример, в котором более высокий риск и уровень работают отлично и на самом деле дают лучшие результаты.
Вот мебельный магазин в Москве. Несмотря на то, что сайт выглядит довольно современным, параметр id= может быть подменён из-за плохой очистки входных данных.
На этот раз мы снова выберем –level=4 и –risk=3 .
Для дальнейшего продвижения нам потребуется выгрузить таблицу пользователей с именами пользователей и хэшами. Но имейте в виду: пользовательские форматы хэшей не взламываются SQLMap. Если это не удастся, не удивляйтесь. Просто экспортируйте их и используйте Hashcat или John the Ripper .
После взлома попробуйте войти на исходный сайт . Тогда вы сможете нанести реальный ущерб, получив доступ к панелям администратора, изменив контент и, возможно, даже найдя новые точки входа.
Мы в деле! Это было легко. Но теперь давайте поднимем градус и рассмотрим более интересную задачу.
Тамперы
А теперь немного пофантазируем. На этот раз наша цель — сайт gov.ru. Из соображений безопасности операций (OPSEC) я не буду раскрывать, какой именно, но уроки всё равно применимы.
Иногда обычные полезные данные SQLMap не работают, обычно из-за брандмауэра (WAF), который фильтрует подозрительные запросы. Именно здесь на помощь приходят скрипты-подмены. Один из моих любимых — randomcase.
Он рандомизирует регистр вашей полезной нагрузки, что помогает обойти WAF, которые полагаются на строгое сопоставление с шаблоном.
Ещё один флаг, который вы могли заметить, — --no-cast . Он указывает SQLMap не приводить типы данных. Это может быть полезно после того, как вы обнаружите работающую инъекцию. До этого он может вам помешать.
Существует множество скриптов взлома, разработанных для разных брандмауэров. Если вам удастся определить, какой брандмауэр запущен, у вас будет больше шансов подобрать правильную комбинацию для его обхода.
Экспериментируйте. Со временем вы найдёте те, которые подходят именно вам.
Колонны
Перейдем к другой цели — веб-сайту правительства города Хабаровска .
Краткая история: Хабаровск — крупный город на Дальнем Востоке России, расположенный недалеко от границы с Китаем. Он известен своим военным значением и некоторыми сомнительными биологическими программами в советское время. Этот сайт похож на городской архив . Мы собираемся его изучить.
Теперь внимательно посмотрите на функцию поиска. Она отображает результаты в виде понятной таблицы. Вот вам и подсказка: нужно знать, сколько столбцов возвращается. Если в вашем объединении используется неправильное количество столбцов, оно не будет работать.
Используйте это: –union-col=4
Здесь мы знаем, что таблица возвращает четыре столбца, поэтому мы сопоставляем её. Кроме того, использование символа объединения (случайной строки или идентификатора) иногда может помочь стабилизировать полезную нагрузку и избежать ложных срабатываний.
Не забудьте добавить скрипты защиты от несанкционированного доступа. Вы можете даже накладывать их друг на друга, только убедитесь, что они не конфликтуют друг с другом.
Краткое содержание
Мы заложили основу, охватив основы SQL-инъекций, поработав с SQLMap, разобравшись в роли скриптов взлома и поработав с реальными целями, такими как российские компании и правительственные сайты.
В следующей части мы сделаем еще один шаг и автоматизируем весь процесс с помощью Nuclei, инструментов доркинга и пользовательских рабочих процессов, чтобы масштабировать разведку и нацеливаться еще умнее.
Увидимся во второй части!