- 什么是注冊表
注冊表是Windows在Win95/98系統開始引入的一種核心數據庫,里面存放着各類的配置信息、參數等、直接控制着系統的啟動、硬件的裝載以及Winodws程序的運行
- 手冊表的功能
記錄用戶安裝在計算機上的軟件和每個程序的相關信息,通過他可以控制硬件、軟件、用戶環境和操作系統界面的數據信息文件.
注冊表的結構
快捷鍵regedit
可以打開注冊表,查看詳細的結構
- 不同機器注冊表結構
win7
win10

win08

可以看到大部分機器的注冊表的根鍵
是差不多的.
- 簡單結構
根鍵:被稱為HKEYxxxxxx,某一項的句柄項:附加文件夾和一個或多個值
子項:在某一個項(父項)下面出現的項(子項)
項值:帶有一個名稱和一個值的有序值,每個項都可包括任何數量的值項,值項由三個部分組成:名稱、數據類型和數據
1.名稱:不包括反斜線的字符、數字、代表符和空格的任意組合。同一鍵中不可有相同的名稱
2.數據類型:包括字符串、二進制和雙字節等
3.數據:值項的具體值,它的大小可以占用64KB
總體結構分析
注冊表包括以下5個根鍵
- HKEY_CLASSES_ROOT
該根鍵包括啟動應用程序所需的全部信息,包括擴展名,應用程序與文檔之間的關系 驅動程序名,DDE和OLE信息,類ID,編號和應用程序與文檔的圖標等.
- HKEY_CURRENT_USER
該根鍵包括當前登錄用戶的配置信息,包括環境變量,個人程序以及桌面設置等
- HKEY_LOCAL_MACHINE
該根鍵包括本地計算機的系統信息,包括硬件和操作系統信息。 安全數據和計算機專用的各類軟件設置信息
- HKEY_USERS
該根鍵包括計算機的所有用戶使用的配置數據(是所有用戶哦) 這些數據只有在用戶登錄系統時才能訪問.
這些信息告訴系統當前用戶使用的圖標,激活的程序組,開始菜單的內容以及顏色,字體- HKEY_CURRENT_CONFIG
該根鍵包括當前硬件的配置信息,其中的信息是從HKEY_LOCAL_MACHINE中映射出來的
注冊表中的結構詳解
- HKEY_CLASSES_ROOT
以AVIFILE這個項來舉例

