1 Oracle É fácil apresentar o Oracle como um banco de dados RDBMS relativamente antigo, com uma participação de mercado relativamente grande e frequentemente usado em alguns bancos de dados muito grandes. Além de seu bom suporte para várias linguagens SQL, ele também fornece uma variedade de pacotes ricos, procedimentos armazenados e até suporta a criação de java e biblioteca. Essas funções poderosas fornecem boa conveniência para Hacking.
O próprio Oracle tem muitas contas padrão e muitos procedimentos armazenados. Esses procedimentos armazenados são criados pelo sistema. Muitas contas padrão são abertas ao público. Nos últimos anos, muitas vulnerabilidades do Oracle foram lançadas, incluindo overflow e SQL. incluindo injeções. Aqui, a vulnerabilidade de injeção de SQL é particularmente importante, porque no Oracle, sem adicionar outras palavras-chave AUTHID CURRENT_USER, o processo armazenado criado é executado como o criador durante a execução, e o público não tem acesso a esses processos armazenados. Todos têm permissão para chamar, portanto, se. há uma injeção no processo armazenado integrado, é fácil para usuários comuns atualizarem para as permissões do sistema Oracle. O próprio Oracle possui muitas contas integradas, algumas das quais possuem senhas padrão e permissões CONNECT. Dessa forma, se a porta Oracle não estiver protegida por um firewall e puder ser conectada remotamente, a conta padrão poderá ser usada se você fizer login. entrar no sistema remotamente e, em seguida, usar o SQL do processo armazenado no sistema para injetar uma vulnerabilidade, o sistema irá travar. É claro que o login no Oracle requer um SID, mas o tnslintener do Oracle não define uma senha. por padrão, então você pode usar tnscmd .pl usa o comando services para descobrir o SID do sistema (nas versões mais recentes, essa falha foi corrigida. Este também é um modo muito clássico de invadir o Oracle).
2 Contexto Técnico do Oracle Web Hacking
As ricas tabelas de sistema da Oracle. Quase todas as informações no Oracle são armazenadas em tabelas do sistema. O status atual da operação do banco de dados, as informações atuais do usuário, as informações atuais do banco de dados, as informações sobre os bancos de dados e as tabelas que os usuários podem acessar... As tabelas do sistema são a parte central de todo o banco de dados. obtenha todas as informações consultando as tabelas do sistema urgentemente necessárias. Por exemplo, sys.v_$option contém algumas informações sobre o banco de dados atual, como se ele suporta java, etc., all_tables contém todas as informações da tabela, all_tab_colmuns contém todas as informações da coluna, etc., o que nos fornece uma maneira muito ampla de obter informações, posteriormente será relacionado à descrição de como usar tabelas do sistema para obter informações confidenciais.
Entre as diversas vulnerabilidades do Oracle, é urgente falar sobre a injeção de procedimentos armazenados. Na verdade, os procedimentos e funções armazenados também recebem entradas do usuário e depois as enviam para o servidor de banco de dados para análise e execução. estiver selecionado Se o esquema for construído em uma sequência SQL e implementado, será fácil misturar dados e comandos, resultando em injeção de SQL. Mas dependendo de onde ocorre a injeção, a natureza da vulnerabilidade da injeção também é diferente. Oracle usa PL/SQL, e a vulnerabilidade ocorre em linguagens DML como select, pois não suporta a implementação de múltiplas linguagens, se você deseja executar suas próprias linguagens como GRANT DBA TO LOVEHSELL e outras linguagens DDL. , você deve criar suas próprias funções ou procedimentos armazenados. Se não tiver as permissões relevantes, você também pode usar a injeção de cursor e usar o pacote dbms_sql para contornar as restrições. A maioria das injeções são as injeções limitadas acima. Você deve contar com alguns outros pacotes ou cursores criados por você mesmo para atingir o objetivo de aumentar as permissões. No entanto, ainda existem algumas vulnerabilidades muito comuns, mas o ambiente de injeção é muito flexível, que é o usuário. entrada A injeção do bloco pl/sql anônimo colocado entre o início e o fim. Nesse caso, a injeção pode ser injetada diretamente em várias palavras, quase sem restrições. o problema da nossa tecnologia de injeção na web trouxe de volta esse brilho.
Ok, as mencionadas acima são algumas das tecnologias ofensivas da Oracle, mas em muitos ambientes atuais, os serviços da web estão abertos ao mundo exterior e o banco de dados backend boss é protegido por um firewall. É impossível perder muitas informações detalhadas do banco de dados. , e não é mais possível fazer login diretamente. O banco de dados está em operação. Neste momento, é hora de considerar o uso de vulnerabilidades interrompidas pela Web para atacar o banco de dados de apoio. Agora vamos dar uma olhada em como desenvolver injeções no ambiente web Oracle. Oracle pode funcionar bem em vários ambientes web, e o impacto de vários ambientes web em nossas injeções não é grande. Os parâmetros de entrada não são filtrados, mas como as linguagens .net e jsp são linguagens de categoria forte, mesmo que a linguagem SQL não seja filtrada quando se trata de injeções numéricas, podem ocorrer erros ao aceitar parâmetros. A classe string possui mais parâmetros. No ambiente php, todos os ' serão escapados como ', no ambiente oracle ' não serão escapados (o escape correto no ambiente oracle deve ser ''), mas no nosso próprio O uso de 'no discurso de injeção pode ser danificado ao ser convertido em ', portanto não pode ser usado durante a injeção'. Exceto que não há restrições no ambiente web. Em termos de banco de dados, se o discurso for executado no modo de parâmetro, ele não poderá ser injetado a menos que o modo de conexão de string seja usado (porque o modo de conexão de string é relativamente simples e, devido a algumas razões históricas, muitos programadores costumam preferir esta forma, ). O modo de conexão de string também será dividido em dois tipos. Os parâmetros estão nas palavras DML, como select, update e insert, e os parâmetros estão no bloco anônimo pl/sql. erro, então podemos facilmente julgar a categoria do discurso atual com base no erro, que será discutido mais tarde. É relativamente raro no bloco anônimo pl/sql, mas não está descartado que não haja limite para tal injeção. Você pode implementar várias conversas e fazer qualquer coisa, o que não é diferente do login local.
3 ideias básicas do Oracle Web Hacking
A próxima parte fala sobre como determinar o destino. A determinação dos parâmetros de injeção cabe a todos. O principal é como determinar se o banco de dados pertence ao Oracle. suporta interpretação de --category, mas não suporta implementação separada Muitas palavras, Oracle tem muitas tabelas de sistema, como all_tables, você também pode determinar se ela pertence ao Oracle. também pode ser usado para determinar, como utl_http.request, idioma. Pequenos detalhes também podem ser usados para distinguir sistemas. Por exemplo, || é um símbolo de junção no Oracle, mas não em outros bancos de dados. |chr(123)=chr(123)| |chr(123) Se puder ser executado com sucesso, deve ser Oracle. Além disso, alguns scripts não tratam a mensagem de erro quando ocorre um erro de consulta ao banco de dados e também podem vazar. o banco de dados de apoio real Isso pode ser visto claramente.
A próxima coisa que precisa ser determinada com urgência é o tipo de ponto de injeção. Normalmente, os parâmetros que inserimos são numéricos ou simplesmente caracteres (o que muitas outras pessoas chamam de injeção do tipo pesquisa deve ser classificado como caractere). categoria numérica, não pense em nada. É muito simples adicionar caracteres de interpretação para fechar a expressão com precisão. Se for a categoria de caractere, você terá que pensar em como tornar a expressão inteira precisa. geralmente adicionando ' e - esses caracteres de injeção para organizar sua própria situação de injeção. Em algumas situações complexas, como um parâmetro que aparece em múltiplas palavras SQL e lógica, você terá que estruturar cuidadosamente as palavras de injeção adequadas à situação. Lembre-se, precisamos apenas de um ambiente completo que possa organizar facilmente vários comandos SQL.