.NET ViewState反序列化总结笔记-1
2023-12-27 08:36:14 Author: dotNet安全矩阵(查看原文) 阅读量:52 收藏

来自dotnet安全矩阵星球一位师傅的个人笔记分享 

1. 启动了MAC验证,但没有加密

.\NetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwULLTE3NDQyMTk3OTUPZBYCZg9kFgICBQ8PFgIeBFRleHQFKeaJgOWhq+WGmeeahOmqjOivgeeggeS4juaJgOe7meeahOS4jeespiAhZGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFCGJ0bkxvZ2luRPqLQJ5A3TNa2Gdwy4fC8ADPABjAUPZYA47oIldiSAI= --decrypt --purpose=viewstate --modifier=6811C9FF --macdecode --TargetPagePath "/Login.aspx" -f out.txt --IISDirPath="/"--encrypteddata : __VIEWSTATE parameter value of the target application--modifier : __VIWESTATEGENERATOR parameter value

2. 启动了MAC验证,也启动了加密

.\NetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwULLTE3NDQyMTk3OTUPZBYCZg9kFgICBQ8PFgIeBFRleHQFKeaJgOWhq+WGmeeahOmqjOivgeeggeS4juaJgOe7meeahOS4jeespiAhZGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFCGJ0bkxvZ2luRPqLQJ5A3TNa2Gdwy4fC8ADPABjAUPZYA47oIldiSAI= --decrypt --purpose=viewstate -IISDirPath "/" --TargetPagePath "/Login.aspx"--encrypteddata = {__VIEWSTATE parameter value}--IISDirPath = {Directory path of website in IIS}--TargetPagePath = {Target page path in application}
.\NetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEWBgKPrdzZBgLB2tiHDgLKw6LdBQLChPzDDQKC3IeGDAKgt7D9Cmf6HV/8G+WwyoHfYHa9F9tclYAi+mZrwiLkcG1v2rxR --purpose=viewstate --modifier=C2EE9ABB --macdecode

.\NetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwULLTE3NDQyMTk3OTUPZBYCZg9kFgICBQ8PFgIeBFRleHQFKeaJgOWhq+WGmeeahOmqjOivgeeggeS4juaJgOe7meeahOS4jeespiAhZGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFCGJ0bkxvZ2luRPqLQJ5A3TNa2Gdwy4fC8ADPABjAUPZYA47oIldiSAI= --decrypt --purpose=viewstate --IISDirPath "/" --TargetPagePath "/Login.aspx"

.\NetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUJLTI1MjczMDMxD2QWAmYPZBYCAgcPZBYCAgEPZBYCAgsPZBYCZg9kFgYCBQ8PFgIeBFRleHQFD+mHjeWei+aRqeaJmOi7imRkAgkPDxYCHwAFBk1BMDEyM2RkAhcPEA8WBB4NRGF0YVRleHRGaWVsZAULdHlwZU5hbWVDSFQeC18hRGF0YUJvdW5kZ2QQFQIe5r6z6ZaA54m55Yil6KGM5pS/5Y2A6Lqr5Lu96K2JBuWFtuS7lhUCATEBMxQrAwJnZ2RkZCpnqO+9hCcyBZ+7Sr7vFOvX8PRG --decrypt --purpose=viewstate --IISDirPath "/" --modifier=C2EE9ABB --TargetPagePath "/Login.aspx"

ViewState机制是asp.net中对同一个Page的多次请求中 维持Page及控件状态的一种机制 ASP.NET 的ViewState是使用Base64的字符串保存在一个隐藏域中的在WebForm中每次请求完,Page对象都会被释放,这里就有一个问题就是我客户端请求一个 page但是多次请求,怎么维护我和page对象之间的状态以及一些信息?-----viewstate机制

ViewState的设计目的就是为了将必要的信息持-久化在页面中,这样通过ViewState在页面回传 的过程中保存状态值。

1. ViewState不等于Cookie

Cookie是存在于http请求中的,而ViewState仅仅存在于.net 。Cookie不存在后端解析(只需要取值即可)

而.net中的ViewState存在于后端解析(序列 化和反序列化的操作) Cookie是为了http无状态而产生的,ViewState是为了保存WebForm中服务端控件状态进 行持久化而产生的。

2. ViewState的构成

实际的传输中 ObjectStateFormatter 会使用 MachineKey 对信息进行加密或签名。实际环境中传输的数据为__VIEWSTATE,__VIEWSTATE的生成过程如下所示

ViewState = serialize(我们控制传输的数据)+0xff+0x01+0x32+... client_id = hash(当前请求路径)+hash(当前请求文件名) MacKeyModifier = client_id + ViewStateUserKey(默认为空) signed_data = new HMACSHA256(web.config里面的密钥).encode(ViewState+MacKeyModifie r); __VIEWSTATE = ViewState + signed_data

具体的序列化流程由 [System.Web]System.Web.UI.ObjectStateFormatter 进行处理。其返回结 果以FF01作为magic,后续数据是近似于Type-Value的格式。由于控件本身可能需要保存较为复 杂的类型, ObjectStateFormatter 通过二进制序列化方式对这种情况进行支持,其 TypeCode 为 0x32 ,Value为带有 7bit-encoded 长度前缀的二进制序列化数据。

为了更好地应对基于.NET技术栈的风险识别和未知威胁,dotNet安全矩阵星球从创建以来一直聚焦于.NET领域的安全攻防技术,定位于高质量安全攻防星球社区,得到了许多师傅们的支持和信任,通过星球深度连接入圈的师傅们,一起推动.NET安全高质量的向前发展经过运营团队成员商议一致同意给到师傅们最大优惠力度,只需199元就可以加入我们。

星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等,后续还会倾力打造专刊、视频等配套学习资源,循序渐进的方式引导加深安全攻防技术提高以及岗位内推等等服务。


文章来源: http://mp.weixin.qq.com/s?__biz=MzUyOTc3NTQ5MA==&mid=2247489997&idx=1&sn=57add7b8a52413b78fa9380e1ad09589&chksm=fb783c4af80e36de0926f7ce3f7313de90e16397a19e9e4511980291e38167686a4986e6aa25&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh