Como conseguir privilégios de administrador em um sistema com dados via sessão, session vulnerável, capturar session do php, invasao-exploracao via session

Publicado: outubro 8, 2009 em ataques, bugs, normal, programacao, seguranca
Tags:, , ,

Nos tempos de hoje, uma das formas mais utilizadas para esconder e não perder dados, é a forma de registrar uma sessão, Ou cookie, que não será neste post que eu falarei sobre ele.

Session(sessão) é uma variável criada e colocada em algum lugar do navegador de internet, e quando precisa usar essa mesma variável, então o programador cria um código simples para reutilizar esta mesma variável, porem, como tudo tem seu lado bom e seu lado ruim, estas sessões si forem usadas de modo correto, funciona perfeitamente sem correr muitos riscos de uma invasão no site ou algo do tipo.

Esta variável de sessão é desfeita quando o navegador é fechado(obvio, até o nome fala, variável dia sessão).

Vou colocar aqui um código de um sistema vulnerável a ataques via sessão:

Código da pagina login.php:

<?php

//neste exemplo vou citar a sessao chamada ‘nivel’, que é o nível de permissão do user

session_register(‘nivel’);

$_SESSION[‘nivel’]=$nivel_permissao;

//a variável nível_permissao, foi pegada do banco de dados,”exemplo”

?>

Codido index.php:

<?php

/*esta outra pagina ira pegar a sessao registrada e pega também o código do usuário que

Que na maioria das vezes são pegos por sessão ou cookie */

$nivel =$_SESSION[‘nivel’];

$cod_user =$_SESSION[‘cod_user’];

//isto é um nível de permissão para os usuarios

/* se o usuario nao estiver com o nivel de permissao (ADM) OU MELHOR nivel de administrador, entao a pessoa nao entra na pagina, agora si ela estiver o nivel de permissao de administrador*/

if($nivel != “ADM”){

header(“location:error.php”);

exit;

}else if($nivel ==”ADM”){

header(“location:/admin/crm.php”);

}else{

exit;

}

?>

//—————————————————————-à

Na pagina acima, nós vimos uma pagina com session vulnerável.

Agora vem a parte boa do ensinamento.

Como explorar esta falha ? alguém sabe?

Isso é mais fácil do que todos pensam ou possam imaginar.

Si você é um usuário do sistema e não tem acesso de administrador, quando você entrar na pagina index.php que tem a validação ele jogará você para uma pagina de erro.

Então ta, Lembra que la no inicio na primeira pagina, login.php. Ele registrou uma

Session com o tipo do usuário. Então para burlar isso… independente do navegador, exclua todos os registros de autenticação do navegador, pois entre elas estará a nossa que registramos ao logar no sistema.. Depois de ter excluido todas as autenticações do navegador, Crie uma pagina em php, registrando uma sessão com o mesmo nome da sessão do “sistema”, porem, agora vamos jogar o valor “ADM” dentro da sessão. FICARÁ MAIS OU MENOS ASSIM:

Código:

<?php

$nivel=”ADM”;

session_register(‘nivel’);

$_SESSION[‘nivel’]=$nivel;

?>

//————————————————————à

Depois disso, basta entrar diretamente na pagina que voce quer os privilegios, que eles estarao todos ao seu dispor. HEHE

Vou tentar explicar em outro tutorial como si defender destes ataques

~By~ Juancarloscunha

Qualquer duvida, Basta perguntar. Si gostou comente, ou si achou algum erro no meu tutorial, mande-o para mim corrigir

