O especialista em OTUS Alexander Kolesnikov compartilhou conosco um artigo Ăștil, que escreveu especificamente para alunos do curso de Engenharia Reversa. BĂĄsico
Convidamos vocĂȘ a assistir ao dia de demonstração do curso , no qual nossos professores falaram em detalhes sobre o programa do curso e responderam a dĂșvidas.
A engenharia reversa para obter um algoritmo Ă© sempre tentadora, mas a engenharia reversa para criar algo novo Ă© ainda mais legal. Neste artigo, tentaremos usar a ferramenta Frida para tornar o processo de anĂĄlise de um aplicativo vulnerĂĄvel um pouco mais fĂĄcil e para criar um exploit para este aplicativo um pouco mais fĂĄcil.
Todos os exemplos do artigo tratarĂŁo de ataques de heap no sistema operacional Linux, portanto, nos reservamos com paciĂȘncia e pipoca.
Heap
Heap â , . , malloc
. , . , .
. . , libc, . :
heap grooming attack
fastbin attack
tcache attack
unlink
largebin
unsortedbin attack
, . . â , . , â libc. â .
Frida
frida 2 : frida-trace MemoryMonitor. , . , , CTF.
Heap Grooming
, libc 2.23. , , , , . , . 7. :
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
unsigned long int *mem0, *mem1, *mem2;
mem0 = malloc(0x10);
mem1 = malloc(0x10);
mem2 = malloc(0x10);
printf("Allocated memory on:\nptr0: %p\nptr1: %p\nptr2: %p\n\n", mem0, mem1, mem2);
free(mem0);
free(mem1);
free(mem2);
printf("mem0 after free and alloc again: %p\n", malloc(0x10));
printf("mem1 after free and alloc again: %p\n", malloc(0x10));
printf("mem2 after free and alloc again: %p\n\n", malloc(0x10));
}
. :
, , , printf
? printf
frida-trace
. :
Frida-trace -f test -i âmallocâ
handler
. âhandlersâ frida-trace. malloc.js OnLeave
, :
. pico CTF âAre you rootâ. frida-trace:
, , . , login;
Auth level
. ? malloc 0x10 0x7. , , 0x10, 2 - 0x1514eb0 0x1514ed0. .
TCACHE
, , tcache
, . , tcache
, tcache
:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
unsigned long int *mem0, *mem1;
int target;
mem0 = malloc(0x10);
mem1 = malloc(0x10);
target = 0xdead;
printf("mem0: %p\n", mem0);
printf("mem1: %p\n", mem1);
printf("int: %p\n\n", &target);
free(mem0);
free(mem1);
printf("Next pointer for mem1: %p\n\n", (unsigned long int *)mem1);
*mem1 = (unsigned long int)⌖
printf("Next pointer for mem1: %p\n\n", (unsigned long int )mem1);
printf("Malloc Allocated: %p\n\n", malloc(0x10));
printf("Malloc Allocated: %p\n\n", malloc(0x10));
}
, frida-trace , :
, , , . , malloc
. , Use-After-Free. Plaid CTF âcppâ. :
, malloc
. :
, .
. . , . .