swagcat228
Заблокирован
В общем, я был тут
то есть в heap. и зациклил выделение памяти. она с помощью calloc() выделялась выделялась, а потом пробила хип c помощью memmove(). и выззвала функцию free() все это из libc вызывала испытуемая программа.
так вот, прошёл я сквозь все слои либца, сквозь стэк, и ущёл в бесконечность. мне аж немного не по себе стало)
а раздуплил меня сегфол
вот код самой проги:
а вот пэйлоад которым я её кормлю:
Ребят, скажите, это и есть юз-афтер-фри?
как дальше ее юзать?
то есть в heap. и зациклил выделение памяти. она с помощью calloc() выделялась выделялась, а потом пробила хип c помощью memmove(). и выззвала функцию free() все это из libc вызывала испытуемая программа.
так вот, прошёл я сквозь все слои либца, сквозь стэк, и ущёл в бесконечность. мне аж немного не по себе стало)
а раздуплил меня сегфол
вот код самой проги:
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define REQSZ 128
#define BANNER \
"Welcome to hell, brought to you by https://exploit.education"
void check_path(char *buf) {
char *start;
char *p;
int l;
/*
* Work out old software bug
*/
p = rindex(buf, '/');
l = strlen(p);
if (p) {
start = strstr(buf, "ROOT");
if (start) {
while (*start != '/') start--;
memmove(start, p, l);
}
}
}
void get_requests(int in_fd, int out_fd) {
char *buf;
char *destroylist[256];
int dll;
int i;
dll = 0;
while (1) {
if (dll >= 255) break;
buf = calloc(REQSZ, 1);
if (read(in_fd, buf, REQSZ) != REQSZ) break;
printf("%s\n", buf);
if (strncmp(buf, "FSRD", 4) != 0) break;
check_path(buf + 4);
dll++;
}
for (i = 0; i < dll; i++) {
write(out_fd, "Process OK\n", strlen("Process OK\n"));
free(destroylist[i]);
}
}
int main(int argc, char **argv, char **envp) {
printf("%s\n", BANNER);
fflush(stdout);
get_requests(0, 1);
return 0;
}
а вот пэйлоад которым я её кормлю:
python -c "print('FSRD\ /ROOT' * 12228)" > ./smash
Ребят, скажите, это и есть юз-афтер-фри?
как дальше ее юзать?