未加密的__VIEWSTATE参数

未加密的__VIEWSTATE参数

本文转自默默提升实验室 并作补充

0. 知识补充

表单提交在遇到服务器返回错误时候,再次填写表单时,上次填写的值不会被清空。

维持ViewState是ASP.NET Web Forms的默认设置。如果你想不维持ViewState,需在.aspx页面顶部包含提示<%@Page EnableViewState=“false” %>,或者或者向任意控件添加属性EnableViewState=“false” 。

没有设置维持ViewState,当点击按钮提交,表单值将消失。

ViewState是如何使用的

ViewState 基本上由服务器生成,并以隐藏的表单字段 “_VIEWSTATE” 的形式发送给客户端,用于“POST”请求。当Web应用程序进行 POST 请求时,客户端将其发送到服务器。

ViewState 以序列化数据的形式出现,当客户端再次进行请求(ViewState)被发送到服务器时,将进行反序列化。

为了使 ViewState 不受篡改,存在一个启用 ViewState MAC 的选项,通过设置一个值并在反序列化期间对 ViewState 的值进行完整性检查。

1. 漏洞描述

__VIEWSTATE 参数未加密,存在有人拦截存储在 ViewState 中的信息的机会。

2. 漏洞危害

可能导致敏感信息泄露。

3. 漏洞验证

使用工具:Burp Suit,需要安装插件ViewState Editor,如下图所示:

image

POC:{EXTRACTED_STRINGS}:string= -2140192582

image

查看存在该问题的页面源码,搜索__VIEWSTATE,可以看到对应的value值,对该段值进行base64解码。可以得到对应的信息,在Burp Suit中使用 ViewState Decoder插件可以进行解码。

image
image

其他解码工具

网页:https://www.httpdebugger.com/tools/ViewstateDecoder.aspx

image

软件:ViewStateDecoder2.0.exe

image

4. 漏洞建议

请将machineKey验证类型设置为AES。这将使得 ASP.NET 使用AES算法加密ViewState 值。

​打开 Web.Config 并在 <system.web> 元素下添加以下行:如下:

<system.web> <machinekey validation="3DES"></machinekey></system.web>

machineKey 元素(ASP.NET 设置架构)

关于ViewState的相关demo案例:ViewState 反序列化及其利用

Plaintext Transmission

用户凭据明文传输

本文转自天泽岁月

漏洞描述

用户凭据通过未加密的通道传输。当我们在网站上面提交敏感数据到服务器的过程中未进行相关加密处理,导致攻击者通过中间人攻击方式(劫持、嗅探等)【如果加密方式是常见的加密也可以解密的(比如:MD5,RSA 等–另外base64只是一种编码方式并不算是加密!】即可获取到这些未加密的敏感数据。所有经过网关的流量都可以被黑客通过嗅探(ARP欺骗)的方式抓取到。

当攻击者获取到这些数据之后,就可以用这些信息以合法用户的身份进入到应用系统中——甚至可能进入到应用系统后台中,一旦进入到应用系统中那么就可以获取更多的敏感数据,以及更有机会发现更多的漏洞。

漏洞验证

找到网站或者web系统登录页面。

通过过对网站登录页面的请求进行抓包,分析其数据包中相关password(密码)参数的值是否为明文。

工具可用burp、wireshark、filder等等,抓包分析的密码

浏览器的F12中的“网络”模块功能并点击HTML进行筛选,点击登录即可获取到post或者get的请求头及请求主体的内容,如下图所示,就获取到了http明文登录的敏感数据了。

image

修复建议

由于用户凭据为敏感信息,应始终通过加密通道 (HTTPS) 传输,以避免被恶意用户拦截。因此应始终通过加密连接 (HTTPS) 将其传输到服务器。

如果不用 HTTPS,可以在网站前端用 Javascript 做密码加密,加密后再进行传输。(js被禁用了就GG)

使用正规的ca机构颁发的https证书

采用非对称加密方式(不可逆的加密方式)

参考学习

浅谈“密码明文传输”
渗透测试(二):敏感信息明文传输