<summary><strong>AWS hacklemeyi sıfırdan ileri seviyeye öğrenin</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile!</strong></summary>
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın!
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
Eğer **hacking kariyeri**ne ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı şekilde Lehçe yazılı ve konuşma gereklidir_).
**Bu yazının bir kısmı şu harika yazıya dayanmaktadır:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
Sadece verilerle oynayarak imzayı değiştirmeden sunucunun imzayı kontrol edip etmediğini kontrol edebilirsiniz. Örneğin, kullanıcı adınızı "admin" olarak değiştirmeyi deneyin.
Token'ın sunucu tarafından mı yoksa istemci tarafından mı oluşturulduğunu belirlemek önemlidir. Bunun için proxy'nin istek geçmişini inceleyebilirsiniz.
Token'ın 24 saatten fazla sürüp sürmediğini kontrol edin... belki hiç süresi dolmuyordur. "exp" alanı varsa, sunucunun bunu doğru şekilde işleyip işlemediğini kontrol edin.
Bu zafiyeti denemek ve JWT içinde farklı değerleri değiştirmek için Burp uzantısını "JSON Web Token" kullanın (istekleri Repeater'a gönderin ve "JSON Web Token" sekmesinde token'ın değerlerini değiştirebilirsiniz. Ayrıca "Alg" alanının değerini "None" olarak seçebilirsiniz).
Algoritmayı RS256'dan HS256'ya değiştirirseniz, arka uç kodu genel anahtarı gizli anahtar olarak kullanır ve ardından imzayı doğrulamak için HS256 algoritmasını kullanır.
Dolayısıyla, genel anahtarı kullanarak RS256'yı HS256'ya değiştirerek geçerli bir imza oluşturabiliriz. Bu işlemi gerçekleştirmek için web sunucusunun sertifikasını alabilirsiniz.
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
Talimatlar, JWT belgelerinin güvenliğini değerlendirmek için bir yöntemi detaylandırır, özellikle de "jku" başlığı iddiasını kullananları. Bu iddia, belirtecin doğrulanması için gerekli genel anahtarı içeren bir JWKS (JSON Web Key Set) dosyasına bağlanmalıdır.
`kid` olarak bilinen isteğe bağlı bir başlık iddiası, belirli bir anahtarı tanımlamak için kullanılır ve özellikle belirtecin imzasını doğrulamak için birden fazla anahtarın bulunduğu ortamlarda önemli hale gelir. Bu iddia, belirtecin imzasını doğrulamak için uygun anahtarı seçmede yardımcı olur.
Başlıkta `kid` iddiası bulunduğunda, ilgili dosyayı veya varyasyonlarını web dizininde aramak tavsiye edilir. Örneğin, `"kid":"anahtar/12345"` belirtilmişse, _/anahtar/12345_ ve _/anahtar/12345.pem_ dosyaları web kökünde aranmalıdır.
`kid` iddiası, dosya sistemi üzerinde gezinmek için de kullanılabilir ve bu, belirli dosyaları hedeflemek için `kid` değerini değiştirerek bağlantı test etmek veya Sunucu Tarafı İstek Sahteciliği (SSRF) saldırıları gerçekleştirmek için olanaklı hale getirebilir. JWT'yi değiştirmek ve orijinal imzayı korurken `kid` değerini değiştirmek, jwt\_tool'da `-T` bayrağını kullanarak aşağıda gösterildiği gibi başarılabilmektedir:
Hedeflenen dosyalara öngörülebilir içerikle saldırarak geçerli bir JWT oluşturmak mümkündür. Örneğin, Linux sistemlerindeki `/proc/sys/kernel/randomize_va_space` dosyası, içerdiği **2** değeriyle `kid` parametresinde **2** olarak simetrik şifre olarak JWT oluşturmak için kullanılabilir.
Eğer `kid` iddiasının içeriği bir veritabanından bir şifre almak için kullanılıyorsa, `kid` yükünü değiştirerek SQL enjeksiyonu kolaylaştırılabilir. JWT imzalama sürecini değiştirmek için SQL enjeksiyonu kullanan bir örnek yük şunları içerir:
`kid` parametresinin bir komut yürütme bağlamında kullanılan bir dosya yolunu belirttiği bir senaryo, Uzaktan Kod Yürütme (RCE) güvenlik açıklarına yol açabilir. `kid` parametresine komutlar enjekte edilerek özel anahtarlar açığa çıkarılabilir. RCE ve anahtarın açığa çıkarılması için bir örnek yük şudur:
Token, "**jku**" **Header** iddiasını kullanıyorsa, **sağlanan URL'yi kontrol edin**. Bu, belirtecin doğrulanması için Genel Anahtarı tutan JWKS dosyasını içeren bir URL'ye işaret etmelidir. Belirteci, trafiği izleyebileceğiniz bir web hizmetine yönlendirmek için değiştirin.
Sonra örneğin [**jwt.io**](https://jwt.io) kullanabilirsiniz, **oluşturulan genel ve özel anahtarlarla yeni JWT oluşturmak ve jku parametresini oluşturulan sertifikaya işaret etmek için.** Geçerli bir jku sertifikası oluşturmak için orijinalini indirip gerekli parametreleri değiştirebilirsiniz.
X.509 URL. PEM formunda kodlanmış X.509 (bir sertifika format standartı) genel sertifikalar kümesine işaret eden bir URI. Kümedeki ilk sertifika bu JWT'yi imzalamak için kullanılan sertifikadır. Ardışık sertifikalar birbirini imzalar, böylece sertifika zinciri tamamlanmış olur. X.509, RFC 52807'de tanımlanmıştır. Sertifikaların aktarımı için taşıma güvenliği gereklidir.
Bu başlığı**kendi kontrolünüzdeki bir URL'ye değiştirmeyi deneyin** ve herhangi bir istek alınıp alınmadığını kontrol edin. Bu durumda JWT'yi **manipüle edebilirsiniz**.
Kendi kontrolünüzdeki bir sertifika kullanarak yeni bir belirteç oluşturmak için, sertifikayı oluşturmanız ve genel ve özel anahtarları çıkarmanız gerekmektedir:
Sonra örneğin [**jwt.io**](https://jwt.io) kullanarak yeni JWT'yi oluşturabilirsiniz, **oluşturulan genel ve özel anahtarları kullanarak ve x5u parametresini oluşturulan .crt sertifikasına işaret edecek şekilde ayarlayarak.**
Saldırgan, **kendi kendine imzalı bir sertifika oluşturursa** ve ilgili özel anahtarı kullanarak sahte bir belge oluşturur ve "x5c" parametresinin değerini yeni oluşturulan sertifikayla değiştirir ve diğer parametreleri, yani n, e ve x5t'yi değiştirirse, aslında sahte belge sunucu tarafından kabul edilecektir.
n ="ANQ3hoFoDxGQMhYOAc6CHmzz6_Z20hiP1Nvl1IN6phLwBj5gLei3e4e-DDmdwQ1zOueacCun0DkX1gMtTTX36jR8CnoBRBUTmNsQ7zaL3jIU4iXeYGuy7WPZ_TQEuAO1ogVQudn2zTXEiQeh-58tuPeTVpKmqZdS3Mpum3l72GHBbqggo_1h3cyvW4j3QM49YbV35aHV3WbwZJXPzWcDoEnCM4EwnqJiKeSpxvaClxQ5nQo3h2WdnV03C5WuLWaBNhDfC_HItdcaZ3pjImAjo4jkkej6mW3eXqtmDX39uZUyvwBzreMWh6uOu9W0DMdGBbfNNWcaR5tSZEGGj2divE8";
e = "AQAB";
const key = new NodeRSA();
var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public');
Mümkün olan bir diğer yöntem, yeni bir özel/genel anahtar oluşturmak, yeni genel anahtarı belirtecin içine gömmek ve bunu kullanarak yeni bir imza oluşturmaktır:
JTI (JWT Kimliği) iddiası, bir JWT Jetonu için benzersiz bir tanımlayıcı sağlar. Jetonun tekrarlanmasını önlemek için kullanılabilir.\
Ancak, bir durumu hayal edin; Kimlik maksimum uzunluğunun 4 olduğu (0001-9999). İstek 0001 ve 10001 aynı kimliği kullanacak. Bu nedenle, arka uç her istekte Kimliği artırıyorsa, bunu isteği **tekrar oynatmak** için kötüye kullanabilirsiniz (her başarılı tekrar oynatma arasında 10000 istek göndermek gerekebilir).
Bazı web uygulamalarının, jetonlarının oluşturulması ve yönetimi için güvenilir bir JWT hizmetine güvendiği gözlemlenmiştir. Bir JWT hizmeti tarafından bir istemci için oluşturulan bir jetonun, aynı JWT hizmetinin başka bir istemcisi tarafından kabul edildiği kaydedilmiştir. Üçüncü taraf bir hizmet aracılığıyla bir JWT'nin verilmesi veya yenilenmesi gözlemlenirse, aynı kullanıcı adı/e-posta ile başka bir hizmetin hesabına kaydolma olasılığı araştırılmalıdır. Daha sonra elde edilen jetonun hedefe bir istekte tekrar oynatılmaya çalışılmalıdır.
* Tokeninizin kabul edilmesi, herhangi bir kullanıcının hesabının sahteciliğine izin verebilecek kritik bir sorunu işaret edebilir. Ancak, üçüncü taraf bir uygulamaya kaydolmak için daha geniş test izni gerekebileceğini unutmamak önemlidir, çünkü bu durum yasal bir belirsizliğe neden olabilir.
Jetonun süresi, "exp" Yük iddiası kullanılarak kontrol edilir. JWT'ler genellikle oturum bilgisi olmadan kullanıldığından, dikkatli bir işlem gereklidir. Birçok durumda, başka bir kullanıcının JWT'sini yakalayıp tekrar oynatmak, o kullanıcının taklit edilmesine olanak tanıyabilir. JWT RFC'si, JWT tekrar oynatma saldırılarını azaltmak için jetona bir son kullanma zamanı belirlemek için "exp" iddiasını kullanmayı önermektedir. Ayrıca, uygulamanın bu değerin işlenmesini ve süresi dolmuş jetonların reddedilmesini sağlamak için ilgili kontrolleri uygulaması önemlidir. Eğer jeton "exp" iddiasını içeriyorsa ve test süreleri izin veriyorsa, jetonu saklamak ve son kullanma süresinden sonra tekrar oynatmak tavsiye edilir. Jetonun içeriği, jet\_tool'un -R bayrağını kullanarak okunabilir, zaman damgası ayrıştırma ve süresi kontrol etme (zaman damgası UTC'de) (timestamp in UTC).
Eğer **hacking kariyeri**ne ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı şekilde yazılı ve konuşulan Lehçe gereklidir_).
<summary><strong>Sıfırdan kahraman olmak için AWS hackleme öğrenin</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking hilelerinizi paylaşarak PR'lar göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks) github depolarına destek olun.