Windows 访问控制模型(二)

#ACL 编辑

#文件与目录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#icacls
#查看指定文件或目录的ACL
icacls C:\Windows\SYSVOL\sysvol\rootkit.org

#添加用户test1对指定目录(包括当前目录及其子目录中的文件)的完全访问权限
icacls C:\Windows\SYSVOL\sysvol\rootkit.org /grant test1:(OI)(CI)(F) /t

#移除用户test1对指定文件的访问权限
icacls C:\Windows\SYSVOL\sysvol\rootkit.org /remove test1 /t

#备份指定文件(包括当前目录及其子目录中的文件)的ACL,备份结果格式是D:(A;;FA;;;SY)(A;;FA;;;BA)(A;;FA;;;S-1-5-21-649686750-1085018105-1475906644-1000)
icacls C:\Windows\SYSVOL\sysvol\rootkit.org /save Aclfile /t

#还原指定文件(包括当前目录及其子目录中的文件)的ACL,还原时,路径需要设置为上级目录。
icacls C:\Windows\SYSVOL\sysvol\ /restore AclFile /t

#powershell
Get-Acl -Path 'C:\Users\Administrator\Desktop\1.txt'| Format-Table -wrap

#注册表

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#查看指定路径的ACL
Get-Acl -Path 'HKLM:\SAM'| Format-Table -wrap

#获得Access项的具体内容
$acl = Get-Acl -Path 'HKLM:\SAM'
$acl.Access

#添加用户test对指定路径(包括当前注册表项及其子健)的完全访问权限
$acl = Get-Acl HKLM:\SAM
$rule = New-Object System.Security.AccessControl.RegistryAccessRule("test","FullControl","ObjectInherit,ContainerInherit","None","Allow")
$acl.AddAccessRule($rule)
Set-Acl HKLM:\SAM $acl

#移除用户test对指定路径(包括当前注册表项及其子健)的完全访问权限
$acl = Get-Acl HKLM:\SAM
$rule = New-Object System.Security.AccessControl.RegistryAccessRule("test","FullControl","ObjectInherit,ContainerInherit","None","Allow")
$acl.RemoveAccessRule($rule)
Set-Acl HKLM:\SAM $acl

#域内 ACL 编辑

域内每个对象的nTSecurityDescriptor属性存储该对象的ACL信息,存储格式是SDDL(Security Descriptor Definition Language))。如果在创建对象的时候没指定ACL,就用此对象类的defaultSecurityDescriptor属性值作为该对象的ACL。

  • 查看域内对象的ACL(普通域用户用AdFind.exe查询nTSecurityDescriptor结果为空,但LDAP 是能查到的)AdFind Usage

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    #查看原始SDDL格式
    AdFind.exe -b "CN=Administrator,CN=Users,DC=rootkit,DC=org" NTSecurityDescriptor -rawsddl
    #SDDL格式不方便查看,-sddl+++ 最高三个+
    AdFind.exe -b "CN=Administrator,CN=Users,DC=rootkit,DC=org" NTSecurityDescriptor -sddl+++
    #查看指定用户对该对象的权限
    AdFind.exe -b "CN=Administrator,CN=Users,DC=rootkit,DC=org" NTSecurityDescriptor -sddl+++ -sddlfilter ;;;;;Administrator -recmute
    #查找指定用户在域内的所有ACL权限
    AdFind.exe -b "DC=rootkit,DC=org" NTSecurityDescriptor -sddl+++ -sddlfilter ;;;;;jerry -recmute
    
    #查看域内对象的扩展权限
    #根据GUID查扩展权限
    adfind -b "CN=Extended-Rights,CN=Configuration,DC=rootkit,DC=org" -f "rightsGuid=00299570-246d-11d0-a768-00aa006e0529" name
    #查找有dcync权限的用户
    AdFind.exe -b "DC=rootkit,DC=org" NTSecurityDescriptor -sddl+++ -sddlfilter ;;;Replicating Directory Changes;; -recmute
    
  • 修改域内对象的ACL AdMod Usage

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    #添加jerry对Domain Admins组的member属性有读写权限
    admod -b "CN=Domain Admins,CN=Users,DC=rootkit,DC=org" SD##ntsecuritydescriptor::{GETSD}{+D=(OA;;RPWP;member;;jerry)}
    #使用jerry用户添加test用户到Domain Admins组
    adfind -users -rb CN=test -dsq|admod -users -rb CN="Domain Admins" -stdinadd member
    
    #添加jerry对administrator用户有User-Force-Change-Password扩展权限
    #使用-sd 替代SD##ntsecuritydescriptor::{GETSD}
    admod -b "CN=Administrator,CN=Users,DC=rootkit,DC=org" -sd {+D=(OA;;CR;00299570-246d-11d0-a768-00aa006e0529;;jerry)}
    #使用jerry用户修改Administrator 密码
    admod -b CN=Administrator,CN=Users,DC=rootkit,DC=org unicodepwd::qweasd.123 -optenc
    

#UserAccountControl 属性

UserAccountControl 属性是 Active Directory 中用户计算机帐户的最重要属性之一。该属性决定了帐户在 AD 域中的状态:帐户是活动的还是被锁定的、是否启用下次登录时更改密码的选项、用户是否可以更改自己的密码、禁止被委派、不需要 Kerberos 预身份验证等等。

Converting AD UserAccountControl Attribute Values

例如设置常规帐户的密码不过期。userAccountControl 值计算方法:

NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) = 66048

UserAccountControl 标志 十六进制值 十进制值
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 131072
SMARTCARD_REQUIRED(要登录网络,用户需要智能卡) 0x40000 262144
TRUSTED_FOR_DELEGATION 0x80000 524288
NOT_DELEGATED 0x100000 1048576
USE_DES_KEY_ONLY 0x200000 2097152
DONT_REQ_PREAUTH(不需要 Kerberos 预身份验证) 0x400000 4194304
PASSWORD_EXPIRED(用户密码已过期) 0x800000 8388608
TRUSTED_TO_AUTH_FOR_DELEGATION 0x1000000 16777216
PARTIAL_SECRETS_ACCOUNT 0x04000000 67108864
加载评论