模拟和目录条目

2024-03-13

我成功模拟了用户帐户,但无法使用模拟帐户绑定到 AD 并下拉DirectoryEntry.

下面的代码输出:

  • 在模拟之前我是:DOMAIN\user
  • 模拟后我是:DOMAIN\admin
  • 错误:C:\Users\user\ADSI_Impersonation\bin\Debug\ADSI_Impersonation.exe samac 帐户名称:

我的问题似乎类似于:

如何在 ASP.NET 中使用 System.DirectoryServices 命名空间 http://support.microsoft.com/kb/329986

我正在获取主令牌。我了解我需要使用委托来在远程计算机上使用模拟令牌。我确认该帐户没有选中“帐户敏感且无法委派”标记。我还确认本地组策略和域组策略不会阻止委派:

计算机配置\Windows 设置\安全设置\本地策略\用户权限分配\

我缺少什么?

Thanks!

using System;
using System.DirectoryServices;
using System.Security;
using System.Security.Principal;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;
using System.Runtime.ConstrainedExecution;

namespace ADSI_Impersonation
{
    class Program
    {
        [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
            int dwLogonType, int dwLogonProvider, out SafeTokenHandle phToken);

        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        public static extern bool CloseHandle(IntPtr handle);

        static void Main(string[] args)
        {
            const int LOGON32_PROVIDER_DEFAULT = 0;
            const int LOGON32_LOGON_INTERACTIVE = 2;

            string userName = "[email protected] /cdn-cgi/l/email-protection";
            string password = "password";

            Console.WriteLine("Before impersonation I am: " + WindowsIdentity.GetCurrent().Name);

            SafeTokenHandle safeTokenHandle;

            try
            {
                bool returnValue = LogonUser(userName, null, password,
                    LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
                    out safeTokenHandle);

                if (returnValue)
                {
                    WindowsIdentity newId = new WindowsIdentity(safeTokenHandle.DangerousGetHandle());
                    WindowsImpersonationContext impersonatedUser = newId.Impersonate();
                }
                else
                {
                    Console.WriteLine("Unable to create impersonatedUser.");
                    return;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Authentication error.\r\n" + e.Message);
            }

            Console.WriteLine("After impersonation I am: " + WindowsIdentity.GetCurrent().Name);

            string OU = "LDAP://dc=domain,dc=com";
            DirectoryEntry entry = new DirectoryEntry(OU);
            entry.AuthenticationType = AuthenticationTypes.Secure;

            DirectorySearcher mySearcher = new DirectorySearcher();
            mySearcher.SearchRoot = entry;
            mySearcher.SearchScope = System.DirectoryServices.SearchScope.Subtree;
            mySearcher.PropertiesToLoad.Add("cn");
            mySearcher.PropertiesToLoad.Add("samaccountname");

            string cn = "fistname mi. lastname";
            string samaccountname = "";

            try
            {
                // Create the LDAP query and send the request
                mySearcher.Filter = "(cn=" + cn + ")";

                SearchResultCollection searchresultcollection = mySearcher.FindAll();

                DirectoryEntry ADentry = searchresultcollection[0].GetDirectoryEntry();

                Console.WriteLine("samaccountname: " + ADentry.Properties["samaccountname"].Value.ToString());
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: " + e.Message);
            }

            Console.WriteLine("samaccountname: " + samaccountname);
            Console.ReadLine();
        }
    }

    public sealed class SafeTokenHandle : SafeHandleZeroOrMinusOneIsInvalid
    {
        private SafeTokenHandle()
            : base(true)
        {
        }

        [DllImport("kernel32.dll")]
        [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
        [SuppressUnmanagedCodeSecurity]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool CloseHandle(IntPtr handle);

        protected override bool ReleaseHandle()
        {
            return CloseHandle(handle);
        }
    }
}

许多 .NET API 不会考虑您的手动模拟,例如您注意到的 LDAP 查询。因此,您需要使用 DirectoryEntry 的重载构造函数来代替,

http://msdn.microsoft.com/en-us/library/bw8k1as4.aspx http://msdn.microsoft.com/en-us/library/bw8k1as4.aspx

http://msdn.microsoft.com/en-us/library/wh2h7eed.aspx http://msdn.microsoft.com/en-us/library/wh2h7eed.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模拟和目录条目 的相关文章

  • MVC Core IActionResult 含义

    什么是IActionResult 我尝试查看 MSDN 和其他网站 但需要通用 常见 易于理解的答案 MSDN IActionResult https learn microsoft com en us dotnet api microso
  • 中间件 API 的最佳实践是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在开发一个中间件 SDK 采用 C 和 Java 语言 供游戏开发人员 动画软件开发人员 阿凡达开
  • 同步执行异步函数

    我对此主题进行了大量搜索 并且阅读了本网站上有关此主题的大部分帖子 但是我仍然感到困惑 我需要一个直接的答案 这是我的情况 我有一个已建立的 Winform 应用程序 但无法使其全部 异步 我现在被迫使用一个全部编写为异步函数的外部库 在我
  • asp.net c# 将数据集中的数据转换为电子邮件正文?

