Web Spiders
Automação
 para web
  Hacking
Coolers-lab $ whoami
  Antonio Costa “Cooler_”
• Experiência de 4 anos com desenvolvimento de sistemas web
  e web spiders em geral,soluções para problemas em unix...
• Desenvolvedor e pesquisador .
• Faço parte do grupo de pesquisa BugSec.
• Fundador da E-zine Cogumelo Binario.
• Programador em ASM,C,C++,Common Lisp,Perl,PHP...
• Trabalho atualmente na CONVISO.
https://github.com/CoolerVoid/
http://code.google.com/p/bugsec/
@Cooler_freenode
Agenda
• O que é um Web Spider ?
• Casos de uso
• Minerando dados
• APIs para ajudar no desenvolvimento
• Trabalhando com formulários e cookies
• Spoofing de user agent
• Autenticação,captcha e OAUTH
• Passando certificados com SSL
• Uso de proxys
• Scanners,fuzzers, Hacks...
Códigos exemplos da apresentação !

code.google.com/p/
bugsec/
downloads/list
• owasp_cooler.zip
O que é um Web Spider ?
• Geralmente trabalha nos protocolos
• HTTP e HTTPs
• E agora como fazer abstração do
  conteúdo ?
• Exemplo usando sockets
  simples

• arquivo ex1.c

• Leia
  rfc2616
• send()
  “GET /index.php
  HTTP/1.1nHost: localhost t n
  “
• Então para pegar a resposta
  um read()
• Como resultado temos o source da página :-)
• ./ex1
• Exemplo
• servidor HTTP
• Arquivo ex2.c
• Exemplo
• servidor HTTP programa ex2.c
• Se receber qualquer dado
  então
• String para write() vai ser
• "HTTP/1.1 200
  Oknn<html>codigo em
  html<br><b>BUGSEC</b></htm
  l>n"
• Ex2.c
• Onde podemos encontrar web
  spiders ?
Casos de uso



• No android e no iOS
• Na sua TV moderna

• Gateways de pagamento...
Casos de uso
• GPS
Casos de uso


• Muitos...
Casos de uso

• Em ferramentas...
Minerando dados
• Parsers !!!
• <p>rand(x)</p>
• /<p>(.*?)</p>/
• split(),strtok(),strcmp...
• Comparar letra por letra, ou cadeias...
• re2c,flex+bison,pcre,posix
  regex,sed...
• Bitwise “bitap”
• Assembly !? o.O
Minerando dados
• Spider para pegar temperatura do tempo




     Como você faria o Parser ???
Minerando dados


• Temperatura.pl
• PCRE

