Привет, вещает твой друг по ту сторону экрана , эта тема больше относится к кибер-безопасности, но всё же решил осветить именно в СМИ (т.к. это мой личный опыт, и считаю своим долгом честно заявить о нём! да да! у меня получилось! хейтеры - завидуйте...)

Я опишу, как мне удалось использовать SQL-инъекцию, используя пользовательский агент в качестве вектора. Прежде всего, я оставлю “размытие” в чувствительных частях, как это было запрошено у заказчика частной программы. После аутентификации в приложении я наткнулся на следующий запрос: 
После этого попробуйте несколько вещей .. и приложение всегда возвращает “ОК” в ответе. Я поместил одинарную кавычку (‘) в заголовок User-Agent. result, вместо того чтобы приложение вернуло 200 OK, вернуло 401 .. как показано ниже: 
Далее step пытался использовать некоторые полезные нагрузки SQL-инъекции, но после нескольких попыток он увидел, что приложение было уязвимо для типа SQL-инъекции на основе булева. Применяя тесты на практике, когда полезная нагрузка ‘ and ’ 1 ‘=’ 1 была вставлена в Пользовательский агент, приложение вернуло 200 ОК, когда полезная нагрузка ‘ and ’ 1 ‘=’ 2 была введена, приложение вернуло 401. Изображения ниже иллюстрируют этот факт:

Убедившись, что приложение уязвимо, следующий шаг состоял в том, чтобы попытаться проверить, какую версию базы данных использует приложение. Для этого я протестировал функции баз данных Oracle, MySQL, MicrosoftSQL и т. Д. Наконец, через полезную нагрузку ‘ и подстроку(@@version,1,1)=1=’1", можно было определить, что база данных была MySQL или MariaDB. :
OBS: если вы не знаете, какую подстроку функции здесь вы можете найти :)

После итерации значений функции substring я получил версию i, которая была 10.1.21 Mariadb.
Классный трюк , когда вы находите логическое основание, состоит в том, чтобы проверить, есть ли возможность использования “подзапроса”, в моем случае это было возможно.

Чтобы получить название таблицы, нужно составить список слов с какими-то знакомыми именами и это тоже круто, составить список слов с названием компании. Через следующую полезную нагрузку ‘ И (выберите 1 из “СПИСКА СЛОВ” предел 0,1)=1+‘, можно было получить имя таблицы “app_user”, см. Что на изображении ниже возвращается 200 OK в ответе сервера.
Теперь, когда у нас есть имя таблицы, мы переходим за имя столбцов, чтобы получить имя пользователя и пароль. Точно так же, как он был использован для получения имени таблицы, здесь также используется попытка / ошибка с общими именами, используемыми в столбцах, таких как user, password, user_pass, passwd и т. Д. Следующие изображения иллюстрируют имя извлеченных столбцов.

Наконец, следующая полезная нагрузка ищет столбец “пароль” в таблице “app_user”, где идентификатор пользователя равен "X", и приносит пароль пользователя в приложение.
(Верните 200 “OK” для идентификатора пользователя 971).
(Возврат 401 для идентификатора пользователя 972).
Это все личное, я не могу показать остальное с паролями в приложении, потому что это нарушило бы некоторые условия :) Делиться - это забота :)
С Уважением, Хакерман!