
모듈형 공격 툴킷으로, 도난된 쿠키나 PAT를 사용하여 Azure DevOps REST API를 악용해 정찰, 권한 상승 및 지속성을 확보합니다.
# ADOKit
## 설명
Azure DevOps Services 공격 툴킷 - ADOKit는 사용 가능한 REST API를 활용하여 Azure DevOps Services를 공격하는 데 사용할 수 있는 툴킷입니다. 이 도구는 사용자가 공격 모듈을 지정하고 해당 Azure DevOps Services 인스턴스에 대한 유효한 자격 증명(API 키 또는 도난된 인증 쿠키)을 함께 지정할 수 있도록 합니다. 지원되는 공격 모듈에는 정찰, 권한 상승 및 지속성이 포함됩니다. ADOKit는 모듈식 접근 방식으로 구축되어 정보 보안 커뮤니티에서 향후 새로운 모듈을 추가할 수 있습니다.
ADOKit에서 사용하는 기술에 대한 자세한 내용은 X-Force Red [백서](https://www.ibm.com/downloads/cas/5JKAPVYD)에 있습니다.
### Black Hat USA Arsenal 2024
발표 슬라이드와 데모는 이 저장소의 [BHUSA Arsenal 2024](https://github.com/h4wkst3r/adokit/blob/main/BHUSA_Arsenal_2024) 폴더에 포함되어 있습니다.
## 릴리스
* ADOKit 버전 1.4.1은 릴리스에서 찾을 수 있습니다.
## 목차
- [ADOKit](#adokit)
- [목차](#table-of-contents)
- [설치/빌드](#installationbuilding)
- [사용된 라이브러리](#libraries-used)
- [사전 컴파일](#pre-compiled)
- [직접 빌드](#building-yourself)
- [명령 모듈](#command-modules)
- [인수/옵션](#argumentsoptions)
- [인증 옵션](#authentication-options)
- [모듈 세부 정보 표](#module-details-table)
- [예제](#examples)
- 정찰
- [Azure DevOps 액세스 확인](#validate-azure-devops-access)
- [Whoami](#whoami)
- [조직 나열](#List-orgs)
- [저장소 나열](#List-repos)
- [저장소 검색](#Search-repos)
- [프로젝트 나열](#list-projects)
- [프로젝트 검색](#search-projects)
- [코드 검색](#Search-code)
- [파일 검색](#Search-files)
- [사용자 나열](#list-users)
- [사용자 검색](#search-user)
- [팀 나열](#list-teams)
- [팀 검색](#search-team)
- [팀 구성원 가져오기](#get-team-members)
- [그룹 나열](#list-groups)
- [그룹 검색](#search-groups)
- [그룹 구성원 가져오기](#get-group-members)
- [프로젝트 권한 가져오기](#get-project-permissions)
- [자격 증명 검색](#creds-search)
- [빌드 로그 가져오기](#get-build-logs)
- [빌드 로그 나열](#list-build-logs)
- [빌드 로그 검색](#search-build-logs)
- 지속성
- [PAT 생성](#create-pat)
- [PAT 나열](#list-pats)
- [PAT 제거](#remove-pat)
- [SSH 키 생성](#create-ssh-key)
- [SSH 키 나열](#list-ssh-keys)
- [SSH 키 제거](#remove-ssh-key)
- 권한 상승
- [프로젝트 관리자 추가](#add-project-admin)
- [프로젝트 관리자 제거](#remove-project-admin)
- [빌드 관리자 추가](#add-build-admin)
- [빌드 관리자 제거](#remove-build-admin)
- [컬렉션 관리자 추가](#add-collection-admin)
- [컬렉션 관리자 제거](#remove-collection-admin)
- [컬렉션 빌드 관리자 추가](#add-collection-build-admin)
- [컬렉션 빌드 관리자 제거](#remove-collection-build-admin)
- [컬렉션 빌드 서비스 계정 추가](#add-collection-build-service-account)
- [컬렉션 빌드 서비스 계정 제거](#remove-collection-build-service-account)
- [컬렉션 서비스 계정 추가](#add-collection-service-account)
- [컬렉션 서비스 계정 제거](#remove-collection-service-account)
- [파이프라인 변수 가져오기](#get-pipeline-variables)
- [파이프라인 비밀 가져오기](#get-pipeline-secrets)
- [변수 그룹 가져오기](#get-variable-groups)
- [서비스 연결 가져오기](#get-service-connections)
- [탐지](#detection)
- [로드맵](#roadmap)
- [참고 자료](#references)
## 설치/빌드
### 사용된 라이브러리
이 프로젝트에서는 아래의 타사 라이브러리가 사용됩니다.
| 라이브러리 | URL | 라이선스 |
| ------------- | ------------- | ------------- |
| Fody | [https://github.com/Fody/Fody](https://github.com/Fody/Fody) | MIT 라이선스 |
| Newtonsoft.Json | [https://github.com/JamesNK/Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json) | MIT 라이선스 |
### 사전 컴파일
* 릴리스에서 사전 컴파일된 바이너리를 사용하십시오.
### 직접 빌드
프로젝트를 직접 컴파일하려면 아래 단계에 따라 Visual Studio를 설정하십시오. 이를 위해서는 NuGet 패키지 관리자에서 설치할 수 있는 두 개의 .NET 라이브러리가 필요합니다.
* Visual Studio 프로젝트를 로드하고 "도구" --> "NuGet 패키지 관리자" --> "패키지 관리자 설정"으로 이동하십시오.
* "NuGet 패키지 관리자" --> "패키지 소스"로 이동하십시오.
* URL이 `https://api.nuget.org/v3/index.json`인 패키지 소스를 추가하십시오.
* Costura.Fody NuGet 패키지를 설치하십시오.
* `Install-Package Costura.Fody -Version 3.3.3`
* Newtonsoft.Json 패키지를 설치하십시오.
* `Install-Package Newtonsoft.Json`
* 이제 프로젝트를 직접 빌드할 수 있습니다!
## 명령 모듈
* 정찰
* <b>check</b> - 조직이 Azure DevOps를 사용하는지와 자격 증명이 유효한지 확인합니다.
* <b>whoami</b> - 현재 사용자와 해당 그룹 멤버십을 나열합니다.
* <b>listorgs</b> - Azure DevOps 내에서 액세스 가능한 모든 조직 또는 전체 조직을 나열합니다.
* <b>listrepo</b> - 모든 저장소를 나열합니다.
* <b>searchrepo</b> - 주어진 저장소를 검색합니다.
* <b>listproject</b> - 모든 프로젝트를 나열합니다.
* <b>searchproject</b> - 주어진 프로젝트를 검색합니다.
* <b>searchcode</b> - 검색어가 포함된 코드를 검색합니다.
* <b>searchfile</b> - 검색어를 기반으로 파일을 검색합니다.
* <b>listuser</b> - 사용자를 나열합니다.
* <b>searchuser</b> - 주어진 사용자를 검색합니다.
* <b>listteam</b> - 팀을 나열합니다.
* <b>searchteam</b> - 주어진 팀을 검색합니다.
* <b>getteammembers</b> - 주어진 팀의 팀 구성원을 가져옵니다.
* <b>listgroup</b> - 그룹을 나열합니다.
* <b>searchgroup</b> - 주어진 그룹을 검색합니다.
* <b>getgroupmembers</b> - 주어진 그룹의 모든 그룹 구성원을 나열합니다.
* <b>getpermissions</b> - 주어진 프로젝트에 액세스할 수 있는 사람의 권한을 가져옵니다.
* <b>creds</b> - 코드에서 자격 증명을 검색합니다(키워드는 아래 나열됨).
* ``` "pw OR pwd OR passwrod OR password OR \"-----BEGIN PGP PRIVATE KEY BLOCK-----\" OR \"-----BEGIN EC PRIVATE KEY-----\" OR \"-----BEGIN DSA PRIVATE KEY-----\" OR \"-----BEGIN OPENSSH PRIVATE KEY-----\" OR \"-----BEGIN RSA PRIVATE KEY-----\" OR ANSIBLE_VAULT OR AWS_ACCESS_KEY_ID OR AWS_SECRET_ACCESS_KEY OR ACCESS_TOKEN OR API_KEY OR Authorization OR db_password" ```
* <b>getbuildlogs</b> - 하나 또는 모든 프로젝트의 빌드 로그를 다운로드합니다.
* <b>listbuildlogs</b> - 하나 또는 모든 프로젝트의 빌드 로그를 나열합니다.
* <b>searchbuildlogs</b> - 주어진 검색어로 빌드 로그를 검색합니다.
* 지속성
* <b>createpat</b> - 사용자에 대한 개인 액세스 토큰을 생성합니다.
* <b>listpat</b> - 사용자에 대한 개인 액세스 토큰을 나열합니다.
* <b>removepat</b> - 사용자에 대한 개인 액세스 토큰을 제거합니다.
* <b>createsshkey</b> - 사용자에 대한 공개 SSH 키를 생성합니다.
* <b>listsshkey</b> - 사용자에 대한 공개 SSH 키를 나열합니다.
* <b>removesshkey</b> - 사용자에 대한 공개 SSH 키를 제거합니다.
* 권한 상승
* <b>addprojectadmin</b> - 주어진 프로젝트의 "프로젝트 관리자"에 사용자를 추가합니다.
* <b>removeprojectadmin</b> - 주어진 프로젝트의 "프로젝트 관리자" 그룹에서 사용자를 제거합니다.
* <b>addbuildadmin</b> - 주어진 프로젝트의 "빌드 관리자" 그룹에 사용자를 추가합니다.
* <b>removebuildadmin</b> - 주어진 프로젝트의 "빌드 관리자" 그룹에서 사용자를 제거합니다.
* <b>addcollectionadmin</b> - "프로젝트 컬렉션 관리자" 그룹에 사용자를 추가합니다.
* <b>removecollectionadmin</b> - "프로젝트 컬렉션 관리자" 그룹에서 사용자를 제거합니다.
* <b>addcollectionbuildadmin</b> - "프로젝트 컬렉션 빌드 관리자" 그룹에 사용자를 추가합니다.
* <b>removecollectionbuildadmin</b> - "프로젝트 컬렉션 빌드 관리자" 그룹에서 사용자를 제거합니다.
* <b>addcollectionbuildsvc</b> - "프로젝트 컬렉션 빌드 서비스 계정" 그룹에 사용자를 추가합니다.
* <b>removecollectionbuildsvc</b> - "프로젝트 컬렉션 빌드 서비스 계정" 그룹에서 사용자를 제거합니다.
* <b>addcollectionsvc</b> - "프로젝트 컬렉션 서비스 계정" 그룹에 사용자를 추가합니다.
* <b>removecollectionsvc</b> - "프로젝트 컬렉션 서비스 계정" 그룹에서 사용자를 제거합니다.
* <b>getpipelinevars</b> - 주어진 프로젝트에 사용되는 모든 파이프라인 변수를 검색합니다.
* <b>getpipelinesecrets</b> - 주어진 프로젝트에 사용되는 모든 파이프라인 비밀의 이름을 검색합니다.
* <b>getvariablegroups</b> - 주어진 프로젝트에 사용되는 모든 변수 그룹과 해당 변수를 검색합니다.
* <b>getserviceconnections</b> - 주어진 프로젝트에 사용되는 서비스 연결을 검색합니다.
## 인수/옵션
* <b>/credential:</b> - 인증을 위한 자격 증명(PAT 또는 쿠키)입니다. 모든 모듈에 적용됩니다.
* <b>/url:</b> - Azure DevOps URL입니다. 모든 모듈에 적용됩니다.
* <b>/search:</b> - 검색할 키워드입니다. 모든 모듈에 적용되지 않습니다.
* <b>/project:</b> - 작업을 수행할 프로젝트입니다. 모든 모듈에 적용되지 않습니다.
* <b>/user:</b> - 특정 사용자에 대해 작업을 수행합니다. 모든 모듈에 적용되지 않습니다.
* <b>/id:</b> - 지속성 모듈과 함께 사용되어 특정 토큰 ID에 대해 작업을 수행합니다. 모든 모듈에 적용되지 않습니다.
* <b>/group:</b> - 특정 그룹에 대해 작업을 수행합니다. 모든 모듈에 적용되지 않습니다.
## 인증 옵션
Azure DevOps 인스턴스에 인증할 때 ADOKit에서 사용할 수 있는 인증 옵션은 아래와 같습니다.
* **도난된 쿠키 - UserAuthentication** - `.dev.azure.com` 도메인에 대한 사용자 머신의 `UserAuthentication` 쿠키입니다.
* `/credential:UserAuthentication=ABC123`
* **도난된 쿠키 - AadAuthentication** - `.dev.azure.com` 도메인에 대한 사용자 머신의 `AadAuthentication` 쿠키입니다.
* `/credential:eyJ0...`
* **개인 액세스 토큰(PAT)** - 단일 문자열인 액세스 토큰/API 키입니다.
* `/credential:apiToken`
* **도난된 액세스 토큰** - 적절한 액세스 토큰을 도난당하거나 갱신할 수 있는 경우 이를 사용할 수도 있습니다. 액세스 토큰을 사용하는 경우 Azure Resource Manager(ARM) 리소스(`"aud":"https://management.core.windows.net/"`) 또는 Azure DevOps 리소스(`"aud":"499b84ac-1321-427f-aa17-267ca6975798"`)에 대해 유효해야 합니다.
* `/credential:eyJ0..`
## 모듈 세부 정보 표
아래 표는 각 모듈에 필요한 권한을 보여줍니다.
공격 시나리오 | 모듈 | 특별 권한 필요? | 참고
--- |--- | --- | ---
정찰 | `check` | 아니요 |
정찰 | `whoami` | 아니요 |
정찰 | `listorgs` | 아니요 |
정찰 | `listrepo` | 아니요 |
정찰 | `searchrepo` | 아니요 |
정찰 | `listproject` | 아니요 |
정찰 | `searchproject` | 아니요 |
정찰 | `searchcode` | 아니요 |
정찰 | `searchfile` | 아니요 |
정찰 | `listuser` | 아니요 |
정찰 | `searchuser` | 아니요 |
정찰 | `listteam` | 아니요 |
정찰 | `searchteam` | 아니요 |
정찰 | `getteammembers` | 아니요 |
정찰 | `listgroup` | 아니요 |
정찰 | `searchgroup` | 아니요 |
정찰 | `getgroupmembers` | 아니요 |
정찰 | `getpermissions` | 아니요 |
정찰 | `creds` | 아니요 |
정찰 | `getbuildlogs` | 예 - `Contributors` 또는 `Readers` 또는 `Build Administrators` 또는 `Project Administrators` 또는 `Project Team Member` 또는 `Project Collection Test Service Accounts` 또는 `Project Collection Build Service Accounts` 또는 `Project Collection Build Administrators` 또는 `Project Collection Service Accounts` 또는 `Project Collection Administrators` |
정찰 | `listbuildlogs` | 예 - `Contributors` 또는 `Readers` 또는 `Build Administrators` 또는 `Project Administrators` 또는 `Project Team Member` 또는 `Project Collection Test Service Accounts` 또는 `Project Collection Build Service Accounts` 또는 `Project Collection Build Administrators` 또는 `Project Collection Service Accounts` 또는 `Project Collection Administrators` |
정찰 | `searchbuildlogs` | 예 - `Contributors` 또는 `Readers` 또는 `Build Administrators` 또는 `Project Administrators` 또는 `Project Team Member` 또는 `Project Collection Test Service Accounts` 또는 `Project Collection Build Service Accounts` 또는 `Project Collection Build Administrators` 또는 `Project Collection Service Accounts` 또는 `Project Collection Administrators` |
지속성 | `createpat` | 아니요 |
지속성 | `listpat` | 아니요 |
지속성 | `removepat` | 아니요 |
지속성 | `createsshkey` | 아니요 |
지속성 | `listsshkey` | 아니요 |
지속성 | `removesshkey` | 아니요 |
권한 상승 | `addprojectadmin` | 예 - `Project Administrator`, `Project Collection Administrator` 또는 `Project Collection Service Accounts` |
권한 상승 | `removeprojectadmin` | 예 - `Project Administrator`, `Project Collection Administrator` 또는 `Project Collection Service Accounts` |
권한 상승 | `addbuildadmin` | 예 - `Project Administrator`, `Project Collection Administrator` 또는 `Project Collection Service Accounts` |
권한 상승 | `removebuildadmin` | 예 - `Project Administrator`, `Project Collection Administrator` 또는 `Project Collection Service Accounts` |
권한 상승 | `addcollectionadmin` | 예 - `Project Collection Administrator` 또는 `Project Collection Service Accounts` |
권한 상승 | `removecollectionadmin` | 예 - `Project Collection Administrator` 또는 `Project Collection Service Accounts` |
권한 상승 | `addcollectionbuildadmin` | 예 - `Project Collection Administrator` 또는 `Project Collection Service Accounts` |
권한 상승 | `removecollectionbuildadmin` | 예 - `Project Collection Administrator` 또는 `Project Collection Service Accounts` |
권한 상승 | `addcollectionbuildsvc` | 예 - `Project Collection Administrator`, `Project Colection Build Administrators` 또는 `Project Collection Service Accounts` |
권한 상승 | `removecollectionbuildsvc` | 예 - `Project Collection Administrator`, `Project Colection Build Administrators` 또는 `Project Collection Service Accounts` |
권한 상승 | `addcollectionsvc` | 예 - `Project Collection Administrator` 또는 `Project Collection Service Accounts` |
권한 상승 | `removecollectionsvc` | 예 - `Project Collection Administrator` 또는 `Project Collection Service Accounts` |
권한 상승 | `getpipelinevars` | 예 - `Contributors` 또는 `Readers` 또는 `Build Administrators` 또는 `Project Administrators` 또는 `Project Team Member` 또는 `Project Collection Test Service Accounts` 또는 `Project Collection Build Service Accounts` 또는 `Project Collection Build Administrators` 또는 `Project Collection Service Accounts` 또는 `Project Collection Administrators` |
권한 상승 | `getpipelinesecrets` | 예 - `Contributors` 또는 `Readers` 또는 `Build Administrators` 또는 `Project Administrators` 또는 `Project Team Member` 또는 `Project Collection Test Service Accounts` 또는 `Project Collection Build Service Accounts` 또는 `Project Collection Build Administrators` 또는 `Project Collection Service Accounts` 또는 `Project Collection Administrators` |
권한 상승 | `getvariablegroups` | 예 - `Contributors` 또는 `Readers` 또는 `Build Administrators` 또는 `Project Administrators` 또는 `Project Team Member` 또는 `Project Collection Test Service Accounts` 또는 `Project Collection Build Service Accounts` 또는 `Project Collection Build Administrators` 또는 `Project Collection Service Accounts` 또는 `Project Collection Administrators` |
권한 상승 | `getserviceconnections` | 예 - `Project Administrator`, `Project Collection Administrator` 또는 `Project Collection Service Accounts` |
## 예제
### Azure DevOps 액세스 확인
#### 사용 사례
> *조직이 Azure DevOps를 사용하고 제공된 자격 증명이 유효한지 확인하기 위해 인증 검사를 수행합니다.*
#### 구문
`check` 모듈과 관련 인증 정보 및 URL을 제공하십시오. 이는 제공된 조직이 Azure DevOps를 사용하는지 여부를 출력하고, 그렇다면 제공된 자격 증명의 유효성을 검증하려고 시도합니다.
`ADOKit.exe check /credential:apiKey /url:https://dev.azure.com/organizationName`
`ADOKit.exe check /credential:"UserAuthentication=ABC123" /url:https://dev.azure.com/organizationName`
#### 예제 출력```
C:\>ADOKit.exe check /credential:apiKey /url:https://dev.azure.com/YourOrganization
==================================================
Module: check
Auth Type: API Key
Search Term:
Target URL: https://dev.azure.com/YourOrganization
Timestamp: 3/28/2023 3:33:01 PM
==================================================
[*] INFO: Checking if organization provided uses Azure DevOps
[+] SUCCESS: Organization provided exists in Azure DevOps
[*] INFO: Checking credentials provided
[+] SUCCESS: Credentials provided are VALID.
3/28/23 19:33:02 Finished execution of check
```
### Whoami
#### 사용 사례
> *현재 사용자 및 사용자의 그룹 멤버십 가져오기*
#### 구문
`whoami` 모듈과 함께 관련 인증 정보 및 URL을 제공합니다. 이는 현재 사용자와 모든 그룹 멤버십을 출력합니다.
`ADOKit.exe whoami /credential:apiKey /url:https://dev.azure.com/organizationName`
`ADOKit.exe whoami /credential:"UserAuthentication=ABC123" /url:https://dev.azure.com/organizationName`
#### 예제 출력```
C:\>ADOKit.exe whoami /credential:"UserAuthentication=ABC123" /url:https://dev.azure.com/YourOrganization
==================================================
Module: whoami
Auth Type: Cookie
Search Term:
Target URL: https://dev.azure.com/YourOrganization
Timestamp: 4/4/2023 11:33:12 AM
==================================================
[*] INFO: Checking credentials provided
[+] SUCCESS: Credentials provided are VALID.
Username | Display Name | UPN
------------------------------------------------------------------------------------------------------------------------------------------------------------
jsmith | John Smith | [email protected]
[*] INFO: Listing group memberships for the current user
Group UPN | Display Name | Description
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[YourOrganization]\Project Collection Test Service Accounts | Project Collection Test Service Accounts | Members of this group should include the service accounts used by the test controllers set up for this project collection.
[TestProject2]\Contributors | Contributors | Members of this group can add, modify, and delete items within the team project.
[MaraudersMap]\Contributors | Contributors | Members of this group can add, modify, and delete items within the team project.
[YourOrganization]\Project Collection Administrators | Project Collection Administrators | Members of this application group can perform all privileged operations on the Team Project Collection.
4/4/23 15:33:19 Finished execution of whoami
```
### 조직 목록
#### 사용 사례
> *주어진 액세스 토큰을 사용하여 조직을 검색합니다.*
#### 구문
`listorgs` 모듈에 필요한 인증 정보를 제공합니다. 기본적으로 이 명령은 제공된 액세스 토큰으로 접근 가능한 조직만 나열합니다.
- **`/mode:aad`**를 사용하여 직접 액세스 여부와 관계없이 Azure AD 테넌트 내의 **모든** DevOps 조직을 열거합니다.
- **`/endpoint:ENDPOINT_NAME`**를 사용하여 사용자 지정 AEX 엔드포인트를 지정합니다.
- 추가 엔드포인트는 `aex.dev.azure.com`의 `"X-VSS-DeploymentAffinity"` 쿠키를 검사하여 식별할 수 있습니다.
`ADOKit.exe listorgs /credential:"eyj0..." [/mode:aad] [/endpoint:ENDPOINT_NAME]`
`ADOKit.exe listorgs /credential:"eyj0..." /mode:aad /endpoint:aexprodeus21`
#### 출력 예시```
C:\>ADOKit.exe listorgs /credential:"eyj0..."
==================================================
Module: listorgs
Auth Type: Azure Access Token
Target URL: https://app.vssps.visualstudio.com
Timestamp: 3/14/2025 2:26:45 PM
==================================================
[*] INFO: Checking credentials provided
[+] SUCCESS: Credentials provided are VALID.
Organization ID | Organization Name
-----------------------------------------------------------------------------------
390a7474-e2f2-4b98-b538-4a547fa9f5e3 | solar-devops
b63b999f-43f2-48c5-998d-b31cbf4c2f8e | lunar-devops
```
### 저장소 목록
#### 사용 사례
> *Azure DevOps 인스턴스에서 사용 중인 리포지토리를 검색합니다*
#### 구문
`listrepo` 모듈과 관련 인증 정보 및 URL을 제공합니다. 그러면 리포지토리 이름과 URL이 출력됩니다.
`ADOKit.exe listrepo /credential:apiKey /url:https://dev.azure.com/organizationName`
`ADOKit.exe listrepo /credential:"UserAuthentication=ABC123" /url:https://dev.azure.com/organizationName`
#### 출력 예시
```
Retrieving repository list...
Repository List:
Repository Name: awesomeRepo
Repository URL: https://dev.azure.com/organizationName/ProjectName/_git/awesomeRepo
``````
C:\>ADOKit.exe listrepo /credential:UserAuthentication=ABC123 /url:https://dev.azure.com/YourOrganization
==================================================
Module: listrepo
Auth Type: Cookie
Search Term:
Target URL: https://dev.azure.com/YourOrganization
Timestamp: 3/29/2023 8:41:50 AM
==================================================
[*] INFO: Checking credentials provided
[+] SUCCESS: Credentials provided are VALID.
Name | URL
-----------------------------------------------------------------------------------
TestProject2 | https://dev.azure.com/YourOrganization/TestProject2/_git/TestProject2
MaraudersMap | https://dev.azure.com/YourOrganization/MaraudersMap/_git/MaraudersMap
SomeOtherRepo | https://dev.azure.com/YourOrganization/ProjectWithMultipleRepos/_git/SomeOtherRepo
AnotherRepo | https://dev.azure.com/YourOrganization/ProjectWithMultipleRepos/_git/AnotherRepo
ProjectWithMultipleRepos | https://dev.azure.com/YourOrganization/ProjectWithMultipleRepos/_git/ProjectWithMultipleRepos
TestProject | https://dev.azure.com/YourOrganization/TestProject/_git/TestProject
3/29/23 12:41:53 Finished execution of listrepo
```
### 리포지토리 검색
#### 사용 사례
> *Azure DevOps 인스턴스에서 리포지토리 이름으로 리포지토리 검색*
#### 구문
`searchrepo` 모듈과 `/search:` 명령줄 인수에 검색 기준을 제공하고, 관련 인증 정보 및 URL을 함께 입력합니다. 그러면 일치하는 리포지토리 이름과 URL이 출력됩니다.
`ADOKit.exe searchrepo /credential:apiKey /url:https://dev.azure.com/organizationName /search:cred`
`ADOKit.exe searchrepo /credential:"UserAuthentication=ABC123" /url:https://dev.azure.com/organizationName /search:cred`
#### 예시 출력```
C:\>ADOKit.exe searchrepo /credential:apiKey /url:https://dev.azure.com/YourOrganization /search:"test"
==================================================
Module: searchrepo
Auth Type: API Key
Search Term: test
Target URL: https://dev.azure.com/YourOrganization
Timestamp: 3/29/2023 9:26:57 AM
==================================================
[*] INFO: Checking credentials provided
[+] SUCCESS: Credentials provided are VALID.
Name | URL
-----------------------------------------------------------------------------------
TestProject2 | https://dev.azure.com/YourOrganization/TestProject2/_git/TestProject2
TestProject | https://dev.azure.com/YourOrganization/TestProject/_git/TestProject
3/29/23 13:26:59 Finished execution of searchrepo
```
### 프로젝트 목록
#### 사용 사례
> *Azure DevOps 인스턴스에서 사용 중인 프로젝트 검색*
#### 구문
`listproject` 모듈과 관련 인증 정보 및 URL을 제공합니다. 그러면 프로젝트 이름, 공개/비공개 여부 및 URL이 출력됩니다.
`ADOKit.exe listproject /credential:apiKey /url:https://dev.azure.com/organizationName`
`ADOKit.exe listproject /credential:"UserAuthentication=ABC123" /url:https://dev.azure.com/organizationName`
#### 예제 출력```
C:\>ADOKit.exe listproject /credential:apiKey /url:https://dev.azure.com/YourOrganization
==================================================
Module: listproject
Auth Type: API Key
Search Term:
Target URL: https://dev.azure.com/YourOrganization
Timestamp: 4/4/2023 7:44:59 AM
==================================================
[*] INFO: Checking credentials provided
[+] SUCCESS: Credentials provided are VALID.
Name | Visibility | URL
-----------------------------------------------------------------------------------------------------
TestProject2 | private | https://dev.azure.com/YourOrganization/TestProject2
MaraudersMap | private | https://dev.azure.com/YourOrganization/MaraudersMap
ProjectWithMultipleRepos | private | https://dev.azure.com/YourOrganization/ProjectWithMultipleRepos
TestProject | private | https://dev.azure.com/YourOrganization/TestProject
4/4/23 11:45:04 Finished execution of listproject
```
### 프로젝트 검색
#### 사용 사례
> *Azure DevOps 인스턴스에서 프로젝트 이름으로 프로젝트 검색*
#### 구문
검색 조건과 함께 `searchproject` 모듈을 `/search:` 명령줄 인수에 제공하고 관련 인증 정보와 URL을 함께 제공합니다. 그러면 일치하는 프로젝트 이름, 표시 여부(공개 또는 비공개) 및 URL이 출력됩니다.
`ADOKit.exe searchproject /credential:apiKey /url:https://dev.azure.com/organizationName /search:cred`
`ADOKit.exe searchproject /credential:"UserAuthentication=ABC123" /url:https://dev.azure.com/organizationName /search:cred`
#### 예제 출력```
C:\>ADOKit.exe searchproject /credential:apiKey /url:https://dev.azure.com/YourOrganization /search:"map"
==================================================
Module: searchproject
Auth Type: API Key
Search Term: map
Target URL: https://dev.azure.com/YourOrganization
Timestamp: 4/4/2023 7:45:30 AM
==================================================
[*] INFO: Checking credentials provided
[+] SUCCESS: Credentials provided are VALID.
Name | Visibility | URL
-----------------------------------------------------------------------------------------------------
MaraudersMap | private | https://dev.azure.com/YourOrganization/MaraudersMap
4/4/23 11:45:31 Finished execution of searchproject
```
### 코드 검색
#### 사용 사례
> *Azure DevOps 인스턴스에서 특정 키워드가 포함된 코드를 검색합니다.*
#### 구문
`searchcode` 모듈과 검색 조건을 `/search:` 명령줄 인수에 제공하고, 관련 인증 정보와 URL을 함께 제공합니다. 그러면 일치하는 코드 파일의 URL과 일치하는 코드 줄이 출력됩니다.
`ADOKit.exe searchcode /credential:apiKey /url:https://dev.azure.com/organizationName /search:password`
`ADOKit.exe searchcode /credential:"UserAuthentication=ABC123" /url:https://dev.azure.com/organizationName /search:password`
#### 출력 예시```
C:\>ADOKit.exe searchcode /credential:UserAuthentication=ABC123 /url:https://dev.azure.com/YourOrganization /search:"password"
==================================================
Module: searchcode
Auth Type: Cookie
Search Term: password
Target URL: https://dev.azure.com/YourOrganization
Timestamp: 3/29/2023 3:22:21 PM
==================================================
[*] INFO: Checking credentials provided
[+] SUCCESS: Credentials provided are VALID.
[>] URL: https://dev.azure.com/YourOrganization/MaraudersMap/_git/MaraudersMap?path=/Test.cs
|_ Console.WriteLine("PassWord");
|_ this is some text that has a password in it
[>] URL: https://dev.azure.com/YourOrganization/TestProject2/_git/TestProject2?path=/Program.cs
|_ Console.WriteLine("PaSsWoRd");
[*] Match count : 3
3/29/23 19:22:22 Finished execution of searchcode
```
### 파일 검색
#### 사용 사례
> *Azure DevOps에서 파일 이름에 특정 키워드가 포함된 저장소의 파일 검색*
#### 구문
`searchfile` 모듈과 `/search:` 명령줄 인수에 검색 기준을 제공합니다. 관련 인증 정보 및 URL도 함께 제공하세요. 이렇게 하면 일치하는 파일의 URL이 해당 저장소에 출력됩니다.
`ADOKit.exe searchfile /credential:apiKey /url:https://dev.azure.com/organizationName /search:azure-pipeline`
`ADOKit.exe searchfile /credential:"UserAuthentication=ABC123" /url:https://dev.azure.com/organizationName /search:azure-pipeline`
#### 예시 출력```
C:\>ADOKit.exe searchfile /credential:UserAuthentication=ABC123 /url:https://dev.azure.com/YourOrganization /search:"test"
==================================================
Module: searchfile
Auth Type: Cookie
Search Term: test
Target URL: https://dev.azure.com/YourOrganization
Timestamp: 3/29/2023 11:28:34 AM
==================================================
[*] INFO: Checking credentials provided
[+] SUCCESS: Credentials provided are VALID.
File URL
----------------------------------------------------------------------------------------------------
https://dev.azure.com/YourOrganization/MaraudersMap/_git/4f159a8e-5425-4cb5-8d98-31e8ac86c4fa?path=/Test.cs
https://dev.azure.com/YourOrganization/ProjectWithMultipleRepos/_git/c1ba578c-1ce1-46ab-8827-f245f54934e9?path=/Test.cs
https://dev.azure.com/YourOrganization/TestProject/_git/fbcf0d6d-3973-4565-b641-3b1b897cfa86?path=/test.cs
3/29/23 15:28:37 Finished execution of searchfile
```
### 자격 증명 검색
#### 사용 사례
``````
---
[Read more](https://github.com/h4wkst3r/adokit)