如何在Windows AD域中驻留ACL后门
前言
当拿下域控权限时,为了维持权限,常常需要驻留一些后门,从而达到长期控制的目的。Windows AD域后门五花八门,除了常规的的添加隐藏用户、启动项、计划任务、抓取登录时的密码,还有一些基于ACL
的后门。
ACL介绍
ACL是一个访问控制列表,是整个访问控制模型(ACM)的实现的总称。常说的ACL主要分为两类,分别为特定对象安全描述符的自由访问控制列表 (DACL) 和系统访问控制列表 (SACL)。对象的 DACL 和 SACL 都是访问控制条目 (ACE) 的集合,ACE控制着对象指定允许、拒绝或审计的访问权限,其中Deny拒绝优先于Allow允许。
安全描述符包含与安全对象关联的安全信息。安全描述符由 SECURITY_DESCRIPTOR 结构和关联的安全信息组成。安全描述符可以包含以下安全信息::
-
• 对象所有者和主组的安全标识符 (SID) 。
-
• 指定允许或拒绝特定用户或组的访问权限的 DACL 。
-
• 一个 SACL ,指定为对象生成审核记录的访问尝试的类型。
-
• 一组控制位,用于限定安全描述符或其单个成员的含义。
隐藏安全描述符
当可控一个用户时,不想该用户被轻易发现,可以对其进行隐藏。首先查看该用户所用者,默认是域管组:
3a2d9490-6b84-48d6-a1f9-e02ad933161b
可以在GUI上对所有者进行修改,也可以使用powerview
进行修改:
Set-DomainObjectOwner -identity jumbo -OwnerIdentity jumbo
修改完成后:
a7f0c51c-abca-4b0b-b288-2218e633e8da
因为是权限维持,所以当前权限是域管,先尝试给域管添加一个对jumbo
用户Deny
所有权限的ACL,但是发现powerview
的Add-DomainObjectAcl
方法并没有设置Deny
权限的操作,只有Allow
:
image-20221203165731119
当然,你可以使用New-ADObjectAccessControlEntry
来完成手动ACL的添加,他的原理如下图:
image-20221203165922392
上图看出还要手动做最后的ACL保存。既然Add-DomainObjectAcl
已经完成了自动化的CommitChanges
,直接把Allow
默认可变的参数不就行了?首先手动在Add-DomainObjectAcl
添加一个AccessControlType
参数:
.PARAMETER AccessControlTypeSpecifies the type of ACE (allow or deny)
image-20221203170302148
设置参数定义:
[Parameter(Mandatory = $True, ParameterSetName='AccessRuleType')]
[ValidateSet('Allow', 'Deny')]
[String[]]
$AccessControlType,
image-20221203170313999
删除之前的默认的Allow
:
image-20221203170641601
最后把AccessControlType
参数替换之前的ControlType
:
image-20221203170738348
现在就可以在使用AccessControlType
参数来给对象添加Allow
或者Deny
的权限了。
当尝试域管添加一个对jumbo
用户Deny
所有权限的ACL后:
Add-DomainObjectAcl -TargetIdentity jumbo -PrincipalIdentity S-1-5-21-12312321-1231312-123123-500 -AccessControlType Deny
871e59ae-a6bb-4e4a-83c9-bd01800bba33
当然,把SID
改成SamAccountName
也是可以的:
Add-DomainObjectAcl -TargetIdentity jumbo -PrincipalIdentity administrator -AccessControlType Deny
可以发现域管也没权限查看jumbo
用户的属性了:
WKtY1zjGss
J3Qsrfsyl0
当使用system
用户查看jumbo
用户ACL时,可以看到对应的Deny
的ACL:
cccac477-019c-4600-8678-124461d8fb96
现在域管对jumbo
用户已经无法操作任何东西了,先用system
用户删除该Deny
权限,准备使用powerview
的Remove-DomainObjectAcl
方法时,发现也只有的Allow
,也就是默认只能移除对象的Allow
权限,老方法,把删除的ACL属性设置为可变参数:
image-20221203171520243
image-20221203171530075
image-20221203171559987
image-20221203171546945
进行删除:
Remove-DomainObjectAcl -TargetIdentity jumbo -PrincipalIdentity S-1-5-21-12312321-1231312-123123-500 -Rights ALL -AccessControlType Deny
当然,把SID
改成SamAccountName
也是可以的:
Remove-DomainObjectAcl -TargetIdentity jumbo -PrincipalIdentity administrator -Rights ALL -AccessControlType Deny
67ee14b5-46a7-44a7-81ea-57eaed22c0b5
那么同学们可能会想,如果真的有人进行了上面操作,真的没办法查看了吗,实际上并不是,对象的拥有者是有权限修改的,比如把jumbo
用户的拥有者改成默认的域管组,然后对域管进行设置Deny
的ACL,但是实际上拥有者依然有权限修改其ACL,这也是为什么在文章开始的时候,要把jumbo
拥有者设置为jumbo
的目的:
image-20221203172330615
上面尝试了拒绝域管对jumbo
所有的权限,那为了隐藏,并且为了防止后续还要对jumbo
用户的一些其他修改,实际上可以对jumbo
用户设置everyone
拒绝读取的权限即可:
8f23c0b4-e7e9-4f55-9c30-8abbc2a86f09
现在所有用户对其都没有查看权限了:
WKtY1zjGss
当然,只是设置了拒绝读取权限,实际上当域管去修改其ACL权限时,还是可以的:
image-20221203173141621
现在通过net user
命令已经看不到jumbo
这个用户了:
image-20221203173434064
在“用户和计算机”里看用户长这样:
image-20221203173508632
从上面的操作可以发现,给everyone
用户添加拒绝读取权限时是通过GUI实现的,因为everyone
用户是个特殊的用户,属于特殊身份群体,是一个属于Well-known SIDs的用户,其对应的SID为S-1-1-0
:
image-20221203194510264
当尝试使用powerview
的Add-DomainObjectAcl
方法是无法完成给everyone
用户添加ACL的:
07fc0328-3a8b-46b7-b245-b0449ef29533
通过查看powerview
的代码,会通过Get-ObjectAcl
方法获取对应用户的SID,但是刚刚提到,everyone
用户是个特殊的用户,导致查不到:
image-20221203194829686
但是看了下还有个New-ADObjectAccessControlEntry
方法,会判断输入的PrincipalIdentity
参数是不是SID
,如果是SID
就不走查询,因此可以照葫芦画瓢,把这个判断加到Add-DomainObjectAcl
方法中:
if ($PrincipalIdentity -notmatch '^S-1-.*') {$PrincipalSearcherArguments = @{'Identity' = $PrincipalIdentity'Properties' = 'distinguishedname,objectsid'}if ($PSBoundParameters['PrincipalDomain']) { $PrincipalSearcherArguments['Domain'] = $PrincipalDomain }if ($PSBoundParameters['Server']) { $PrincipalSearcherArguments['Server'] = $Server }if ($PSBoundParameters['SearchScope']) { $PrincipalSearcherArguments['SearchScope'] = $SearchScope }if ($PSBoundParameters['ResultPageSize']) { $PrincipalSearcherArguments['ResultPageSize'] = $ResultPageSize }if ($PSBoundParameters['ServerTimeLimit']) { $PrincipalSearcherArguments['ServerTimeLimit'] = $ServerTimeLimit }if ($PSBoundParameters['Tombstone']) { $PrincipalSearcherArguments['Tombstone'] = $Tombstone }if ($PSBoundParameters['Credential']) { $PrincipalSearcherArguments['Credential'] = $Credential }$Principal = Get-DomainObject @PrincipalSearcherArgumentsif (-not $Principal) {throw "Unable to resolve principal: $PrincipalIdentity"}elseif($Principal.Count -gt 1) {throw "PrincipalIdentity matches multiple AD objects, but only one is allowed"}$ObjectSid = $Principal.objectsidWrite-Host ($ObjectSid)}else {Write-Host "..sid.."$ObjectSid = $PrincipalIdentity}
$Identity = [System.Security.Principal.IdentityReference] ([System.Security.Principal.SecurityIdentifier]$ObjectSid)
现在尝试下,给jumbo2
用户添加everyone
所有拒绝的ACL:
Add-DomainObjectAcl -TargetIdentity jumbo2 -PrincipalIdentity S-1-1-0 -Rights All -AccessControlType Deny
image-20221203223418355
image-20221203223515329
Remove-DomainObjectAcl
方法同理。
隐藏主体
通过上面的步骤,除了jumbo
用户本身可以查看jumbo
用户以为,其他用户都没有ReadControl
权限,但是在“Active Directory用户和计算机管理”里还是可以看到,虽然ico
图标都没了,接下来要让在“Active Directory用户和计算机管理”里也看不到。为了方便演示,笔者把jumbo
用户移到一个单独的OU
组里:
image-20221203174836127
然后给这个OU
设置everyone
拒绝读取权限即可:
image-20221203174920757
image-20221203174956407
遇到一些粗心大意的管理员,可能会觉得这只是无意残留的无害物质,无伤大雅。
Dcsync
Dcsync
实际上就是给用户设置两条扩展权限,分别为:
DS-Replication-Get-Changes (GUID: 1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)
DS-Replication-Get-Changes-All (GUID: 1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
当用户拥有这两条ACL后,即可使用DRS
协议获取域hash
凭据。给用户在域对象上添加Dcsync
权限即可:
image-20221203180529979
代理账号
上面提到,把jumbo
用户拥有者改成自身,然后设置everyone
对其没有读取权限,这样就可以达到隐藏jumbo
,然后手上的jumbo
用户就可以肆无忌惮的做一些操作。但是有个问题,万一做操作的时候,该用户被发现了,管理员把该用户进行了禁用,那好不容易获取到的账号就废了。为了防止账号被发现后被禁用/被改密码不可用,应该设置个代理账号,把准备拿来攻击的账号(某个管理员用户或者有dcsync
类似权限的账号)的拥有者设置代理账号,代理账号是其拥有所有者,然后设置所有用户对攻击账号都不可操作,最后每次都可以使用代理账号控制攻击账号,就算攻击账号被禁用/被改密码,也可以使用代理账号来重新启用他。
首先攻击账号为attack
,代理账号为good
,首先设置attack
账号所有者为good
:
Set-DomainObjectOwner -identity attack -OwnerIdentity good
image-20221203225649767
给attack
账号添加dcsync
权限:
Add-DomainObjectAcl -TargetIdentity "DC=domain,DC=com" -PrincipalIdentity attack -Rights DCSync -AccessControlType Allow
image-20221203230454614
设置attack
都不可操作:
Add-DomainObjectAcl -TargetIdentity attack -PrincipalIdentity S-1-1-0 -Rights All -AccessControlType Deny
这个时候,如果attack
在发起攻击的时候被管理员发现了,把attack
账号密码重置了,但是good
账号是attack
账号的拥有者,可以修改attack
账号的ACL
,比如给自己添加修改密码的权限,然后去重置attack
账号的密码,然后就又可以拿来攻击了。
总结
本文主要讲了在Windows
域中如何利用ACL
进行后门隐藏,并对powerview
进行修改使其支持在添加ACL
或者删除ACL
时可以指定Allow
或者Deny
,也可以选择everyone
此类特殊用户。
相关文章:
如何在Windows AD域中驻留ACL后门
前言 当拿下域控权限时,为了维持权限,常常需要驻留一些后门,从而达到长期控制的目的。Windows AD域后门五花八门,除了常规的的添加隐藏用户、启动项、计划任务、抓取登录时的密码,还有一些基于ACL的后门。 ACL介绍 …...
LVGL移植——stm32f4
LVGL移植说明 移植LVGL版本:8.3.6 主控:STM32F407ZGT6 github链接:https://github.com/lvgl/lvgl.git 文章目录 LVGL移植说明STM32移植LVGL①需要的依赖文件②移植显示驱动文件③将文件加入工程当中④配置心跳④修改栈堆的空间⑤编译链接 STM…...
ASEMI代理ADP5054ACPZ-R7原装ADI车规级ADP5054ACPZ-R7
编辑:ll ASEMI代理ADP5054ACPZ-R7原装ADI车规级ADP5054ACPZ-R7 型号:ADP5054ACPZ-R7 品牌:ADI/亚德诺 封装:LFCSP-48 批号:2023 引脚数量:48 工作温度:-40C~125C 安装类型:表…...
TCP/IP相关面试题
1. 什么是TCP/IP协议?它的作用是什么? TCP/IP(Transmission Control Protocol/Internet Protocol)互联网中最常用的协议,是计算机网络通信的基础。由TCP协议和IP协议两部分组成。IP协议负责数据的传输和路由选择&#…...
MySQL数据库——MySQL存储过程是什么?
我们前面所学习的 MySQL 语句都是针对一个表或几个表的单条 SQL 语句,但是在数据库的实际操作中,经常会有需要多条 SQL 语句处理多个表才能完成的操作。 例如,为了确认学生能否毕业,需要同时查询学生档案表、成绩表和综合表&…...
消息队列中的事务消息
大家好,我是易安!今天我们谈一谈消息队列中的事务消息这个话题。 一说起事务,你可能自然会联想到数据库。我们日常使用事务的场景,绝大部分都是在操作数据库的时候。像MySQL、Oracle这些主流的关系型数据库,也都提供了…...
03. 路由参数.重定向.视图
学习要点: 1.路由参数 2.路由重定向 3.路由视图 本节课我们来开始进入学习路由的参数设置、重定向和路由的视图。 一.路由参数 1. 上一节课,我们已经学习了部分路由参数的功能,比如动态传递{id}; 2. 那么,有…...
Flowable入门
Flowable初体验 Flowable是什么 Flowable 是一个使用 Java 编写的轻量级业务流程引擎,常用于需要人工审批相关的业务,比如请假、报销、采购等业务。 为什么要使用工作流呢? 对于复杂的业务流程,通过数据库的状态字段难以控制和…...
Scala Option类型,异常处理,IO,高阶函数
Option类型 实际开发中, 在返回一些数据时, 难免会遇到空指针异常(NullPointerException), 遇到一次就处理一次相对来讲还是比较繁琐的. 在Scala中, 我们返回某些数据时,可以返回一个Option类型的对象来封装具体的数据,从而实现有效的避免空指针异常。S…...
unity进阶学习笔记:单例模式
游戏框架: 游戏框架一般包括消息框架,状态机,管理器,工具类。 消息框架指游戏物体之的通信框架,虽然unity引擎自带一套消息框架,但该框架只能用于父子物体之间通信,无法实现大部分非父子关系的…...
软件测试——性能指标
登录功能示例: 并发用户数500; 响应时间2S; TPS到500; CPU不得超过75%; 性能指标有哪些? 响应时间 并发用户数 TPS CPU 内存 磁盘吞吐量 网络吞吐量 移动端FPS 移动端耗电量 APP启动时间 性能…...
leetcode 405. 数字转换为十六进制数
题目描述解题思路执行结果 leetcode 405. 数字转换为十六进制数. 题目描述 数字转换为十六进制数 给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。 注意: 十六进制中所有字母(a-f)都必须是小写。 十六进制…...
部门来了个软件测试,听说是00后,上来一顿操作给我看呆了...
前段时间公司新来了个同事,听说大学是学的广告专业,因为喜欢IT行业就找了个培训班,后来在一家小公司干了三年,现在跳槽来我们公司。来了之后把现有项目的性能优化了一遍,服务器缩减一半,性能反而提升4倍!给…...
使用篇丨链路追踪(Tracing)很简单:链路拓扑
作者:涯海 最近一年,小玉所在的业务部门发起了轰轰烈烈的微服务化运动,大量业务中台应用被拆分成更细粒度的微服务应用。为了迎接即将到来的双十一大促重保活动,小玉的主管让她在一周内梳理出订单中心的全局关键上下游依赖&#…...
2023年厦门等保二级备案办理流程
根据规定,已运营/运行或新建的第二级以上信息系统的企业,事业单位/行政机关/民办非企业单位/社团组织/其他组织必须办理等保备案。 2023年厦门等保二级备案办理流程 办理机构:公安局 办结时限:受理后10个工作日 办理方式:网上…...
提高开发效率,从这些小技巧开始——5个让你爱上IDEA的增加体验小技巧
前言 如果你是一名Java开发人员,那么你一定会使用IntelliJ IDEA这个IDE。IntelliJ IDEA作为目前最受欢迎的Java IDE之一,已经成为了众多Java开发人员必备的工具之一。但是,你是否知道如何利用IDEA中的一些小技巧来提高你的开发效率和体验呢&a…...
Python基础合集 练习22 (错误与异常处理语句2)
‘’’ try: 语句块 except: 语句块2 else ‘’’ class Mobe1(): def init(self) -> None: pass def mob1(self):while True:try:num int(input(请输入一个数: ))result 50 / numprint(result)print(50/{0}{1}.format(num, result))except (ZeroDivisionError, ValueEr…...
ELK -- kibana 用nginx代理后无法访问
背景: 本地搭建好elk后,一切正常,后面改成用nginx代理kibana的5601端口,发现代理后无法正常访问(未代理的地址可正常访问),花了很多时间去查问题,报错基本都是http://ip:port/spaces…...
什么是分布式事务
目录 分布式事务基础 事务 本地事务 分布式事务 分布式事务的场景 分布式事务解决方案 全局事务 优点 缺点 可靠消息服务 第一步 :消息由系统A投递到中间件 超时访问机制 最大努力通知 第一步:消息由系统A投递到中间件 第二步:消息…...
在 Python 中将整数转换为罗马数字
罗马数字使用以下七个符号书写。 Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000这些符号用于表示数以千计的数字。 罗马写20,可以用两个X拼成XX。 但是 XXXX 不…...
HashTable,Properties,TreeSet源码分析
目录 HashTable基本介绍 Hashtable和HashMap对比 Properties Properties基本介绍 应该如何选择集合 TreeSet源码分析 HashTable基本介绍 1)存放的元素是键值对:即K-V 2)hashtable的键和值都不能为null,否则会抛出NullPointerException 3)hashTab…...
多维图像去噪方法研究
一、背景介绍 由于传感器技术的快速发展,高光谱(HS)遥感(RS)成像为飞机等数据采集设备远距离观测和分析地球表面提供了大量的空间和光谱信息,航天器和卫星。 HS RS 技术的最新进展甚至革命为实现各种应用的…...
托福口语考察内容和形式
首先我们来简单介绍一下托福口语考试的构成和task1的任务形式。 目录 TOEFL Speaking Test Format Independent Task 1 Task 1 Test Format Task 1 Testing Interface(考试界面) Task 1 Question Type...
【地铁上的设计模式】--结构型模式:代理模式
什么是代理模式 代理模式是一种结构型设计模式,通过代理对象控制对原始对象的访问。代理对象充当客户端和实际对象之间的中介,隐藏了实际对象的复杂性,并提供了一些额外的控制。 在软件系统中,代理模式可以有多种应用。例如&…...
Oracle 体系结构
文章目录 Oracle体系结构Oracle的内存结构Oracle的进程结构服务器进程后台进程可选后台进程 物理存储结构逻辑存储结构 概念: Oracle server由Oracle instance和Oracle database组成,Oracle instance由后台进程和共享内存组成,Oracle的实例包…...
java手写日历系统(亲测)
package com.test.test02;import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Scanner;public class Test08 {//这是一个main方法,是程序的入口public static void main(String[] args) {//录入日期的StringScanner sc new Scanner…...
35-40的技术人员为什么会被“不友好”,请你们自身反思-拒做职场的“嗯嗯”怪
35-40真的是IT人员的一道坎吗? IT技术做不到35-40,可是我身边有大量35-40事业发达、职业发展更好的朋友。同时,我身边也有大量35-40被“毕业”的人更多。 本人经过7年来先后带队过3个大型研发团队,最少的也有60-70号人。最多的达到…...
工地烟火AI监控识别分析系统 yolov7
工地烟火AI监控识别分析系统通过yolov7网络模型技术,工地烟火AI监控识别分析系统对工地或者厂区现场监控区域内的烟火进行实时分析报警。YOLOv7 的发展方向与当前主流的实时目标检测器不同,研究团队希望它能够同时支持移动 GPU 和从边缘到云端的 GPU 设备…...
MATLAB算法实战应用案例精讲-【人工智能】对比学习(概念篇)(补充篇)
目录 前言 几个高频面试题目 基于对比学习(ContrastiveLearning)的文本表示模型【为什么】能学到文本【相似】度? 为什么对比学习能学到很好的语义相似度? 那么如何评价这个表示空间的质量呢? 知识储备 监督学习和非监督学习 算法原理…...
代码随想录算法训练营第三十一天 | 贪心1,想不到怎么找局部最优就做不出来
贪心算法理论基础 代码随想录 (programmercarl.com) 贪心算法理论基础!_哔哩哔哩_bilibili 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额ÿ…...
网站建设的销售怎么做/重庆网络seo公司
https://www.tiolive.com/nexedi/web_site_module/erp5_community/javascript-JQuery.SPA转载于:https://www.cnblogs.com/nbalive2001/archive/2013/03/13/2957702.html...
做招生网站/关键词挖掘工具爱站网
遇到个奇怪的问题,同时开启本地和远程两个事务,远程事务是sql2000没问题,是sql2008的不报错,但是写不上数据。 倒腾了4、5天,找到最终的解决办法:直接调用AdoConnection.execute(sq脚本),看来Ad…...
律师资格证报考条件/洛阳seo网络推广
关键字描述:支持 首页 文章 更新 自动 DedeCMS 模块 安装DedeCMS V5.3的使用方法很简单~~~直接用后台的模块安装就可以了。坚决贯彻实施官方的插件模块化,一键安装的理念。当然。模板自己去修改。因为没个站的模板都不同的嘛。呵呵20081230 修改部分提示…...
做装饰画的行业网站/深圳推广公司有哪些
在一万英尺的天空一跃而下感受肾上腺素飙升带来的快感嗯没错,就是这种感觉如果跳伞是你人生TO DO LIST中的一个空白项,那就不要再犹豫了,将这项空白填充起来,就能够发现,在天空中的这段时间,将会是自己未来…...
网站模板下载模板下载安装/什么是网络营销渠道
在myeclipse中deploy:选择了一个工程,添加一个新的deploy工程时,不能正常出现deploy Location,可能的原因是没有在mymatadata中添加context-root"/",另外webrootdir属性也要设置正确。一个常见的配置如下&am…...
wordpress扁平化主题/成都seo的方法
——阶段 动态规划问题通常都具有时间或空间上的次序性,因此求解这类问题时,首先要将问题按一定的次序划分成若干相互联系的阶段,以便能按一定次序去求解。如例1,可以按空间次序划分为A—B—C—D—E 4个阶段,而例2&…...