Взлом баз данных, часть 2: Основы SQL-инъекций и инструменты SQL-инъекций

Published April 4, 2020 • 1 min read

С возвращением, мои честолюбивые хакеры в белых шапках, читайте эту серию статей о взломе баз данных.

В первой части этой серии мы изучили основы баз данных, включая язык структурированных запросов или SQL. Это язык баз данных. Основным методом взлома баз данных является внедрение этого SQL-кода в веб-формы и другие приложения, использующие внутреннюю базу данных. Почти каждое веб-приложение использует внутреннюю базу данных для аутентификации, электронной коммерции, электронной почты и т. Д.

Диаграмма выше пытается осветить процесс SQL-инъекции. Обратите внимание, что злоумышленник вводит данные в веб-форму, он выходит в Интернет через брандмауэр (брандмауэр должен быть открыт для веб-формы), на веб-сервер, затем на сервер приложений и оттуда на сервер базы данных. Это самая распространенная форма взлома базы данных. Ключевым моментом здесь является знание того, какие команды SQL для ввода веб-формы влияют на базу данных удобным для вас способом.

Злоупотребление SQL

В этой статье я хочу научить вас основам злоупотребления этим языком для доступа к базовой базе данных и получения аутентификации, DoS базы данных или извлечения данных.

Большинcтво простых методов, которые я продемонстрирую здесь, больше не будут работать против современных приложений, но нам нужно с чего-то начинать, и принципы являются такими же, хотя и более сложными, в современных системах. В последующих статьях этой серии мы перейдем к все более сложным и эффективным методам внедрения SQL.

Аутентификация

Как вы помните из моей первой статьи в этой серии, базовый SQL-запрос выглядит следующим образом;

SELECT <columns>

FROM <table>

WHERE <conditions>

Этот базовый запрос может быть использован для аутентификации. Представьте себе базу данных, в которой каждый пользователь со своим именем пользователя и паролем находится в таблице с именем «ПОЛЬЗОВАТЕЛИ». Мы могли бы аутентифицировать наших пользователей, запросив их имя пользователя и пароль, а затем проверив таблицу базы данных, чтобы убедиться, что они совпадают. Такой запрос будет выглядеть так, когда пользователь вводит форму аутентификации;

SELECT USERNAME, PASSWORD

FROM USERS

WHERE USERNAME ='OTW' AND PASSWORD = 'VZlomxyz'

Обратите внимание, что в предложении WHERE с условиями у нас есть логическое AND. Это означает, что оба условия должны оцениваться как ИСТИНА, чтобы пользователь успешно прошел аутентификацию и получил доступ к системе. Если любое из них имеет значение false, запрос оценивается как false, и пользователь не проходит проверку подлинности и вход в систему.

Именно так большинство систем аутентифицируют пользователей.

