Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
libtalloc — libtalloc es un script de Python para usar con GDB que puede utilizarse para analizar el "asignador trivial" (talloc) | Kitploit
Herramientas/GitHubGitHub/nccgroup/libtalloc
Forensia de MemoriaAnálisis de VulnerabilidadesIngeniería InversaDepuradoresAnálisis de Binarios
GitHubnccgroup/libtalloc

libtalloc

libtalloc es un script de Python para usar con GDB que puede utilizarse para analizar el "asignador trivial" (talloc)

Ver Repositorio
17518hace 11 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

libtalloc

libtalloc es un script de python para usar con GDB que se puede utilizar para analizar el "asignador trivial" (talloc). Puedes encontrar una introducción a talloc aquí:

https://talloc.samba.org/talloc/doc/html/index.html

libtalloc se inspiró en otros scripts de python para gdb que analizan heaps, como unmask_jemalloc y libheap. Parte de la funcionalidad básica es idéntica a la de estos proyectos.

https://github.com/cloudburst/libheap

https://github.com/argp/unmask_jemalloc

Ten en cuenta que no soy un gurú de python y la calidad del código lo refleja. Si ves algo que te disgusta, no dudes en enviar un parche o darme algunas sugerencias. Todos los comentarios son bienvenidos.

Pruebas

libtalloc ha sido probado con varias versiones 2.x de talloc y soporta detección dinámica de versión para intentar superar las distintas diferencias estructurales entre versiones. Se ha probado en 32 bits y 64 bits, aunque no de forma exhaustiva, así que no te sorprendas si se rompe de vez en cuando.

Se ha probado en cierta medida en x86 y x64:

  • 2.0.7
  • 2.0.8
  • 2.1.0
  • 2.1.1

Si lo pruebas con otra versión, por favor házmelo saber si funcionó, o qué se rompió, e intentaré actualizarlo y/o la documentación en consecuencia.

Instalación

El script solo requiere una versión relativamente moderna de GDB con soporte para python.

Algunas distros LTS, como Ubuntu 12.04, todavía usan GDB con python 2.7, mientras que versiones más nuevas como 14.04 usan python 3.0. Intenté hacer que este script funcione con ambas, por lo que solo deberías necesitar:

(gdb) source libtalloc.py

Uso

La mayor parte de la funcionalidad está modelada siguiendo el enfoque de unmask_jemalloc, donde se proporciona un comando GDB separado en lugar de un complejo conjunto de opciones.

Hay disponibles varios métodos diseñados específicamente para imitar las funciones C de la biblioteca talloc, para ayudar a quienes intentan ampliar libtalloc si ya están familiarizados con la biblioteca.

Para ver la lista completa de comandos puedes ejecutar el comando tchelp:

(gdb) tchelp
[libtalloc] talloc commands for gdb
[libtalloc] tcchunk -v -x <addr>  : show chunk contents (-v for verbose, -x for data dump)
[libtalloc] tcvalidate -a <addr>  : validate chunk (-a for whole heap)
[libtalloc] tcsearch <addr>       : search heap for hex value or address
[libtalloc] tcwalk <func>         : walk whole heap calling func on every chunk
[libtalloc] tcreport <addr>       : give talloc_report_full() info on memory context
[libtalloc] tcdump -s <addr>      : dump chunks linked to memory context (-s for sorted by addr)
[libtalloc] tcparents <addr>      : show all parents of chunk
[libtalloc] tcchildren <addr>     : show all children of chunk
[libtalloc] tcinfo                : show information known about heap
[libtalloc] tcprobe               : try to collect information about talloc version
[libtalloc] tchelp                : this help message

Detección dinámica de versión

Uno de los comandos más importantes es tcprobe. Debe ejecutarse para averiguar qué versión de talloc está realmente instalada. Los diseños de estructuras para diferentes versiones pueden variar significativamente, por lo que para que la mayoría de las funciones funcionen, se debe conocer la versión.

Si el comando funciona, debería indicarte la versión detectada:

(gdb) tcprobe
Version: 2.1.1 
File: /usr/lib/libtalloc.so.2.1.1

Información meta

El comando tcinfo pretende mostrar tanta información recopilada sobre el heap como sea posible, como la información de tcprobe, la estructura null_context si se encontró, y más. Por ahora solo muestra la versión y si null_context está establecido. El null_context es necesario para la mayoría de las funciones que recorren la jerarquía real, y para encontrarlo, la mayoría de las demás funcionalidades, como tchunk, etc., intentarán auto-localizarlo.

