macOS Files, Folders, Binaries & Memory
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
/Applications: 安装的应用程序应在此处。所有用户都可以访问它们。
/bin: 命令行二进制文件
/cores: 如果存在,用于存储核心转储
/dev: 一切都被视为文件,因此您可能会看到存储在此处的硬件设备。
/etc: 配置文件
/Library: 可以在此找到许多与偏好设置、缓存和日志相关的子目录和文件。根目录和每个用户目录中都有一个 Library 文件夹。
/private: 未记录,但许多提到的文件夹是指向私有目录的符号链接。
/sbin: 重要的系统二进制文件(与管理相关)
/System: 使 OS X 运行的文件。您应该在此处找到大多数仅与 Apple 相关的文件(而非第三方)。
/tmp: 文件在 3 天后被删除(这是一个指向 /private/tmp 的软链接)
/Users: 用户的主目录。
/usr: 配置和系统二进制文件
/var: 日志文件
/Volumes: 挂载的驱动器将在此处出现。
/.vol: 运行 stat a.txt
您将获得类似 16777223 7545753 -rw-r--r-- 1 username wheel ...
的内容,其中第一个数字是文件所在卷的 ID 号,第二个是 inode 号。您可以通过 /.vol/ 使用该信息访问此文件的内容,运行 cat /.vol/16777223/7545753
系统应用程序位于 /System/Applications
下
已安装的应用程序通常安装在 /Applications
或 ~/Applications
中
应用程序数据可以在 /Library/Application Support
中找到,适用于以 root 身份运行的应用程序,以及在 ~/Library/Application Support
中找到,适用于以用户身份运行的应用程序。
需要以 root 身份运行的第三方应用程序 守护进程 通常位于 /Library/PrivilegedHelperTools/
沙盒应用程序映射到 ~/Library/Containers
文件夹。每个应用程序都有一个根据应用程序的包 ID 命名的文件夹(com.apple.Safari
)。
内核位于 /System/Library/Kernels/kernel
Apple 的内核扩展位于 /System/Library/Extensions
第三方内核扩展存储在 /Library/Extensions
MacOS 在多个地方存储信息,例如密码:
macOS Sensitive Locations & Interesting Daemons.dmg
: Apple 磁盘映像文件在安装程序中非常常见。
.kext
: 必须遵循特定结构,是 OS X 版本的驱动程序。(这是一个包)
.plist
: 也称为属性列表,以 XML 或二进制格式存储信息。
可以是 XML 或二进制。二进制文件可以使用以下命令读取:
defaults read config.plist
/usr/libexec/PlistBuddy -c print config.plsit
plutil -p ~/Library/Preferences/com.apple.screensaver.plist
plutil -convert xml1 ~/Library/Preferences/com.apple.screensaver.plist -o -
plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -
.app
: Apple 应用程序,遵循目录结构(这是一个包)。
.dylib
: 动态库(如 Windows DLL 文件)
.pkg
: 与 xar(可扩展归档格式)相同。安装命令可用于安装这些文件的内容。
.DS_Store
: 此文件位于每个目录中,保存目录的属性和自定义设置。
.Spotlight-V100
: 此文件夹出现在系统中每个卷的根目录上。
.metadata_never_index
: 如果此文件位于卷的根目录,Spotlight 将不会索引该卷。
.noindex
: 具有此扩展名的文件和文件夹将不会被 Spotlight 索引。
.sdef
: 包内的文件,指定如何通过 AppleScript 与应用程序进行交互。
包是一个 目录,在 Finder 中 看起来像一个对象(包的示例是 *.app
文件)。
在 macOS(和 iOS)中,所有系统共享库,如框架和 dylibs,合并为一个单一文件,称为 dyld 共享缓存。这提高了性能,因为代码可以更快地加载。
在 macOS 中,这位于 /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/
,在旧版本中,您可能会在 /System/Library/dyld/
中找到 共享缓存。
在 iOS 中,您可以在 /System/Library/Caches/com.apple.dyld/
中找到它们。
与 dyld 共享缓存类似,内核和内核扩展也被编译到内核缓存中,该缓存在启动时加载。
为了从单一文件 dylib 共享缓存中提取库,可以使用二进制文件 dyld_shared_cache_util,虽然现在可能无法使用,但您也可以使用 dyldextractor:
请注意,即使 dyld_shared_cache_util
工具无法工作,您也可以将 共享 dyld 二进制文件传递给 Hopper,Hopper 将能够识别所有库并让您 选择要调查的库:
一些提取器可能无法工作,因为 dylibs 是与硬编码地址预链接的,因此它们可能会跳转到未知地址。
在 macos 中,使用 Xcode 中的模拟器也可以下载其他 *OS 设备的共享库缓存。它们将下载到:ls $HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport/<version>/Symbols/System/Library/Caches/com.apple.dyld/
,例如:$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64
dyld
使用系统调用 shared_region_check_np
来知道 SLC 是否已被映射(返回地址),并使用 shared_region_map_and_slide_np
来映射 SLC。
请注意,即使 SLC 在第一次使用时被滑动,所有 进程 也使用 相同的副本,这 消除了 ASLR 保护,如果攻击者能够在系统中运行进程。这在过去实际上被利用过,并通过共享区域分页器修复。
分支池是小的 Mach-O dylibs,它们在映像映射之间创建小空间,使得无法插入函数。
使用环境变量:
DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1
-> 这将允许加载新的共享库缓存
DYLD_SHARED_CACHE_DIR=avoid
并手动用指向共享缓存的符号链接替换库与真实库(您需要提取它们)
在一个 文件夹 中,读取 允许 列出它,写入 允许 删除 和 写入 其中的文件,执行 允许 遍历 目录。因此,例如,具有 文件读取权限 的用户在一个他 没有执行 权限的目录中 将无法读取 该文件。
文件中可以设置一些标志,这将使文件表现得不同。您可以使用 ls -lO /path/directory
检查目录中文件的标志。
uchg
:被称为 uchange 标志将 防止任何操作 更改或删除 文件。要设置它,请执行:chflags uchg file.txt
root 用户可以 移除标志 并修改文件
restricted
:此标志使文件受到 SIP 保护(您无法将此标志添加到文件)。
Sticky bit
:如果目录具有粘滞位,只有 该 目录的所有者或 root 可以重命名或删除 文件。通常,这在 /tmp 目录上设置,以防止普通用户删除或移动其他用户的文件。
所有标志可以在文件 sys/stat.h
中找到(使用 mdfind stat.h | grep stat.h
查找),并且是:
UF_SETTABLE
0x0000ffff:可更改的所有者标志的掩码。
UF_NODUMP
0x00000001:不转储文件。
UF_IMMUTABLE
0x00000002:文件不可更改。
UF_APPEND
0x00000004:对文件的写入只能追加。
UF_OPAQUE
0x00000008:目录在联合方面是透明的。
UF_COMPRESSED
0x00000020:文件被压缩(某些文件系统)。
UF_TRACKED
0x00000040:对于设置此标志的文件,不会有删除/重命名的通知。
UF_DATAVAULT
0x00000080:读取和写入需要权限。
UF_HIDDEN
0x00008000:提示该项不应在 GUI 中显示。
SF_SUPPORTED
0x009f0000:超级用户支持标志的掩码。
SF_SETTABLE
0x3fff0000:超级用户可更改标志的掩码。
SF_SYNTHETIC
0xc0000000:系统只读合成标志的掩码。
SF_ARCHIVED
0x00010000:文件已归档。
SF_IMMUTABLE
0x00020000:文件不可更改。
SF_APPEND
0x00040000:对文件的写入只能追加。
SF_RESTRICTED
0x00080000:写入需要权限。
SF_NOUNLINK
0x00100000:项目不可被移除、重命名或挂载。
SF_FIRMLINK
0x00800000:文件是一个 firmlink。
SF_DATALESS
0x40000000:文件是无数据对象。
文件 ACLs 包含 ACE(访问控制条目),可以为不同用户分配更 细粒度的权限。
可以为 目录 授予这些权限:list
、search
、add_file
、add_subdirectory
、delete_child
、delete_child
。
对于 文件:read
、write
、append
、execute
。
当文件包含 ACLs 时,您将 在列出权限时找到一个 "+",如:
您可以使用以下命令读取文件的ACL:
您可以找到 所有具有 ACL 的文件 使用(这非常慢):
扩展属性具有名称和任何所需的值,可以使用 ls -@
查看,并使用 xattr
命令进行操作。一些常见的扩展属性包括:
com.apple.resourceFork
: 资源分叉兼容性。也可显示为 filename/..namedfork/rsrc
com.apple.quarantine
: MacOS: Gatekeeper 隔离机制 (III/6)
metadata:*
: MacOS: 各种元数据,例如 _backup_excludeItem
或 kMD*
com.apple.lastuseddate
(#PS): 最后文件使用日期
com.apple.FinderInfo
: MacOS: Finder 信息(例如,颜色标签)
com.apple.TextEncoding
: 指定 ASCII 文本文件的文本编码
com.apple.logd.metadata
: logd 在 /var/db/diagnostics
中使用的文件
com.apple.genstore.*
: 代际存储(文件系统根目录中的 /.DocumentRevisions-V100
)
com.apple.rootless
: MacOS: 由系统完整性保护用于标记文件 (III/10)
com.apple.uuidb.boot-uuid
: logd 对具有唯一 UUID 的启动时期的标记
com.apple.decmpfs
: MacOS: 透明文件压缩 (II/7)
com.apple.cprotect
: *OS: 每个文件的加密数据 (III/11)
com.apple.installd.*
: *OS: installd 使用的元数据,例如 installType
,uniqueInstallID
这是一种在 MacOS 机器中获取 备用数据流 的方法。您可以通过将内容保存在名为 com.apple.ResourceFork 的扩展属性中,将其保存在 file/..namedfork/rsrc 中。
您可以找到所有包含此扩展属性的文件,方法是:
扩展属性 com.apple.decmpfs
表示文件是加密存储的,ls -l
将报告 大小为 0,压缩数据在此属性中。每当访问该文件时,它将在内存中解密。
此属性可以通过 ls -lO
查看,标记为压缩,因为压缩文件也带有标志 UF_COMPRESSED
。如果通过 chflags nocompressed </path/to/file>
删除压缩文件的此标志,系统将不知道该文件是压缩的,因此无法解压并访问数据(它会认为文件实际上是空的)。
工具 afscexpand 可用于强制解压文件。
Mac OS 二进制文件通常编译为 通用二进制文件。一个 通用二进制文件 可以 在同一文件中支持多种架构。
macOS Universal binaries & Mach-O Format目录 /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System
存储有关 不同文件扩展名相关风险的信息。该目录将文件分类为不同的风险级别,影响 Safari 下载这些文件时的处理方式。类别如下:
LSRiskCategorySafe:此类别中的文件被认为是 完全安全的。Safari 会在下载后自动打开这些文件。
LSRiskCategoryNeutral:这些文件没有警告,Safari 不会自动打开。
LSRiskCategoryUnsafeExecutable:此类别下的文件 触发警告,指示该文件是一个应用程序。这是一个安全措施,用于提醒用户。
LSRiskCategoryMayContainUnsafeExecutable:此类别用于可能包含可执行文件的文件,例如归档文件。除非 Safari 能验证所有内容是安全或中性的,否则将 触发警告。
$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2
:包含有关下载文件的信息,例如下载来源的 URL。
/var/log/system.log
:OSX 系统的主日志。com.apple.syslogd.plist 负责执行 syslogging(您可以通过在 launchctl list
中查找 "com.apple.syslogd" 来检查它是否被禁用)。
/private/var/log/asl/*.asl
:这些是 Apple 系统日志,可能包含有趣的信息。
$HOME/Library/Preferences/com.apple.recentitems.plist
:通过 "Finder" 存储最近访问的文件和应用程序。
$HOME/Library/Preferences/com.apple.loginitems.plsit
:存储系统启动时要启动的项目。
$HOME/Library/Logs/DiskUtility.log
:DiskUtility 应用程序的日志文件(有关驱动器的信息,包括 USB)。
/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
:有关无线接入点的数据。
/private/var/db/launchd.db/com.apple.launchd/overrides.plist
:已停用的守护进程列表。
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)