2.1 粘滯鍵攻擊原理
粘滯鍵是Windows的一項功能,允許一個接一個地按鍵而不是一次性全部按下,這樣可以更容易地發出某些鍵盤命令,如按Ctrl-c進行復制或Ctrl-v進行粘貼。粘滯鍵的觸發方式是連續按下Shift鍵5次,你甚至可以在Windows登錄界面輸入用戶名或密碼之前就打開這個功能。
為了再現這次攻擊,我們將用另一個文件cmd.exe來替換粘滯鍵程序文件。這樣,按下Shift鍵5次將不會啟動通常的粘滯鍵助手,而是啟動命令提示符(Command prompt)。這是一個基于文本界面的程序,可以讓我們直接在窗口中輸入命令。通過在登錄界面上啟動一個命令提示符窗口(如圖2-1所示),就可以添加一個新的用戶名和密碼,獲得計算機管理員級訪問權限,這樣就可以隨意訪問計算機文件,而不需要知道計算機上的登錄信息!

圖2-1 粘滯鍵攻擊打開了命令提示窗口,而不是粘滯鍵助手
由于2019年或之后更新到更高版本的Windows 10計算機不會受到粘滯鍵攻擊的侵害,因此我們需要一臺比較舊的Windows計算機來試驗這次攻擊。另外還需要一張Windows 10安裝光盤或U盤。要創建一張Windows 10安裝光盤,請參考附錄A中的說明。
2.1.1 從Windows 10安裝盤啟動
若用命令提示符程序替換粘滯鍵程序,我們要用Windows 10安裝光盤或U盤來訪問包含這些程序文件的硬盤。按附錄A所述步驟創建安裝盤后,插入這張盤,然后重新啟動計算機。
我們需要告訴計算機從光盤或U盤加載操作系統,而不是從硬盤驅動器加載。為此,我們得先訪問啟動菜單或基本輸入/輸出系統(Basic Input/Output System,BIOS),它們包含了控制計算機啟動的基本設置。不同的計算機制造商和不同版本的Windows會導致實際情況和以下說明稍有不同,但按照以下步驟,再借助一點網絡搜索,就能讓你進入大多數比較舊的Windows計算機。
1.在Windows計算機上,你可以按下一個特殊的鍵來訪問啟動菜單或BIOS。如果在Windows啟動徽標出現之前,啟動屏幕上沒有顯示該按哪個鍵,那么請重新啟動計算機,并在計算機開始啟動時快速按Esc、Delete、F8、F9、F10、F11或F12等鍵。也可以在線搜索“啟動菜單”和計算機的具體品牌和型號,從而找到正確的按鍵。
2.如果出現了啟動菜單,請選擇“從DVD啟動”(Boot from DVD)或“從USB啟動”(Boot from USB)選項,即從插入的Windows安裝盤啟動,然后跳到步驟5繼續執行。
3.如果重啟幾次后啟動菜單依然沒有出現,可以嘗試進入BIOS菜單:關閉計算機,然后再次打開,按Delete、F2、F9、F10、F12或Esc鍵。在線搜索BIOS和你的計算機型號以找到正確的按鍵。
4.進入BIOS后,找到啟動選項并更改啟動設備的順序或優先級(通常使用箭頭鍵),使USB或DVD成為首選,然后保存更改并退出BIOS。
5.再次重啟。你應該會看到“按任意鍵從CD或DVD啟動”或“按任意鍵從USB設備啟動”的消息提示。立即按任意鍵(如空格鍵)從DVD或USB設備啟動。
6.當Windows安裝盤啟動后,依次單擊“下一步”(Next)→“維修計算機”(Repair your Computer)→“故障排除”(Troubleshoot)→“命令提示符”(Command Prompt),如圖2-2所示。菜單順序或選項名稱可能看起來不同,若不同可查找Windows命令提示符。
警告:不要選擇安裝Windows 10,否則可能會清除你試圖恢復的計算機中的所有文件!