Обратите внимание, что и в поле имени пользователя, и в поле пароля записи заключены в одинарные кавычки ('). Это стандартно в SQL при использовании строк (текста) в предложении WHERE.

Проходя мимо аутентификации

Также важно отметить, что в SQL двойная черта (-) действует как символ комментария. Это означает, что если появляется знак «-», все после него игнорируется интерпретатором SQL.

Теперь, что произойдет, если я введу следующую информацию в форму.

Теперь, когда эта информация была возвращена в базу данных, SQL-запрос будет выглядеть следующим образом;

SELECT USERNAME, PASSWORD

FROM USERS

WHERE USERNAME = 'OTW' OR 1=1-- AND PASSWORD = 'anything'

Когда база данных оценивает этот оператор, USERNAME = 'OTW "имеет значение TRUE. Кроме того, 1 = 1 также всегда оценивается как true. Все, что после - ( зеленым ), рассматривается как комментарий и игнорируется интерпретатором SQL, так что Заявление оценивается как истинное, и вы аутентифицированы даже без использования пароля!

Символы SQL-инъекции

Чем больше вы знаете о SQL, тем эффективнее вы можете использовать SQL-инъекцию. Мы используем стандартные команды SQL и символы, которые заставляют базу данных делать то, что мы хотим. Некоторые из ключевых символов SQL-инъекций включают в себя;

; statement termination

' or " character String Indicators

-- or # single-line comment

/*…*/ multiple-line comment

+ addition, concatenate (or space in url)

|| (double pipe) concatenate

% wildcard attribute indicator

?Param1=foo&Param2=bar URL Parameters

PRINT useful as non transactional command

@variable local variable

@@variable global variable

waitfor delay '0:0:10' time delay (часто используется в слепой SQL-инъекции)

Атака отказа в обслуживании (DoS)

Атака «Отказ в обслуживании» может иметь совсем другое значение при работе с базами данных. В то время как большинство DoS-атак исчерпывают существующие ресурсы, так что законные пользователи не могут их использовать, при атаках на базы данных это может означать просто уничтожение всех данных.

В языке SQL вместо команды delete или remove используется ключевое слово DROP. Чтобы удалить таблицу или базу данных, нам просто нужно использовать ключевое слово DROP перед именем объекта. Так, например, если мы хотим удалить таблицу USERS, мы скажем «DROP Table Users;». Мы могли бы добавить это к нашей форме аутентификации следующим образом;

После этого будет создан SQL-оператор, подобный приведенному ниже.

SELECT USERNAME, PASSWORD

FROM USERS

WHERE USERNAME ='OTW'; DROP TABLE USERS; --PASSWORD='vzlompassword"

Теперь, может быть, приведенный ниже мультфильм xkcd будет иметь для вас больше смысла?

Инструменты SQL-инъекции

Существует множество инструментов SQL-инъекций, многие из которых встроены в Kali. Вы можете найти их, перейдя в Приложения -> Оценка базы данных

По порядку они появляются в Кали;

bbqsql - это инструмент SQL-инъекции, который автоматизирует процесс и может использовать многопоточную атаку. Он был разработан специально для слепых SQL-инъекций (когда злоумышленник не видит ни ответа от базы данных, ни ошибок, ни других выходных данных). bbqsql использует четыре слепых SQL-атаки;

1. Слепая инъекция SQL

2. Внедрение SQL на основе времени

3. Deep Blind

4. SQL-инъекция на основе ошибок

sqlmap - это, пожалуй, самый популярный инструмент SQL-инъекции, а также открытый исходный код. Он разработан, чтобы помочь вам взять под контроль сервер базы данных через уязвимые веб-приложения. Его можно использовать против MySQL, SQL Server, Oracle, DB2, Microsoft Access и PostgreSQL. Среди его сильных сторон - способность определять базовую базу данных и отображать ее структуру таблиц и столбцов.

sqlninja - это инструмент SQL-инъекции с открытым исходным кодом, предназначенный исключительно для Microsoft SQL Server. Доступно только для Linux и Unix, оно разработано, чтобы помочь вам получить доступ к базе данных и получить контроль. Он также может быть интегрирован с Metasploit.

SQLSUS - это инструмент для инъекций MySQL с открытым исходным кодом на основе Perl. Поскольку он написан на Perl, вы можете добавлять свои собственные модули. Он имеет возможность клонировать базу данных в локальную базу данных sqlite в системе злоумышленника. Это, вероятно, лучший инструмент для внедрения SQL в вездесущую онлайн-базу данных MySQL.

Havij - это автоматизированный инструмент для SQL-инъекции на базе Windows. Он имеет удобный графический интерфейс, что делает его простым в использовании для начинающих. Он был выпущен иранской охранной фирмой itsecteam.com в 2010 году.

Он имеет очень схожие возможности с sqlmap, но удобный графический интерфейс значительно упрощает работу с ним.

Safe 3 SQL инжектор - это автоматический инструмент для внедрения SQL-кода с мощными функциями искусственного интеллекта, позволяющий определять тип базы данных, лучший тип внедрения и лучший путь для использования уязвимости и базы данных. Он эффективен как для HTTP и HTTPS, так и для баз данных Oracle, MySQL, MS SQL Server, PostgreSQL, MS Access, sqlite, Sybase и SAP MaxDB.

MOLE - это автоматизированный инструмент SQL-инъекции с открытым исходным кодом, который работает с MySQL, MS SQL Server и серверами баз данных postgreSQL. Он прост в использовании, вы просто указываете ему URL уязвимого сайта, а он делает все остальное.

Я буду запускать учебные пособия по каждому из этих и другим инструментам, так что возвращайтесь к ним начинающие хакеры!

Source

Подпишись на рассылку