Lab Setup

1
2
3
4
5
6
7
git clone [https://github.com/leonjza/frida-boot](https://www.youtube.com/redirect?event=video_description&redir_token=QUFFLUhqazAzUlppU0M4TmtUNEZmYXJGM09TREVHa0lDd3xBQ3Jtc0trQlNhUDZHMVYzSFUzSFp1eWhnV3FYR2JhbkI2dzJNYlpTMVZFQUEzNXdpREt5LWtvT2RURWdlUjRsR3JNS1EyeGZGZVFlSmFBN2ZLUGw2VWV5LW1TWk5sVDVGMEVXM284SG1LUFVzNmpqRGpaT1ZNMA&q=https%3A%2F%2Fgithub.com%2Fleonjza%2Ffrida-boot)

cd frida-boot

./docker.sh pull

./docker.sh run
1
2
3
tmux
ó
docker exc -it frida-boot /bin/bash

Parte 1

Copiar pew.c a carpeta code

1
2
3
cp software/pew.c code/

cd !$

Compilarlo

1
2
3
gcc pew.c -o pew

./pew

LD_PRELOAD

Lista addicional, específica de usuario, objectos compartidos de tipo ELF que se cargan antes que otros.

Esta característica se usa para hacer override a funciones de otros objetos compartidos

Librerías compartidas en pew.c, cada vez que lo ejecutamos cambian las direcciones dado que son dinámicas.

Librerías compartidas en un binario estático:

1
2
3
gcc -static pew.c -o pew-static

ldd pew-static

Nuestro programa pew, usa librerías estandar libc

1
2
3
sleep();

printf();

Crearemos un sleep falso basado en la librería real de Unix, y luego lo compilaremos y crearemos una librería compartida:

1
gcc -fPIC -shared fake_sleep.c -o fake_sleep.so

Correr pew con nuestra implementación de librerías compartida, como podemos observar nunca funciona el sleeping

1
LD_PRELOAD=./fake_sleep.so ./pew

sleep() proxy:

Compilaremos el fake_sleep 2, buscamos unir ld-linux para dlsym:

1
gcc -fPIC -shared fake_sleep.c -p fake_sleep.so -ldl

Conclusiones:

Las librerías compartidas pueden sobreescribir funciones.

Sobreescribir funciones puede ser interesante para alterar el resultado.