11 KiB
macOS网络服务和协议
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想要获取PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组或电报群组或关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享你的黑客技巧。
远程访问服务
这些是常见的macOS远程访问服务。
您可以在系统设置
--> 共享
中启用/禁用这些服务。
- VNC,也称为“屏幕共享”(tcp:5900)
- SSH,称为“远程登录”(tcp:22)
- Apple Remote Desktop(ARD),或称为“远程管理”(tcp:3283,tcp:5900)
- AppleEvent,也称为“远程Apple事件”(tcp:3031)
运行以下命令检查是否启用了任何服务:
rmMgmt=$(netstat -na | grep LISTEN | grep tcp46 | grep "*.3283" | wc -l);
scrShrng=$(netstat -na | grep LISTEN | egrep 'tcp4|tcp6' | grep "*.5900" | wc -l);
flShrng=$(netstat -na | grep LISTEN | egrep 'tcp4|tcp6' | egrep "\*.88|\*.445|\*.548" | wc -l);
rLgn=$(netstat -na | grep LISTEN | egrep 'tcp4|tcp6' | grep "*.22" | wc -l);
rAE=$(netstat -na | grep LISTEN | egrep 'tcp4|tcp6' | grep "*.3031" | wc -l);
bmM=$(netstat -na | grep LISTEN | egrep 'tcp4|tcp6' | grep "*.4488" | wc -l);
printf "\nThe following services are OFF if '0', or ON otherwise:\nScreen Sharing: %s\nFile Sharing: %s\nRemote Login: %s\nRemote Mgmt: %s\nRemote Apple Events: %s\nBack to My Mac: %s\n\n" "$scrShrng" "$flShrng" "$rLgn" "$rmMgmt" "$rAE" "$bmM";
Pentesting ARD
(此部分摘自此博客文章)
它本质上是一个带有一些额外的 macOS 特定功能的变种VNC。
然而,屏幕共享选项只是一个基本的 VNC 服务器。还有一个高级的 ARD 或远程管理选项,可以设置控制屏幕密码,这将使 ARD 向后兼容 VNC 客户端。然而,这种身份验证方法存在一个弱点,即将此密码限制为8个字符的认证缓冲区,因此很容易使用像Hydra或GoRedShell这样的工具进行暴力破解(默认情况下也没有速率限制)。
您可以使用脚本vnc-info
在nmap中识别易受攻击的屏幕共享或远程管理实例,如果服务支持VNC Authentication (2)
,则很可能容易受到暴力破解。该服务将所有通过网络发送的密码截断为8个字符,因此如果您将 VNC 认证设置为"password",则"passwords"和"password123"都将进行身份验证。
如果您想要启用它以提升特权(接受 TCC 提示),通过 GUI 访问或监视用户,可以使用以下命令启用它:
{% code overflow="wrap" %}
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -allowAccessFor -allUsers -privs -all -clientopts -setmenuextra -menuextra yes
{% endcode %}
您可以在点击按钮的同时,在观察模式、共享控制和完全控制之间切换,从监视用户到接管其桌面。此外,如果您成功访问了一个ARD会话,即使在会话期间更改了用户的密码,该会话也将保持打开状态,直到会话终止。
您还可以通过ARD直接发送Unix命令,并且如果您是管理员用户,可以指定root用户来执行root权限的操作。您甚至可以使用这种Unix命令方法来安排远程任务在特定时间运行,但这将在指定的时间进行网络连接(而不是存储和在目标服务器上执行)。最后,远程Spotlight是我最喜欢的功能之一。它非常方便,因为您可以快速远程运行低影响力的索引搜索。这对于搜索敏感文件非常有用,因为它快速,可以同时在多台机器上运行搜索,并且不会使CPU占用率飙升。
Bonjour协议
Bonjour是苹果设计的一种技术,使位于同一网络上的计算机和设备能够了解其他计算机和设备提供的服务。它的设计使得任何支持Bonjour的设备可以插入TCP/IP网络中,它将选择一个IP地址并使该网络上的其他计算机了解它提供的服务。Bonjour有时也被称为Rendezvous、Zero Configuration或Zeroconf。
Zero Configuration Networking(如Bonjour)提供了以下功能:
- 必须能够获取IP地址(即使没有DHCP服务器)
- 必须能够进行名称到地址的转换(即使没有DNS服务器)
- 必须能够发现网络上的服务
设备将获得一个在169.254/16范围内的IP地址,并检查是否有其他设备正在使用该IP地址。如果没有,它将保留该IP地址。Mac会在其路由表中保留此子网的条目:netstat -rn | grep 169
对于DNS,使用多播DNS(mDNS)协议。mDNS服务监听端口5353/UDP,使用常规DNS查询,并使用多播地址224.0.0.251而不是仅向IP地址发送请求。任何监听这些请求的机器都会响应,通常是向多播地址发送响应,以便所有设备都可以更新其表格。
每个设备在访问网络时都会选择自己的名称,设备将选择一个以.local
结尾的名称(可能基于主机名或完全随机)。
发现服务使用了DNS服务发现(DNS-SD)。
Zero Configuration Networking的最后一个要求通过DNS服务发现(DNS-SD)得到满足。DNS服务发现使用了DNS SRV记录的语法,但使用DNS PTR记录,以便如果多个主机提供特定服务,则可以返回多个结果。客户端请求名称<Service>.<Domain>
的PTR查找,并接收一个形式为<Instance>.<Service>.<Domain>
的零个或多个PTR记录列表。
可以使用dns-sd
二进制文件来广告服务和执行服务查找:
#Search ssh services
dns-sd -B _ssh._tcp
Browsing for _ssh._tcp
DATE: ---Tue 27 Jul 2021---
12:23:20.361 ...STARTING...
Timestamp A/R Flags if Domain Service Type Instance Name
12:23:20.362 Add 3 1 local. _ssh._tcp. M-C02C934RMD6R
12:23:20.362 Add 3 10 local. _ssh._tcp. M-C02C934RMD6R
12:23:20.362 Add 2 16 local. _ssh._tcp. M-C02C934RMD6R
#Announce HTTP service
dns-sd -R "Index" _http._tcp . 80 path=/index.html
#Search HTTP services
dns-sd -B _http._tcp
当一个新的服务启动时,新服务会向子网上的所有人广播其存在。监听者不需要询问,只需要保持监听状态。
你可以使用这个工具来查看当前本地网络中提供的服务。
或者你可以使用python-zeroconf编写自己的Python脚本:
from zeroconf import ServiceBrowser, Zeroconf
class MyListener:
def remove_service(self, zeroconf, type, name):
print("Service %s removed" % (name,))
def add_service(self, zeroconf, type, name):
info = zeroconf.get_service_info(type, name)
print("Service %s added, service info: %s" % (name, info))
zeroconf = Zeroconf()
listener = MyListener()
browser = ServiceBrowser(zeroconf, "_http._tcp.local.", listener)
try:
input("Press enter to exit...\n\n")
finally:
zeroconf.close()
如果你觉得Bonjour可能更安全禁用,你可以使用以下方法禁用它:
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
参考资料
- The Mac Hacker's Handbook
- https://taomm.org/vol1/analysis.html
- https://lockboxx.blogspot.com/2019/07/macos-red-teaming-206-ard-apple-remote.html
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?想要在HackTricks中宣传你的公司吗?或者你想要获取PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品——The PEASS Family
- 获得官方PEASS和HackTricks周边产品
- 加入💬 Discord群组或电报群组,或者关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享你的黑客技巧。