Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Gabarito Desafio Ráque (+ tutoriais)

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

  • Font Size
    #1

    Tutorial Gabarito Desafio Ráque (+ tutoriais)

    Boas a todos.
    Recentemente o WhiteCollarGroup (WCG147 - 0KaL - #M0rph - NB) lançou um desafio hacker (Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...).
    Tratava-se de um pseudo-website contendo apenas uma seção de notícias e um livro de visitas.
    Este foi nosso primeiro desafio, e não tínhamos experiência alguma neste ramo. Após receber várias mensagens de usuários que estavam tentando passar, xingamentos e reclamações, resolvemos dar um basta: publicar o gabarito em texto e em vídeo.
    Vamos imaginar que você está entrando pela primeira vez no website, para tentar invadí-lo. Com sua experiência em SQLi, você sabe que, geralmente, as notícias são vulneráveis. Clique em "Notícias".
    Veja como está a URL:
    Código:
    /?pg=noticias.php
    Note que foi gerada uma variável/query string, de nome "pg", com indicação para "noticias.php". Como grande parte do hacking é o "achismo", vamos supor que noticias.php é um arquivo. Mas antes de ter certeza, vamos substituir noticias.php por qualquer outra coisa:
    Código:
    /?pg=123noticias.php
    Apareceu uma mensagem de erro do interpretador PHP:
    Código:
    Warning: include(includes/123noticias.php) [function.include]: failed to open stream: No such file or directory in /data/multiserv/users/821743/projects/1951530/www/index.php on line 13
    
    Warning: include() [function.include]: Failed opening 'includes/123noticias.php' for inclusion (include_path='.:/usr/lib/php') in /data/multiserv/users/821743/projects/1951530/www/index.php on line 13
    Com essa mensagem, já conseguimos obter algumas informações:
    - O website está no diretório físico /data/multiserv/users/821743/projects/1951530/www/
    - O website usa PHP (versão 5.3.6, rodando em Apache, segundo os headers)
    - Os arquivos de include estão no subdiretório "includes/" (/data/multiserv/users/821743/projects/1951530/www/includes/).
    - O servidor usa um Unix ou baseado (/data...)

    Vamos também levantar mais informações sobre o servidor:
    O Mozilla Firefox tem um sistema que destaca apenas o domínio em um endereço.
    Por exemplo:
    forum.guiadohacker.com.br/showthread.php?t=123456
    Apenas o verdadeiro domínio (guiadohacker.com.br) foi destacado. Mas, olhe agora o endereço do desafio:
    desafioraque.com.nu
    Ele destacou apenas o "com.nu". Isto significa que "desafioraque." é, para "com.nu" o mesmo que "forum." é para "guiadohacker": um subdomínio.
    Então, "com.nu" sendo o domínio principal, pode ser que encontremos alguma coisa acessando-o.
    Note que "com.nu" é um serviço de hospedagem gratuita.

    Continuando a investigação na aplicação, é provável que, como vimos o erro de include(), seja também vulnerável a PHPi.
    Como está em um subdiretório, poderá ser vulnerável a LFI. Mas, alguns devem ter lido Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar....
    Primeiramente, vamos fazer um teste: já temos o endereço físico do diretório onde está a aplicação. Portanto, vamos tentar acessar o /etc/passwd:
    Estamos em /data/multiserv/users/821743/projects/1951530/www/includes/, e precisamos ir subindo diretório "com ../" até a raiz, e então acessar o diretório "etc" e o arquivo "passwd".
    Código:
    ?pg=../../../../../../../../etc/passwd
    Houve um probleminha: a index foi incluída. É bem provável que haja uma validação.
    Criando uma conta no servidor, vemos também que (como em outros servidores gratuitos) não temos logs de acesso (access-logs), e portanto, fica difícil transformar LFI em RFI.
    Conseguimos inúmeras informações muito valiosas, mas podemos dizer que esta seção não está vulnerável (termo não relativo).
    Clique em uma notícia. Note que, além da variável QS (query string, variáveis de método GET enviadas pela URL após o '?') "pg", foi criada a variável "id", com um identificador numérico da notícia.
    Sabemos que é comum que este tipo de variável seja vulnerável a SQLi. Vamos tentar:
    Código:
    &id='4
    Já recebemos um bom sinal: nenhuma notícia foi recebida. Não houveram mensagens de erro, mas a área que correspondia à notícia foi preenchida pela barra de menu, por falta de conteúdo.
    Vamos continuar tentando:
    Código:
    4 order by 100--+
    4' order by 100--+
    4 and 1=0--+
    4' and 1=0--+
    Más notícias: mesmo ordenando por colunas difíceis de existirem e com condicionais falsas (1=0), a notícia foi exibida.
    Provavelmente, o programador tratou a variável, para retornar apenas o valor inteiro, assim:
    Código PHP:
    $variavel = (int)$_GET['id']; 
    Enfim, não obtivemos sucesso nas notícias, apesar de ter conseguido muita informação importante com elas.
    Vamos ao último conteúdo dinâmico do site: o livro de visitas.
    Vemos que a variável QS "pg" se alterou para "livrodevisitas.php". Um formulário foi exibido, pedindo nome e mensagem. Vamos digitar qualquer coisa, só pra ver se conseguimos alguma coisa.
    Nome: abc
    Mensagem: def
    A mensagem foi exibida logo abaixo, com o horário da postagem.
    Vamos fazer um teste por XSS Stored.
    Nome: <script> alert('XSS'); </script>
    Mensagem: <script> alert('XSS'); </script>
    Opa, peraí! Houve um errinho...:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'XSS'); </script>', '<script> alert('XSS'); </script>')' at line 1
    O servidor SQL retornou um erro de sintaxe em XSS'); </script>, '<script> alert('XSS'); </script>.
    Note que a parcela do código que o servidor retornou com o erro começa logo após uma aspa que colocamos (da função alert() do JavaScript) e termina, aparentemente, no final da consulta, onde se fecham os parêntesis dos valores.
    Aspas... erro SQL... Isso lembra alguma coisa? Sim, isso mesmo! O livro de visitas é vulnerável a SQLi.
    Não, não vá jogando no Havij. Sabe por quê?
    As vulnerabilidades SQLi comumente encontradas por "Google dorks" são baseadas no comando SELECT, onde se continua a consulta usando o UNION (por exemplo) para obter outros dados do banco de dados.
    Mas, neste caso, estamos postando uma mensagem no livro de visitas. Então, é usado o comando "INSERT".
    Sabemos que MySQL só permite uma única consulta a cada mysql_query(). Teremos um problema? Não. O trabalho só vai ficar mais divertido. Quer ver?
    Sabemos que os 2 últimos parâmetros entre os parêntesis correspondem aos que inserimos no formulário, mas não sabemos em qual ordem está. Vamos saber agora!
    Nome: nome'
    Mensagem: mensagem'
    Resultado:
    Código:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mensagem'')' at line 1
    Repare que o último parâmetro, logo antes do ')', é a mensagem que inserimos. Vamos SUPOR que a consulta seja a seguinte:
    Código:
    INSERT INTO tabela VALUES (now(), '$_POST[nome]', '$_POST[msg]')
    Vamos ter que usar o truque da query-dupla, uma dentro da outra. Para mais detalhes, leia Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar....
    Então, teremos que alterar a consulta: como não precisaremos das aspas entre a mensagem que escreveremos, vamos atacar apenas o campo "nome".
    Nome: teste', 'mensagem')-- (espaço aqui no final)
    Mensagem:
    Explicando: escrevemos nosso nome, fechamos a aspa utilizada ao redor do nome, colocamos a vírgula para indicar que estamos editando outra coluna e já escrevemos a mensagem, entre aspas, tudo no mesmo campo. Então, fechamos os parêntesis e adicionamos "-- ", dizendo ao servidor que tudo o que está após isso é um comentário, e não será executado.
    Nossa suposta query teria ficado assim:
    Código:
    INSERT INTO tabela VALUES (now(), 'teste', 'mensagem')-- ', '$_POST[msg]')
    Como a aspa do campo "nome" já foi colocada pelo programador, teremos que utilizá-la e não poderemos atacar a coluna de nomes. Atacaremos a coluna de mensagens, utilizando o campo "nome" no formulário. Interessante, não?
    Agora, o processo é bem simples: faça consultas que retornem sempre um único resultado, se necessário, limitando-os com "LIMIT".
    Vamos, primeiramente, saber a versão do servidor SQL rodando. Servidores anteriores à versão 5.0 não tem o banco "information_schema", sendo necessário uma força bruta.
    Vamos obter também o banco de dados atual e o usuário.
    Podemos obter um resultado por vez, mas podemos unir vários resultados usando funções como concat() e concat_ws().
    0x3c3d3e = <=> em hexadecimal, para podemos separar, visivelmente, os valores retornados
    Nome: teste', concat_ws(0x3c3d3e,version(),database(),user()))--
    Mensagem:
    Veja a mensagem que foi postada:
    teste: 5.0.51a-24+lenny5-log<=>db1951530-main<=>user1951530@localhost
    Sabemos então que a versão é 5.0.51a-24+lenny5-log (>=5 - maior ou igual a 5 - ), que a base de dados atualmente selecionada é db1951530-main e que o usuário é user1951530, conectado a 'localhost'.
    Enfim, podemos atacar com SQLi usando information_schema.
    Vamos usar também a função group_concat() para obter todos os valores de uma só vez, separados por vírgula.
    Veja:
    Nome: teste', (SELECT group_concat(table_name) FROM information_schema.tables where table_schema=database() limit 0,1))--
    Hm... apareceu uma mensagem:
    Código:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM information_schema.tables where table_schema=database() limit 0,1)))--', ''' at line 1
    Note que ele não esperava pelo "FROM". Mas, o que há de errado, já que a sintaxe está correta (comando + argumento = select + from)? Ah... peraí... hm... acho que já entendi.
    O programador está removendo todas as palavras "select" do texto. Muito inteligente... Ele nos derrotou? Não.
    Ele não contou com uma coisa: eu sou leitor do Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...!
    Veja Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...:

    Já entendeu? Espere, não tenha tanta alegria. Se o cara foi inteligente e fez uma recursão com o loop while(strpos($variavel, "select")), estamos perdidos. Mas, não custa tentar:
    Note que o Programador, na tirinha, perguntou ao Alonso o que ocorreria se o invasor digitasse um comando dentro do outro.
    Provavelmente o Alonso não usou a recursão que citamos acima e fez apenas um simples str_replace. Desta forma, vamos ver a lógica:
    Temos a string:
    SELSELECTECT
    Removemos todas as palavras SELECT visíveis à primeira vista.
    SELECT
    Que espécie de bruxaria é essa?
    Então, vamos substituir nosso SELECT por SSELECTELECT, SESELECTLECT ou qualquer outra mistura, onde fique uma palavra SELECT visível e outra não (cortada pela primeira).
    Lembre-se: se aparecer um erro contendo "--)", significa que você não deu espaço após o "--".
    Caso tenha dado, pode ser que seu navegador remova espaços ao final da string. Neste caso, preencha com qualquer coisa, do tipo: "-- a".
    Nome: teste', (SELSELECTECT group_concat(table_name) FROM information_schema.tables where table_schema=database() limit 0,1))-- a
    Obtivemos as tabelas: admin,livro,noticias,raques
    Vamos julgar agora que a que realmente nos interessa é "admin". Vamos obter suas colunas:
    Nome: teste', (SELSELECTECT group_concat(column_name) FROM information_schema.columns where table_schema=database() AND table_name=('admin') limit 0,1))-- a
    Obtivemos as colunas: login,senha
    Tão simples, agora vamos obter esses dados, porém, uma linha de cada vez.
    -+-
    Nome: teste', (SELSELECTECT concat(login,0x3c3d3e,senha) FROM admin limit 0,1))-- a
    Primeira linha, obtivemos isso:
    IzRkbTFuX2wzMzc=<=>b9fbaa5cd5c552da2bd87980f48f5f4 4
    -+-
    Nome: teste', (SELSELECTECT concat(login,0x3c3d3e,senha) FROM admin limit 1,1))-- a
    Segunda linha, obtivemos um erro: "Column 'msg' cannot be null".
    Isso quer dizer que os dados da coluna "msg" estão nulos. Nossa consulta retornou um resultado nulo (vazio), portando, a segunda linha não existe. Só há um administrador.
    -+-
    Vamos usar os dados que conseguimos:
    Login: IzRkbTFuX2wzMzc=
    Senha: b9fbaa5cd5c552da2bd87980f48f5f44
    Seria difícil alguém guardar umas credenciais como essas, não é mesmo? Mas, dê uma olhada novamente.
    O login possui letras maiúsculas e minúsculas e um sinal de igual. Agora, manda a sua experiência: isso parece base64.
    Então, vamos rodar base64_decode() no PHP, usar a HackBar do Firefox ou procurar "online base64 decoder" no Google. Resultado:
    Login: #4dm1n_l337
    Agora sim, é mais possível guardar.
    Vamos ver a senha: letras minúsculas de 'a' a 'f' e números de '0' a '9' (hexadecimal, não é?), com 32 caracteres (16 hexadecimais). Sua experiência te disse que parece MD5?
    Agora é um pouco mais complicado, afinal, não é possível descriptografar MD5.
    Alguns websites, no entanto, tem grandíssimas bases de dados, com hashes e strings, onde procuram a string da hash enviada pelo usuário.
    Como sempre digo, meu predileto é o Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar.... Vamos tentar nele, e...
    É, o MD5Decrypter.co.uk me decepcionou. Vamos, então, colocar no Google "md5 decrypter". Vamos ver esse, também muito bom: Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar....
    Inserimos a hash, preenchemos o captcha e... Bingo!
    Senha: 4nj0l1nd0_t34m0

    Já temos o login e a senha. Vamos, agora, procurar o painel administrativo.
    Vamos tentar os mais comuns: admin, adm, admcp, login... Nada!
    Leia Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar.... Lá fala um pouco sobre o arquivo robots.txt. Vamos tentar por ele, afinal, não temos nada a perder.
    Olhe o que encontramos:
    Código:
    User-agent: *
    Disallow: /includes/
    Disallow: /tpl/
    Disallow: /__4dminisTra7ion_cP_/
    Ele pede que o motor de busca não vasculhe os diretórios "includes" (já vimos sobre ele, lembra?), "tpl" e outro que parece com um painel administrativo. Vamos acessá-lo!
    Hã? Tudo em branco? Estranho... dê um F5. Deve ter dado um erro.
    Fomos redirecionados para o arquivo "cookie.php". Se tentarmos ir para a index, somos redirecionados novamente.
    Este arquivo fala que o computador não está liberado para acessar esta área. E ainda envia um recado à secretaria: eles deveriam pedir a alguém do setor de informática acessar um determinado arquivo, mas de dentro do servidor.
    Pelo nome do arquivo atual, sabemos que se trata de uma validação por cookies. Mas não sabemos que cookie é esse e nem o valor que ele deve ter. Vamos acessar o arquivo!
    Ele retorna o erro Forbidden, dizendo que não temos permissão para acessá-lo.
    O recado dizia que devemos acessar o arquivo de dentro do servidor. Provavelmente, a escola tem um servidor próprio e alguém deve ler o arquivo por lá. Ele deve ter uma validação por IP (127.0.0.1).
    Estamos perdidos? Ou vamos ter que mirar no servidor? Nem um nem outro.
    Dê uma olhada na URL, e localize o diretório onde o arquivo que acessamos (cookie.txt) está: includes/. Isto te lembra algo?
    Sim, é o diretório onde ficam os arquivos incluídos, indicados pelo parâmetro QS "pg" nos arquivos. Lembra do erro, no início do texto?
    Então, vamos voltar para a página inicial do site e acessar:
    ?pg=cookie.txt
    Recebemos uma mensagem. Como o arquivo está em .txt, não deve ter quebras de linhas. Então, dê Ctrl + U (ver código-fonte) para ler o arquivo sem problemas.
    Ao setor de informática:
    Devido às invasões deste website por parte dos irmãos mais velhos dos alunos, foi incorporado um novo serviço infalível no login.
    Acessem a intranet e, na seção da administração do website, clique em "Obter cookie de administrador".
    Ele vai criar um cookie de nome "admin" e valor "yes", necessário para acessar a área administrativa.
    Faça isso em todos os computadores da secretaria e limpe seus caches.
    Eles reclamaram das invasões dos irmãos mais velhos dos alunos, e disseram que o novo sistema de segurança é infalível.
    Deveremos entrar na intranet deles, entrar na seção da administração do website e clicar em Obter cookie de administrador.
    Mas uma intranet é algo restrito, vai ser bem difícil. E pior: isto é um desafio. Essa intranet NÃO EXISTE.
    Então quer dizer que já chegamos ao fim? Não. Vamos terminar de ler a mensagem.
    Ganharíamos um cookie de nome "admin" e valor "yes", que é necessário pra acessar a área de administração.
    Ele diz ainda para limpar o cache. Isto é necessário caso você continue sendo redirecionado, mesmo após adicionar o cookie.
    Estou usando o Cookies Manager+ do Firefox. Clico em "Add" e:
    Nome: admin
    Valor: yes
    Servidor: desafioraque.com.nu
    Caminho: /
    Enviar: em todos os tipos de conexão
    HTTP Only: No
    Validade: at end of session (ele será excluído quando você sair do navegador).
    Note também que ele gera um segundo cookie, de nome "admin" e valor "no". Você deve excluí-lo ou editá-lo para "yes".
    Acesso novamente /__4dminisTra7ion_cP_/ e... Outra mensagem!
    Esta página só pode ser acessada a partir da intranet.
    Na palavra "intranet" há um link para <http://192.168.10.1/intranet/admin_site/>.
    Um IP que começa com 192.168 é um IP de rede interna. Teremos que invadir a intranet? Como? Lembra que estamos em um desafio, e a intranet não existe?
    Mas, peraí... Como o sistema saberia se estivéssemos mesmo acessando a partir da intranet?
    Lembra-se dos HTTP Headers, um header chamado "Referrer" (referência), muito utilizado naqueles sistemas que identificam quando você está vindo do Google, já que guardam a página anterior visitada pelo usuário?
    Vamos simplesmente alterar este header. Para isso há 1001 complementos, entre eles aqueles que editam headers, mas podemos fazer isso muito facilmente pelo complemento HackBar, que é indispensável no navegador do profissional de segurança.
    Aperte F9 para que ela abra. Selecione o checkbox "Enable Referrer".
    Aparecerá o campo "Referrer". Copie o endereço do link da palavra "intranet" e cole ali. Clique em "Execute".
    Oba! Apareceu um formulário de login.
    Vamos inserir aquelas credenciais que obtivemos durante o ataque de SQLi no livro de visitas.
    Pronto, completamos a primeria etapa, o desafio WEB. Agora vai tomar um cafezinho ou ir ao banheiro.
    Não se preocupe, a próxima etapa é bem rápida, consistindo de apenas uma pseudo-etapa.
    Vamos baixar o arquivo indicado no link do texto da página.
    "Ele é um simples utilitário que diz uma senha para terminar o desafio, mas não é tão simples quanto parece.
    Você precisa de um serial para ativar este utilitário. (...)
    E pior: antes disso, você precisa quebrar a senha do arquivo ZIP.
    Sim, mãos à massa."
    Então, vamos clicar no link. Mas, o que é isso?
    O interpretador retornou o erro fatal "filename cannot be empty". O que há de errado? A página anterior não falou nada sobre isso!
    Hm... peraí... dê uma olhada na URL. Ele tem uma QS "flie", com o valor "desafioraque".
    Será que o programador quis mesmo dizer "flie"? Não teria feito um trocadilho ao digitar, querendo dizer "file"? Vamos tentar, substituindo "flie" por "file".
    Fomos redirecionados para o verdadeiro link de download do arquivo. É um arquivo .rar. Vamos baixá-lo.
    Nele há um arquivo executável, mas está protegido por senha. Não temos a mínima ideia...
    Vamos tentar usar um brute-forcer. Meu predileto é o Advanced Archive Password Recovery.
    Se o desafio nos deixou totalmente sem pistas da senha, o melhor a fazer é força-bruta verdadeira, sem dicionários.
    A senha é bem pequena. Aqui, em 3 segundos, ele conseguiu quebrá-la.
    Vamos utilizar essa senha que ele nos deu para extrair o arquivo. Vamos abrí-lo. Agora, ele pede para digitarmos o serial para conseguir a senha.
    Também não temos ideia da senha, mas dê uma olhada nos dados do arquivo executável. Olhe a versão, a descrição e, principalmente, o ícone. Com certeza foi desenvolvido em Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar....
    Vamos fazer uma rápida busca no Google: "engenharia reversa autoit".
    No primeiro resultado, temos o Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar....
    Ele explica porque é possível descompilar programas em AutoIt, mostra um exemplo e disponibiliza o link de download. Vamos baixá-lo e executá-lo.
    Nele há um campo de texto:
    Código:
    Drag the compiled AutoItExe / AutoHotKeyExe or obfucated script in here, or enter/paste path+filename.
    Pegue o executável baixado e arraste-o até este campo. Ele faz algumas análises e já entrega o código-fonte original.
    AutoIt é de fácil entendimento, mas mesmo se não fosse, o bom hacker é o bom programador, e o bom programador consegue entender qualquer linguagem (e programar nela apenas dando uma rápida olhada na documentação).
    Vamos vasculhar o código. Vemos algumas declarações de constantes.
    Aqui começa a GUI (interface gráfica):
    Código:
    #region ### START Koda GUI section ### Form=
    $FORM1 = GUICreate("Utilitário Desafio Ráque", 378, 107, 416, 302)
    Veja esta parte, onde o programador cria o botão "Entrar" e define a que função ele deverá chamar:
    Código:
    $BUTTON1 = GUICtrlCreateButton("Entrar", 8, 56, 353, 25, 0)
    GUICtrlSetOnEvent($BUTTON1, "main")
    Vimos que o nome da função é "main".
    Mais abaixo, após um loop infinito, para que a GUI não feche, vemos a função main().
    Veja, dentro da função main() (Func MAIN()), duas variáveis sendo declaradas: $SERIAL e $SERIAL_CORRETO.
    Conseguimos ver também a parte responsável por exibir a senha final. Porém, esta senha está criptografada.
    Já temos o serial, e o sistema já descriptografará a senha para nossa alegria.
    Note que a variável $SERIAL_CORRETO é um conjunto com 25 letras e números, e temos, no programa, 5 caixas.
    Execute o programa. Divida o serial em 5 grupos de 5 caracteres cada (5*5=25) e digite-o nos campos. Clique em Entrar e receba a senha verdadeira.
    Se quiser, o sistema colocará, automaticamente, a senha correta na área de transferência.
    Retorne ao painel administrativo do site e digite (ou cole) a senha dada pelo utilitário.
    E, finalmente, vencemos o desafio!

    Para ficar mais fácil de entender, o amigo #M0rph fará uma videoaula deste conteúdo. Esperemos!

    Seria muita falta de respeito com aqueles que passaram se a ferramenta priv8 de brinde continuasse à disposição, mesmo após liberarmos o gabarito. Infelizmente, achamos por bem retirar o link do ar.

    Este foi nosso primeiro Desafio Ráque. O WhiteCollarGroup aprendeu com isso e podem ter certeza que mais (fáceis) virão.
    Agradecemos a todos os participantes.
    Este material pode ser compartilhado, desde que os devidos créditos sejam dados.



    Notify-list · Twitter · Blog

    Nova lei: Invadir computadores protegidos é crime.
    Lógica: Se eu invadi, não é protegido. Logo, não é crime :-)
    Similar Threads

  • Font Size
    #2
    Cara muito bom msm.
    Eu acompanho o WhiteCollar e esse desafio possui um grande nível de conteudo.
    Gosto de tentar essses tipos de desafios justamente pelo que vc aprende e ainda tem o brinde da ferramente

    Infelizmente, n tive muito tempo pra tentar esse desafio e com o que eu sabia n passei da parte da Intranet.
    Enfim, como vcs disponibilizaram o gabarito agora da pra aprender tudo.

    No próximo prometo sair melhor
    :P
    Quanto mais aprendo mais vejo o tamanho da minha ignorânica.
    sigpic

    Comment


    • Font Size
      #3
      É legal de ler seus artigos porque você mostra mais ou menos como funciona sua cabeça na hora que está fazendo testes de vulnerabilidade e isso agrega muito valor em quem está lendo.

      VLW!!!!

      Comment

      X
      Working...
      X