* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
**Ödül avı ipucu**: **Hackerlar tarafından oluşturulan premium bir ödül avı platformu olan Intigriti'ye** katılın! Bugün [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) adresinde bize katılın ve **$100,000'e kadar ödüller kazanmaya başlayın**!
**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 postback sırasında korunması gereken değerler base64 kodlu dizilere serileştirilir. Bu diziler daha sonra gizli ViewState alanlarına yerleştirilir.
* Bu format, `EnableViewStateMac` ve `ViewStateEncryptionMode` öznitelikleri her ikisi de false olarak ayarlandığında kullanılır.
* **Base64 + MAC (Message Authentication Code) Etkin**:
* MAC'nin etkinleştirilmesi, `EnableViewStateMac` özniteliğinin true olarak ayarlanmasıyla sağlanır. Bu, ViewState verileri için bütünlük doğrulaması sağlar.
* **Base64 + Şifreli**:
* Şifreleme, `ViewStateEncryptionMode` özniteliği true olarak ayarlandığında uygulanır ve ViewState verilerinin gizliliğini sağlar.
1.**Herhangi bir .NET sürümü için**, MAC ve Şifreleme devre dışı bırakıldığında, bir MachineKey gerekli değildir ve dolayısıyla tanımlamak için geçerli bir yöntem bulunmamaktadır.
2.**4.5 sürümlerinden önceki sürümler için**, MAC etkinleştirilmiş olsa da Şifreleme etkinleştirilmemişse, bir MachineKey gereklidir. MachineKey'i tanımlamak için kullanılan yöntem "Blacklist3r" olarak adlandırılır.
3.**4.5 sürümlerinden önceki sürümler için**, MAC etkin olsun veya olmasın, Şifreleme etkinleştirildiğinde, bir MachineKey gereklidir. MachineKey'i tanımlamak için "Blacklist3r - Gelecek Gelişim" görevi vardır.
4.**4.5 ve sonraki sürümler için**, MAC ve Şifreleme kombinasyonlarının tümü (hem ikisi de doğruysa, hem de biri doğruysa diğeri yanlışsa) bir MachineKey gerektirir. MachineKey, "Blacklist3r" kullanılarak tanımlanabilir.
ViewState'nin MAC ile korunup korunmadığını belirlemek için bu parametreyi içeren bir isteği BurpSuite ile yakalayabilirsiniz. Eğer MAC kullanılmıyorsa, [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) kullanarak bu parametreyi sömürebilirsiniz.
Geliştiriciler, ViewState'in bir HTTP İsteğinin bir parçası olmasını**kaldırabilir** (kullanıcı bu çerezi alamaz).\
Birisi, **ViewState**'in **bulunmadığını** varsayabilir ve uygulamalarının ViewState deserialization ile ilgili olası güvenlik açıklarından **korunaklı** olduğunu düşünebilir.\
Ancak durum böyle değildir. Eğer istek gövdesine **ViewState parametresi ekler** ve ysoserial kullanarak oluşturduğumuz serileştirilmiş yükümüzü gönderirsek, hala **Case 1**'de gösterildiği gibi **kod yürütme** başarabiliriz.
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 tanımlayabilen başka bir araçtır. Python ile yazılmıştır, bu yüzden Blacklist3r gibi Windows bağımlılığı yoktur. .NET viewstate'ler için, kullanımı en hızlı olan "python blacklist3r" yardımcı programı bulunmaktadır.
Ölçeklenebilir bir şekilde zayıf viewstate'leri aramak için, alan adı tespiti ile birlikte `badsecrets` [**BBOT**](exploiting-\_\_viewstate-parameter.md) modülü kullanılabilir:
Durumlarında `_VIEWSTATEGENERATOR` parametresi sunucu tarafından gönderilmediğinde `--generator` parametresini sağlamanıza gerek yok, ancak bunları sağlamanız gerekiyor:
Bu durumda, parametrenin MAC ile korunup korunmadığı bilinmemektedir. Bu durumda, değer muhtemelen şifrelenmiştir ve zafiyeti sömürmek için **Payload'ınızı şifrelemek için Makine Anahtarına ihtiyacınız olacaktır**.
**.NET 4.5'ten önce**, ASP.NET, **`ViewStateEncryptionMode`**'un _**Always**_ olarak ayarlanmış olmasına rağmen, kullanıcılardan **şifrelenmemiş** bir \_`__VIEWSTATE`\_parametresini **kabul edebilir**. ASP.NET, sadece istekte **`__VIEWSTATEENCRYPTED`** parametresinin **varlığını kontrol eder**. **Bu parametre kaldırılırsa ve şifrelenmemiş yük gönderilirse, yine de işleme alınacaktır.**
Bu nedenle, saldırganlar, Makine Anahtarını dosya gezintisi gibi başka bir zafiyet aracılığıyla elde ederlerse, [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) komutu, ViewState deserialization zafiyetini kullanarak RCE gerçekleştirmek için kullanılabilir.
* 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 zafiyet başarısız olacaktır.
### Test Case: 4 – .Net >= 4.5 ve EnableViewStateMac=true/false ve ViewStateEncryptionMode=true/false hariç her iki özelliğin de false olarak belirlendiği durumda
[**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) aracını kullanarak kullanılan anahtarı bulmaya çalışabilirsiniz:
[IISDirPath](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/) ve TargetPagePath için daha detaylı bir açıklama için buraya bakın.
Bir geçerli Makine anahtarı tanımlandığında, **bir sonraki adım,** [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) **kullanarak seri hale getirilmiş bir yük oluşturmaktır.**
Eğer `__VIEWSTATEGENERATOR` değerine sahipseniz, bu değerle `--generator` parametresini **kullanmayı** deneyebilir ve parametreleri `--path` ve `--apppath`**atlayabilirsiniz**.
ViewState deserialization açığı başarılı bir şekilde sömürüldüğünde, saldırgan tarafından kontrol edilen bir sunucuya bir dış-bant isteği yapılacaktır ve bu istekte kullanıcı adı bulunacaktır. Bu tür bir saldırı, "Blacklist3r ve YsoSerial.NET kullanarak ViewState Deserialization Sömürüsü" adlı bir kaynak aracılığıyla bulunan bir kavram kanıtı (PoC) ile gösterilmektedir. Sömürü sürecinin nasıl çalıştığı ve MachineKey'i tanımlamak için Blacklist3r gibi araçları nasıl kullanacağınız hakkında daha fazla ayrıntı için [Başarılı Sömürü Kavram Kanıtı](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC) bağlantısına göz atabilirsiniz.
**ViewStateUserKey** özelliği, bir **CSRF saldırısına karşı korunma** için kullanılabilir. Eğer uygulamada böyle bir anahtar tanımlanmışsa ve şimdiye kadar tartışılan yöntemlerle **ViewState** yükünü oluşturmaya çalışırsak, **uygulama tarafından yük işlenmeyecektir**.\
Doğru şekilde yük oluşturmak için bir parametre daha kullanmanız gerekmektedir:
Tüm test durumları için, ViewState YSoSerial.Net yükü **başarılı bir şekilde** çalışıyorsa sunucu “**500 Internal server error**” yanıtı ile 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.
**Hata ödülü ipucu**: **Intigriti'ye kaydolun**, hackerlar tarafından oluşturulan bir premium **hata ödülü platformu**! Bugün [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) adresinde bize katılın ve **$100,000**'a kadar ödüller kazanmaya başlayın!
<summary><strong>Sıfırdan kahraman olacak şekilde 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 PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**The PEASS Family'yi keşfedin**](https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu 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)** takip edin.**
* **Hacking püf noktalarınızı 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.