<summary><strong>AWS hacklemeyi sıfırdan kahraman olmak için</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> öğrenin!</strong></summary>
* Şirketinizi **HackTricks'te reklam vermek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
Eğer **hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı polonyaca yazılı ve konuşulan gereklidir_).
**ViewState**, ASP.NET'te sayfa ve kontrol verilerini web sayfaları arasında korumak için varsayılan mekanizma olarak hizmet verir. Bir sayfanın HTML olarak işlenmesi sırasında, sayfanın mevcut durumu ve bir postback sırasında korunması gereken değerler base64 kodlu dizilere seri hale getirilir. Bu dizeler daha sonra gizli ViewState alanlarına yerleştirilir.
- **Base64 + MAC (Message Authentication Code) Etkin**:
- MAC'nin etkinleştirilmesi, `EnableViewStateMac` özniteliğinin true olarak ayarlanmasıyla elde edilir. Bu, ViewState verileri için bütünlük doğrulaması sağlar.
Resim, .NET framework sürümüne dayalı olarak ASP.NET'te ViewState için farklı yapılandırmaları detaylandıran bir tablodur. İçeriğin özeti aşağıda verilmiştir:
1.**Herhangi bir .NET sürümü için**, hem MAC hem de Şifreleme devre dışı bırakıldığında, bir MachineKey gerektirilmez ve dolayısıyla tanımlamak için uygulanabilir bir yöntem yoktur.
2.**4.5 sürümünden önceki sürümler için**, MAC etkinleştirilmiş olsa da Şifreleme devre dışı bırakıldığında, bir MachineKey gereklidir. MachineKey'i tanımlamak için kullanılan yöntem "Blacklist3r" olarak adlandırılır.
3.**4.5 sürümünden önceki sürümler için**, MAC etkin veya devre dışı olsa da, Şifreleme etkinleştirildiğinde bir MachineKey gereklidir. MachineKey'i tanımlamak "Blacklist3r - Gelecekteki Geliştirme" görevidir.
4.**4.5 ve sonraki sürümler için**, MAC ve Şifreleme kombinasyonlarının tümü (hem ikisi true, hem biri true ve diğeri false olsa da) bir MachineKey gerektirir. MachineKey, "Blacklist3r" kullanılarak tanımlanabilir.
ViewState'nin MAC ile korunup korunmadığını belirlemek için BurpSuite ile bu parametreyi içeren bir isteği yakalayarak deneyebilirsiniz. Eğer parametre korumak için Mac kullanılmıyorsa, [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) kullanarak bunu sömürebilirsiniz.
Geliştiriciler, ViewState'in bir HTTP İsteğinin bir parçası olmasını engelleyebilir (kullanıcı bu çerezi almayacaktır).\
ViewState'in **mevcut olmadığını** varsayabiliriz, bu durumda ViewState deserializasyonuyla ilgili herhangi bir potansiyel güvenlik açığından korunduğumuzu düşünebiliriz.\
Ancak durum böyle değildir. ViewState parametresini istek gövdesine ekler ve ysoserial kullanarak oluşturduğumuz seri hedefimizi gönderirsek, yine de **kod yürütme** elde edebiliriz, Case 1'de gösterildiği gibi.
Kullanılan anahtarı bulmak için [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper)'ı deneyebilirsiniz.
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets), bilinen machineKeys'i tespit edebilen başka bir araçtır. Python ile yazıldığı için Blacklist3r gibi Windows bağımlılığı yoktur. .NET viewstate'leri için, kullanmanın en hızlı yolu olan "python blacklist3r" adında bir yardımcı program bulunmaktadır.
Ölçeklenebilir bir şekilde zayıf viewstate'leri aramak için, alt alan taraması ile birlikte `badsecrets` [**BBOT**](exploiting-\_\_viewstate-parameter.md) modülü kullanılabilir:
_SERVER tarafından `_VIEWSTATEGENERATOR` parametresi **gönderilmediği** durumlarda `--generator` parametresini **belirtmeniz gerekmez, ancak bunları** belirtmelisiniz:
Bu durumda, parametrenin MAC ile korunup korunmadığı bilinmemektedir. Bu durumda, değerin muhtemelen şifreli olduğu ve zafiyeti sömürmek için payload'ınızı şifrelemek için **Makine Anahtarına ihtiyacınız olacağı** anlamına gelir.
**.NET 4.5 öncesinde**, ASP.NET, **`ViewStateEncryptionMode`** _**Her zaman**_ olarak ayarlanmış olsa bile, kullanıcılardan **şifrelenmemiş** bir \_`__VIEWSTATE`\_ parametresini **kabul edebilir**. ASP.NET, sadece istekte **`__VIEWSTATEENCRYPTED`** parametresinin varlığını kontrol eder. **Bu parametreyi kaldırırsanız ve şifrelenmemiş payload gönderirseniz, yine de işlenecektir.**
Bu nedenle, saldırganlar, ViewState deserialization zafiyetini kullanarak RCE gerçekleştirmek için [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) komutunu **2. Durumda** kullanıldığı gibi, dosya gezintisi gibi başka bir zafiyet aracılığıyla Makine Anahtarını elde etme yolunu bulurlarsa kullanabilirler.
* ViewState deserialization zafiyetini sömürmek için istekten `__VIEWSTATEENCRYPTED` parametresini kaldırın, aksi takdirde bir Viewstate MAC doğrulama hatası dönecek ve saldırı başarısız olacaktır.
### Test Durumu: 4 – .Net >= 4.5 ve EnableViewStateMac=true/false ve ViewStateEncryptionMode=true/false, ancak her iki özelliğin de false olarak ayarlanması
Kullanılan anahtarı bulmak için [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper)'ı deneyebilirsiniz:
IISDirPath ve TargetPagePath için daha detaylı bir açıklama için [buraya](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/) bakın.
Geçerli bir Makine anahtarı belirlendikten sonra, **bir sonraki adım** [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) **kullanarak seri hale getirilmiş bir payload oluşturmaktır**.
Eğer `__VIEWSTATEGENERATOR` değerine sahipseniz, bu değeri kullanarak `--generator` parametresini deneyebilir ve `--path` ve `--apppath` parametrelerini atlayabilirsiniz.
ViewState deserialization açığı başarılı bir şekilde sömürüldüğünde, kullanıcı adını içeren saldırgan tarafından kontrol edilen bir sunucuya yönelik bir out-of-band isteği gerçekleşir. Bu tür bir saldırı, "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET" adlı bir kaynakta bulunan bir kanıt olarak gösterilir. Sömürü sürecinin nasıl çalıştığı ve Blacklist3r gibi araçları kullanarak MachineKey'i belirleme konusunda daha fazla ayrıntı için sağlanan [Successful Exploitation PoC](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)u inceleyebilirsiniz.
**ViewStateUserKey** özelliği, bir **CSRF saldırısına** karşı**savunma** olarak kullanılabilir. Eğer uygulamada böyle bir anahtar tanımlanmışsa ve yukarıda tartışılan yöntemlerle ViewState payload'u oluşturmaya çalışırsak, **payload uygulama tarafından işlenmeyecektir**.\
Doğru bir şekilde payload oluşturabilmek için bir tane daha parametre kullanmanız gerekmektedir:
Tüm test durumları için, eğer ViewState YSoSerial.Net payload'u **başarılı bir şekilde** çalışıyorsa, sunucu "500 Internal server error" yanıtıyla yanıt verir ve yanıt içeriği "The state information is invalid for this page and might be corrupted" olur ve OOB isteği alırız.
Eğer **hacking kariyeri** ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - **işe alıyoruz!** (_akıcı şekilde Lehçe yazılı ve konuşma gereklidir_).
* Şirketinizi HackTricks'te **reklam vermek** veya HackTricks'i **PDF olarak indirmek** için [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın!
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'i keşfedin
* 💬 [**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)**'da** takip edin.