筑巢之书

notes

本笔记记录windows(ad)相关靶机构筑与安全防护部署等内容,会随我学习逐渐添加

域控基础指令

域用户创建

$Password = "$pass"

New-ADUser -Name "$username" `
           -SamAccountName "$username" `
           -AccountPassword (ConvertTo-SecureString $Password -AsPlainText -Force) `
           -Enabled $true `
           -Path "CN=Users,DC=域名,DC=com" `
           -PasswordNeverExpires $false `
           -ChangePasswordAtLogon $false

# 让用户加入远程管理组
Add-ADGroupMember -Identity "Remote Management Users" -Members "$username"

创建域组并让域用户加入

# 创建域组
New-ADGroup -Name "$group_name" -SamAccountName "$group_name" -GroupScope Global -GroupCategory Security -Path "CN=Users,DC=$domain,DC=com"
# 添加域用户
Add-ADGroupMember -Identity "$group_name" -Members "$username"

密码复杂度调整

# 获取当前域密码策略
Import-Module ActiveDirectory
Get-ADDefaultDomainPasswordPolicy

# 禁用复杂性要求
Set-ADDefaultDomainPasswordPolicy -Identity "$domain" -ComplexityEnabled $false

# 可选:设置最小密码长度为0
Set-ADDefaultDomainPasswordPolicy -Identity "$domain" -MinPasswordLength 0

特殊配置

配置无预认证,需先创建用户

# 获取用户对象
$user = [ADSI]"LDAP://CN=$username,CN=Users,DC=$domain,DC=com"

# 获取当前 userAccountControl 数值
$uac = $user.userAccountControl.Value

# 添加免预认证标志(DONT_REQUIRE_PREAUTH = 4194304)
$user.userAccountControl = $uac -bor 4194304

# 保存修改
$user.SetInfo()

整体环境修改

启用匿名smb

1.开始 → 运行 → gpedit.msc,打开组策略编辑器;
2.依次展开"计算机配置""windows设置""安全设置""本地策略""安全选项",将"网络访问:本地帐户的共享和安全模式"修改为"仅来宾-本地帐户以来宾身份验证"3.将"帐户:来宾状态账户"设置为"已启用"4.设置文件夹"属性""共享""权限"中 添加"Everyone"用户;
5.设置文件夹"属性""安全"中 添加"Everyone"用户。

彻底关闭defender

首先按下win+R组合键打开运行窗口, 输入gpedit.msc,然后点击“确定”即可打开组策略。

打开本地组策略编辑器后如下图所示,依次展开并定位至“计算机配置”→“管理模板”→“Windows组件”→“Windows Defender”→“关闭Windows Defender”,双击打开;

打开设置页面,勾选“已启用”后,点击确定;

在相同路径下,双击“实时保护”;

我们点击选中“实时保护”,然后在窗口右侧找到“关闭实时保护”、“打开行为监视”、“扫描所有下载文件和附件”、“监视计算机上的文件和程序活动”,依次将它们双击打开,按以下进行设置:

“关闭实时保护”设置为“已启用”,点击“确定”,
“打开行为监视”设置“已禁用”,点击“确定”,
“扫描所有下载文件和附件”设置为“已禁用”,点击“确定”,
“监视计算机上的文件和程序活动”设置为“已禁用”,点击“确定”,

防火墙相关

防火墙放行

管理员powershell运行

New-NetFirewallRule -DisplayName "1433" -Direction Inbound -LocalPort 1433 -Protocol TCP -Action Allow

关闭外部端口(允许回环访问)同时放行特殊端口

设防火墙默认行为为阻止

Set-NetFirewallProfile -All -DefaultInboundAction Block

设特殊端口允许放行

New-NetFirewallRule -DisplayName "Allow External TCP 445 for SMB" `
    -Direction Inbound `
    -Protocol TCP `
    -LocalPort 445 `
    -Action Allow `
    -Profile Any `
    -Enabled True -Force

列出所有防火墙放行规则

Get-NetFirewallRule -Direction Inbound -Enabled True | 
    Where-Object { $_.Action -eq "Allow" -or $_.Action -eq "Block" } | 
    Format-Table -Property Name, DisplayName, Action, Enabled, Profile, 
    @{Name='Protocol';Expression={($PSItem | Get-NetFirewallPortFilter).Protocol}}, 
    @{Name='LocalPort';Expression={($PSItem | Get-NetFirewallPortFilter).LocalPort}}, 
    @{Name='RemoteAddress';Expression={($PSItem | Get-NetFirewallAddressFilter).RemoteAddress}}

删除所有规则

# 1. 筛选出所有启用的入站 ALLOW 规则
Get-NetFirewallRule -Direction Inbound -Enabled True | Where-Object { $_.Action -eq "Allow" } | 
    # 2. 将它们全部删除
    Remove-NetFirewallRule -Confirm:$false

开启嵌套虚拟机

