hacktricks/pentesting-web/saml-attacks/saml-basics.md

186 lines
9.4 KiB
Markdown
Raw Normal View History

{% 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)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* 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.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
# SAML Genel Bakış
**Security Assertion Markup Language (SAML)**, kimlik sağlayıcılarının (IdP) hizmet sağlayıcılarına (SP) yetkilendirme kimlik bilgilerini göndermesine olanak tanır ve tek oturum açma (SSO) işlemini kolaylaştırır. Bu yaklaşım, bir dizi kimlik bilgisi kullanarak birden fazla web sitesinde oturum açmayı yönetmeyi basitleştirir. IdP'ler ve SP'ler arasında standartlaştırılmış iletişim için XML kullanır ve kullanıcı kimliğinin doğrulanmasını hizmet yetkilendirmesi ile ilişkilendirir.
## SAML ve OAuth Arasındaki Karşılaştırma
- **SAML**, işletmelere SSO oturum açma güvenliği üzerinde daha fazla kontrol sağlamak için tasarlanmıştır.
- **OAuth**, daha mobil dostu olacak şekilde tasarlanmış, JSON kullanır ve Google ve Twitter gibi şirketlerin ortak çabasıdır.
2024-02-10 18:14:16 +00:00
# SAML Kimlik Doğrulama Akışı
**Daha fazla ayrıntı için [https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/) adresindeki tam gönderiyi kontrol edin.** Bu bir özet:
2021-06-09 17:02:14 +00:00
SAML kimlik doğrulama süreci, şemada gösterildiği gibi birkaç adım içerir:
2021-06-09 17:02:14 +00:00
2024-02-04 16:10:29 +00:00
![https://epi052.gitlab.io/notes-to-self/img/saml/saml-flow.jpg](https://epi052.gitlab.io/notes-to-self/img/saml/saml-flow.jpg)
1. **Kaynağa Erişim Denemesi**: Kullanıcı korumalı bir kaynağa erişmeye çalışır.
2. **SAML İsteği Oluşturma**: SP, kullanıcıyı tanımaz ve bir SAML İsteği oluşturur.
3. **IdP'ye Yönlendirme**: Kullanıcı, SAML İsteği kullanıcının tarayıcısından geçerek IdP'ye yönlendirilir.
4. **IdP İsteği Alır**: IdP, SAML İsteğini alır.
5. **IdP'de Kimlik Doğrulama**: IdP, kullanıcıyı kimlik doğrular.
6. **Kullanıcı Doğrulaması**: IdP, kullanıcının talep edilen kaynağa erişim yetkisini doğrular.
7. **SAML Yanıtı Oluşturma**: IdP, gerekli beyanları içeren bir SAML Yanıtı oluşturur.
8. **SP'nin ACS URL'sine Yönlendirme**: Kullanıcı, SP'nin Beyan Tüketim Servisi (ACS) URL'sine yönlendirilir.
2024-02-10 18:14:16 +00:00
9. **SAML Yanıtı Doğrulama**: ACS, SAML Yanıtını doğrular.
10. **Kaynağa Erişim Verildi**: İlk talep edilen kaynağa erişim verilir.
2021-06-09 17:02:14 +00:00
# SAML İsteği Örneği
2021-06-09 17:02:14 +00:00
Bir kullanıcının [https://shibdemo-sp1.test.edu/secure/](https://shibdemo-sp1.test.edu/secure/) adresindeki güvenli bir kaynağa erişim talep ettiği senaryoyu düşünün. SP, kimlik doğrulamanın eksikliğini tespit eder ve bir SAML İsteği oluşturur:
```
2021-06-09 17:02:14 +00:00
GET /secure/ HTTP/1.1
Host: shibdemo-sp1.test.edu
2024-02-04 16:10:29 +00:00
...
2021-06-09 17:02:14 +00:00
```
Ham SAML İsteği şu şekilde görünür:
2024-02-04 16:10:29 +00:00
```xml
2021-06-09 17:02:14 +00:00
<?xml version="1.0"?>
2024-02-04 16:10:29 +00:00
<samlp:AuthnRequest ...
2021-06-09 17:02:14 +00:00
</samlp:AuthnRequest>
```
Key elements of this request include:
- **AssertionConsumerServiceURL**: IdP'nin kimlik doğrulama sonrası SAML Yanıtını göndermesi gereken yeri belirtir.
- **Destination**: Talebin gönderildiği IdP'nin adresi.
- **ProtocolBinding**: SAML protokol mesajlarının iletim yöntemini tanımlar.
- **saml:Issuer**: Talebi başlatan varlığı tanımlar.
2021-06-09 17:02:14 +00:00
Following the SAML Request generation, the SP responds with a **302 redirect**, directing the browser to the IdP with the SAML Request encoded in the HTTP response's **Location** header. The **RelayState** parameter maintains the state information throughout the transaction, ensuring the SP recognizes the initial resource request upon receiving the SAML Response. The **SAMLRequest** parameter is a compressed and encoded version of the raw XML snippet, utilizing Deflate compression and base64 encoding.
2021-06-09 17:02:14 +00:00
# SAML Response Example
2021-06-09 17:02:14 +00:00
You can find a [full SAML response here](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/). The key components of the response include:
2021-06-09 17:02:14 +00:00
- **ds:Signature**: Bu bölüm, bir XML İmzasıdır ve beyanın vericisinin bütünlüğünü ve doğruluğunu sağlar. Örnekteki SAML yanıtı, bir mesaj için ve diğeri beyan için olmak üzere iki `ds:Signature` öğesi içerir.
- **saml:Assertion**: Bu kısım, kullanıcının kimliği ve muhtemelen diğer nitelikler hakkında bilgi tutar.
- **saml:Subject**: Beyandaki tüm ifadelerin ana konusunu belirtir.
- **saml:StatusCode**: İlgili talebe yanıt olarak işlemin durumunu temsil eder.
- **saml:Conditions**: Beyanın geçerlilik süresi ve belirtilen Hizmet Sağlayıcı gibi koşulları detaylandırır.
- **saml:AuthnStatement**: IdP'nin Beyanın konusunu kimlik doğruladığını onaylar.
- **saml:AttributeStatement**: Beyanın konusunu tanımlayan nitelikleri içerir.
2021-06-09 17:02:14 +00:00
Following the SAML Response, the process includes a 302 redirect from the IdP. This leads to a POST request to the Service Provider's Assertion Consumer Service (ACS) URL. The POST request includes `RelayState` and `SAMLResponse` parameters. The ACS is responsible for processing and validating the SAML Response.
2021-06-09 17:02:14 +00:00
After the POST request is received and the SAML Response is validated, access is granted to the protected resource initially requested by the user. This is illustrated with a `GET` request to the `/secure/` endpoint and a `200 OK` response, indicating successful access to the resource.
2021-06-09 17:02:14 +00:00
# XML Signatures
XML İmzaları çok yönlüdür, bir XML ağacını veya içindeki belirli öğeleri imzalamak için kullanılabilirler. Herhangi bir XML Nesnesine, yalnızca Yanıt öğelerine değil, uygulanabilirler. Aşağıda XML İmzalarının ana türleri bulunmaktadır:
### Basic Structure of XML Signature
An XML Signature consists of essential elements as shown:
2024-02-04 16:10:29 +00:00
```xml
<Signature>
2024-02-10 18:14:16 +00:00
<SignedInfo>
<CanonicalizationMethod />
<SignatureMethod />
<Reference>
<Transforms />
<DigestMethod />
<DigestValue />
</Reference>
...
</SignedInfo>
<SignatureValue />
<KeyInfo />
<Object />
</Signature>
```
Her `Reference` elementi, URI niteliği ile tanımlanabilen, imzalanan belirli bir kaynağı belirtir.
2024-02-10 18:14:16 +00:00
### XML İmzalarının Türleri
1. **Enveloped Signature**: Bu tür imza, imzaladığı kaynağın bir alt kümesidir, yani imza, imzalanan içerikle aynı XML yapısı içinde yer alır.
2024-02-10 18:14:16 +00:00
Örnek:
```xml
<samlp:Response ... ID="..." ... >
...
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
...
</samlp:Response>
```
Enveloped signature'da, `ds:Transform` elementi, imzanın `enveloped-signature` algoritması ile sarıldığını belirtir.
2. **Enveloping Signature**: Enveloped signature'ların aksine, enveloping signature'lar imzalanan kaynağı sarar.
2024-02-10 18:14:16 +00:00
Örnek:
```xml
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
</ds:Signature>
```
3. **Detached Signature**: Bu tür, imzaladığı içerikten ayrıdır. İmza ve içerik bağımsız olarak var olur, ancak ikisi arasında bir bağlantı korunur.
2024-02-10 18:14:16 +00:00
Örnek:
```xml
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
```
Sonuç olarak, XML İmzaları, XML belgelerini güvence altına almak için esnek yollar sunar; her tür, farklı yapısal ve güvenlik ihtiyaçlarını karşılar.
2024-02-10 18:14:16 +00:00
## References
2024-02-04 16:10:29 +00:00
* [https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/)
2022-04-28 16:01:33 +00:00
{% 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)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* 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.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}