iT邦幫忙

2025 iThome 鐵人賽

DAY 14
0
Security

Hack the Boyfriend: 為了 CTF 帥哥,我貢獻了我的肝臟系列 第 14

社群排毒 - 回歸自己的日子

  • 分享至 

  • xImage
  •  

DPAPI — 解密我自己


以前的我,總覺得生活就像一個被 DPAPI 加密過的資料庫。

所有的情緒、期待、暗戀,都被鎖進去,只有「他」的 master key 能打開。

我一直以為,拿到他的鑰匙,我才能被完整解密。

可是一天天過去,我慢慢發現—

或許,我也可以自己生成 key。

當我學會枚舉、嘗試理解提權、自己去參加聚會、努力突破舒適圈...

突然心中有個小聲音說:

「我正在慢慢成為理想的自己,沒有他也能升級。」

於是我卸載了社群軟體,沒有他的聲音,也沒有誰突然亂入。

只有我自己、一台電腦,還有那個讓人想摔鍵盤的錯誤訊息。

我盯著螢幕,試著解釋給自己聽:

「DPAPI、master keys、Local State、Login Data……」

沒有觀眾,沒有英雄救援。

但有一杯咖啡,和一個逐漸安定的心情。


技術筆記:DPAPI

在 Windows 裡,應用程式不會把密碼明文放在硬碟上,而是交給 DPAPI (Data Protection API) 來「上鎖」。

DPAPI 幫我們加密資料,但「鑰匙」不是隨便的密碼,而是跟 Windows 使用者帳號綁在一起的 master key。

主要有幾個重點:

Master Key

應用程式加密資料,會用到所謂的 master key

這個 master key 是 Windows 幫我們生成的,一般存在這裡:

C:\Users\<User>\AppData\Roaming\Microsoft\Protect\<SID>\

但是 master key 本身也是加密的,它需要用登入密碼 / Kerberos key / domain backup key 來解鎖。

Local State

瀏覽器(以 Chrome 為例)不直接把 master key 拿去加密密碼,而是會再生一把「AES 金鑰」,這個金鑰本身被 DPAPI 包起來,放在一個叫 Local State 的 JSON 檔案裡:

C:\Users\<User>\AppData\Local\Google\Chrome\User Data\Local State

裡面會有一段 os_crypt.encrypted_key,看起來像一串亂碼,就是瀏覽器用 DPAPI 鎖起來的 AES key。

所以,在 PowerShell 我們可以這樣拿出來:

(gc "$env:LOCALAPPDATA\Google\Chrome\User Data\Local State" | ConvertFrom-Json).os_crypt.encrypted_key

Login Data

當我們登入某個網站,Chrome 會把帳號密碼存在 Login Data 這個 SQLite 資料庫裡:

C:\Users\<User>\AppData\Local\Google\Chrome\User Data\Default\Login Data

不過這裡的密碼不是明文,而是用剛剛 Local State 裡的 AES 金鑰加密過的。

所以,我們可以嘗試用以下指令,並且用剛才的 AES key。

dpapi::chrome 模組可以幫我們 ...

  • 讀取 Login Data(SQLite DB)
  • 用我們提供的 EncryptedKey
  • 透過 DPAPI 解開 AES Key
  • 解密 password_value
dpapi::chrome /in:"%LOCALAPPDATA%\Google\Chrome\User Data\Default\Login Data" /encryptedkey:[EncryptedKey] /unprotect

解釋解密流程

  1. 先透過 DPAPI 解開 Local State 裡的 encrypted_key。

  2. 拿到 AES 金鑰後,用它去解 Login Data 裡的密碼欄位。

  3. 工具像 dploot、donpapi 都是在幫我們自動化這些步驟。


小語

# 在喜歡你的過程中,我好像靠近了想成為的自己。

參考資料


上一篇
有時候,只是想找個依賴 - Part 3
下一篇
加班的日子有你有我
系列文
Hack the Boyfriend: 為了 CTF 帥哥,我貢獻了我的肝臟26
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言