知道域管理员的账户密码,怎么将自身进程以某个域用户身份模拟登录?

Casbin开源社区 2012-06-07 08:20:03
实验室的一个项目,其中一个功能是输入域控制器名、域管理员账户、密码能够获取所有的域用户、组、共享文件夹信息。用的VC6+ADSI,现在遇到的问题是在获取文件夹的访问控制信息(DACLs)时,如果文件夹的共享里删除了Everyone用户,则获取函数GetFileSecurity或者GetNamedSecurityInfo失败,返回5(拒绝访问),即使以域管理员身份也没办法,只能以某个域用户的身份才能获取(假设一个文件夹至少有一个域用户是有权限的),我可以轮询所有的域用户来尝试获取文件夹信息,关键是怎么以某个域用户的身份来登录?我不知道域用户的密码,也不能重置,我想拿到这个用户的access token。

我针对远程登录有两种办法,第一种是建立磁盘映射,用WNetAddConnection2W,需要知道密码,估计是不可能的
第二种是模拟登录,LogonUser + ImpersonateLoggedOnUser,我觉得获得一个hToken还靠谱一些,有什么办法获得吗?还是有什么别的思路?

BOOL ADDirectorySearch::logOnByUserPassword(CString strDomainName, CString strUserName, CString strPassword)
{
CString strFullUserName = strDomainName + _T("\\") + strUserName;

HANDLE hToken;
BOOL bResult;
bResult = LogonUser(strUserName, strDomainName, strPassword, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_DEFAULT, &hToken);
if (bResult == FALSE)
{
MyMessageBox_Error(_T("logOnByUserPassword Error."), _T("Error"));
return FALSE;
}
else
{
bResult = ImpersonateLoggedOnUser(hToken);
if (bResult == FALSE)
{
MyMessageBox_Error(_T("logOnByUserPassword Error."), _T("Error"));
return FALSE;
}
else
{
return TRUE;
}
}
}
...全文
229 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Casbin开源社区 2012-06-08
  • 打赏
  • 举报
回复
就是这个,我只知道用账户、密码模拟本机登录,但怎么在这种不知道域用户密码(知道域管理员帐户、密码和域用户帐户名)的情况下模拟远程登录呢?

真是挺难的一个问题啦
fronz 2012-06-08
  • 打赏
  • 举报
回复
模拟远程登录?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