• Открыта запись на вторую часть курса по анонимности и безопасности в сети интернет "Paranoid II" от команды codeby. Анонимные роутеры, Подъём, настройка и администрирование Tor-ноды, Работа с железом ПК, Удаление аппаратных закладок, Минимизация рисков, Авторские разработки и многое другое. Подробнее ...

Статья SQL - прежде чем ломать базы данных

explorer

explorer

Red Team
05.08.2018
679
1 480
Всем привет!

В сети очень много материала по внедрению SQL-инъекций, однако я скажу что стоит изучать эту тему не с внедрения, а с создания баз данных и освоения операторов SQL. Только так придёт понимание, когда знаешь всё изнутри. Самый распространённый вариант БД это MySQL, поэтому рассматривать будем именно её.

Приступим:

Рассказывать буду на примере Kali Linux, в этой ОС уже предустановлена система управления базами данных (СУБД). Если у вас другой дистрибутив, то можно проверить наличие MySQL командой mysql --version, в Кали на выходе получаете примерно следующее:
mysql Ver 15.1 Distrib 10.3.15-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
Как видно база данных стоит MariaDB, это не должно смущать. MariaDB это форк MySQL, только работающая быстрее, поэтому имеет совместимость по sql-операторам.
Если MySQL не установлена на вашей оси, то это несложно сделать. Например установка на Debian 9 описана

Первое что нужно сделать, это запустить СУБД в терминале командой service mysql start
И потом подключаемся к базе. По умолчанию в Кали пользователь базы root без пароля, поэтому когда у нас спросят пасс, просто нужно нажать ENTER.

SQL - прежде чем ломать базы данных


Прекрасно! Посадим Буратино за компьютер, пускай прокачает свои деревянные мозги )

SQL - прежде чем ломать базы данных


Настало время создать нашу базу командой create database golden_key; Обратите внимание на точку с запятой, она обязательна и означает завершённый запрос. База создана, теперь добавим в неё пользователя таким образом:
grant all privileges on golden_key.* to buratino@localhost identified by 'papa_Karlo';
Разберём что в этой команде. Имя-базы-данных golden_key, пользователь buratino, пароль papa_Karlo, кроме этого мы наделили пользователя максимальными привилегиями.

SQL - прежде чем ломать базы данных


Обновим права доступа, перезагрузив таблицу привилегий командой flush privileges; потом введём exit для выхода из СУБД. Посмотрим сработали ли наши манипуляции. Снова подключаемся к MySQL но уже под новым пользователем с паролем papa_Karlo. И получаем доступ к управлению нашей базы командой use golden_key;

Как видим всё прекрасно сработало

SQL - прежде чем ломать базы данных


Теперь Буратино с полным доступом может сделать с базой "золотой ключик" всё что угодно. Применим оператор SHOW DATABASES; и выведем список баз

SQL - прежде чем ломать базы данных


Здесь мы видим кроме нашей базы "golden_key" ещё присутствует "information_schema". Информационная схема information_schema является является стандартным представлением метаданных в языке SQL. То есть это некий шаблон, благодаря которому, не нужно изобретать велосипед. В information_schema содержатся сведения обо всех базах и их записях.

Тот же самый результат мы можем получить обратившись к information_schema c оператором select, то есть мы делаем выборку названия баз.

SQL - прежде чем ломать базы данных


Поскольку у нас может быть множество баз,то текущею базу можно узнать таким образом:

SQL - прежде чем ломать базы данных


С помощью оператора select можно сделать несколько запросов через запятую select database(),version();

SQL - прежде чем ломать базы данных


Пока текущая база пустая, пора добавить в неё таблицу. Скопируйте и вставьте следующий код:

CREATE TABLE secret (
id INT NOT NULL AUTO_INCREMENT,
bitcoin_key VARCHAR(100) NOT NULL,
PRIMARY KEY(id)
);


SQL - прежде чем ломать базы данных


Разберёмся, что это было ) Мы создали таблицу secret, в которой размещены 2 колонки(столбцы) - id и bitcoin_key. Для id мы установили auto_increment - MySQL автоматически будет увеличивать значение этого поля для каждой последующей записи. Таким образом автоматически поддерживается функция назначения уникального ID номера для каждой записи. Также обязательно нужно указать PRIMARY KEY - какой столбец использовать в качестве ключевого. А значение VARCHAR ограничивает длину записи.

Выведем название таблицы двумя способами:

SQL - прежде чем ломать базы данных


Также выведем двумя способами колонки. Способов на самом деле больше.

SQL - прежде чем ломать базы данных



Ну что же, теперь нужно заполнить поля в колонках. Каждое строковое значение должно быть в кавычках. Полям с опцией auto increment задавать значение не требуется. Вставим в колонку bitcoin_key таблицы secret значение поля main_top_secret_password.

INSERT INTO secret (bitcoin_key)
VALUES
("main_top_secret_password");


После создания полей сделаем выбор id и видим значение 1, хотя мы явно его не задавали. Значение появилось благодаря опции auto increment. Далее делаем выборку с помощью подстановки *. Таким образом выбираются все поля одновременно.

SQL - прежде чем ломать базы данных



Добавим еще одну запись:

INSERT INTO secret (bitcoin_key)
VALUES
("cd5b1e4947e304476c788cd474fb579a");


И просмотрим содержимое полей ещё одним способом - перечисляя названия колонок для таблицы secret

SQL - прежде чем ломать базы данных


