Poster un commentaire - Retour à l'article
Mikey, le 28/01/2008 :
Bonjour!
Tout d'abord, bravo pour ce tuto très bien expliqué.
J'ai tenté de reproduire les manipulations pour obtenir le shellcode qui execute un shell. J'ai codé le fichier en c, aucun souci. Par contre, en assembleur, j'ai trois erreurs à la compilation que je n'arrive pas à résoudre:
=> Error: suffix or operands invalid for `push'
=> Error: suffix or operands invalid for `push'
=> Error: suffix or operands invalid for `push'
Ces erreurs correspondent aux lignes suivantes :
=> push %edx
=> push %edx
=> push %ebx
Malgré mes recherches et mes connaissances restreintes en assembleur, je n'ai pas trouvé de solution à ce problème.
J'ai bien essayé un autre compilateur, mais cela a engendré d'autres problèmes beaucoup plus compliqués :(
Je travaille sur une version Linux Suse 10.3, et ma version de gcc est la 4.2.1.
Voyez-vous une solution à ce problème?
Cordialement,
Mik
Réponse :
Salut,
A vrai dire je ne vois pas trop... Essaye d'utiliser les instructions "pushl" à la place de "push" pour voir, au cas où... Mais j'avoue que c'est assez curieux car je n'ai jamais eu ce problème. Si ça ne marche toujours pas, essaye de chercher de la doc sur la syntaxe utilisée par gas (c'est le nom de l'assembleur de gcc).
Bonne chance !
Geo, le 29/05/2007 :
Bon bon bon... Je me suis arrêté au test du shellcode. J'ai suivi l'article au doigt et à l'oeil, puis après j'ai ça :
geo@saphira:~/shellcodes$ gcc -o testasm testasm.c
/tmp/cc1ypNyL.s: Assembler messages:
/tmp/cc1ypNyL.s:41: Warning: indirect jmp without `*'
geo@saphira:~/shellcodes$ ./testasm
Erreur de segmentation (core dumped)
geo@saphira:~/shellcodes$
En gros ça marche pas. Pourquoi donc ? (Je ne comprends pas tout mais je teste l'article la première fois pour ensuite me plonger en profondeur dedans).
Pour info, j'utilise ubuntu feisty fawn, et j'ai GCC (mais je ne connais pas le numéro de la version. En tout cas je doute que ça puisse venir de là...)
Réponse :
La gestion de la pile sous gcc4.x est pas la meme que celle des autres gcc, résultat le "jmp %esp" fait sauter trop haut sur la pile. Voici un autre petit code que je vien de faire pour pallier à ce problème :
*****************************
char sh[] = "\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb0\x04"
"\xb3\x01\xeb\x05\x59\xb2\x0d\xcd\x80\xe8"
"\xf6\xff\xff\xffHello World !";
void * SCode() {
return &sh;
}
int main()
{
SCode();
asm("jmp * %eax");
return 0;
}
**********************
Heurs
Les commentaires sont soummis à certaines règles, qui sont une question de bon sens.
Utilisez-les à bon escient. Vous pouvez donnez votre opinion, vos critiques, nous signaler des fautes, apporter des précisions. Vous pouvez également nous poser des questions ; nous essaierons de vous répondre dans la mesure du possible.
Ne confondez pas commentaires et forum ; votre commentaire doit être en rapport avec l'article. Si vous souhaitez donner un commentaire général sur le site, envoyez-nous plutôt un mail.
Merci de nous laisser votre adresse e-mail, afin que nous puissions vous recontacter si besoin. Le code HTML n'est pas interprété dans les commentaires.
Les commentaires sont soummis à une validation des administrateurs. S'ils ne respectent pas ces règles, ils seront systématiquement refusés. Merci de votre compréhension ;-)

