Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Técnica: Manipulando variáveis "irrelevantes"

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Tutorial Técnica: Manipulando variáveis "irrelevantes"

    Em muitos casos, o software pode vir predefinido com vários parâmetros configurados por padrão. Em muitos casos, os valores-padrão são configurados sem levar em conta a segurança. O invasor pode utilizar esses padrões malfeitos durante um ataque.

    Padrão de ataque: Variáveis globaos fornecidas pelo usuário (DEBUG=1, globais no PHP etc.)

    Em linguagens repletas de brechas como o PHP, várias configurações-padrão são configuradas erradamente. É prudente testar essas linguagens.
    Por razões de conveniência (ou seria preguiça?) alguns programadores podem integrar variáveis secretas nas suas aplicações. A variável secreta funciona como um código. Quando o código secreto é utilizado, a aplicação abre o cofre. Um exemplo disso é a aplicação WEB que faz distinção entre os usuários normais e os admins procurando uma variável de uma forma oculta com um determinado valor como ADMIN=YES. Pode parecer maluquice, mas várias aplicações baseadas na WEB desenvolvidas internamente que são utilizadas pelos maiores bancos do mundo funcionam desta maneira. Esse é um dos truques que as equipes de auditoria de software procuram.
    Às vezes esses tipos de problema não são causados intencionalmente pelos própios programadores, mas fazem parte da plataforma ou da linguagem. Isso é o que acontece com as variáveis globais de PHP.
    • Exemplo de ataque: Variáveis globais do PHP


    O PHP é um grande exemplo de segurança inadequada. A idéia predominante no PHP é a facilidade de uso, e o mantra "não dar ao desenvolvedor nenhum trabalho extra para fazer as coisas" se aplica a todos os casos. O PHP faz isso removendo o formalismo da linguagem, permitindo a declaração de variáveis na primeira utilização, inicializando tudo com valores predefinidos e pegando todas as variáveis significativas de uma transação e tornando-as disponíveis. Nos casos de conflito cmo algo mais técnico, o mais simples quase sempre prevalece no PHP. Uma das consequências de tudo isso é que o PHP permite que os usuários de uma aplicação WEB sobrescrevam variáveis de ambiente com variáveis de consulta não-confiáveis, fornecidas pelo usuário. Portanto, valores críticos como o CWD e o caminho de busca podem ser sobrescritos e controlados diretamente por um usuário anônimo remoto. Outra consequência semelhante é que as variáveis podem ser controladas diretamente atribuídas a partir dos valores controlados pelo usuário, fornecidos nos campos GET e POST da solicitação. Dessa forma, um código aparentemente normal como esse faz coisas esquisitas:

    Código PHP:
    while($count 100{
    //faz algo

    $count++;

    Normalmente esse loop executará seu corpo dez vezes. A primeira iteração será um zero indefinido, e as outras passagens pelo loop terão como resultado o incremento da variável $count. O problema é que o codificador não zera a variável antes de entrar no loop. Isso é bom porque o PHP inicializa a variável na declaração. O resultado é um código que parece funcionar, mesmo sendo ruim. O problema é que um usuário da aplicação WEB pode fornecer uma solicitação como:

    Código PHP:
    GET /login.php?count=
    e fazer o $count iniciar no valor 9, tendo como resultado somente uma passagem pelo loop. Mas que azar. Dependendo da configuração, o PHP pode aceitar variáveis fornecidas pelo usuário, em vez das variáveis de ambiente. O PHP inicializa as variáveis globais para todas as variáveis de ambiente de processo, como $PATH e $HOSTNAME. Essas variáveis são de importância crítica, porque podem ser utilizadas em operações de arquivos ou de rede. Se um invasor pude fornecer uma nova variável $PATH (como PATH='/var'), o programa pode ser explorável. O PHP também pode aceitar tags de campo fornecidos em solicitações de GET/POST e transformá-los em variáveis globais. Isso é o que acontece com a variável $count que exploramos no exemplo anterior. Considere outrio exemplo desse problema, em que o programa define uma variável chamada $tempfile. O invasor pode fornecer um novo arquivo temporário, como $tempfile = "/etc/passwd". Em seguida, o arquivo temporário pode ser apagado posteriormente por meio de uma chamada unlink($tempfile);. Agora o arquivo passwd também foi apagado -- Uma coisa muito ruiim na maioria dos sistemas operacionais. Considere também que o uso do include() e require() procura primeiro $PATH e que o uso de chamadas para o shell pode executar programas cruciais como ls. Dessa forma, o ls pode ser modificado maliciosamente (o invasor pode alterar $PATH para fazer com que uma cópia troiana de ls seja carregada). Esse tipo de ataque também pode ser aplicado a bibliotecas carregáveis se $LD_LIBRARY_PATH for modificado.
    Por fim, algumas versões do PHP podem passar dados de usuários para o syslog como um format string, expondo a aplicação a um buffer overflow por format string.

  • Font Size
    #2
    Caraca, Parabéns fera!

    Obrigado por Compartilhar o seu conhecimento!

    Vlws.
    Não Custa NADA Agradecer! É só clicar ali oh! - /\

    Comment


    • Font Size
      #3
      Sempre é bom aprender novas metodologias de ataque e partilhar o conhecimento

      Comment


      • Font Size
        #4
        Ótimo material, e acreditem...
        essas variáveis "irrelevantes" podem te dar acesso shell

        Vlw dwango...
        A porta mais bem fechada é aquela que pode ser deixada ABERTA
        Honeypot neles heheh


        [========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========]

        Comment


        • Font Size
          #5
          Postado Originalmente por RevolteD Ver Post
          Ótimo material, e acreditem...
          essas variáveis "irrelevantes" podem te dar acesso shell

          Vlw dwango...
          Não sabia que podiam dar acessoa a shell não. Se possível, monta um tutorial explicando ;]
          abraços.

          Comment

          X
          Working...
          X