이 저장소는 두 가지 목적으로 사용됩니다. 먼저 BOF(Beacon Object File)에 구현된 기본적인 상황 인식 명령 세트를 제공합니다. 이를 통해 보다 침해적인 명령을 실행하기 전에 호스트에서 몇 가지 검사를 수행할 수 있습니다.
더 큰 목표는 다른 사람들이 더 많은 BOF를 만들 수 있도록 코드 예제와 작업 흐름을 제공하는 것입니다. 이는 https://www.trustedsec.com/blog/a-developers-introduction-to-beacon-object-files/에 작성된 블로그 게시물의 동반 문서입니다.
이 리포지토리와 동일한 워크플로를 사용하려는 경우 기본 단계는 다음과 같습니다.
현실적으로 이는 도우미 스크립트로 압축될 수 있지만 이러한 노력에는 해당 단계가 수행되지 않았습니다.
명령 | 용법 | 메모 |
---|---|---|
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 테이블 나열 |
cacls | cacls [파일 경로] | 지정된 파일에 대한 사용자 권한 나열, 와일드카드 지원 |
디렉토리 | dir [디렉토리] [/s] | 디렉터리의 파일을 나열합니다. CobaltStrike ls 명령과 달리 와일드카드(예: "C:WindowsS*")를 지원합니다. |
드라이버 시그니처 | 드라이버 시그니처 | 알려진 AV/EDR 공급업체에 대해 서명 인증서를 확인하기 위해 설치된 서비스 이미지 경로를 열거합니다. |
열거형_필터_드라이버 | enum_filter_driver [선택:컴퓨터] | 필터 드라이버 열거 |
enumLocalSessions | enumLocalSessions | 로컬 및 RDP를 통해 현재 연결된 사용자 세션을 열거합니다. |
환경 | 환경 | 프로세스 환경 변수 나열 |
findLoaded모듈 | findLoadedModule [모듈 부분] [opt:procname부분] | *modulepart*가 로드된 프로세스를 찾고 선택적으로 *procnamepart*만 검색합니다. |
get_password_policy | get_password_policy [호스트 이름] | 대상 서버 또는 도메인의 구성된 비밀번호 정책 및 잠금 가져오기 |
IP구성 | IP구성 | IPv4 주소, 호스트 이름 및 DNS 서버 나열 |
LDAP검색 | ldapsearch [쿼리] [opt: 속성] [opt: 결과_제한] [opt: DC 호스트 이름 또는 IP] [opt: 고유 이름] | LDAP 검색 실행(참고: 모든 속성 + 객체의 base64 인코딩 ACL을 원하는 경우 *,ntsecuritydescriptor를 속성 매개변수로 지정합니다. 그런 다음 BOFHound를 사용하여 해결할 수 있습니다. 테스트 중에는 모든 것이 괜찮아 보였지만 페이지 매김이 중단될 수도 있습니다.) |
목록DNS | 목록DNS | DNS 캐시 항목을 나열합니다. 각각을 쿼리하고 해결하려고 시도합니다. |
목록_방화벽_규칙 | 목록_방화벽_규칙 | Windows 방화벽 규칙 나열 |
목록 모드 | listmods [선택: pid] | 프로세스 모듈(DLL)을 나열합니다. PID가 비어 있으면 현재 프로세스를 대상으로 합니다. 우리 프로세스가 AV/EDR에 의해 주입되었는지 확인하기 위해 driversig를 보완합니다. |
리스트파이프 | 리스트파이프 | 명명된 파이프 나열 |
장소 | 장소 | 시스템 로케일 언어, 로케일 ID, 날짜, 시간 및 국가 나열 |
넷그룹목록 | netGroupList [선택: 도메인] | 기본 또는 지정된 도메인의 그룹 나열 |
netGroupListMembers | netGroupListMembers [그룹 이름] [선택: 도메인] | 기본 또는 지정된 도메인의 그룹 구성원 나열 |
netLocalGroupList | netLocalGroupList [선택: 서버] | 로컬 또는 지정된 컴퓨터의 로컬 그룹 나열 |
netLocalGroupListMembers | netLocalGroupListMembers [그룹 이름] [선택: 서버] | 로컬 또는 지정된 컴퓨터의 로컬 그룹 나열 |
netLocalGroupListMembers2 | netLocalGroupListMembers2 [선택: 그룹 이름] [선택: 서버] | BOFHound를 지원하는 netLocalGroupListMembers 의 수정된 버전 |
넷로그온 | netloggedon [호스트 이름] | 로컬 또는 원격 컴퓨터에 로그온한 반환 사용자 |
넷로그온2 | netloggedon2 [옵션: 호스트 이름] | BOFHound를 지원하는 수정된 netloggedon 버전 |
넷세션 | netsession [선택:컴퓨터] | 로컬 또는 지정된 컴퓨터의 세션 열거 |
넷세션2 | netsession2 [opt:컴퓨터] [opt:해결 방법] [opt:dns 서버] | BOFHound를 지원하는 수정된 netsession 버전 |
넷셰어 | netshares [호스트 이름] | 로컬 또는 원격 컴퓨터의 공유 목록을 나열합니다. |
netstat | netstat | TCP 및 UDP IPv4 목록 포트 |
넷타임 | 넷타임 [호스트 이름] | 원격 컴퓨터에 시간 표시 |
네트워크 가동 시간 | netuptime [호스트 이름] | 로컬 또는 원격 컴퓨터의 부팅 시간에 대한 정보를 반환합니다. |
넷유저 | netuser [사용자 이름] [선택: 도메인] | 특정 사용자에 대한 정보를 얻습니다. 도메인 이름이 지정된 경우 도메인에서 가져오기 |
netuse_add | netuse_add [공유 이름] [opt:사용자 이름] [opt:비밀번호] [opt:/DEVICE:장치 이름] [opt:/PERSIST] [opt:/REQUIREPRIVACY] | 원격 컴퓨터에 새 연결 바인딩 |
netuse_delete | netuse_delete [장치||공유 이름] [opt:/PERSIST] [opt:/FORCE] | 바인딩된 장치/공유 이름 삭제] |
netuse_list | netuse_list [선택:대상] | 바인딩된 모든 공유 리소스 또는 대상 로컬 리소스에 대한 정보를 나열합니다. |
넷뷰 | 넷뷰 | 현재 도메인에서 연결할 수 있는 컴퓨터 나열 |
nslookup | nslookup [호스트 이름] [opt:dns 서버] [opt: 레코드 유형] | DNS 쿼리를 수행합니다. DNS 서버는 쿼리하려는 서버입니다(지정하지 않거나 기본값은 0). 레코드 유형은 A, AAAA 또는 ANY와 같습니다. 관찰된 충돌로 인해 일부 상황이 제한됩니다. |
조사 | 프로브 [호스트] [포트] | 특정 포트가 열려 있는지 확인 |
회귀 | regsession [선택: 호스트 이름] | HKEY_USERS를 열거하여 로그온한 사용자 SID를 반환합니다. BOFHound 호환 |
reg_query | [opt:호스트 이름] [hive] [경로] [opt: 쿼리할 값] | 레지스트리 값을 쿼리하거나 단일 키를 열거합니다. |
reg_query_recursive | [옵션:호스트 이름] [하이브] [경로] | path에서 시작하는 키를 재귀적으로 열거합니다. |
자원 | 자원 | 기본 하드 드라이브의 메모리 사용량 및 사용 가능한 디스크 공간을 나열합니다. |
경로 인쇄 | 경로 인쇄 | IPv4 경로 나열 |
sc_enum | sc_enum [선택:서버] | qc, query, qfailure 및 qtriggers 정보에 대한 서비스 열거 |
sc_qc | sc_qc [서비스 이름] [opt:서버] | BOF에서 sc qc 구현 |
sc_q설명 | sc_qdescription [서비스 이름] [선택: 서버] | BOF에서 sc qdescription 구현 |
sc_q실패 | sc_qfailure [서비스 이름] [opt:서버] | 실패 조건에 대한 서비스 쿼리 |
sc_qtriggerinfo | sc_qtriggerinfo [서비스 이름] [opt:서버] | 트리거 조건에 대한 서비스 쿼리 |
sc_query | sc_query [선택: 서비스 이름] [선택: 서버] | BOF에서 sc 쿼리 구현 |
schtasksenum | schtasksenum [옵션: 서버] | 로컬 또는 원격 컴퓨터에서 예약된 작업을 열거합니다. |
Schtasksquery | schtasksquery [선택: 서버] [작업 경로] | 로컬 또는 원격 컴퓨터에서 주어진 작업을 쿼리합니다. |
작업 목록 | 작업 목록 [선택: 서버] | PID, PPID 및 ComandLine을 포함하여 실행 중인 프로세스 나열(wmi 사용) |
가동 시간 | 가동 시간 | 시스템 부팅 시간 및 실행 시간 나열 |
vssenum | vssenum [호스트 이름] [opt:공유 이름] | 일부 Server 2012+ 서버에서 섀도 복사본 열거 |
후아미 | 후아미 | whoami /all 나열 |
창 목록 | 창 목록 [선택:모두] | 현재 사용자 세션에 보이는 창 나열 |
wmi_query | wmi_query 쿼리 [선택: 서버] [선택: 네임스페이스] | WMI 쿼리를 실행하고 결과를 CSV 형식으로 표시합니다. |
CS에 reg query(v) 명령이 내장되어 있을 때 reg_query를 포함하는 이유는 이 명령이 원격 컴퓨터를 대상으로 할 수 있고 전체 키를 반복적으로 열거할 수 있기 때문입니다.
이러한 명령 대부분의 기능 코드는 MSDN에서 호스팅되는 Reactos 프로젝트 또는 코드 예제에서 가져왔습니다. driversigs 코드베이스는 https://gist.github.com/jthuraisamy/4c4c751df09f83d3620013f5d370d3b9에서 제공됩니다.
기여자 아래에 나열된 모든 기여자에게 감사드립니다. 여러분 각자는 이 저장소에 의미 있는 기여를 했으며 나와 내 검토 프로세스를 처리했습니다. 저를 가르치고 이 BOF 저장소를 최고로 만드는 데 도움을 주신 모든 분들께 감사드립니다!
사전 컴파일된 BOF는 이 프로젝트에서 제공되며 일반적으로 Brew에서 설치되는 최신 버전의 Mingw-w64를 사용하여 컴파일됩니다.
이러한 BOF는 Windows Vista+ 지원을 염두에 두고 작성되었습니다. 이전 시스템에서 기본 BOF 세트를 사용해야 하는 경우 winxp_2003이라는 새 분기가 생성되었습니다. 이 분기는 지원 수준이 낮은 상태로 유지됩니다. 기능적이지만 추가할 수 있는 모든 새로운 푸시/기능으로 업데이트되지는 않습니다.