1,vm中将需要的虚拟机cpu设置中勾选虚拟化嵌套 2,禁用hyper-v,powershell管理员运行

Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Hypervisor

3.在blos中启用CPU的虚拟化技术 4,关闭基于虚拟化的安全性,管理员cmd运行

bcdedit /set hypervisorlaunchtype off

重启你的电脑,win+r输入msinfo32.exe回车可以查看设置,之后vm就能正常使用嵌套虚拟化

创建自动重复执行任务

schtasks /Create /TN "Check3AutoRun" /TR "C:\Users\Administrator\Desktop\check.exe" /SC MINUTE /MO 5 /RL HIGHEST /F /RU SYSTEM
schtasks /Query /TN "Check3AutoRun" /V /FO LIST

windows服务强化相关(Windows Service Hardening)

禁用某服务的模拟权限

先查找服务名称,这里拿sqlserver举例

Get-Service | Where-Object {$_.DisplayName -like '*SQL*'} | Select-Object Name, DisplayName

Name               DisplayName
----               -----------
MSSQL$MSSQL        SQL Server (MSSQL)
SQLAgent$MSSQL     SQL Server 代理 (MSSQL)
SQLBrowser         SQL Server Browser
SQLTELEMETRY$MSSQL SQL Server CEIP service (MSSQL)
SQLWriter          SQL Server VSS Writer

没修改前权限

特权名                        描述                 状态                                   
============================= ==================== ======                          
SeAssignPrimaryTokenPrivilege 替换一个进程级令牌   已禁用                                      
SeIncreaseQuotaPrivilege      为进程调整内存配额   已禁用                                     
SeMachineAccountPrivilege     将工作站添加到域     已禁用                                     
SeChangeNotifyPrivilege       绕过遍历检查         已启用                                   
SeImpersonatePrivilege        身份验证后模拟客户端 已启用                                       
SeCreateGlobalPrivilege       创建全局对象         已启用                                   
SeIncreaseWorkingSetPrivilege 增加进程工作集       已禁用                                    

给MSSQL$MSSQL划分最小权限

sc privs MSSQL$MSSQL SeChangeNotifyPrivilege

修改后权限

特权名                  描述         状态                                                 
======================= ============ ======                                        
SeChangeNotifyPrivilege 绕过遍历检查 已启用                                                 
NULL                                                                               
NULL                                  

adcs相关

启用域控证书信任(配置证书服务后需要设置,证书服务才能正常工作)

1,打开 MMC → 添加证书 snap-in → 本地计算机 → 个人 → 证书
MMC:Windows 的管理控制台(Microsoft Management Console),可以加载各种管理插件(snap-in)。

1在 MMC 窗口中,点击菜单栏的:文件(File) → 添加/删除管理单元(Add/Remove Snap-in)
在左侧列表中找到并选中:Certificates(证书)
点击右侧的 “添加(Add)系统会弹出一个选择框:
- 我的用户账户 (My user account)
- 服务账户 (Service account)
- 计算机账户 (Computer account)
下一步 → 选择 “本地计算机 (Local computer)” → 完成 (Finish)
2,右键 个人 → 所有任务 → 请求新证书 (Enroll)
请求新证书 (Enroll) 是客户端向 CA 提交证书申请的操作
当你选择“请求新证书”时,本机会生成一个证书请求(CSR,Certificate Signing Request)
CSR 会发送给企业 CA,请求 CA 给这个域控签发一张 Domain Controller 证书
简单理解:你在 MMC 上点这个按钮,就是告诉 CA “请给我签发一张域控证书,我要用在 LDAPS 上”

esc14部署

首先证书创建部分

拓展:需要包含至少智能卡登陆及客户端验证
安全:允许请求组注册及读取
使用者名称:使用ad信息生成,将使用者名称格式改为公用名,勾选电子邮件名,不要勾选在使用者名称中包括电子邮件名以及用户主体名称

为目标用户写入关于邮件的显示证书映射,邮件名称随便

Set-ADUser -Identity "test" -Add @{altSecurityIdentities="X509:<RFC822>test@mssql.com"}

之后就是血缇之书中的利用了,任何允许请求这个证书的用户,都可以将自己的邮件写为test@mssql.com,之后请求完证书去以目标用户认证

mssql相关

部署数据库

首先在微软下载数据库安装包

https://info.microsoft.com/ww-landing-sql-server-2022.html?culture=en-us&country=US

当安装开始后按照下面的步骤部署

