Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de pentesting de
software
PID_00277621
Ninguna parte de esta publicación, incluido el diseño general y la cubierta, puede ser copiada,
reproducida, almacenada o transmitida de ninguna forma, ni por ningún medio, sea este eléctrico,
mecánico, óptico, grabación, fotocopia, o cualquier otro, sin la previa autorización escrita
del titular de los derechos.
© FUOC • PID_00277621 Herramientas de pentesting de software
Índice
Introducción............................................................................................... 5
1. Kali Linux............................................................................................ 7
1.1. Reverse Engineering......................................................................... 7
1.2. Web Application Analysis ........................................................... 8
1.3. Exploitation Tools ....................................................................... 11
2. Decompilers........................................................................................ 13
2.1. Boomerang .................................................................................. 13
2.2. Rec Studio .................................................................................... 15
3. Disassemblers....................................................................................... 17
3.1. GDB ............................................................................................. 17
3.2. Radare .......................................................................................... 19
4. Debuggers............................................................................................. 22
4.1. GDB ............................................................................................. 22
4.2. OllyDbg ....................................................................................... 31
4.3. Immunity Debugger .................................................................... 42
4.4. IDA Pro ........................................................................................ 45
4.5. Ghidra .......................................................................................... 50
6. Android Studio................................................................................... 60
© FUOC • PID_00277621 5 Herramientas de pentesting de software
Introducción
Entre las herramientas más habituales existen los debuggers, decompilers, disas-
semblers, framewoks, etc., todos ellos en diversas plataformas; en este módulo
se ha recogido un resumen de algunas de las herramientas existentes, aunque
obviamente en el mercado hay disponibles una amplia diversidad.
© FUOC • PID_00277621 7 Herramientas de pentesting de software
1. Kali Linux
Kali Linux es una distribución de Linux basada en Debian que está totalmente
orientada a la realización de pruebas de penetración (pentesting) y auditorías
de seguridad, informática forense e ingeniería inversa.
Las herramientas que nos ofrece Kali Linux para Reverse Enginering son Clang,
Clang++, NASM Shell y Radare2.
• Permite realizar reportes en formato HTML y XML con los elementos de-
tectados.
• Payloads: lugar donde se encuentran los payloads (que se ejecutan una vez
tenga éxito el exploit).
© FUOC • PID_00277621 12 Herramientas de pentesting de software
• Elegir el encode del exploit y así no ser detectado por los antivirus del equi-
po.
• Ejecutar el exploit
– Mediante el comando exploit
Msfpc facilita el uso de herramientas como msfvenom para generar de una for-
ma simple un shellcode o un payload concreto.
2. Decompilers
2.1. Boomerang
f:\boomerang\boomerang.exe f:\c\ejemplo.exe
© FUOC • PID_00277621 14 Herramientas de pentesting de software
// address: 0x402580
void proc2(unsigned int param1) {
unsigned int eax_1; // r24{32}
void *ecx; // r25
__size32 esp; // r28
ecx = (esp + 4);
if (param1 >= 0x1000) {
do {
eax_1 = param1;
ecx = ecx - 0x1000;
param1 = eax_1 - 0x1000;
} while ((unsigned int)(eax_1 - 0x1000) > 0x1000);
}
return;
}
// address: 0x4014e0
void _start() {
__size32 ebp; // r29
__size32 ebx; // r27
__size32 ecx; // r25
__size32 edi; // r31
union { __size32 * x7; int x8; } edi_1; // r31
union { int x3; __size32 * x4; } edi_2; // r31
union { int x3; __size32 * x4; } edi_3; // r31
__size32 esi; // r30
int esp; // r28
union { int * x5; int x6; union { __size32 * x9; int x10; } * x11;
union { __size32 * x9; int x10; } * x12;
union { __size32 * x9; int x10; } * x13;
union { __size32 * x9; int x10; } * x14;
union { __size32 * x9; int x10; } * x15;
union { __size32 * x9; int x10; } * x16;
union { __size32 * x9; int x10; } * x17;
union { __size32 * x9; int x10; } * x18;
union { __size32 * x9; int x10; } * x19;
union { __size32 * x9; int x10; } * x20;
union { __size32 * x9; int x10; } * x21;
union { __size32 * x9; int x10; } * x22;
union { __size32 * x9; int x10; } * x23;
union { __size32 * x9; int x10; } * x24;
union { __size32 * x9; int x10; } * x25;
union { __size32 * x9; int x10; } * x26;
© FUOC • PID_00277621 15 Herramientas de pentesting de software
REC Studio es un descompilador que puede leer archivos ejecutables de Win- Rec Studio.
dows, Linux, Mac OS X, ya sean de 32 o de 64 bits, e intenta producir una
Disponible en: <http://
representación similar a la del código C. www.backerstreet.com/rec/
rec.htm>
f:\RecStudioWin\bin\RecCLI ejemplo.exe
f:\output\ejemploReversing.c
3. Disassemblers
Hay que tener en cuenta que algunas herramientas debugguers también inclu-
yen esta función de desensamblado, como veremos en el apartado destinado
a debuggers.
3.1. GDB
Radare <https://
El desensamblador de Radare forma parte de un framework en el que se incluye www.radare.org/r/>
una amplia gama de herramientas para reverse engineering. Radare2: reversing framekork:
<https://medium.com/@wi-
lliamkhepri/radare-2-reversing-
framework-4211d7e35920>
Está disponible para Linux, Windows, OSX, Android, iOS, Solaris y Haiku; el
ejemplo mostrado se ha ejecutado bajo Kali Linux, ya que también forma parte
de las herramientas incluidas en este entorno.
• Dentro del apartado de los ficheros ejecutables, reconoce entre otros el for-
mato PE, MZ, ELF, ejecutables de la máquina virtual Dalvik, ficheros .class
de Java.
Radare2 está compuesto de varias aplicaciones, cada una de las cuales propor-
ciona una serie de utilidades concretas, y cuyas capacidades se pueden combi-
nar fácilmente. Las aplicaciones que componen Radare2 son las siguientes:
4. Debuggers
Existen diversos debuggers en el mercado. Los hay que están muy extendidos,
y otros que son populares. Bajo Linux el debugger más potente es el GDB1 (The
GNU Project Debugger). También se puede ejecutar en los sistemas UNIX más
populares y en Microsoft Windows.
En este apartado se verá cómo usar estas herramientas para controlar la ejecu-
ción de procesos a bajo nivel (código máquina y lenguaje ensamblador). En
los ejemplos que se muestran no se ejecutan exploits, sino que se eligen peque-
ñas aplicaciones para ser modificadas en tiempo de ejecución directamente
desde el debugger. Muchos exploits modifican las aplicaciones que atacan en
tiempo de ejecución para conseguir ejecutar su propio código. Los ejemplos
no son exploits en sí mismos, pero introducen el concepto de cambiar el com-
portamiento de las aplicaciones durante la ejecución de estas. El concepto es
usado en muchos exploits que, utilizando vulnerabilidades de las aplicaciones,
cambian su comportamiento para que hagan lo que el atacante desea.
4.1. GDB
Se presentan aquí las operaciones básicas para poder trazar la ejecución de OllyDbg
aplicaciones con esta herramienta. Muchos lenguajes de alto nivel son sopor-
Disponible en:
tados por esta herramienta, permitiendo el seguimiento a alto nivel de las apli- <www.ollydbg.de/>
caciones si el código fuente está disponible. Aun así, tanto si el código fuente Immunity: <http://
immunityinc.com/pro-
está disponible como si no, gdb puede hacer el seguimiento de la aplicación ducts/debugger/index.html>
a bajo nivel (ensamblador).
gdb -/media/sf_shared/ejemplo
Este debugger cuenta con una ayuda en línea muy completa. El comando help
ofrece en todo momento información sobre los comandos disponibles. Ejecu-
tando help sin ningún parámetro se obtendrá una ayuda general, donde se
muestran las diferentes secciones en las que están divididos los comandos:
© FUOC • PID_00277621 24 Herramientas de pentesting de software
help break
• next: ejecuta una instrucción del programa. Ejecuta la instrucción sin en-
trar en las llamadas a funciones. Este comando está asociado a la ejecución
de una instrucción escrita en un lenguaje de alto nivel. Si tan solo se dis-
pone de código ensamblador, no debe utilizarse, pues el resultado puede
ser impredecible. También se puede ejecutar este comando con n.
4.2. OllyDbg
OllyDbg es una aplicación que tiene una ventana principal en la que se van
abriendo otras subventanas que dan acceso a diferentes opciones o funciona-
lidades de la aplicación. Si se abre el debugger sin cargar ninguna aplicación,
tan solo se obtendrá una ventana vacía, con el menú y unos iconos para po-
der utilizar. Si en ese momento se abre una aplicación aparecerá una ventana
como la del ejemplo:
© FUOC • PID_00277621 32 Herramientas de pentesting de software
Desensamblado
Registros
Pila
Volcado�de�memoria
Área�de�ayuda
Opciones
• Desensamblado
– Modificación del código máquina.
– Ensamblado de instrucciones a código máquina.
– Gestión de breakpoints.
– Mostrar datos de una dirección de memoria seleccionada en la sección
de volcado de memoria.
– Ir a un punto de la ejecución del programa.
– Ver el árbol de llamadas.
– Buscar un dato concreto.
• Registros
– Posibilidad de modificar el contenido de todos los registros.
– Visualización del grupo de registros deseado.
• Pila
– Posibilidad de modificar los datos de la pila.
– Alterar la pila introduciendo o sacando elementos (PUSH/POP).
– Mostrar datos de una dirección de memoria seleccionada en la sección
de volcado de memoria o en la pila.
© FUOC • PID_00277621 37 Herramientas de pentesting de software
• Volcado de memoria
– Desensamblado de posiciones de memoria.
– Buscar referencias a datos.
– Gestión de breakpoints asociados al acceso a datos.
– Mostrar los datos en diferentes formatos (hexadecimal, ASCII, tamaño
de los datos que se visualizan...).
Estas no son todas las opciones, pero son algunas de las más interesantes.
OllyDbg - Iconos
Modificar�un�programa�en�ejecución
El resultado muestra una línea de código que introduce en la pila una referen-
cia a la cadena. Haciendo clic con el botón derecho del ratón se puede elegir la
opción Follow in disassembler para abrir la ventana de CPU y mostrar la línea
de código de interés.
© FUOC • PID_00277621 40 Herramientas de pentesting de software
Se puede observar que hay una llamada a una función (de la que no se conocen
más datos que su dirección), a la que se le pasan dos parámetros en la pila.
Un entero y una cadena de caracteres, que tiene un formato muy parecido al
que usa la instrucción printf para mostrar texto por pantalla. La cadena de
caracteres contiene el texto %d que en printf se interpreta como el comodín
para mostrar un número entero. Este número podría ser el segundo parámetro.
Teniendo esto en cuenta, se procede a marcar la línea con un breakpoint y a
ejecutar el programa. Un breakpoint se puede crear haciendo doble clic en el
código máquina de la línea deseada. La ejecución se consigue presionando F9.
Una vez que ya están acabados todos los detalles del cambio que se quiere
realizar, se puede proceder a la ejecución del código y ver si así se ha obtenido el
resultado deseado. Se presiona dos veces F8 (step over) para ejecutar la función
que «probablemente» muestre la información de interés por pantalla.
Immunity Debugger incluye una interfaz gráfica del estilo de OllyDbg, pero
incluye además una línea de comandos. La línea de comandos siempre está
disponible en la parte inferior de la GUI. Permite al usuario escribir accesos
directos como si estuvieran en un depurador típico basado en comandos.
Entre las opciones que dispone esta herramienta también está la de mostrar
los valores de los registros, tal y como se muestra en la imagen siguiente.
© FUOC • PID_00277621 44 Herramientas de pentesting de software
Web: <https://www.hex-
Se trata de un desensamblador y depurador interactivo, programable y exten- rays.com/products>
sible. IDA Pro se ejecuta en Windows, Linux y Mac OS X y puede depurar una Los Pluggin Hex-Rays se pue-
den encontrar en: <https://
gran variedad de plataformas (Windows 32/64-bit, Linux 32/64-bit, OS X x86/ www.hex-rays.com/about/>
x64, iOS, Android, etc.).
Uno de los puntos destacables es la facilidad de uso; por ejemplo, entre las
diversas ventanas, podemos observar un panel con la lista de funciones, lo que
nos permite acceder rápidamente a las secciones del código que nos interese.
© FUOC • PID_00277621 46 Herramientas de pentesting de software
4.5. Ghidra
Una vez elegido el archivo se abre con la herramienta por defecto CodeBrowser,
en el cual se puede observar su aspecto general.
En las imágenes anteriores hemos podido observar el método función del pro-
grama ejemplo.exe.
6. Android Studio