Гайд - SQL иньекция | 1 | End Way - форум программирования и сливов различных скриптов
  • Присоединяйтесь к нам в телеграм канал! EndWay канал | EndSoft канал | EWStudio канал
  • Хочешь поставить скрипт, но не умеешь?
    А может ты хочешь свой уникальный скрипт?

    Тогда добро пожаловать в нашу студию разработки!

    Телеграм бот: EWStudioBot
    Телеграм канал: EWStudio

Гайд SQL иньекция | 1

Jopa

Бот
Автор темы
8 Янв 2023
50
152
33
Статью взял и дополнил

Нам нужна боевая машина для пентеста так-то.Поэтому вот , что я рекомендую закачать:​
1)Kali linux или любой другой дистрибутив (например mint)
2)Установить MySql
3)Скачать Burp suite pro или комьюнити.Отличия в том , что в Pro версии больше фишек и скорость для брута , но для учебы вполне достаточно комьюнити версии.
ссылка: https://portswigger.net/burp/communitydownload
4)Если вы совсем новичок и вам нужна помощь в установке ПО , то есть замечательная статья: https://codeby.net/threads/sobiraem-boevuju-mashinu-dlja-pentesta-s-nulja-chast-1.77085/ и https://codeby.net/threads/sobiraem-boevuju-mashinu-dlja-pentesta-s-nulja-chast-2.77091/#post-408656

Давайте разберемся с основными понятиями и перейдем к практике:

СУБД - это система управления базами данных.То есть иначе говоря - это коробка в которой мы храним содержимое БД (базы данных) , управляем бд ( можем редактировать , удалять , добавлять и т.д) Существуют много различных СУБД , но мы будем работать с MySql.
База данных - это набор данных , который состоит из таблиц и колонок.


Давай авторизируемся в MySql и будем разбираться...
Вводим в консоле mysql -u root -p
(USER который вы задали при установки флаг -p означает , что вход осуществляется с помощью пароля)
SQL - это очень гибкий язык.Он поддерживает регулярные выражения , может выполнять различные математические вычисления и много всего.Давайте покажу пару примеров:
[IMG]
select version();
SELECT - это выбрать какую-то информацию.Команда используется для выбора данных из БД.В данном случае мы хотим узнать версию базы данных.Кстати язык SQL НЕРЕГИСТРОЗАВИСИМЫЙ - это значит мы можем вводить SELECT , select , sElect.Неважно.Это всё будет работать.Если мы работаем с консолью , то мы обязательно должны на конце команды поставить ; - это означает , что команда закончена.
Также можно получить версию бд с помощью select @@version; результат будет такой же.Вы спросите зачем нам вообще эта информация , мы ведь пришли сюда изучать скули.Во первых без знания основ ничего не выйдет , во вторых , чем больше мы знаем информации о жертве , чем легче ее взломать.Так говорил мой бро с соседнего форума
:cool_bun:

[IMG]
с помощью запроса select user(); мы получаем информацию о текущем юзере.

Больше полезный команд:
select @@port; - узнать порт на котором лежит СУБД ( Mysql по умолчанию на 3306)
select database(); получить название активной бд.Активная = используемая
CREATE DATABASE name; создать базу данных ( где name пишем название базы)
show databases; - показать все созданные базы данных
Кстати , помимо созданных вами БД , будут и другие.Например information_schema - это системная бд в которой хранится различная полезная информация о базе , таблицах и колонок.
use name; - выбрать базу данных ( где name пишем название базы)
SHOW TABLES; - показать существующие таблицы
DESCRIBE table; - посмотреть какие колонки в таблице и их тип (varchar - текст , int - числа и т.д)
DROP DATABASE name; - удалить бд
DROP TABLE name; - удалить таблицу из бд
select * from table; - показать содержимое таблицы
SHOW COLUMNS FROM table; - показать названия колонок
SELECT DISTINCT name_column from table_name; - показать уникальные значения
SELECT COUNT(*) FROM table_name; - показать количество записей в таблице

Обновление пароля root
mysqladmin -u root -p oldpassword newpassword

Ладно , на этом , пожалуй остановимся.Есть много cheatsheetов по MySql , что нужно найдете сами.
Давайте уже создадим базу данных , таблицы , колонки и заполним её , чтобы вы понимали , как и что работает.А потом потренируемся выбирать информацию.
CREATE DATABASE Professional;
Создадим базу данных под названием Professional
Если вы сделали все правильно , то введя команду show databases; ВЫ увидите созданную базу данных

[IMG]
Переключаемся на нашу созданную базу use Professional;
Создаем таблицу и колонки
CREATE TABLE rays ( id INT NOT NULL AUTO_INCREMENT, nickname VARCHAR(30) NOT NULL, login VARCHAR(40) NOT NULL, PRIMARY KEY(id));
давайте разберемся , что мы сделали.Сначала мы создали таблицу rays с колонками id,nickname,login и ключом PRIMARY.Ключ Primary означает , что каждая запись будет автоматически пронумероваться
начиная с единицы.VARCHAR - это означает , что в этой колонке только строчные значения с ограничением в 30 символов.NOT NULL - не может быть пустой , int - ЧИСЛА.​

INSERT INTO - ИСПОЛЬЗУЕТСЯ В MySql для добавления записей.Давайте заполним наши колонки)
INSERT INTO rays (nickname,login) VALUES("rays","admin"),("easy","man"),("Dog","Snoop"),("Gay","Louser");
Заполнить таблицу rays в колонках nickname,login СО значениями rays - ник , admin - login и т.д
Если вы все сделали правильно , то будет выглядеть вот так запрос select * from rays; (ВЫБРАТЬ всё из таблицы rays) * означает , что мы берем содержимое всех колонок.
[IMG]