foreach (@result) {
   if ($_ =~ m/<b>(.*?).C</b>/) {
    my $graus="$1";
…
Minerando dados

• Abstração,normalização e
  profundidade.
Minerando dados
• Seu spider tem permissões para minar os dados ?
                 •   “robots.txt”
APIs para ajudar no
                          desenvolvimento


• Ruby a gem Mechanize,curl...
• Perl no CPAN temos
  LWP,WWW::Mechanize,curl...
• Python requests...
• Java,PHP,Common Lisp,C++...

• Não precisa recriar a roda com sockets!
APIs para ajudar no
     desenvolvimento

•
APIs para ajudar no
     desenvolvimento

•
Trabalhando com
                     formulários e cookies



• Sempre que temos input no protocolo
  HTTP temos como os mais populares
  métodos POST e GET.

• Em RestFul temos outros como
  Delete,Put...
• Outras entradas também “User Agent”
Trabalhando com
formulários e cookies
POST e GET com libcurl


POST:
curl_easy_setopt(curl,
CURLOPT_POSTFIELDS,
"bugsec=1&floripa=praia");

GET:
curl_easy_setopt(curl, CURLOPT_URL,
"http://www.bugsec.com.br/site.jsp?var=1");
POST e GET com libcurl


Vide ex3.c
COOKIE:
 res = curl_easy_setopt(curl,
CURLOPT_COOKIELIST,
"Set-Cookie: quem=nozes");

curl_easy_setopt(curl,
CURLOPT_COOKIEJAR,
"cookie.txt");
Spoofing de User Agent

• Como mudar o User Agent ?
Spoofing de User Agent


• Como mudar o User Agent ?

• curl_setopt (curl, CURLOPT_USERAGENT,
  "Mozilla/5.0 NetBSD 4.1");

• Analisar como a aplicação se comporta com
  diferentes User Agent.

• Enganar sistemas anti-bots que usam
  blacklists.
Passando certificados
                                  com SSL


• curl_setopt(x, CURLOPT_SSL_VERIFYPEER, false);


  OU

• curl_setopt(x, CURLOPT_SSL_VERIFYPEER, true);
• curl_setopt(x, CURLOPT_SSL_VERIFYHOST, 2);
• curl_setopt (x, CURLOPT_CAINFO,”/local/CA/cert.crt”);


• CURLOPT_CAPATH
Uso de proxys

• curl_setopt(x,CURLOPT_HTTPPROXYTUNNEL, 1);
• curl_setopt(x, CURLOPT_PROXY,
  “201.66.121.116:666”);
• curl_setopt(x, CURLOPT_FOLLOWLOCATION, 1);
Autenticação,
                         captcha e OAUTH



• Brute Force ?
• Sim, por que não ?

• Wp-brute = brute force para wordpress
• Fairy = brute force para auth http
Autenticação,
    captcha e OAUTH

•
Autenticação,
                          captcha e OAUTH
• HTTP AUTH , o mais fácil de brutar :-)
Autenticação,
                              captcha e OAUTH


• Green Fairy – Programa para brute force de auth HTTP
• https://github.com/CoolerVoid/Fairy
• Fácil para entender


• curl_easy_setopt(curl_handle,
  CURLOPT_HTTPAUTH, CURLAUTH_ANY);
• curl_easy_setopt(curl_handle,
  CURLOPT_USERPWD, auth);


• auth==”admin:password”
Autenticação,
                       captcha e OAUTH
• Captcha o que é ?
• Como quebrar um captcha ?
Autenticação,
                       captcha e OAUTH


• OAUTH o que é ?

•   Facebook
•   twitter
•   APIs
•   Tokens
•   http://oauth.net
Automação no web
                             browser
• PTC ( Paid to Click) ,Pagam por Cliques !
• AdSense como google ,
  buscapé,submarino,zura...
• Neobux , adbux ,landbux...




         irc.makecash.org
Scanners,fuzzers,GPS
                     hacks...

• 0d1n :
 http://code.google.com/p/0d1n/
Scanners,fuzzers, hacks...



• Um Scanner

• Site.com/index.jsp?var=!&x=0!
• Onde temos “!” será trocado
  por um PAYLOAD, então enviamos
  “Request”.
• Logo depois será feito uma busca por
  strings suspeitas na “Response”.
Scanners,fuzzers, hacks...


• Analisamos os dados “hammer.html”
Scanners,fuzzers, hacks...


• Ao clicar em uma linha na tabela
Scanners,fuzzers, hacks...



• Um Bruteforce

• -h Site.com/index.jsp
• -P 'login=admin?password=!'

• Depois basta analisar a tabela gerada
•



• github.com/CoolerVoid/beer
Perguntas ?
Contato
• c00f3r@gmail.com
• acosta@conviso.com.br
Muito Obrigado !
• BugSec (m0nad,iak,sigsegv,bman,slyfunky),
  CONVISO.
• Clandestine,muzgo,F117,bsdaemon,
  eremitah,crash,kov...

Bsides4cooler

  • 1.
  • 2.
    Coolers-lab $ whoami Antonio Costa “Cooler_” • Experiência de 4 anos com desenvolvimento de sistemas web e web spiders em geral,soluções para problemas em unix... • Desenvolvedor e pesquisador . • Faço parte do grupo de pesquisa BugSec. • Fundador da E-zine Cogumelo Binario. • Programador em ASM,C,C++,Common Lisp,Perl,PHP... • Trabalho atualmente na CONVISO. https://github.com/CoolerVoid/ http://code.google.com/p/bugsec/ @Cooler_freenode
  • 3.
    Agenda • O queé um Web Spider ? • Casos de uso • Minerando dados • APIs para ajudar no desenvolvimento • Trabalhando com formulários e cookies • Spoofing de user agent • Autenticação,captcha e OAUTH • Passando certificados com SSL • Uso de proxys • Scanners,fuzzers, Hacks...
  • 4.
    Códigos exemplos daapresentação ! code.google.com/p/ bugsec/ downloads/list • owasp_cooler.zip
  • 5.
    O que éum Web Spider ? • Geralmente trabalha nos protocolos • HTTP e HTTPs
  • 6.
    • E agoracomo fazer abstração do conteúdo ?
  • 7.
    • Exemplo usandosockets simples • arquivo ex1.c • Leia rfc2616
  • 8.
    • send() “GET /index.php HTTP/1.1nHost: localhost t n “ • Então para pegar a resposta um read() • Como resultado temos o source da página :-)
  • 9.
  • 10.
    • Exemplo • servidorHTTP • Arquivo ex2.c
  • 11.
    • Exemplo • servidorHTTP programa ex2.c • Se receber qualquer dado então • String para write() vai ser • "HTTP/1.1 200 Oknn<html>codigo em html<br><b>BUGSEC</b></htm l>n"
  • 12.
  • 13.
    • Onde podemosencontrar web spiders ?
  • 14.
    Casos de uso •No android e no iOS • Na sua TV moderna • Gateways de pagamento...
  • 15.
  • 16.
  • 17.
    Casos de uso •Em ferramentas...
  • 18.
    Minerando dados • Parsers!!! • <p>rand(x)</p> • /<p>(.*?)</p>/ • split(),strtok(),strcmp... • Comparar letra por letra, ou cadeias... • re2c,flex+bison,pcre,posix regex,sed... • Bitwise “bitap” • Assembly !? o.O
  • 19.
    Minerando dados • Spiderpara pegar temperatura do tempo Como você faria o Parser ???
  • 20.
    Minerando dados • Temperatura.pl •PCRE foreach (@result) { if ($_ =~ m/<b>(.*?).C</b>/) { my $graus="$1"; …
  • 21.
  • 22.
    Minerando dados • Seuspider tem permissões para minar os dados ? • “robots.txt”
  • 23.
    APIs para ajudarno desenvolvimento • Ruby a gem Mechanize,curl... • Perl no CPAN temos LWP,WWW::Mechanize,curl... • Python requests... • Java,PHP,Common Lisp,C++... • Não precisa recriar a roda com sockets!
  • 24.
    APIs para ajudarno desenvolvimento •
  • 25.
    APIs para ajudarno desenvolvimento •
  • 26.
    Trabalhando com formulários e cookies • Sempre que temos input no protocolo HTTP temos como os mais populares métodos POST e GET. • Em RestFul temos outros como Delete,Put... • Outras entradas também “User Agent”
  • 27.
  • 28.
    POST e GETcom libcurl POST: curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "bugsec=1&floripa=praia"); GET: curl_easy_setopt(curl, CURLOPT_URL, "http://www.bugsec.com.br/site.jsp?var=1");
  • 29.
    POST e GETcom libcurl Vide ex3.c COOKIE: res = curl_easy_setopt(curl, CURLOPT_COOKIELIST, "Set-Cookie: quem=nozes"); curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookie.txt");
  • 30.
    Spoofing de UserAgent • Como mudar o User Agent ?
  • 31.
    Spoofing de UserAgent • Como mudar o User Agent ? • curl_setopt (curl, CURLOPT_USERAGENT, "Mozilla/5.0 NetBSD 4.1"); • Analisar como a aplicação se comporta com diferentes User Agent. • Enganar sistemas anti-bots que usam blacklists.
  • 32.
    Passando certificados com SSL • curl_setopt(x, CURLOPT_SSL_VERIFYPEER, false); OU • curl_setopt(x, CURLOPT_SSL_VERIFYPEER, true); • curl_setopt(x, CURLOPT_SSL_VERIFYHOST, 2); • curl_setopt (x, CURLOPT_CAINFO,”/local/CA/cert.crt”); • CURLOPT_CAPATH
  • 33.
    Uso de proxys •curl_setopt(x,CURLOPT_HTTPPROXYTUNNEL, 1); • curl_setopt(x, CURLOPT_PROXY, “201.66.121.116:666”); • curl_setopt(x, CURLOPT_FOLLOWLOCATION, 1);
  • 34.
    Autenticação, captcha e OAUTH • Brute Force ? • Sim, por que não ? • Wp-brute = brute force para wordpress • Fairy = brute force para auth http
  • 35.
    Autenticação, captcha e OAUTH •
  • 36.
    Autenticação, captcha e OAUTH • HTTP AUTH , o mais fácil de brutar :-)
  • 37.
    Autenticação, captcha e OAUTH • Green Fairy – Programa para brute force de auth HTTP • https://github.com/CoolerVoid/Fairy • Fácil para entender • curl_easy_setopt(curl_handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY); • curl_easy_setopt(curl_handle, CURLOPT_USERPWD, auth); • auth==”admin:password”
  • 38.
    Autenticação, captcha e OAUTH • Captcha o que é ? • Como quebrar um captcha ?
  • 39.
    Autenticação, captcha e OAUTH • OAUTH o que é ? • Facebook • twitter • APIs • Tokens • http://oauth.net
  • 40.
    Automação no web browser • PTC ( Paid to Click) ,Pagam por Cliques ! • AdSense como google , buscapé,submarino,zura... • Neobux , adbux ,landbux... irc.makecash.org
  • 41.
    Scanners,fuzzers,GPS hacks... • 0d1n : http://code.google.com/p/0d1n/
  • 42.
    Scanners,fuzzers, hacks... • UmScanner • Site.com/index.jsp?var=!&x=0! • Onde temos “!” será trocado por um PAYLOAD, então enviamos “Request”. • Logo depois será feito uma busca por strings suspeitas na “Response”.
  • 43.
  • 44.
    Scanners,fuzzers, hacks... • Aoclicar em uma linha na tabela
  • 45.
    Scanners,fuzzers, hacks... • UmBruteforce • -h Site.com/index.jsp • -P 'login=admin?password=!' • Depois basta analisar a tabela gerada
  • 46.
  • 47.
  • 48.
  • 49.
    Muito Obrigado ! •BugSec (m0nad,iak,sigsegv,bman,slyfunky), CONVISO. • Clandestine,muzgo,F117,bsdaemon, eremitah,crash,kov...