圖2-2 使用Windows安裝盤訪問命令提示符
7.打開Windows命令提示符窗口(通常是一個黑色的文本窗口)后,鍵入c:,按回車鍵切換到C:驅動器,如下所示:
X:\> c:
8.輸入dir命令以查看C:驅動器上的文件和文件夾列表。查找名為Windows的文件夾,它將被標記為<DIR>,也就是目錄的簡稱。
C:\> dir Volume in drive C is Windows 10 Volume Serial Number is B4EF-FAC7 Directory of C:\ --略-- 03/15/2018 02:51 AM <DIR> Users 05/19/2019 10:09 AM <DIR> Windows? --略--
這個文件夾(?)里包含的是操作系統文件,包括命令提示符應用程序和粘滯鍵程序文件,我們要將它們進行交換以執行攻擊。
9.如果C:驅動器上沒有Windows目錄,請嘗試在D:驅動器上執行相同的過程,輸入d:后輸入dir。如果D:驅動器也沒有Windows目錄,請繼續按字母順序查找E:、F:、G:……直到找到列表中包含Windows目錄的驅動器。
2.1.2 獲得管理員級別的訪問權限
現在用命令提示符程序cmd.exe替換粘滯鍵程序sethc.exe。然后,我們將能夠在計算機上創建一個新的管理員賬號。
1.輸入以下3個命令:
C:\> cd \Windows\System32\ C:\Windows\System32\> copy sethc.exe sethc.bak C:\Windows\System32\> copy cmd.exe sethc.exe
這些命令進入sethc.exe和cmd.exe所在的目錄,創建粘滯鍵程序的備份副本,并用命令提示符程序文件的副本替換原來的粘滯鍵程序文件。這樣,每當計算機運行sethc.exe,它就會打開一個命令提示窗口,而不是粘滯鍵程序。
2.在第3個命令之后,Windows會詢問你是否要覆蓋sethc.exe。輸入“Y”繼續。
3.取出Windows 10安裝DVD光盤或USB盤,重啟計算機。
4.當計算機啟動至登錄屏幕時,按Shift鍵5次。你看到的不再是通常的粘滯鍵程序,一個命令提示窗口將在登錄屏幕上彈出,如圖2-3所示。

圖2-3 命令提示符窗口彈出
5.在命令提示符窗口中輸入以下兩個命令:
C:\Windows\System32\> net user ironman Jarvis /add C:\Windows\System32\> net localgroup administrators ironman /add
第1個命令將名為ironman的用戶賬號和密碼Jarvis添加到Windows計算機中。第2個命令將ironman用戶添加到本地管理員列表中。這意味著當我們以ironman的身份登錄時,將擁有管理員級權限,能夠訪問所有文件。
6.當你看到如圖2-4所示的成功消息時,關閉命令提示符。

圖2-4 成功添加了名為ironman的用戶作為計算機管理員
除了創建新用戶賬號之外,你還可以在命令提示符窗口中重置現有用戶的密碼,方法是輸入net user,后面跟上現有的用戶名和要設置的新密碼,例如net user bryson Thisisyournewpassword!。但是,如果沒有他人的許可或計算機所有者的許可,你千萬不要重置他人的密碼。
2.1.3 現在你是管理員了
恭喜!現在你可以用管理員身份訪問計算機了。輸入.\ironman作為用戶名(或者從賬號列表中選擇ironman,如圖2-5所示)登錄。ironman前面的點和反斜杠告訴了Windows該賬號是本地的,而不是存儲在網絡服務器上的。輸入用戶名后,輸入密碼Jarvis。
由于我們讓ironman用戶成為本地管理員組的成員,所以你對所有文件和文件夾都擁有管理員級訪問權限,包括C:\Users\中的所有用戶和文檔,如圖2-6所示。

圖2-5 現在可以用ironman用戶登錄這臺Windows PC

圖2-6 管理員可以看到所有用戶的文件
當你首次單擊進入另一個用戶的文件夾時,會看到一個彈出消息,提示你需要許可才能打開這個用戶的文件,如圖2-7所示。由于你現在是管理員,請點擊“繼續”(Continue)以授予自己永久訪問權限。

圖2-7 管理員可以授予自己超級權限,在同一臺計算機上訪問任何人的文件
粘滯鍵攻擊只適用于Windows機器,然而,運行macOS的計算機也容易受到物理訪問攻擊。