| Voir le sujet précédent :: Voir le sujet suivant |
| Auteur |
Message |
jmathon
Inscrit le: 04 Sep 2007 Messages: 11
|
Posté le: Ven Sep 21, 2007 4:25 pm |
Sujet du message: jmp $ebp pour BoF
|
|
Bonjour,
voilà je suis entrain de m'entrainer à BoF un petit prog
| Code: |
int main(int argv,char **argc) {
char buf[256];
strcpy(buf,argc[1]);
}
|
| Citation: |
Starting program: /tmp/vuln AAA[...]AAAAAAAAAAAAAAAAAAABCDE
Program received signal SIGSEGV, Segmentation fault.
0x45444342 in ?? ()
(gdb) i r
eax 0xbfffd5d0 -1073752624
ecx 0xfffffd43 -701
edx 0xbfffd99d -1073751651
ebx 0xb7fe2000 -1208082432
esp 0xbfffd6e0 0xbfffd6e0
ebp 0x41414141 0x41414141
esi 0xb7fe417c -1208073860
edi 0x2 2
eip 0x45444342 0x45444342
eflags 0x10282 66178
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51
|
| Code: |
pas de jmp ou call ebp :s
(gdb) disass main
Dump of assembler code for function main:
0x08048384 <main+0>: push %ebp
0x08048385 <main+1>: mov %esp,%ebp
0x08048387 <main+3>: sub $0x108,%esp
0x0804838d <main+9>: and $0xfffffff0,%esp
0x08048390 <main+12>: mov $0x0,%eax
0x08048395 <main+17>: sub %eax,%esp
0x08048397 <main+19>: sub $0x8,%esp
0x0804839a <main+22>: mov 0xc(%ebp),%eax
0x0804839d <main+25>: add $0x4,%eax
0x080483a0 <main+28>: pushl (%eax)
0x080483a2 <main+30>: lea 0xfffffef8(%ebp),%eax
0x080483a8 <main+36>: push %eax
0x080483a9 <main+37>: call 0x80482b0 <_init+56>
0x080483ae <main+42>: add $0x10,%esp
0x080483b1 <main+45>: leave
|
le probleme est que lorsque je debug etc...
En fait, je dois trouver un jmp $ebp mais ou et surtout comment je pourrai faire ?? lol
je précise que je suis sou linux donc pas de findjmp sur une .dll
et que j'ai essayé un code pour trouver un jmp $esp qui me met un segmentation fault :s
| Code: | #include <stdio.h>
#define START 0xffffe000
#define END 0xfffff000
#define B1 0xff
#define B2 0xe4
main(){
char *p;
p = (char *) START;
while(p < (char *) END){
if((p[0] == (char) B1) && (p[1] == (char) B2)){
printf(" ADRESS = %p\n", p);
}
p++;
}
}
|
Merci de votre aide |
|
| Revenir en haut |
|
 |
toto
Inscrit le: 26 Mar 2007 Messages: 227
|
Posté le: Lun Sep 24, 2007 11:12 pm |
Sujet du message:
|
|
ok, et depuis quand on dois avoir un jmp ebp ?
pe parle tu du prologue genre :
push %ebp
mov %esp,%ebp
push $0xc,%esp ($0xc, est un exemple)
ici on sauveagrde sur la stack ebp, et on fout esp sur ebp, pour changer de "cadre"
a la fin du programme on fait l'inverse avec la fonction leave
mais exactmeent de quoi parles-tu ? |
|
| Revenir en haut |
|
 |
virtualabs

Inscrit le: 02 Nov 2005 Messages: 9
|
Posté le: Mar Sep 25, 2007 7:43 am |
Sujet du message:
|
|
| Surtout qu'ici le "saved eip" a été écrasé, je ne vois donc pas la nécessité de faire un "jump $ebp". |
|
| Revenir en haut |
|
 |