    从数据集到电子邮件正文的最佳方式是什么 我有一个 net 控制台应用程序 用于根据存储过程的结果发送电子邮件通知 并且想知道如何最好地从 SQL 数据转到电子邮件正文 带有颜色和字体的 html 正文是最好的 但纯文本也可以 thanks
  • CMake 和 Visual Studio:如何获得快速、安静的命令行构建?

    我有一个 cmake 项目 它成功地完成了我想要的一切 但我有大约 100 个文件 当我只需要重新编译一个文件时 我厌倦了每次看到生成的巨大输出 每个文件 30 行 明确地说 我正在编译cmake build 得到这个结果 我需要传递给编译
  • C++ 中的单例和抽象基类

    最近我遇到了关于实现 Singleton 但涉及抽象基类的问题 假设我们有这样的类层次结构 class IFoo it s ABC class Foo public IFoo 我们的单例类定义如下 template
  • 使用 Selenium for C# 登录 Facebook

    我一直在使用 Selenium C 框架并尝试进行 facebook 登录 但没有任何运气 这是我到目前为止得到的 基于这篇文章 使用 Selenium 测试 Facebook Connect 应用程序 https stackoverflo
  • 有没有办法使 C90 标准中的枚举无符号? (符合 MISRA-C 2004 标准)

    我正在尝试找到一种使枚举 无符号 的方法 enum x1 0 x2 x3 uint8 t x2 lt PC LINT MISRA C 2004 will complain about mixing signed and unsigned h
  • 替换 JSON 中的转义字符

    我想用空格替换 JSON 字符串中的 字符 我怎样才能做到这一点 我发现从 JSON 字符串中删除所有转义字符的最简单 最好的方法是将字符串传递到正则表达式 Unescape 方法 此方法返回一个没有转义字符的新字符串 甚至删除了 n t
  • 枚举器上的 [[maybe_unused]]

    查看规格 maybe unused http en cppreference com w cpp language attributes 它指出 出现在类 typedef 变量 非静态数据成员 函数 枚举或枚举器的声明中 如果编译器对未使用
  • 套接字:监听积压并接受

    listen sock backlog 在我看来 参数backlog限制连接数量 这是我的测试代码 server initialize the sockaddr of server server sin family AF INET ser
  • Create CFrameWnd 给出了第一次机会异常——为什么?

    我正在尝试使用基于 CFrameWnd 的代码编写一个简单的 MFC 应用程序 该应用程序在可滚动窗口中绘制 下面的代码改编自 Prosise Programming Windows with MFC 第 2 版 第 89ff 页 当我在调
  • 在不使用 Thread.Sleep c# 的情况下延迟发送电子邮件

    我有一个 for 循环 它循环并每个循环发送一封电子邮件 现在我正在使用 thread sleep 但我希望用户仍然能够与程序交互 只需取消该循环即可 是否可以在不使用 thread sleep 的情况下做到这一点 您是否在 UI 线程上运
  • Qt mouseReleaseEvent() 未触发?

    我有一个显示图片的库 我们称之为 PictureGLWidget 其中 class PictureGLWidget public QGLWidget 所以 PictureGLWidget 扩展了 QGLWidget 在PictureGlWi
  • 如何使用 libpq 获取双精度值?

