[C#] 网域账号(Domain)验证

news/2025/1/19 14:52:11/

使用C#对网域账号(Domain)验证方案:

一、使用advapi32.dll动态库

[DllImport("advapi32.dll")]
private static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
const int LOGON32_LOGON_INTERACTIVE = 2; //通过网络验证账户合法性
const int LOGON32_PROVIDER_DEFAULT = 0; //使用默认的Windows 2000/NT NTLM验证方public static bool CheckADAccount(string account, string password)
{IntPtr tokenHandle = new IntPtr(0);tokenHandle = IntPtr.Zero;string domainName = "dpbg";if (LogonUser(account, domainName, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref tokenHandle))return true;return false;
}

注意使用该动态库可能会导致 服务Local Security Authority Process 内存异常升高且无法回收现象

二、使用 System.DirectoryServices

/// <summary>
/// 验证网域账号
/// </summary>
/// <param name="account">账号</param>
/// <param name="password">密码</param>
/// <param name="domain">网域</param>
/// <param name="name">姓名</param>
/// <returns></returns>
public static bool CheckADAccountNew(string account, string password, string domain, out string name)
{name = "";using (DirectoryEntry deUser = new DirectoryEntry(@"LDAP://" + domain, account, password)){DirectorySearcher src = new DirectorySearcher(deUser);src.Filter = "(&(&(objectCategory=person)(objectClass=user))(sAMAccountName=" + account + "))";src.PropertiesToLoad.Add("cn");src.SearchRoot = deUser;src.SearchScope = SearchScope.Subtree;try{SearchResult result = src.FindOne();if (result != null)//验证成功{if (result.Properties["cn"] != null)//依据实际属性获取用户信息{name = result.Properties["cn"][0].ToString();}return true;}return false;}catch{return false;}}
}

注意如果域内账号较多时,验证不存在的账号速度较慢且不会验证密码的有效期

三、使用System.DirectoryServices.AccountManagement

/// <summary>
/// 验证网域账号
/// </summary>
/// <param name="account">账号</param>
/// <param name="password">密码</param>
/// <param name="domain">网域</param>
/// <param name="name">姓名</param>
/// <returns></returns>
public static bool CheckADAccountNew(string account, string password, string domain, out string name)
{name = "";using (var domainContext = new PrincipalContext(ContextType.Domain, domain)){using (var foundUser = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, account)){if (foundUser == null){return false;}name = foundUser.Name;if (domainContext.ValidateCredentials(account, password)){return true;}else{return false;}}}
}

注意该方法不会验证密码的有效期


http://www.ppmy.cn/news/924587.html

相关文章

内网域渗透总结(红日靶场一)

一、靶场环境搭建 红日靶场&#xff1a;http://vulnstack.qiyuanxuetang.net/vuln/detail/2/靶机通用密码&#xff1a;hongrisec2019win7win2003win2008 这个搭建靶场的过程是我经过实际操作&#xff08;踩坑&#xff09;总结的最简单省事的方式。 首先创建一个仅主机模式的…

VMware构建内网域环境

VMware构建内网域环境 环境准备&#xff1a; 镜像下载 Windows Server 2019: 192.168.138.128Windows 10: 192.168.138.130VMware Workstation 16 Pro VMnet3 仅主机模式 搭建域环境 Windows Server 2019域控服务器&#xff08;192.168.138.128&#xff09; 1、设置服务器…

linux添加大网域,Ubuntu 10.10 Desktop 加入Windows网域

前言&#xff1a; 为了实现了Linux用户的集中的管理&#xff0c;如果在生产环境中已经实现了Windows的域管理&#xff0c;那么能不能把Ubuntu 桌面操作系统加入到现存的域中实现用户的集中的管理呢&#xff0c;现发现利用likewise-open这个软件包很简单的就能把Ubuntu 10.10 D…

内网域渗透分析工具BloodHound

前言 当渗透进入内网后&#xff0c;利用BloodHound对庞大内网域环境进行自动化信息搜集并整理分析数据&#xff0c;提高渗透效率。 0x01 BloodHound 介绍 BloodHound是一款可视化图形分析域环境中的关系的工具&#xff0c;以用图与线的形式&#xff0c;将域内用户、计算机、…

从外网打点到渗透内网域控 NASA

文章目录 从外网打点到渗透内网域控 NASA前言任务说明靶场拓扑环境搭建 外网打点端口扫描使用 masscan 扫描全部端口使用 nmap 扫描全部端口 目录扫描后台测试社工生成字典 代码审计密码找回 sql 注入手机版 支付存在 sql注入任意文件删除漏洞任意文件上传配合重装漏洞 getshel…

渗透实战:内网域渗透

前言 本文记录了一次针对具有二层内网的域环境进行渗透测试的过程&#xff0c;文中涉及了内网域渗透的基本方法、思路和技巧。交替使用了msf、CobaltStrike、frp、chisel、SharpSQLTools等工具&#xff0c;最后通过约束委派拿下了域控。其间运用了很多小工具&#xff0c;文章较…

内网域环境搭建教程

搭建环境 win2012(DC)&#xff1a;10.10.10.161 win2008 &#xff1a; 10.10.10.160 win7 &#xff1a; 10.10.10.157 环境配置 WIN2012域控机配置 将域控机配置成静态IP 更改计算机名 方便之后识别 安装域控制器和DNS服务 重启——安装 升级配置为域控制器 配置根域名为…

jumpserver网域功能使用

注&#xff1a;域名功能介绍&#xff1a;网域功能是为了解决部分环境&#xff08;如&#xff1a;混合云&#xff09;无法直接连接而新增的功能&#xff0c;原理是通过网关服务器进行跳转登录。JMS > 网域网关 > 目标资产 本次使用的服务器两台&#xff0c;一台当作对外开…