Выдыхаем:)Если вы дошли до сюда , то это здорово.Ведь мы можем начинать тренироваться писать несложные SQL запросы...
Задание №1
Получить все никнеймы из таблицы rays


Получить никнейм из таблицы rays , где айдишник 2
select nickname from rays; select nickname from rays where id = 2;

Получить никнейм из таблицы rays , где никнейм имеет вторую букву 'a'

select nickname from rays where nickname like '%a%';

Получить никнейм из таблицы rays , где никнейм имеет первую букву 'r'

select nickname from rays where nickname like "r%"

Как вы поняли % означает , что есть еще символы (1,2 или хоть 100) он может стоять в начале , посередине , в конце.Где угодно.
Задание № 5
Получить все логины , которые имеют только 5 символов
Код SQL:

select login from rays where login like "_____";
_ означает , что пропущен один символ => мы ставим 5 нижних подчеркиваний.

Вывести id в порядке убывания

select id from rays order by id desc;[/CENTER][/CENTER]

Вывести id в порядке возрастания

select id from rays order by id; или select id from rays order by id asc;

Добавить в таблицу rays колонку news с типом строк не превышающих 200 символов

ALTER TABLE rays ADD COLUMN news varchar (200);[/CENTER]

Выведите логин , который начинается с буквы 'a' С ПОМОЩЬЮ регулярного выражения
select login from rays where login REGEXP "^a";

Выведите логины , которые заканчиваются на букву 'n' С ПОМОЩЬЮ регулярного выражения

select login from rays where login REGEXP "n$";

Выведите все логины , которые заканчиваются на буквы из алфавитного промежутка o-u

Вот кстати алфавит:
[IMG]
select login from rays where login REGEXP "[o-u]$";


Продолжаем изучать дальше!
Union используется для объединения двух запросов.Скажем у нас есть две таблицы и нам нужно получить из них данные , тут как раз поможет нам union.Давайте создадим вторую таблицу и разберемся на практике ( ЭТО ОЧЕНЬ ВАЖНО!)
CREATE TABLE un1on ( id INT NOT NULL AUTO_INCREMENT, password VARCHAR(50) NOT NULL, email VARCHAR(50) NOT NULL, PRIMARY KEY(id));
Внимание!!!Таблицу union создать нельзя , так как она уже зарезервирована.
Заполним колонки данными

INSERT INTO un1on (password,email) VALUES ("Grisha","admin@lolza"), ("grishas","[email protected]"), ("hackermother","[email protected]"), ("numberone","[email protected]");Результат:
[IMG]
Давайте попробуем получить все данные из двух таблиц.
select * from rays union select * from un1ion; У нас не получилось! ERROR 1222 (21000): The used SELECT statements have a different number of columns
Ошибка говорит , что у нас разное количество колонок.То есть в rays 3 колонки ( login,nickname,news) , а в таблице un1on две email,password.То есть не хватает одной колонки у un1on.
Эту ошибку можно исправить вот так:
select * from rays union select *,null from un1ion; вместо null можно вписать not null или же цифру , а также false или true прокатит , ведь это тоже по сути цифры. True - 1 , false - 0.
При использовании union одинаковые строки удаляются , чтобы вывести все пишем union all.
Еще один полезный оператор LIMIT который имеет два параметры с какого айдишника начать и сколько нужно взять
limit 0,1 означает взять первые объект и одну штуку.
limit 1,1 означает взять второй объект
limit 0,2 означает взять начиная с первого объекта две штуки.
[IMG]


А теперь переходим плавно к SQL иньекциям , так как я вам рассказал хоть какую-то базу)
Я заметил , что чащего всего скули встречаются на новостных сайтах , так , как они часто состоят из http://домен/линк/параметр=значение параметра
Ну например:
http://kakietonewss/abcd/id=1
id - это параметр
1 - это значение параметра id
Для начала нужно определить , а есть ли вообще там скуля.Можно это сделать подставив на конец значения одинарную кавычку , двойную , обратный слэш , другие полезные нагрузки.
[IMG]
[IMG]
Отлично!Значит тут присутствует SQL INJ.
Если это сайт новостной , то мы можем прочитать скрытые новости просто добавив полезную нагрузку
'or 1=1 -- -
' - это обрамление.Его нужно подбирать
-- - - это комментарий , он тоже может быть другой.
[IMG]
Можно по-разному составлять полезные нагрузки.Например вместо 'or 1=1 -- - можно также
'or true -- -
или же
'or 8/2=16/4 -- -
или же
'or version() -- -
version() дает единицу , то есть true.Поэтому это сработает.
 
Like
  • 6
Реакции: 5 users

nevsps

Джун
27 Янв 2023
4
0
1
Для начала нужно определить , а есть ли вообще там скуля.Можно это сделать подставив на конец значения одинарную кавычку , двойную , обратный слэш , другие полезные нагрузки.

Также для эксплуатации нужно, чтобы сервер был настроен таким образом, чтобы отображать ошибки

С популяризацией фреймворков в веб-разработку, такая уязвимость утратила актуальность в целом. Сейчас мало кто в самописах реализует работу с базой данных напрямую, проще же использовать готовый фреймворк, где велосипед уже придуман, протестирован и используется ещё в миллионе таких же проектов. Так что искать возможность инъекции в каком-то конкретном сайте смысла нет

А с наплывом мамкиных питонистов, так много кто использует эти фреймворки, не имея ни малейшего представления, как оно на самом деле работает
 
Активность:
Пока что здесь никого нет