0x00 前言
SharpViewStateKing
是一款专门设计用于利用 IIS 服务中泄漏的 MachineKey 密钥
的功能性工具。它的核心功能在于通过已知的信息伪造 ViewState 数据,实现无文件落地即可利用,在一定程度上保证了操作的“隐蔽性”。
0x01 主要更新
该工具从 2023 年起便开始设计并推出了其初步实用版本。然而,由于初期设计上的缺陷,致它在 2023 年的开发过程中产生了一些问题,目前这些问题已有所解决。让我们回顾一下 2023 年遗留的问题:
1. 初版工具采用了 ysoserial.net 的代码,通过反射调用
GetEncodedData/EncryptOrDecryptData/Purpose
函数来对数据进行签名和加密。但是由于某些未知的原因,这导致了在重新配置工具参数时,key 等变量无法被重新赋值,它仍然使用的是首次配置时的值,因此需要重启工具来更换配置。2. 关于 Key 枚举的 Wrapper 模块,由于它基于 AspDotNetWrapper,因而仅支持 SHA 系列校验算法。
3. 即便提供正确的配置信息,利用有时也无法成功,这可能是因为:
• 所选择的 gadgets(利用链)在目标上没有成功执行;
• 目标可能运行的是较低版本的 .NET 环境。
此次更新主要针对第一和第二个问题,改进如下:
1. 重新构建了 Serialize 函数,编写了三种对数据签名/加密的代码,摒弃了对反射调用的依赖。这样就无需重启便可更改配置。
2. 编写了 Deserialize 函数,同样摒弃了反射调用,允许除 SHA 系列以外的校验算法,并实现了数据的校验和解密。
除了修复了上述问题,本次更新还引入了一些额外的改进,看起来更加实用:
• 类似于常规 WebShell 工具,可以直接添加或编辑条目。
• 对 HTTP 请求新增自定义 Header 和 Body 的功能。
• 文件管理系统增加了内容缓存功能。
• 新增了内存加载功能,支持一次性数据传回。
• 开放了插件系统,用户可以自行编写插件以扩展功能。
0x02 使用介绍
2.1 管理数据
很多朋友在使用 2023 年推出的版本时可能会面临一个问题:寻找目标的 MachineKey 时不得不翻自查己项目中的数据。为了解决这个问题,最新版本中我们提供了一个新功能,可以让用户将目标的 MachineKey 数据按照条目直接添加至配置文件,这一点与传统的 WebShell 管理工具保持了一致性。
1. 工具主界面如下所示:
在主页中,可以添加、编辑及删除数据。以及可以标记该条目的颜色。这属于常规功能了。
2. 数据编辑界面
• 数据配置
到了这里就需要分清楚哪些输入框是必须填写,哪些是选填。
这里有多种情况:
1. 仅对数据进行签名:如果仅填写
Validation
和ValidationKey
,则表示仅对序列化的数据进行签名,因此发送的数据可以被 Base64 后看个大概内容。2. 对数据进行加密和签名:如果在填写
Validation
和ValidationKey
的基础上还填写了Decryption
和DecryptionKey
,则表示选用强制加密及签名的模式,发送的数据是经过加密的。3. 如果 CompatibilityMode = Framework45,则必须将
Validation
、ValidationKey
、Decryption
和DecryptionKey
都填写,并且勾选IsNet45
。
• 可自定义添加请求头及内容参数(因为 44 跟我说,有些负载均衡的环境可以通过指定 Cookie 指向机器),body 数据默认添加在已有数据的后方。
2.2 King 模块
界面改变得不多。主要是新增了几个特色:
• 文件管理新增了缓存机制。
• 支持任意 .NET 程序内存加载
• 开放 Plugin 接口
2.2.1 内存加载
由于是 Web,因此仅支持获取一次返回结果,因此使用该功能时,不建议加载长任务的程序,因为大概率超时拿不到回显。
2.2.2 插件系统
• Plugin 的模板:编写的插件需要放在程序当前目录的 Plugins 文件夹内。
publicclassPlugin
{
publicstaticvoidKing(string[] args)
{
Console.WriteLine("qaxnb");
}
}
• 获取进程列表演示
• 内置了 Suo5VirtualPath 的插件,妈妈再也不用担心代理脚本也要落地了。如果要 kill,请参考
yaddmr6
的代码。
0x03 Proxy 模块
老样子,但允许自定义 Listener,方便多个 Proxy 同时运行。
0x04 Enum 模块
该功能已经集成到 SharpViewStateKing 中。该模块的整体思路如下:
这也是 AspDotNetWrapper 的整体思路,它解决了基于 CompatibilityMode = Framework20SP1 的加密 SHA 系列校验,因此实际上它是不完善的,导致无法适用于以下场景:
1. 签名算法是 MD5 时。
2. 强制加密时。
3. CompatibilityMode = Framework45 时。
还好我和小伙伴在编写 SharpViewStateKing 时对原理进行了研究,才发现实际情况没有这么简单。所以啊,工具选用不对,是会错失一些机会的。SharpViewStateKing 目前已经解决了上面的 4 个场景。
• MD5 场景
• 强制加密场景
• NET45 场景
如果是 CompatibilityMode = Framework45,那么 Modifier 需要输入的是整个 URL。
0x03 缺点
介绍了这么多功能,它当然还是存在缺陷的,比如当 URL 为:https://localhost/dir1/vDir1/dir2/app1/dir3/app2/vDir2/dir4
时,程序并不知道当前的 AppName
是 app2
,因此它默认生成的数据是错误的。但可以通过手动指定 AppName
和 AppPath
来解决。
那么问题来了,我怎么知道它的 AppName
是 app2
呢?其实不难,就是枚举功能再进行路径拆分枚举即可,但是我没写,这就是缺点。
那么问题来了,工具在哪呢?RowTeam 星球自取。
0x04 免责声明
本工具仅面向合法授权的企业安全建设行为,例如企业内部攻防演练、漏洞验证和复测,如您需要测试本工具的可用性,请自行搭建靶机环境。
在使用本工具进行检测时,您应确保该行为符合当地的法律法规,并且已经取得了足够的授权。请勿对非授权目标使用。
如您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...