Log into your server with an administrator account.
使用管理员帐户登录您的服务器。
Download the SQL 2022 Installation Media or insert a media disk.
下载 SQL 2022 安装媒体或插入媒体磁盘。
Browse to the download location and double-click Setup.exe to begin the installation.
浏览到下载位置并双击 Setup.exe 开始安装。
Select Custom for Installation Type.
安装类型选择自定义 。
Choose a Media Location and click Install to begin downloading the installation files..
选择媒体位置并单击“安装”开始下载安装文件。
Click Installation located on the left side.
单击左侧的 “安装” 。
Click New SQL Server stand-alone installation or add features to an existing installation to open the SQL Server 2022 window.
单击“新的 SQL Server 独立安装”或“向现有安装添加功能”以打开 SQL Server 2022 窗口。
Click Next if prompted to download Product Updates.
如果提示下载产品更新, 请单击 “下一步” 。
Enter a Product Key or select a free edition, then click Next.  
输入产品密钥或选择免费版本,然后单击 “下一步” 。
Click I accept the license terms, then Next.
单击 “我接受许可条款” ,然后单击“下一步” 。
Click Next on the Install Rules window.
在“安装规则”窗口中单击“下一步”。
Note: It's normal to see a warning for Windows Firewall. Adding Firewall Exceptions is recommended after setting up SQL.
注意: Windows 防火墙出现警告是正常现象。建议在设置 SQL 后添加防火墙例外 。
If you purchased Azure Extension for SQL, enter your account details, otherwise uncheck the box and click Next.
如果您购买了 Azure Extension for SQL ,请输入您的帐户详细信息,否则取消选中该框并单击 “下一步” 。
Check the Database Engine Services box on the Feature Selection window, then click Next.
选中数据库引擎服务框   在功能选择窗口中,然后单击下一步 。
Juris only requires installing Database Engine Services. Client Connectivity is automatically installed on SQL 2022. 
Juris 仅需要安装数据库引擎服务 。 客户端连接已在 SQL 2022 上自动安装。  
SQL Server Replication is not compatible with Juris. All other SQL features are optional based on firm needs.
SQL Server Replication 与 Juris 不兼容。所有其他 SQL 功能均可根据公司需求选择。
Specify Instance Root and Shared Feature directories, or accept the default locations.
指定实例根目录和共享功能目录,或接受默认位置。
Enter a desired name (such as Juris) for the Named Instance and Instance ID then click Next to open Server Configuration.
为命名实例和实例 ID 输入所需的名称(例如 Juris),然后单击下一步打开服务器配置。
Ensure Startup Types for SQL Server Database Engine and SQL Server Browser are set to Automatic, then click Next to open Database Engine Configuration.
确保 SQL Server 数据库引擎和 SQL Server 浏览器的启动类型设置为自动,然后单击下一步打开数据库引擎配置 。
On the Server Configuration tab:
在服务器配置选项卡上:
Select Mixed Mode (SQL Server authentication and Windows Authentication) for Authentication Type.
对于身份验证类型, 选择混合模式 ( SQL Server 身份验证和 Windows 身份验证) 。
Enter and confirm the desired password for the built-in (sa) administrator account.
输入并确认内置(sa)管理员帐户所需的密码。
Click Add Current User under Specify SQL Server Administrators. Click Add if you want to add additional users.
单击 “指定 SQL Server 管理员” 下的 “添加当前用户” 。如果要添加其他用户,请单击 “添加” 。
Click Next when you a finished making Database Engine Configuration choices.
完成数据库引擎配置选择后,单击 “下一步” 。
Click Next on the Ready to Install window.
在 “准备安装 ”窗口中单击 “下一步” 。
Click Close on the Complete window.
单击 “完成” 窗口中的 “关闭” 。

部署完毕后放行1433端口

netsh advfirewall firewall add rule name="SQLServerTCP1433" dir=in action=allow protocol=TCP localport=1433

最后将mssql默认的动态端口修改为固定端口

打开 “SQL Server 配置管理器”
进入 SQL Server 网络配置 → 协议 for [实例名]
选择tcp并双击进入设置
选择ip地址将需要的活动ip的活动都改为是,已启用改为是,tcp端口改为1433,tcp动态端口全部改为空,注意是空不是零,包括最下面的ipall
修改完毕后选择左侧的sql server服务并重启实例

数据库权限分配(需sa连接数据库)

将某个域组或者域用户创建登陆权限,并分配连接权限以及查看数据库的权限(服务器级权限),注意这里使用NetBIOS格式名称

IF NOT EXISTS (SELECT 1 FROM sys.server_principals WHERE name=N'$domaim\$user_or_group') BEGIN CREATE LOGIN [$domain\$user_or_group] FROM WINDOWS; END; GRANT CONNECT SQL TO [$domain\$user_or_group]; GRANT VIEW ANY DATABASE TO [$domain\$user_or_group];

创建数据库并指定所有者为sa

CREATE DATABASE [$db_name]; ALTER AUTHORIZATION ON DATABASE::[test] TO sa;

创建db_oner提权路径

首先我们需要一个数据库,并且赋予一个普通用户此库的db_oner权限,注意使用NetBIOS格式名称

use $db
EXEC sp_addrolemember N'db_owner', N'$domain\$user_or_group';
## 之后确认数据库确实oner为sa
ALTER AUTHORIZATION ON DATABASE::[$db] TO [$odmain\Administrator];
## 开启这个数据库的TRUSTWORTHY on属性
ALTER DATABASE [$db] SET TRUSTWORTHY ON;