    The examples http www postgresql org docs 9 3 interactive libpq example htmllibpq 文档中展示了如何通过将整数值转换为主机字节序表示来获取整数值 我很好奇必须做
  • 如何解释“错误C2018:未知字符'0x40'?[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 在编译一些代码时 我收到以下信息 错误 C2018 未知字符 0x40 我想知道如何解决这样的问题 这是我要开始的地方
  • 如何使用简历实现一个“一网打尽”的异常处理程序?

    我想知道我怎样才能写一个抓住他们全部应用程序级别的异常处理程序将为用户提供恢复应用程序流程的选项 如果您正在运行 Windows 窗体应用程序 将处理程序添加到Application ThreadException event
  • 如何将 Metro 应用部署到桌面?

    我正在尝试将我的 C 应用程序部署到我的 Windows 8 Metro 桌面 我可以在 bin 文件夹中看到部署的文件 但是当我尝试打开它们时 出现以下错误 该应用程序只能在 AppContainer 的上下文中运行 我检查了属性上下文菜
  • C/C++ 通过 Android NDK 在 JNI 中看不到 Java 方法

    我正在尝试从使用 NDK 构建的 C 类文件调用 Java 方法 它不断抛出常见的 未找到非静态方法 错误并导致整个 Android 应用程序崩溃 下面的代码片段 有些东西可能不需要 但我按原样保留它们 因为焦点 问题在于refreshJN
  • 在类中使用 std::chrono::high_resolution_clock 播种 std::mt19937 的正确方法是什么?

    首先 大家好 这是我在这里提出的第一个问题 所以我希望我没有搞砸 在写这篇文章之前我用谷歌搜索了很多 我对编码 C 很陌生 我正在自学 考虑到有人告诉我 只为任何随机引擎播种一次是一个很好的做法 我在这里可能是错的 什么是正确 最佳 更有效

随机推荐

  • 如何测量来自客户端的 Websocket 背压或网络缓冲区

    我正在使用 ws Node js 包创建一个到每秒发送数百条消息的服务器的简单 WebSocket 客户端连接 即使使用仅 console logs 传入消息的简单 onMessage 处理程序 客户端也无法跟上 我的理解是 这被称为背压
  • 在 C# 中创建动态扩展方法?

    是否可以解决此错误 public static class LayoutExtensions
  • 通过鼠标悬停定位工具提示

    我正在使用以下链接中找到的代码 https www d3 graph gallery com graph heatmap tooltip html https www d3 graph gallery com graph heatmap t
  • TemplateHaskell 和 IO

    如果 TH 的功能有副作用 是否有任何适当的方法可以确保它们的安全 比如说 我想要一个在编译时调用 git 并生成版本字符串的函数 LANGUAGE TemplateHaskell module Qq where import System
  • 在导航 goBack 上发送道具

    基本上我有三个屏幕 第一个是堆栈导航器 const stackNav createStackNavigator Main screen MainScreen navigationOptions navigation gt header nu
  • mvc c# jquery 如果记录存在则更新视图的一部分,否则更新表

    我正在寻求有关如何实现此功能的建议 像往常一样 我有一个带有编辑框的页面 用户在其中提交带有输入的页面 其唯一目的是将其保存到记录中 但是我想要做的 为了避免重复 是首先在表中搜索任何相似的记录 如果有任何相似的记录 我想将其返回给用户 在
  • MVVM 实现的问题:对所选项目的更改传播到列表,不希望这样

    所以我遇到了这个问题 希望你能帮忙解决 我正在使用 MVVM Light 作为框架编写 WPF 应用程序 在这种情况下 我有一个项目列表 并且 SelectedItem 绑定到用户可以在其中编辑项目的详细信息视图 在本例中 有一个 保存 按
  • jQuery 模糊事件未触发

    我是 jQuery 新手 所以我打赌我做错了什么 但我不明白为什么这个事件没有触发 我有一个 textarea 元素 由于正在接受数据的应用程序 需要在提交之前删除所有分隔符 我试图在文本区域失去焦点时进行清理 因此采用模糊方法 不幸的是
  • 读取 csv 时区错误

    经过几个小时的谷歌搜索后 我没有找到解决这个问题的方法 基本上当我跑步时read csv some file csv 函数来自readr包我收到以下错误 错误 未知 TZ UTC 并且 csv 未被读取 我读取 CSV 的唯一方法是这样 r
  • Django 管理员:有条件地设置 list_display

    是否有任何管理模型方法 如 get list display 或某种方式 我可以有一些条件来设置不同的 list display 值 class FooAdmin model ModelAdmin def get list display
  • 如何重置ReactJS文件输入

    我有文件上传输入
  • 如何检测c#中的虚拟方法是否被重写[重复]

    这个问题在这里已经有答案了 是否可以确定虚拟方法是否已被重写 class ABase public void DoSomething object p p Process if DoSomethingExtra is implemented
  • 从命令为 pthread 引导 symfony2

    我正在尝试从 symfony 2 命令启动线程 protected function execute InputInterface input OutputInterface output parser this gt getContain
  • 当我从桌面会话恢复时发出警告。 Emacs

    昨天我从 EmacsWiki 找到了桌面模式 然后我为我的 Emacs 24 配置了它 Desktop require desktop save the desktop file automatically if it already ex
  • 扩展方法存在问题:IXmlLineInfo

    当我尝试在 ascx control 中的类中使用任何扩展方法时 这是世界上最简单的方法 namespace VfmElita Page Stat public static class TestExtention public stati
  • 将 1 转换为 01

    我有一个 1 99 之间的整数 如何让它始终为两位数 即 01 04 21 想必您的意思是将数字存储在字符串中 从 JDK1 5 开始就有了String format http download oracle com javase 1 5
  • string.toUppercase() 在堆或字符串池中创建了一个新对象

    如果我们使用toUpperCase String类的方法 是否将对象放入堆中而不是在String池中创建它 下面是代码 当我运行时 我可以推断新创建的字符串对象不在字符串池中 public class Question public sta
  • 如何更改seaborn.objects的图像大小

    解决方案如图所示如何更改seaborn轴或图形级别图的图形大小 https stackoverflow com q 31594549 7758804不为seaborn objects 这个问题是关于添加的新界面seaborn v0 12 尝
  • 为 Bargain Finder Max Flight 选择不同的回程航班

    我正在开发一个由 Sabre 的 Soap Api 提供支持的旅行应用程序 我正在使用给定的请求调用 BargainFinderMax BFM 端点
  • 模拟和目录条目

    我成功模拟了用户帐户 但无法使用模拟帐户绑定到 AD 并下拉DirectoryEntry 下面的代码输出 在模拟之前我是 DOMAIN user 模拟后我是 DOMAIN admin 错误 C Users user ADSI Imperso