Статью взял и дополнил
Нам нужна боевая машина для пентеста так-то.Поэтому вот , что я рекомендую закачать:
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 - это очень гибкий язык.Он поддерживает регулярные выражения , может выполнять различные математические вычисления и много всего.Давайте покажу пару примеров:
select version();
SELECT - это выбрать какую-то информацию.Команда используется для выбора данных из БД.В данном случае мы хотим узнать версию базы данных.Кстати язык SQL НЕРЕГИСТРОЗАВИСИМЫЙ - это значит мы можем вводить SELECT , select , sElect.Неважно.Это всё будет работать.Если мы работаем с консолью , то мы обязательно должны на конце команды поставить ; - это означает , что команда закончена.
Также можно получить версию бд с помощью select @@version; результат будет такой же.Вы спросите зачем нам вообще эта информация , мы ведь пришли сюда изучать скули.Во первых без знания основ ничего не выйдет , во вторых , чем больше мы знаем информации о жертве , чем легче ее взломать.Так говорил мой бро с соседнего форума
с помощью запроса 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; ВЫ увидите созданную базу данных
Переключаемся на нашу созданную базу 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 - ЧИСЛА.
начиная с единицы.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) * означает , что мы берем содержимое всех колонок.
Выдыхаем:)Если вы дошли до сюда , то это здорово.Ведь мы можем начинать тренироваться писать несложные SQL запросы...Если вы все сделали правильно , то будет выглядеть вот так запрос select * from rays; (ВЫБРАТЬ всё из таблицы rays) * означает , что мы берем содержимое всех колонок.
Задание №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 в порядке убывания
Вывести id в порядке возрастания
Добавить в таблицу rays колонку news с типом строк не превышающих 200 символов
Выведите логин , который начинается с буквы 'a' С ПОМОЩЬЮ регулярного выражения
Выведите логины , которые заканчиваются на букву 'n' С ПОМОЩЬЮ регулярного выражения
Выведите все логины , которые заканчиваются на буквы из алфавитного промежутка 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]");Результат:
Давайте попробуем получить все данные из двух таблиц.
Ошибка говорит , что у нас разное количество колонок.То есть в rays 3 колонки ( login,nickname,news) , а в таблице un1on две email,password.То есть не хватает одной колонки у un1on.
Эту ошибку можно исправить вот так:
При использовании union одинаковые строки удаляются , чтобы вывести все пишем union all.
Еще один полезный оператор LIMIT который имеет два параметры с какого айдишника начать и сколько нужно взять
limit 0,1 означает взять первые объект и одну штуку.
limit 1,1 означает взять второй объект
limit 0,2 означает взять начиная с первого объекта две штуки.
А теперь переходим плавно к SQL иньекциям , так как я вам рассказал хоть какую-то базу)
Я заметил , что чащего всего скули встречаются на новостных сайтах , так , как они часто состоят из http://домен/линк/параметр=значение параметра
Ну например:
http://kakietonewss/abcd/id=1
id - это параметр
1 - это значение параметра id
Для начала нужно определить , а есть ли вообще там скуля.Можно это сделать подставив на конец значения одинарную кавычку , двойную , обратный слэш , другие полезные нагрузки.
Отлично!Значит тут присутствует SQL INJ.
Если это сайт новостной , то мы можем прочитать скрытые новости просто добавив полезную нагрузку
'or 1=1 -- -
' - это обрамление.Его нужно подбирать
-- - - это комментарий , он тоже может быть другой.
Можно по-разному составлять полезные нагрузки.Например вместо 'or 1=1 -- - можно также
'or true -- -
или же
'or 8/2=16/4 -- -
или же
'or version() -- -
version() дает единицу , то есть true.Поэтому это сработает.
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
Вот кстати алфавит:
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]");Результат:
Давайте попробуем получить все данные из двух таблиц.
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 означает взять начиная с первого объекта две штуки.
А теперь переходим плавно к SQL иньекциям , так как я вам рассказал хоть какую-то базу)
Я заметил , что чащего всего скули встречаются на новостных сайтах , так , как они часто состоят из http://домен/линк/параметр=значение параметра
Ну например:
http://kakietonewss/abcd/id=1
id - это параметр
1 - это значение параметра id
Для начала нужно определить , а есть ли вообще там скуля.Можно это сделать подставив на конец значения одинарную кавычку , двойную , обратный слэш , другие полезные нагрузки.
Отлично!Значит тут присутствует SQL INJ.
Если это сайт новостной , то мы можем прочитать скрытые новости просто добавив полезную нагрузку
'or 1=1 -- -
' - это обрамление.Его нужно подбирать
-- - - это комментарий , он тоже может быть другой.
Можно по-разному составлять полезные нагрузки.Например вместо 'or 1=1 -- - можно также
'or true -- -
или же
'or 8/2=16/4 -- -
или же
'or version() -- -
version() дает единицу , то есть true.Поэтому это сработает.