CLSID:分類標識,系統可以用這個類標識來識別相同類型的文件
Compressors:它下面有兩個子項:auds:用於設置音頻數據壓縮程序的類標識;vids:用於設置視頻數據壓縮程序的類標識
RIFFHandlers:在它的下面有兩個類標識:AVI:用於設置AVI文件的類標識;WAVE:用於設置WAVE文件的類標識
Shellex:包括了視頻文件的外殼擴展
- HKEY_CURRENT_USER
此根鍵中保存當前用戶的子項信息
- HKEY_LOCAL_MACHINE
此根鍵中存放的是用來控制系統和軟件的設置,由於這些設置是針對那些使用Windows系統的用戶而設置的,是一個公共配置信息,所以它與具體的用戶沒多大關系。
HARDWARE:有四個子項
1. ACPI:存放高級電源管理接口數據
2. DEVICEMAP: 用於存放設備映射
3. DEscriptION: 存放有關系統信息
4. RESOURCEMAP: 用於存放資源列表
SAM子項:跟系統的存儲密碼有關
SECURITY子項:該子項只是為將來的高級功能而預留的
SOFTWARE子項:該子項中保留的是所有已安裝的32位應用程序的信息,各個程序的控制信息分別安裝在相應的子項中,由於不同的計算機安裝的應用程序互不相同,因此這個子項下面的子項信息也不完全一樣。
SYSTEM子項:該子項是啟動時所需的信息和修復系統時所需要的信息
另外說明一點:我們轉儲hash時候導出的注冊表就是在這個根鍵里面的(請參考亮神的文章)
- HKEY_USERS
此根鍵中保存的是默認用戶(default),當前登錄用戶和軟件(software) 的信息.
其中DEFAULT子項是其中最重要的,它的配置是針對未來將會被創建的新用戶的。
新用戶根據默認用戶的配置信息來生成自己的配置文件,該配置文件包括環境、屏幕和聲音等多種信息
沒有什么好講的
- HKEY_CURRENT_CONFIG
此根鍵存放的是當前配置的文件信息.
- 總結
注冊表看似是五個分支(五個根鍵),其實不然,其實就是HKEY_LOCAL_MACHINE、HKEY_USERS這兩個才是真正的注冊表鍵,其它都是從某個分支映射出來的,相當於快捷方式或是別名.
注冊表的基本操作
- 常用操作
創建項和項值
更新項值的數據
刪除項、子項或值項
查找項、值項或數據
- 基本數據類型
二進制值(reg_binary):多數硬件信息以二進制數據存儲,而以十六進制格式顯示在注冊表編輯器中
字符串值(reg_sz):包括字符串的注冊表鍵,使用字符串數據類型
雙字節值(reg_dword):是32位信息常顯示成4個字節。它在出錯控制功能上用處極大,其數據一般以十六進制格式顯示在注冊表編輯器中。
多字符串值(reg_multi_sz):允許將一系列項目作為單獨的一個值使用。對於多種網絡協議、多個項目、設備列表以及其他類似的列表項目來說,可以使用多字符串值可擴充字符串值(reg_expand_sz):代表一個可擴展的字符串
- 操作實戰
向"HKEY_CURRENT_USER"下創建一個子鍵"Mikasa",向該子鍵中添加名為"Mikasa",類型為"REG_ZS",數據為"QAQ"
reg add HKCU\Mikasa /v Mikasa /t REG_SZ /d "QAQ"

參數解釋:/v 值 /t 類型 /d 數據
修改注冊表中的值
reg add "HKCU\Mikasa" /f /v Saber /t REG_SZ /d "test"

同理的我們可以修改支持遠程桌面連接
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /f /v fDenyTSConnections /t REG_DWORD /d 0
修改支持遠程桌面
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections
查詢一下
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections
查詢注冊表的值
reg query HKLM\xxx /v xxx
/v指定值查詢,例如查詢我們插入的值
reg query HKCU\Mikasa /v Mikasa

導入/導出注冊表
reg import c:\test.reg //導入
reg export HKCU\Mikasa c:\test1.reg //導出注冊表
上述都是需要管理員權限的,不然會發生錯誤
刪除注冊表中的某一項
reg delete HKCU\Mikasa /v Mikasa /f

刪除成功
滲透中常用的注冊表操作
reg add "hklm\system\currentcontrolset\control\terminal server" /f /v fDenyTSConnections /t REG_DWORD /d 0
啟動遠程桌面
netsh firewall set service remoteadmin enable
netsh firewall set service remotedesktop enable
配置防火牆
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber
查看RDP遠程連接的端口
reg add "HKLM\System\CurrentControlSet\Services\LanManServer\Parameters" /f /v RequireSecuritySignature /t REG_DWORD /d 0
開啟hash傳遞
亮神的注冊表導出數據庫,本地破解hash
reg save HKLM\SYSTEM sys.hiv
reg save HKLM\SAM sam.hiv
reg save HKLM\security security.hiv

有師傅總結的關於可能保存密碼的注冊表鍵
HKCU\Software\ORL\WinVNC3\Password
HKCU\Software\SimonTatham\PuTTY\Sessions
HKLM\SYSTEM\Current\ControlSet\Services\SNMP
HKEY_CURRENT_USER\Software\Martin Prikryl\WinSCP 2\Sessions
HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon
也可以用注冊表語句檢索
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s
參考資料
http://ittxx.cn/view/139
http://t3ngyu.leanote.com/post/Windows-Reg