Después de ejecutar tcprobe pero antes de usar tchunk realmente:

(gdb) tcinfo [libtalloc] null_context not yet found yet [libtalloc] Version: 2.0.7 [libtalloc] File: /usr/lib/i386-linux-gnu/libtalloc.so.2.0.7

Luego, después de analizar un chunk, así:

(gdb) tcchunk 0xb94a52b0 WARNING: 0xb94a52b0 not a talloc_chunk. Assuming ptr to chunk data 0xb94a5280 sz:0x0000003c, flags:...., name:struct tevent_context

Puedes confirmar que se encontró después con tcinfo.

(gdb) tcinfo [libtalloc] null_context: 0xb94a5028 [libtalloc] Version: 2.0.7 [libtalloc] File: /usr/lib/i386-linux-gnu/libtalloc.so.2.0.7

Ahora que null_context está establecido, podrías ejecutar otros comandos que normalmente se quejarían de que no estaba establecido, como el comando tcsearch.

Análisis de chunks

tcchunk puede proporcionarte un resumen del chunk, una salida más detallada de cada campo, o información extremadamente detallada sobre cada chunk circundante.

NOTA: Una cosa importante a tener en cuenta sobre tcchunk es que internamente usa el método tc_chunk(), que intenta corregir errores cometidos al pasar la dirección del chunk. Específicamente, si pasas la dirección de los datos del chunk en sí, y no encuentra la magia esperada de talloc, buscará una cabecera de chunk legítima un poco antes en la memoria. Esto puede confundirte en escenarios corruptos, así que asegúrate siempre de pasar la dirección explícita a menos que estés haciendo un análisis superficial.

Salida resumida:

(gdb) tcchunk 0x80a13c88
0x80a13c88 sz:0x00000020, flags:..p., name:struct netr_ServerPasswordSet

Lo siguiente es una leyenda para los chunks dentro de la salida resumida:

p - Member of a pool (POOLMEM flag)
P - Chunk is a pool (POOL flag)
F - Chunk is free (FREE flag)
L - Chunk is looped (LOOP flag)

Salida detallada:

(gdb) tcchunk -v 0x80a13c88
struct talloc_chunk @ 0x80a13c88 {
next         = 0x0
prev         = 0x80a140c8
parent       = 0x0
child        = 0x80a14088
refs         = 0x0
destructor   = 0x0
name         = 0x807d9f2f (struct netr_ServerPasswordSet)
size         = 0x20
flags        = 0xe8150c78 (POOLMEM)
limit        = 0x0
pool         = 0x80a13248

Validación

Los chunks de talloc contienen algunos valores mágicos que se pueden usar para validar si son válidos. El comando tcvalidate analizará un chunk para asegurarse de que la magia del chunk sea la esperada. Además, analiza todos los demás miembros puntero para asegurarse de que realmente caen dentro de rangos de memoria (según los conoce gdb), si el tamaño es válido, etc.

(gdb) tcvalidate 0x80a13c88
Chunk header is valid

Usaremos un método incorporado para modificar un valor y mostrar cómo podría fallar:

(gdb) python set_destructor(tc_chunk(0x80a13c88), 0x41414141)
(gdb) tcchunk -v 0x80a13c88
struct talloc_chunk @ 0x80a13c88 {
next         = 0x0
prev         = 0x80a140c8
parent       = 0x0
child        = 0x80a14088
refs         = 0x0
destructor   = 0x41414141
name         = 0x807d9f2f (struct netr_ServerPasswordSet)
size         = 0x20
flags        = 0xe8150c78 (POOLMEM)
limit        = 0x0
pool         = 0x80a13248
(gdb) tcvalidate 0x80a13c88
Chunk header is invalid:
0x80a13c88: Chunk has bad destructor pointer 0x41414141

Encontrar padres

tcparents se puede usar para ver todos los padres del chunk proporcionado:

(gdb) tcparents 0x80a13c88
0x809f8300: null_context
  0x80a08660: TALLOC_CTX *
    0x809f8370: talloc_new: ../lib/util/talloc_stack.c:147
      0x809fb680: talloc_new: ../lib/util/talloc_stack.c:147
        0x80a13258: UNNAMED
          0x80a13c58: talloc_new: ../lib/util/talloc_stack.c:147
            0x80a13c88: struct netr_ServerPasswordSet

Encontrar hijos

tcchildren se puede usar para ver todos los hijos (y nietos, etc.) del chunk proporcionado:

Descargar herramienta