Всё хорошо, но если у нас не одна тысяча записей, то вывод всех полей явно неразумен. С помощью like можно вывести любое значение по неполному названию. В данном примере мы хотим найти запись начинающуюся с main. Заключаем в кавычки main и ставим % означающий любое значение.
Также возможен вариант что у нас много записей, которые начинаются с main. Тогда мы можем уточнить поиск, если например знаем номер id.

SQL - прежде чем ломать базы данных


Также полезно бывает узнать общее количество полей в базе

SQL - прежде чем ломать базы данных


Вот так коротенько.
В одной статье невозможно раскрыть тему, но основной посыл - тренируйтесь сначала создавать базы/таблицы/колонки/записи/пользователей и т.д. Учитесь делать запросы у себя на локалке, и когда станет всё ясно, можно тренироваться на уязвимых машинах, и будет всё гораздо проще )
 
P

Pazsh

Happy New Year
16.09.2018
88
41
Класс, можно сказать получил полноценный гайд по использованию SQL запросов. Буду использовать эту тему, как пометку для себя.
 
  • Нравится
Реакции: F_ckedTurtle и explorer
Rocer

Rocer

Happy New Year
04.09.2017
136
7
Отличная статья
 
explorer

explorer

Red Team
05.08.2018
679
1 480
Парни, благодарю за ваши комменты и реакции. Вижу что тема зашла. Сделаю тогда скоро вторую часть. Здесь была только верхушка айсберга ) Рассмотрим ещё другие моменты, которые обязательно пригодятся в реальности.
 
iBragimoff

iBragimoff

Happy New Year
09.07.2019
73
13
Ну не знаю. Мне как новичку в СУБД очень сложно понять данную статью, а она нацелена на новичков, как я понял. Пока читал статью, только и делал, что переписывал, а смысл команд особо и не понял. Сугубо личное мнение.
 
explorer

explorer

Red Team
05.08.2018
679
1 480
Ну не знаю. Мне как новичку в СУБД очень сложно понять данную статью, а она нацелена на новичков, как я понял. Пока читал статью, только и делал, что переписывал, а смысл команд особо и не понял. Сугубо личное мнение.
Напишите, где не ясно, постараюсь объяснить "на пальцах". Скорее всего не ясен изначальный принцип работы базы, потому и остальное не ясно.
Вот смотрите - вы собрались позвонить, но телефон не знаете, шутка ли запомнить 200-300 номеров. Тогда вы делаете запрос в базу данных, где хранятся записи, аккуратненько разложенные по полочкам в таблице - в данном случае базой выступит телефон, а таблица это записная книжка, в которой есть поля, а в полях записи - Вася Пупкин, имена это одна колонка, номер телефона это вторая колонка. Примерно так )
 
iBragimoff

iBragimoff

Happy New Year
09.07.2019
73
13
Напишите, где не ясно, постараюсь объяснить "на пальцах". Скорее всего не ясен изначальный принцип работы базы, потому и остальное не ясно.
Вот смотрите - вы собрались позвонить, но телефон не знаете, шутка ли запомнить 200-300 номеров. Тогда вы делаете запрос в базу данных, где хранятся записи, аккуратненько разложенные по полочкам в таблице - в данном случае базой выступит телефон, а таблица это записная книжка, в которой есть поля, а в полях записи - Вася Пупкин, имена это одна колонка, номер телефона это вторая колонка. Примерно так )
Назначение СУБД понятно, сами команды которыми вы пользуетесь не понятны. Ну раз у меня выдалась такая возможность, то допустим, вот эта команда: grant all privileges on golden_key.* to buratino@localhost identified by 'papa_Karlo'; Что за grant? Просто читая данную команду, я вижу лишь текст на английском языке не буду же я разговаривать с СУБД как с человеком только на английском, он ведь изначально заточен на команды) Спасибо за уделённое время)) Ну а так вопросов предостаточно, просто решил в краткой форме изложить.
 
explorer

explorer

Red Team
05.08.2018
679
1 480
Можно было даже просто-напросто через переводчик перевести
grant all privileges - предоставление всех привилегий

В любом языке программирования есть так называемые зарезервированные слова/выражения. Это и есть пример команды, а не просто текст на английском.
 
  • Нравится
Реакции: iBragimoff
iBragimoff

iBragimoff

Happy New Year
09.07.2019
73
13
Можно было даже просто-напросто через переводчик перевести
grant all privileges - предоставление всех привилегий

В любом языке программирования есть так называемые зарезервированные слова/выражения. Это и есть пример команды, а не просто текст на английском.
Ладно, спасибо, дальше сам как-нибудь.
 
Deminig

Deminig

Happy New Year
18.01.2019
38
3
Классная статья, копировать-вставить не получилось, зато научился печатать без ошибок!))
Спасибо!
 
pilot1994ar

pilot1994ar

Happy New Year
01.12.2019
7
2
Kruto! Spasibo za material. Dobavil v zakladki!
 
Y

yr1

Happy New Year
10.08.2018
14
3
Так же по возможности интересуюсь потихоньку данным направлением. В чем заключается смысл-суть команд или слов при написании то заглавными буквами то маленькими? сдесь немного не ясно..
Спасибо за статью
Ждем вторую часть)
 
explorer

explorer

Red Team
05.08.2018
679
1 480
Так же по возможности интересуюсь потихоньку данным направлением. В чем заключается смысл-суть команд или слов при написании то заглавными буквами то маленькими? сдесь немного не ясно..
Спасибо за статью
Ждем вторую часть)
Во второй части я написал по этому вопросу - Регистр написания не имеет значения, поэтому пишите как хотите.
 
  • Нравится
Реакции: yr1
Мы в соцсетях: