trustedsec/CS-Situational-Awareness-BOF
GitHub: trustedsec/CS-Situational-Awareness-BOF
一套基于 Beacon Object Files 实现的 Cobalt Strike 态势感知命令集,以后渗透阶段的隐蔽主机和域环境侦察为主要用途。
Stars: 1729 | Forks: 279
# 态势感知 BOF
本仓库旨在实现两个目的。首先,它提供了一组在 Beacon Object File (BOF) 中实现的基本态势感知命令。这允许你在开始执行可能更具侵入性的命令之前,对主机进行一些检查。
其更大的目标是为其他人提供代码示例和工作流,以便开始制作更多的 BOF。这是在此处发布的博客文章的配套文档:https://www.trustedsec.com/blog/a-developers-introduction-to-beacon-object-files/
## 制作一个新的 BOF
如果你想使用与本仓库相同的工作流,基本步骤如下:
1. 创建一个涵盖目标主题的文件夹,例如在本仓库中我们使用 SA
2. 将 base_template 复制到 topic/commandname
3. 修改 Makefile,在第一行填入你的 commandname。这应该与文件夹名称相同
4. 如果执行 SA 以外的操作,请务必同时修改 makefile 的第 14 和 15 行,以便将其移动到正确的位置
5. 在你的主题文件夹根部创建一个 .cna 文件,并添加你引用的命令。如果你遵循此格式,可以从 SA.cna 中提取辅助函数 readbof
实际上,这可以压缩成一个辅助脚本,但本次工作并未采取这些步骤。
## 可用命令
|命令|用法|备注|
|--------|-----|-----|
|adcs_enum | adcs_enum| 使用 Win32 函数枚举 AD 中的 CA 和模板|
|adcs_enum_com | adcs_enum_com| 使用 ICertConfig COM 对象枚举 AD 中的 CA 和模板|
|adcs_enum_com2 | adcs_enum_com2| 使用 IX509PolicyServerListManager COM 对象枚举 AD 中的 CA 和模板|
|adv_audit_policies | adv_audit_policies| 获取高级安全审核策略|
|arp | arp| 列出 ARP 表|
|cacls|cacls [filepath]| 列出指定文件的用户权限,支持通配符|
|dir| dir [directory] [/s]| 列出目录中的文件。与 CobaltStrike `ls` 命令不同,支持通配符(例如 "C:\Windows\S*")|
|driversigs| driversigs| 枚举已安装服务的 Imagepaths,以根据已知的 AV/EDR 供应商检查签名证书|
|enum_filter_driver| enum_filter_driver [opt:computer]| 枚举过滤驱动程序|
|enumLocalSessions| enumLocalSessions| 枚举当前连接的用户会话,包括本地和 RDP|
|env| env| 列出进程环境变量|
|findLoadedModule| findLoadedModule [modulepart] [opt:procnamepart]| 查找加载了 \*modulepart\* 的进程,可选仅搜索 \*procnamepart\*|
|get_dpapi_system| get_dpapi_system | 获取 DPAPI_SYSTEM 密钥和 bootkey |
|get_password_policy| get_password_policy [hostname]| 获取目标服务器或域配置的密码策略和锁定策略|
|get_session_info| get_session_info | 打印与当前用户登录会话相关的信息 |
|ipconfig| ipconfig| 列出 IPv4 地址、主机名和 DNS 服务器|
|ldapsearch| ldapsearch [--attributes] [--count] [--scope] [--hostname] [--dn] [--ldaps] | 执行 LDAP 搜索(注意:如果你想要所有属性 + 对象的 base64 编码 ACL,请指定 *,ntsecuritydescriptor 作为属性参数,这随后可以使用 BOFHound 进行解析。虽然测试期间一切正常,但这可能会破坏分页。)|
|ldapsecuritycheck| ldapsecuritycheck [opt:dc]| 检查域控制器上的 LDAP 签名和 LDAPS 通道绑定要求。执行身份验证测试以检测安全配置。省略时自动发现 DC 并自动推导 LDAP SPN。当需要 LDAP 签名但未使用时,生成事件 ID 2889。|
|listdns| listdns| 列出 DNS 缓存条目。尝试查询并解析每一个|
|list_firewall_rules| list_firewall_rules| 列出 Windows 防火墙规则|
|listmods| listmods [opt: pid]| 列出进程模块 (DLL)。如果 PID 为空,则针对当前进程。作为 driversigs 的补充,用于确定我们的进程是否被 AV/EDR 注入|
|listpipes| listpipes| 列出命名管道|
|locale| locale| 列出系统区域设置语言、区域设置 ID、日期、时间和国家/地区|
|netGroupList| netGroupList [opt: domain]| 列出默认或指定域中的组|
|netGroupListMembers| netGroupListMembers [groupname] [opt: domain]| 列出默认或指定域中的组成员|
|netLocalGroupList| netLocalGroupList [opt: server]| 列出本地或指定计算机的本地组|
|netLocalGroupListMembers| netLocalGroupListMembers [groupname] [opt: server]| 列出本地或指定计算机的本地组|
|netLocalGroupListMembers2| netLocalGroupListMembers2 [opt: groupname] [opt: server]| `netLocalGroupListMembers` 的修改版本,支持 BOFHound|
|netloggedon| netloggedon [hostname]| 返回登录到本地或远程计算机的用户|
|netloggedon2| netloggedon2 [opt: hostname]| `netloggedon` 的修改版本,支持 BOFHound|
|netsession| netsession [opt:computer]| 枚举本地或指定计算机上的会话|
|netsession2| netsession2 [opt:computer] [opt:resolution method] [opt:dns server]| `netsession` 的修改版本,支持 BOFHound|
|netshares| netshares [hostname]| 列出本地或远程计算机上的共享|
|netstat| netstat| TCP 和 UDP IPv4 列出端口|
|nettime| nettime [hostname]| 显示远程计算机上的时间|
|netuptime| netuptime [hostname]| 返回有关本地或远程计算机启动时间的信息|
|netuser| netuser [username] [opt: domain]| 获取有关特定用户的信息。如果指定了域名,则从域中提取|
|netuse_add| netuse_add [sharename] [opt:username] [opt:password] [opt:/DEVICE:devicename] [opt:/PERSIST] [opt:/REQUIREPRIVACY]| 将新连接绑定到远程计算机|
|netuse_delete| netuse_delete [device\|\|sharename] [opt:/PERSIST] [opt:/FORCE]| 删除绑定的设备 / 共享名]|
|netuse_list| netuse_list [opt:target]| 列出所有绑定的共享资源或有关目标本地资源的信息|
|netview| netview| 列出当前域中可到达的计算机|
|nslookup| nslookup [hostname] [opt:dns server] [opt: record type]| 进行 DNS 查询。
DNS server 是你要查询的服务器(不要指定或指定 0 表示默认)
record type 类似于 A、AAAA 或 ANY。某些情况因观察到崩溃而受到限制| | md5 | md5 [filename] | 使用 md5 对文件名进行哈希运算 | |probe| probe [host] [port]| 检查特定端口是否打开| |regsession| regsession [opt: hostname]| 通过枚举 HKEY_USERS 返回已登录用户的 SID。兼容 BOFHound| |reg_query| [opt:hostname] [hive] [path] [opt: value to query]| 查询注册表值或枚举单个键| |reg_query_recursive| [opt:hostname] [hive] [path]| 从路径开始递归枚举键| |resources| resources| 列出内存使用情况和主硬盘上的可用磁盘空间| |routeprint| routeprint| 列出 IPv4 路由| |sc_enum| sc_enum [opt:server]| 枚举服务的 qc、query、qfailure 和 qtriggers 信息| |sc_qc| sc_qc [service name] [opt:server]| BOF 中的 sc qc 实现| |sc_qdescription| sc_qdescription [service name] [opt: server]| BOF 中的 sc qdescription 实现| |sc_qfailure| sc_qfailure [service name] [opt:server]| 查询服务的故障条件| |sc_qtriggerinfo| sc_qtriggerinfo [service name] [opt:server]| 查询服务的触发条件| |sc_query| sc_query [opt: service name] [opt: server]| BOF 中的 sc query 实现| |schtasksenum| schtasksenum [opt: server]| 枚举本地或远程计算机上的计划任务| |schtasksquery| schtasksquery [opt: server] [taskpath]| 查询本地或远程计算机上的给定任务| | sha1 | sha1 [filename] | 使用 sha1 对文件名进行哈希运算 | |sha256 | sha256 [filename] | 使用 sha256 对文件名进行哈希运算 | |tasklist| tasklist [opt: server]| 列出正在运行的进程,包括 PID、PPID 和 CommandLine(使用 wmi)| |uptime| uptime| 列出系统启动时间及其运行时长| |useridletime| useridletime| 显示用户空闲了多长时间,以秒、分钟、小时和天显示。| |vssenum| vssenum [hostname] [opt:sharename]| 枚举某些 Server 2012+ 服务器上的 Shadow Copies(卷影副本)| |whoami| whoami| 列出 whoami /all| |windowlist| windowlist [opt:all]| 列出当前用户会话中的可见窗口| |wmi_query| wmi_query query [opt: server] [opt: namespace]| 运行 wmi 查询并以 CSV 格式显示结果| 注意,之所以包含 reg_query,是因为 CS 虽然有内置的 reg query(v) 命令,但本命令可以针对远程计算机,并且能够递归枚举整个键。 ##### 使用的编译器 BOF 是基于 [freefirex2/ts_bof_builder:latest](https://hub.docker.com/r/freefirex2/ts_bof_builder) 构建的。 ## 系统支持 这些 BOF 在编写时考虑了对 Windows Vista+ 的支持。如果你需要在那些较旧的系统上使用主要的 BOF 集合,我们创建了一个名为 [winxp_2003](https://github.com/trustedsec/CS-Situational-Awareness-BOF/tree/winxp_2003) 的新分支。该分支将处于较少支持的状态。它将具有功能性,但不会随着我们可能添加的每一次新推送/功能而更新。 ## 想了解更多? 如果你发现这些 beacon object files 很有帮助,并想按照类似的风格编写一些自己的 bof,我们邀请你查看我们的 [Beacon Object File (BOF) Development](https://learn.trustedsec.com/courses/cd84409a-36af-4507-be2c-ca7ad1e9fd2d) 课程。 该课程简要介绍了 beacon object files 的历史,然后深入探讨了各种挑战问题,旨在教你如何在开发自己的 beacon object files 时利用各种 Windows 技术。
DNS server 是你要查询的服务器(不要指定或指定 0 表示默认)
record type 类似于 A、AAAA 或 ANY。某些情况因观察到崩溃而受到限制| | md5 | md5 [filename] | 使用 md5 对文件名进行哈希运算 | |probe| probe [host] [port]| 检查特定端口是否打开| |regsession| regsession [opt: hostname]| 通过枚举 HKEY_USERS 返回已登录用户的 SID。兼容 BOFHound| |reg_query| [opt:hostname] [hive] [path] [opt: value to query]| 查询注册表值或枚举单个键| |reg_query_recursive| [opt:hostname] [hive] [path]| 从路径开始递归枚举键| |resources| resources| 列出内存使用情况和主硬盘上的可用磁盘空间| |routeprint| routeprint| 列出 IPv4 路由| |sc_enum| sc_enum [opt:server]| 枚举服务的 qc、query、qfailure 和 qtriggers 信息| |sc_qc| sc_qc [service name] [opt:server]| BOF 中的 sc qc 实现| |sc_qdescription| sc_qdescription [service name] [opt: server]| BOF 中的 sc qdescription 实现| |sc_qfailure| sc_qfailure [service name] [opt:server]| 查询服务的故障条件| |sc_qtriggerinfo| sc_qtriggerinfo [service name] [opt:server]| 查询服务的触发条件| |sc_query| sc_query [opt: service name] [opt: server]| BOF 中的 sc query 实现| |schtasksenum| schtasksenum [opt: server]| 枚举本地或远程计算机上的计划任务| |schtasksquery| schtasksquery [opt: server] [taskpath]| 查询本地或远程计算机上的给定任务| | sha1 | sha1 [filename] | 使用 sha1 对文件名进行哈希运算 | |sha256 | sha256 [filename] | 使用 sha256 对文件名进行哈希运算 | |tasklist| tasklist [opt: server]| 列出正在运行的进程,包括 PID、PPID 和 CommandLine(使用 wmi)| |uptime| uptime| 列出系统启动时间及其运行时长| |useridletime| useridletime| 显示用户空闲了多长时间,以秒、分钟、小时和天显示。| |vssenum| vssenum [hostname] [opt:sharename]| 枚举某些 Server 2012+ 服务器上的 Shadow Copies(卷影副本)| |whoami| whoami| 列出 whoami /all| |windowlist| windowlist [opt:all]| 列出当前用户会话中的可见窗口| |wmi_query| wmi_query query [opt: server] [opt: namespace]| 运行 wmi 查询并以 CSV 格式显示结果| 注意,之所以包含 reg_query,是因为 CS 虽然有内置的 reg query(v) 命令,但本命令可以针对远程计算机,并且能够递归枚举整个键。 ##### 使用的编译器 BOF 是基于 [freefirex2/ts_bof_builder:latest](https://hub.docker.com/r/freefirex2/ts_bof_builder) 构建的。 ## 系统支持 这些 BOF 在编写时考虑了对 Windows Vista+ 的支持。如果你需要在那些较旧的系统上使用主要的 BOF 集合,我们创建了一个名为 [winxp_2003](https://github.com/trustedsec/CS-Situational-Awareness-BOF/tree/winxp_2003) 的新分支。该分支将处于较少支持的状态。它将具有功能性,但不会随着我们可能添加的每一次新推送/功能而更新。 ## 想了解更多? 如果你发现这些 beacon object files 很有帮助,并想按照类似的风格编写一些自己的 bof,我们邀请你查看我们的 [Beacon Object File (BOF) Development](https://learn.trustedsec.com/courses/cd84409a-36af-4507-be2c-ca7ad1e9fd2d) 课程。 该课程简要介绍了 beacon object files 的历史,然后深入探讨了各种挑战问题,旨在教你如何在开发自己的 beacon object files 时利用各种 Windows 技术。
标签:Active Directory, ADCS, BOF, Cobalt Strike, COM对象, HTTP/HTTPS抓包, Mr. Robot, Plaso, Win32 API, XML 请求, 主机侦察, 二进制发布, 内网探测, 后渗透, 安全开发, 开源工具, 态势感知, 攻击诱捕, 数据展示, 文件浏览, 权限枚举, 欺骗防御, 流量嗅探, 端点可见性, 红队, 网络安全, 网络安全审计, 证书服务, 请求拦截, 超级时间线, 隐私保护