jmathon
Inscrit le: 04 Sep 2007 Messages: 11
|
Posté le: Mar Sep 25, 2007 4:29 pm |
Sujet du message:
|
|
d'apres ce que j'ai pu lire,
pour moi, il faut que dans $eip il y ait l'adresse de mon buffer ou il y aura le shellcode.
dites moi si je me trompe mais comme je vois qu'il y a 41414141 dans $ebp c'est donc où se trouve mon buffer donc si sur $eip je met une adresse de jmp $ebp il va jumper sur mon buffer et donc si je met des NOP etc... sur mon shellcode. nan ?
j'ai fait un petit schema sur ce que je veux faire :
l'adresse 0x12345678 est celle que je cherche
pile.jpg |
|
| Revenir en haut |
|
 |
5m0k3

Inscrit le: 29 Juin 2006 Messages: 118
|
Posté le: Mar Sep 25, 2007 7:16 pm |
Sujet du message:
|
|
| jmathon a écrit: | d'apres ce que j'ai pu lire,
pour moi, il faut que dans $eip il y ait l'adresse de mon buffer ou il y aura le shellcode.
dites moi si je me trompe mais comme je vois qu'il y a 41414141 dans $ebp c'est donc où se trouve mon buffer donc si sur $eip je met une adresse de jmp $ebp il va jumper sur mon buffer et donc si je met des NOP etc... sur mon shellcode. nan ? |
Nan, pas besoin de te prendre la tete jump direct sur ton shellcode, ou dans les NOP qui le précèdent.
PS pitite info, tu n'y arrivera jamais si tu désactive pas la random mémoire.
Via:
/proc/sys/kernel/randomize_va_space -> met 0 au lieu de 1 dans ce fichier. pas besoin de rebooter ensuite. |
|
| Revenir en haut |
|
 |
jmathon
Inscrit le: 04 Sep 2007 Messages: 11
|
Posté le: Mar Sep 25, 2007 9:03 pm |
Sujet du message:
|
|
ah d'accord,
je vais faire ça alors, retourner sur $esp-X pour arriver direct sur mon buffer.
Mais j'ai souvent vu qu'il fallait utiliser des jmp $esp ou jmp $ebp etc... c'est pour bypasser une protection ou autre chose? |
|
| Revenir en haut |
|
 |
5m0k3

Inscrit le: 29 Juin 2006 Messages: 118
|
Posté le: Mar Sep 25, 2007 9:19 pm |
Sujet du message:
|
|
Le jmp $ebp c'est plus sous windows que ca se fait me semble t'il. Pour sauter sur des fonctions dans les DLL chargées par le programme vulnérable. A vérifier.
EDIT: je viens de réfléchir 5 minutes et je crois que je t'ai dit n'importe quoi jmp $ebp ca sert pas a ca. Attends une réponse plus avisée. |
|
| Revenir en haut |
|
 |
toto
Inscrit le: 26 Mar 2007 Messages: 227
|
Posté le: Mar Sep 25, 2007 11:45 pm |
Sujet du message:
|
|
| jmathon, non pas du tout c'est une vielle technique pour calculer l'adresse de retour, mais oublie la |
|
| Revenir en haut |
|
 |
aiolia
Inscrit le: 04 Fév 2008 Messages: 3
|
Posté le: Lun Fév 04, 2008 12:12 pm |
Sujet du message:
|
|
| toto a écrit: | | jmathon, non pas du tout c'est une vielle technique pour calculer l'adresse de retour, mais oublie la |
Ca ne serait pas plutôt pour les cas où l'adresse de l'endroit où on veut jumper contiendrait des zéros ? |
|
| Revenir en haut |
|
 |
aiolia
Inscrit le: 04 Fév 2008 Messages: 3
|
Posté le: Mer Fév 06, 2008 11:31 pm |
Sujet du message:
|
|
| aiolia a écrit: | | toto a écrit: | | jmathon, non pas du tout c'est une vielle technique pour calculer l'adresse de retour, mais oublie la |
Ca ne serait pas plutôt pour les cas où l'adresse de l'endroit où on veut jumper contiendrait des zéros ? |
Et d'ailleurs c'est plutôt jmp esp en principe puisqu'au moment où l'instruction s'exécute la pile a déjà été écrasée et le leave a pushé le SavedEBP dans ebp, or SavedEBP a été écrasé donc un jmp ebp ferait pointer eip dans de la merde non ? |
|
| Revenir en haut |
|
 |
|