comentários
  1. elias disse:

    cara queria falar com vc pelo msn pois quero logar numa conta de joguinho ^^,

  2. pedro disse:

    ola bom dia nao entendi onde tenho que colocar o valor admi podes explicar melhor que pagina pht tenhop queriar mano nao entende desculpa tens que te explicar melhor

  3. xt4k disse:

    Boa juan..
    não sabia que burlar sessions era tão facil assim.

    só que fazendo isso o maximo que você vai conseguir é acessar paginas restritas de siteszinhos, onde provavelmente tambem tem sql injection e etc etc, porque acredito que esses parametro de ‘adm’ não é padrão.

  4. Mark. T. disse:

    As sessões são únicas para cada servidor, para fazer isso que você diz, alguém teria que primeiro usar uma página do próprio servidor almejado para se burlar e para acessar uma página do servidor que você quer, você precisa de acesso de escrita e talvez root, se você tiver root, para quê vai querer invadir uma página admin se você terá acesso ao servidor completo e a todas as páginas, edições etc?

    Na verdade, apenas um editor do próprio site conseguiria o feito do acesso, algo que, provavelmente, para ele será em vão, já que ele pode editar a página diretamente, sem ter que usar deste método de sessões indicado em seu site.

    • Esta tecnica foi testada por mim mesmo! Criei sistema que gera sessoes, logo apos criei um codigo para capturar as sessoes, por isso portei este tutorial aqui. porque sei que funciona.

    • Marcos Libanori Sanches disse:

      Estou com você cara … session é unico para cada servidor… por exemplo… se eu me me conecto em um sistema e automaticamente crie uma session nome e depois entrar em um outro sistema iria entrar em conflito… acho que o “entendedor” de segurança e tecnologia precisa parar de fazer os testes malucos na localhost e conhecer o mundo real…

  5. gabriel disse:

    cara isso nao funciona, e se eu nao souber o nome da seesao do sistema?
    se puder me responder pelo email….

    senai.c4@gmail.com

    abraços

  6. Bruno Perin disse:

    Preciso de ajuda na proteção contra este e outros tipos de invasão no sistema que comentei a pouco na página de contato.

    Se puder entre em contato comigo.

    Obrigado…

  7. Rafael disse:

    Ultimamente ando aprendendo programação(HTML, CSS, PHP, AJAX, JAVASCRIPT e futuramente ASP entre outras), sei que um sistema não é simples de se burlar?

    Como sei disso?

    Simples, no seu exemplo vc utilizou um negócio muito óbvio, $_SESSION[‘nivel’]!

    Nem todos usam isso, quem realmente sabe programar, e pode escapar, além de utilizar um nome diferente para registrar suas sessões, eles fazem a busca no SQL pelo nível utilizando somente usuário e senha, verifica se o cara é ADM, tem um Anti-inject bom no site(digamos um 99% seguro, pq 100% nem a NASA), e não utilizam Register_globals = On;

    Eles deixam as registers_globals desativada, sendo assim, essa parte do código:

    $nivel = $_SESSION[‘nivel’];

    daria erro, pois se eles for querer verificar em um IF, qndo colocasse o $nivel daria erro, pelas register_globals OFF!

    Ele colocaria diretamente o $_SESSION[‘nivel’] diretamente no IF, mais como eu disse, eles não usam variaveis simples assim, fazem busca no SQL que é mil vezes mais seguro!

    E vc pediu para informar algum erro em seu código, no $cod_user, se vier de uma busca no SQL dará erro, pois não tem valor algum, se vc fez a consulta e utilizou mysql_fetch_array, para pegar o campo id, teria que ser assim: $cod_user[‘id’] ou se usou mysql_fetch_row, pegando somente o ID, ficaria $cod_user[‘0’];

    E não precisa perder tempo fazendo o sistema ensinando a se defender, nesse meu comentário já ensinei, Register_globals = Off; e buscas nos SQL!

  8. R4$T4 disse:

    Simplesmente genial O_O, muito simples porém genial, e eu notei que o fundamental para ver esses bugs é saber como funciona a função.

  9. lucaschizuko disse:

    Gostaria de saber como se defender agora🙂

  10. eu disse:

    Não entendi porra nem uma nesta tua explicação , nos livros tu explica mesmo ou faz como fez ai … pois para mim explicar é pegar um exemplo prático da coisa e mostrar tipo vir um site ai o cara sobe ele com wamp da vida e testa o código nele e por ai .
    Gostaria que tu fizesse video aulas e vende-se ai deveria ficar bem explicado .

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s