ASP.NET 视图状态解码器
项目描述
用于解码 ASP.NET 视图状态的小型 Python 3.5+ 库。
Viewstate 是 ASP.NET 框架中使用的一种方法,用于在回发之间将更改持久保存到 Web 表单。它通常保存在隐藏的表单域中:
<input type=<s>"hidden"</s> name=<s>"__VIEWSTATE"</s> id=<s>"__VIEWSTATE"</s> value=<s>"/wEP..."</s>>
解码视图状态在 ASP.NET 应用程序的渗透测试中很有用,也可以揭示更多可用于有效抓取网页的信息。
安装
$ pip install viewstate
用法
Viewstate 解码器接受 Base64 编码的 .NET viewstate 数据,并以纯 Python 对象的形式返回解码后的输出。
使用这个包有两种主要方法。首先,它可以用作具有以下典型用例的导入库:
>>> from viewstate import ViewState
>>> base64_encoded_viewstate = '/wEPBQVhYmNkZQ9nAgE='
>>> vs = ViewState(base64_encoded_viewstate)
>>> vs.decode()
('abcde', (True, 1))
也可以直接提供原始字节:
>>> vs = ViewState(raw=b'\xff\x01....')
或者,可以通过命令行直接执行模块来使用该库:
$ cat data.base64 | python -m viewstate
这将漂亮地打印解码的数据结构。
命令行用法也可以接受带有-r标志的原始字节:
$ cat data.base64 | base64 -d | python -m viewstate -r
还支持 Viewstate HMAC 签名。如果解析后还有剩余字节,则假定它们是HMAC签名,根据签名长度估计类型。
>>> vs = ViewState(signed_view_state)
>>> vs.decode()
>>> vs.mac
'hmac_sha256'
>>> vs.signature
b'....'
发展
可以使用pipenv安装开发包。单元测试和代码格式化任务可以使用内置脚本运行:
$ pipenv sync -d
$ pipenv run test
$ pipenv run format
对于 PyPI 版本,请遵循构建、检查和上传脚本。
$ pipenv run build
$ pipenv run check
$ pipenv run upload
请注意,要上传新的包版本,应在~/.pypirc中定义有效的 PyPI 身份验证令牌。
参考
由于没有关于 .NET 视图状态如何编码的公开规范,因此逆向工程基于先前的工作:
我们很乐意接受任何官方文档来帮助改进解析逻辑。
执照
麻省理工学院