Я взломал вашу MySQL базу. Доброжелатель

Получил по почте. Человек приложил пару скриншотов с данными и просьбой о вознаграждении взамен рассказа о том, где уязвимость.

На скринах, в обрезанном интерфейсе неизвестной мне программы, были данные из базы одного из моих проектов.

Дениса занервничал. 😁

Темой безопасности и уязвимостей на сайтах, признаться, никогда особо не интересовался. Слышал, что-то конечно про SQL-injection, что-то читал про DDoS , но в голову не брал. А тут нате вам – приплыли.

Пришлось пройти и этот квест.

Причина, кстати, в расπздяйстве (фильтруйте и проверяйте параметры в URL) и закономерному при этом наказании — MySQL-инъекции. 😉

Взламываю свою базу данных MySQL

Поломана MySQL-база. Значит там и проблема. Это раз.

Данные в интерфейсе какой-то программы с обрезанным названием. Значит процесс автоматизирован. Это два.

Загуглил про SQL-инъекции и вот оно – то, что нужно. Статья старая, но расписано как надо и в картинках для чайников. Стало понятно, как злоумышленник запускает нужные SQL-запросы – через оператор UNION, прилепляемый к параметру в URL страницы сайта.

Открыл сырые логи сайта — ~500 обращений к сайту с IP моего доброжелателя с использованием этой конструкции:

Здесь можно бы и остановиться — причина понятна, пофиксить и забыть.

Да, но нет!

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

Безуспешно гуглил по всякому, а когда отчаялся и решил искать комплексные решения анализа уязвимостей сайта, в рекомендациях Netsparker’а увидел знакомый скриншот…

SQLi Dumper – та самая программа для поиска и взлома уязвимых баз данных MySQL.

Как оказалось, с этой программой, процесс взлома «дырявых» баз и просмотр данных из них доступны любому идиоту. Софтина сама находит дураков и показывает их данные в пару кликов.

У меня цель была другая – исследовать свой сайт.

Вставил URL с параметром из логов, нажал GO и GoToDumper, когда она немного потрепавшись с сервером нашла уязвимость. Потом Get Databases, Get Tables, Get Columns, Dump Data. И да, вот они мои данные, полученные через backdoor:

Блокирую взлом базы данных MySQL

Суть взлома, как по книжке: параметр из URL (это ID поля из базы) без проверок и фильтров прямиком идёт в SQL запрос. Злоумышленник через оператор UNION цепляет к нему свой SQL запрос и сервер его послушно выполняет.

То есть вместо валидного обращения к новостной статье #314:

https://apasscracker.com/news/shownews.php?newsid=314

получается запрос:

https://apasscracker.com/news/shownews.php?newsid=314999999.9' union all select 1,2,3,4,5,[t],7,8,9,10,11,12,13 and '0'='0

которым SQLi Dumper и раскручивает базу дальше.

Поскольку, по логике алгоритма, ID – это всегда целочисленное значение, то закрыть эту конкретную дырку элементарно — просто в скрипте явно приводим полученный из URL параметр к целочисленному значению:

$id=intval($id);

Всё!

Теперь, когда в параметре ожидаемое целое число, скрипт отработает, как задумано — покажет новость; когда в параметре непонятная херня вместо цифры, скрипт завершится с ошибкой, а мои волосы останутся шелковистыми и без дополнительной седины. 😉

Вместо эпилога

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

В общем, проверяйте свои линки с параметрами на потенциальные дыры. Потому что, как прочитал где-то за эти дни: Сейчас ломают всё!

PS: и ещё прочтённый за эти дни ништячок — как узнать, что сервер DDoS’ят.

0 0 голоса
Рейтинг статьи

Автор

denglad

IT-каменщик. Во всём по-немногу

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x