C

warning: Creating default object from empty value in /home/bughunter/bughunter.tecland.com.br/modules/taxonomy/taxonomy.module on line 1390.

Sobreescrevendo a GOT via LD_PRELOAD

Para quem não conhece, a GOT (Global Offset Table) é um seção de leitura/escrita no segmento de dados que é usado por um objeto para localizar símbolos em outros objetos.

Usando a mesma idéia de post anterior, onde usamos LD_PRELOAD para interceptar a chamada da função puts(), faremos agora alterando o endereço na GOT para apontar diretamente para uma função.

Exploração de race condition via procfs

Achei muito interessante um antigo post do StalkR's blog que fala de técnicas de exploração de race condition em file system, a que me chamou mais atenção foi a que utiliza procfs.

A exploração é feita através de um código que se re-executa usando /proc/self/exe (isto faz com que o dynamic-linker faça toda as relocações em load-time, mas também é uma abertura óbvia para race condition) e que também tem set-uid de root, baseado em uma falha encontrada no pulseaudio (CVE-2009-1894) por Tavis Ormandy e Julien Tinnes.

Sobreescrevendo chamadas de função com LD_PRELOAD

Nosso famoso dynamic-linker/loader `ld.so' fornece dentre vários recursos, um que nos permite carregar uma biblioteca dinâmica antes de qualquer outra de uma programa. E ele faz isso por meio da variável de ambiente LD_PRELOAD.

XOR linked list

Navegando por aí, acabei caindo na página da Wikipédia sobre XOR linked list (http://en.wikipedia.org/wiki/XOR_linked_list), eu já havia visto essa página, mas não tinha parado para analisar, nem mesmo implementar...

Alguém pode estar curioso pra ver a implementação em C, como não há um código exemplificando, mas seguindo os passos do que é dito no texto, uma implementação seria a seguinte:

Thread-local storage

Thread-local storage (TLS) nada mais é do que um método para tornar local para uma thread uma variável global ou estática. As vezes isto é necessário, como toda variável global e estática compartilham o mesmo endereço em cada thread em um processo. Diversas linguagens fornecem meios de tratar tal situação, vejamos como sanar esta questão em C usando o GCC.