大家好,欢迎来到IT知识分享网。
前言
这又是一个关于域内基础概念与原理的系列,本系列将包含以下几篇文章:
《内网渗透测试:内网环境与活动目录基础概念》
《内网渗透测试:活动目录 Active Directory 的查询》
《内网渗透测试:域用户组及域内权限划分》
《内网渗透测试:OU 组织单位》
《内网渗透测试:域用户和机器用户》
《内网渗透测试:域内权限访问控制》
《内网渗透测试:Windows 令牌窃取》
《内网渗透测试:Windows 组策略讲解》
《内网渗透测试:Windows 组策略后门》
域用户
大家都知道域用户是什么,就是域环境中的用户。和本地用户的帐户不同,域用户帐户保存在活动目录中。由于所有的用户帐户都集中保存在活动目录中,所以使得集中管理变成可能。
我们知道,在工作组环境中,所有计算机是独立的,要让用户能够登录到计算机并使用计算机的资源,必须为每个用户建立本地用户帐户。而在域环境中,一个域用户可以在域中的任何一台计算机上登录,域用户可以不再使用固定的计算机。当计算机出现故障时,域用户可以登录到另一台计算机上继续工作,这样也使帐号的管理变得简单。
域用户的部分属性
在下图创建用户时可以看到用户有很多属性,如姓、名、展示名等:
这些属性都可以在 Active Directory 里面都可以查到:
姓对应的属性为sn:
Adfind.exe -b "CN=JakeWilliam,CN=Users,DC=whoamianony,DC=org" sn # 将该用户设为 BaseDN 进行查询
名对应的属性为givenName:
Adfind.exe -b "CN=JakeWilliam,CN=Users,DC=whoamianony,DC=org" givenName
展示名(姓名)对应的属性为displayName:
Adfind.exe -b "CN=JakeWilliam,CN=Users,DC=whoamianony,DC=org" displayName
值得注意的是,这个displayName虽然跟域用户名往往一样,但是不能用于登陆。
用户创建时间对应的属性为whenCreated:
Adfind.exe -b "CN=JakeWilliam,CN=Users,DC=whoamianony,DC=org" whenCreated
用户设置密码的时间对应的属性为pwdLastSet
Adfind.exe -b "CN=JakeWilliam,CN=Users,DC=whoamianony,DC=org" pwdLastSet
用户上次登录时间对应的属性为Lastlogon:
Adfind.exe -b "CN=JakeWilliam,CN=Users,DC=whoamianony,DC=org" Lastlogon
域用户的 userAccountControl 属性
userAccountControl 属性记录了域用户账号的很多属性信息,该字段就是一个的位字段,其是由一个个位构成的:
| Property flag | Value in hexadecimal | Value in decimal |
|---|---|---|
| SCRIPT | 0x0001 | 1 |
| ACCOUNTDISABLE | 0x0002 | 2 |
| HOMEDIR_REQUIRED | 0x0008 | 8 |
| LOCKOUT | 0x0010 | 16 |
| PASSWD_NOTREQD | 0x0020 | 32 |
| PASSWD_CANT_CHANGE | 0x0040 | 64 |
| ENCRYPTED_TEXT_PWD_ALLOWED | 0x0080 | 128 |
| TEMP_DUPLICATE_ACCOUNT | 0x0100 | 256 |
| NORMAL_ACCOUNT | 0x0200 | 512 |
| INTERDOMAIN_TRUST_ACCOUNT | 0x0800 | 2048 |
| WORKSTATION_TRUST_ACCOUNT | 0x1000 | 4096 |
| SERVER_TRUST_ACCOUNT | 0x2000 | 8192 |
| DONT_EXPIRE_PASSWORD | 0x10000 | 65536 |
| MNS_LOGON_ACCOUNT | 0x20000 | |
| SMARTCARD_REQUIRED | 0x40000 | |
| TRUSTED_FOR_DELEGATION | 0x80000 | |
| NOT_DELEGATED | 0x | |
| USE_DES_KEY_ONLY | 0x | |
| DONT_REQ_PREAUTH | 0x | |
| PASSWORD_EXPIRED | 0x | |
| TRUSTED_TO_AUTH_FOR_DELEGATION | 0x |
根据每一位的名称便可以猜出这些位的含义了。比如,我们想查询所有设置了密码永不过期的用户:
Adfind.exe -b dc=whoamianony,dc=org -f "(userAccountControl:AND:=65536)" -bit -dn # DONT_EXPIRE_PASSWORD 0x10000 65536
查询所有设置了约束委派的用户:
Adfind.exe -b dc=whoamianony,dc=org -f "(userAccountControl:AND:=)" -bit -dn # TRUSTED_FOR_DELEGATION 0x80000
查询域用户
当我们拥有一个域用户的权限时,可以枚举域内的所有用户,此时主要有两个方法。
通过 SAMR 协议查询
net user /domain
通过 Active Directory 查询
Adfind.exe -b dc=whoamianony,dc=org -f "(&(objectCategory=person)(objectClass=user))" -dn
机器用户
即机器账号、计算机账号,所有加入域的主机都会有一个机器用户,用户名为机器名加$,如:WIN7$、WINXP$。在域环境中,普通域用户最多可以创建
10 个计算机账户,但是本地账号不能创建计算机账户。
默认情况下,加入域的机器默认在CN=Computers这个容器里面:
而域内的域控则都在 Domain Controllers 这个容器下。
机器用户跟 SYSTEM 用户的关系
其实本地用户 SYSTEM 就对应于域内的机器用户,在域内的用户名就是机器名加$,比如 WIN7,他的机器名是
WIN7,那么他在域内登录的用户名就是WIN7$。
查找域内所有的机器
我们可以通过objectclass=Computer或者objectcategory=Computer过滤语法在 Active Directory
中查找域内的所有机器
Adfind.exe -b dc=whoamianony,dc=org -f "(objectclass=Computer)" -dn Adfind.exe -b dc=whoamianony,dc=org -f "(objectcategory=Computer)" -dn
Adfind 工具对查询域内机器提供了一些快捷方式:
-sc computers_disabled # 查询已禁用的计算机 -sc computers_pwdnotreqd # 查询不需要设置密码的计算机 -sc computers_active # 查询已启用且最后输入密码的计算机 -sc computers_inactive # 查询已被禁用或密码最后设置的计算机 Adfind.exe -b dc=whoamianony,dc=org -sc computers_pwdnotreqd -dn
Adfind.exe -b "OU=Domain Controllers,DC=whoamianony,DC=org" -f "(objectclass=Computer)" -dn Adfind.exe -b "OU=Domain Controllers,DC=whoamianony,DC=org" -f "(objectcategory=Computer)" -dn
查询域用户与域成员机器的对应关系
如下图可以可以看到域成员机器本地组策略中的 “允许在本地登陆” 属性中包含了本地的 Users 组:
如下图可以看到域成员机器本地的 Users 组中包含了域全局组 Domain Users :
因此域用户默认是可以在域中的任何一台计算机上登录的。
但是这样可能会存在一些安全隐患,所以域管理员为了安全起见,通常会限制域用户只能登陆指定的计算机,或限制某台计算机只允许指定的用户登录。具体操作有以下两种。
对域用户做限制,设置域用户只能登陆指定的计算机
如上图,设置该域用户只允许登录到 Client-PC 这台机器。
对机器做限制,限制某台计算机只允许指定的用户登录
这个可以通过下发组策略实现:
也可以直接在 “允许本地登陆” 中添加想要登陆的组和域成员名。
查询指定域用户能够登录的主机
域用户默认能本地登录域内的任何一台主机,但域管理员为了安全起见,通常会限制域用户只能登陆指定的计算机。在内网信息收集中,我们需要找到指定域用户能够登录的主机。
Adfind.exe -b dc=whoamianony,dc=org -sc u:whoami userWorkstations
还可以通过 PowerView 脚本查看:
Import-Module .\powerview.ps1 Get-NetUser -Domain whoami.whoamianony.org
查询指定主机上正在登陆的域用户
在收集内网信息时,我们经常会查询指定主机上正在登陆的域用户。这一查询我们可以直接通过现有的工具实现,但首先我们要先看两个 Win32 API。
NetSessionEnum是一个 Win32 API,用来提供有关在服务器上建立的会话的信息。
NET_API_STATUS NET_API_FUNCTION NetSessionEnum( LMSTR servername, LMSTR UncClientName, LMSTR username, DWORD level, LPBYTE *bufptr, DWORD prefmaxlen, LPDWORD entriesread, LPDWORD totalentries, LPDWORD resume_handle );
可以看到这个 API 的第一个参数是servername,我们可以通过servername指定一个远程的主机,然后这个 API 会去调用远程主机的
RPC,然后返回其他用户在访问这台远程主机的网络资源(例如文件共享)时所创建的网络会话,从而可以看到这个用户来自何处。
我们利用NetWkstaUserEnum这个 API 来列出当前登录到这台远程主机机器的所有用户的信息
NET_API_STATUS NET_API_FUNCTION NetWkstaUserEnum( LMSTR servername, DWORD level, LPBYTE *bufptr, DWORD prefmaxlen, LPDWORD entriesread, LPDWORD totalentries, LPDWORD resumehandle );
这个 API 的第一个参数也是servername可以指定一个远程主机,然后会去调用这台远程主机的
RPC,然后返回当前登录到这台远程主机的所有用户的信息。值得注意的是,调用该函数的用户需要具备机器A的本地管理员权限。但是该 API
需要在远程主机上有管理员权限。
目前有很多工具可以用来枚举域内某台主机上正在登陆的域用户,下面就简单介绍几个十分经典的工具,其本质还是调用了这两个 API 。
psloggedon.exe
psloggedon.exe [-] [-l] [-x] [\\computername或username]
如下所示,查询域控制器 DC 上正在登陆的用户:
psloggedon.exe \\DC
PVEFindADUser.exe
PVEFindADUser.exe <参数>
我们一般直接运行以下命令,即可显示域中所有计算机上当前登陆的所有用户:
PVEFindADUser.exe -current
也可以通过-target指定查询的主机:
PVEFindADUser.exe -current -target DC.whoamianony.org
查询域用户正在登录的主机
查询域用户正在登录的主机可以定位域用户,比如我们在内网渗透中,常常会使用各种工具来获取当前域管理员在线登录的机器,入侵此机器,然后迁移到域管理登陆所在的进程,便拥有了域管理的权限。定位域用户正在登录的主机有两种常规方法,一是日志,二是会话。
我们主要来讲第二种会话的方式,可以通过以下工具实现。
psloggedon.exe
在网络中查找域管理员用户 Administrator 当前在线登录的用户:
psloggedon.exe whoamianony\administrator
PVEFindADUser.exe
直接一把梭:
PVEFindADUser.exe -current
PowerView.ps1
如下,可以看到本地域有两个域管理员:
下面,我们通过 Invoke-UserHunter 来定位他们:
Import-Module .\powerview.ps1 Invoke-UserHunter
也可以查找指定用户当前在线登录的主机:
Invoke-UserHunter -UserName whoami
Ending…
参考
https://www.anquanke.com/post/id/#h2-4
内网渗透测试:域用户和机器用户
https://www.freebuf.com/articles/network/243640.html
户当前在线登录的主机:
Invoke-UserHunter -UserName whoami
Ending…
[外链图片转存中…(img-SjkLubxk-29)]
参考
https://www.anquanke.com/post/id/#h2-4
内网渗透测试:域用户和机器用户
https://www.freebuf.com/articles/network/243640.html
学习网络安全技术的方法无非三种:
第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。
第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
第三种就是去找培训。
接下来,我会教你零基础入门快速入门上手网络安全。
网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。但是对于完全零基础的人来说又或者急于转行的人来说,学习编程或者计算机基础对他们来说都有一定的难度,并且花费时间太长。
第一阶段:基础准备 4周~6周
第二阶段:web渗透
学习基础 时间:1周 ~ 2周:
配置渗透环境 时间:3周 ~ 4周:
渗透实战操作 时间:约6周:
第三阶段:进阶
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120985.html






























