
Modulares Angriffstoolkit, das die Azure DevOps REST API für Aufklärung, Privilegieneskalation und Persistenz unter Verwendung gestohlener Cookies oder PATs ausnutzt.
# ADOKit
## Beschreibung
Azure DevOps Services Attack Toolkit - ADOKit ist ein Toolkit, das zum Angreifen von Azure DevOps Services genutzt werden kann, indem es die verfügbare REST-API ausnutzt. Das Tool ermöglicht es dem Benutzer, ein Angriffsmodul sowie gültige Anmeldeinformationen (API-Schlüssel oder gestohlenes Authentifizierungs-Cookie) für die entsprechende Azure DevOps Services-Instanz anzugeben. Die unterstützten Angriffsmodule umfassen Aufklärung, Privilegienausweitung und Persistenz. ADOKit wurde modular aufgebaut, sodass in Zukunft von der Informationssicherheits-Community neue Module hinzugefügt werden können.
Vollständige Details zu den von ADOKit verwendeten Techniken finden Sie im X-Force Red [Whitepaper](https://www.ibm.com/downloads/cas/5JKAPVYD).
### Black Hat USA Arsenal 2024
Präsentationsfolien und Demos sind im Ordner [BHUSA Arsenal 2024](https://github.com/h4wkst3r/adokit/blob/main/BHUSA_Arsenal_2024) in diesem Repository enthalten.
## Release
* Version 1.4.1 von ADOKit ist in den Releases verfügbar
## Inhaltsverzeichnis
- [ADOKit](#adokit)
- [Inhaltsverzeichnis](#inhaltsverzeichnis)
- [Installation/Build](#installationbuilding)
- [Verwendete Bibliotheken](#verwendete-bibliotheken)
- [Vorkompiliert](#vorkompiliert)
- [Selbst bauen](#selbst-bauen)
- [Befehlsmodule](#befehlsmodule)
- [Argumente/Optionen](#argumenteoptionen)
- [Authentifizierungsoptionen](#authentifizierungsoptionen)
- [Modul-Detailtabelle](#modul-detailtabelle)
- [Beispiele](#beispiele)
- Recon
- [Azure DevOps-Zugriff validieren](#azure-devops-zugriff-validieren)
- [Whoami](#whoami)
- [Organisationen auflisten](#organisationen-auflisten)
- [Repos auflisten](#repos-auflisten)
- [Repos durchsuchen](#repos-durchsuchen)
- [Projekte auflisten](#projekte-auflisten)
- [Projekte durchsuchen](#projekte-durchsuchen)
- [Code durchsuchen](#code-durchsuchen)
- [Dateien durchsuchen](#dateien-durchsuchen)
- [Benutzer auflisten](#benutzer-auflisten)
- [Benutzer suchen](#benutzer-suchen)
- [Teams auflisten](#teams-auflisten)
- [Team suchen](#team-suchen)
- [Teammitglieder abrufen](#teammitglieder-abrufen)
- [Gruppen auflisten](#gruppen-auflisten)
- [Gruppen suchen](#gruppen-suchen)
- [Gruppenmitglieder abrufen](#gruppenmitglieder-abrufen)
- [Projektberechtigungen abrufen](#projektberechtigungen-abrufen)
- [Creds-Suche](#creds-suche)
- [Build-Protokolle abrufen](#build-protokolle-abrufen)
- [Build-Protokolle auflisten](#build-protokolle-auflisten)
- [Build-Protokolle durchsuchen](#build-protokolle-durchsuchen)
- Persistenz
- [PAT erstellen](#pat-erstellen)
- [PATs auflisten](#pats-auflisten)
- [PAT entfernen](#pat-entfernen)
- [SSH-Schlüssel erstellen](#ssh-schlüssel-erstellen)
- [SSH-Schlüssel auflisten](#ssh-schlüssel-auflisten)
- [SSH-Schlüssel entfernen](#ssh-schlüssel-entfernen)
- Privilegienausweitung
- [Projektadministrator hinzufügen](#projektadministrator-hinzufügen)
- [Projektadministrator entfernen](#projektadministrator-entfernen)
- [Build-Administrator hinzufügen](#build-administrator-hinzufügen)
- [Build-Administrator entfernen](#build-administrator-entfernen)
- [Sammlungsadministrator hinzufügen](#sammlungsadministrator-hinzufügen)
- [Sammlungsadministrator entfernen](#sammlungsadministrator-entfernen)
- [Sammlungs-Build-Administrator hinzufügen](#sammlungs-build-administrator-hinzufügen)
- [Sammlungs-Build-Administrator entfernen](#sammlungs-build-administrator-entfernen)
- [Sammlungs-Build-Dienstkonto hinzufügen](#sammlungs-build-dienstkonto-hinzufügen)
- [Sammlungs-Build-Dienstkonto entfernen](#sammlungs-build-dienstkonto-entfernen)
- [Sammlungs-Dienstkonto hinzufügen](#sammlungs-dienstkonto-hinzufügen)
- [Sammlungs-Dienstkonto entfernen](#sammlungs-dienstkonto-entfernen)
- [Pipeline-Variablen abrufen](#pipeline-variablen-abrufen)
- [Pipeline-Geheimnisse abrufen](#pipeline-geheimnisse-abrufen)
- [Variablengruppen abrufen](#variablengruppen-abrufen)
- [Dienstverbindungen abrufen](#dienstverbindungen-abrufen)
- [Erkennung](#erkennung)
- [Roadmap](#roadmap)
- [Referenzen](#referenzen)
## Installation/Build
### Verwendete Bibliotheken
Die folgenden Drittanbieter-Bibliotheken werden in diesem Projekt verwendet.
| Bibliothek | URL | Lizenz |
| ---------- | --- | ------ |
| Fody | [https://github.com/Fody/Fody](https://github.com/Fody/Fody) | MIT-Lizenz |
| Newtonsoft.Json | [https://github.com/JamesNK/Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json) | MIT-Lizenz |
### Vorkompiliert
* Verwenden Sie die vorkompilierte Binärdatei in Releases
### Selbst bauen
Führen Sie die folgenden Schritte aus, um Visual Studio so einzurichten, dass Sie das Projekt selbst kompilieren können. Dazu werden zwei .NET-Bibliotheken benötigt, die über den NuGet-Paketmanager installiert werden können.
* Laden Sie das Visual Studio-Projekt und gehen Sie zu "Extras" --> "NuGet-Paketmanager" --> "Paket-Manager-Einstellungen"
* Gehen Sie zu "NuGet-Paketmanager" --> "Paketquellen"
* Fügen Sie eine Paketquelle mit der URL `https://api.nuget.org/v3/index.json` hinzu
* Installieren Sie das NuGet-Paket Costura.Fody.
* `Install-Package Costura.Fody -Version 3.3.3`
* Installieren Sie das Newtonsoft.Json-Paket
* `Install-Package Newtonsoft.Json`
* Jetzt können Sie das Projekt selbst bauen!
## Befehlsmodule
* Recon
* <b>check</b> - Überprüfen, ob die Organisation Azure DevOps verwendet und ob die Anmeldeinformationen gültig sind
* <b>whoami</b> - Den aktuellen Benutzer und seine Gruppenmitgliedschaften auflisten
* <b>listorgs</b> - Zugängliche oder alle Organisationen innerhalb von Azure DevOps auflisten
* <b>listrepo</b> - Alle Repositorys auflisten
* <b>searchrepo</b> - Nach einem bestimmten Repository suchen
* <b>listproject</b> - Alle Projekte auflisten
* <b>searchproject</b> - Nach einem bestimmten Projekt suchen
* <b>searchcode</b> - Nach Code mit einem Suchbegriff suchen
* <b>searchfile</b> - Nach einer Datei basierend auf einem Suchbegriff suchen
* <b>listuser</b> - Benutzer auflisten
* <b>searchuser</b> - Nach einem bestimmten Benutzer suchen
* <b>listteam</b> - Teams auflisten
* <b>searchteam</b> - Nach einem bestimmten Team suchen
* <b>getteammembers</b> - Teammitglieder für ein bestimmtes Team abrufen
* <b>listgroup</b> - Gruppen auflisten
* <b>searchgroup</b> - Nach einer bestimmten Gruppe suchen
* <b>getgroupmembers</b> - Alle Gruppenmitglieder für eine bestimmte Gruppe auflisten
* <b>getpermissions</b> - Die Berechtigungen abrufen, wer Zugriff auf ein bestimmtes Projekt hat
* <b>creds</b> - Nach Anmeldeinformationen im Code suchen (Schlüsselwörter unten aufgeführt)
* ` "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> - Die Build-Protokolle für ein oder alle Projekte herunterladen
* <b>listbuildlogs</b> - Die Build-Protokolle für ein oder alle Projekte auflisten
* <b>searchbuildlogs</b> - Build-Protokolle nach einem bestimmten Suchbegriff durchsuchen
* Persistenz
* <b>createpat</b> - Persönlichen Zugriffstoken für Benutzer erstellen
* <b>listpat</b> - Persönliche Zugriffstoken für Benutzer auflisten
* <b>removepat</b> - Persönlichen Zugriffstoken für Benutzer entfernen
* <b>createsshkey</b> - Öffentlichen SSH-Schlüssel für Benutzer erstellen
* <b>listsshkey</b> - Öffentliche SSH-Schlüssel für Benutzer auflisten
* <b>removesshkey</b> - Öffentlichen SSH-Schlüssel für Benutzer entfernen
* Privilegienausweitung
* <b>addprojectadmin</b> - Einen Benutzer zu den "Projektadministratoren" für ein bestimmtes Projekt hinzufügen
* <b>removeprojectadmin</b> - Einen Benutzer aus der Gruppe "Projektadministratoren" für ein bestimmtes Projekt entfernen
* <b>addbuildadmin</b> - Einen Benutzer zur Gruppe "Build-Administratoren" für ein bestimmtes Projekt hinzufügen
* <b>removebuildadmin</b> - Einen Benutzer aus der Gruppe "Build-Administratoren" für ein bestimmtes Projekt entfernen
* <b>addcollectionadmin</b> - Einen Benutzer zur Gruppe "Projektsammlungsadministratoren" hinzufügen
* <b>removecollectionadmin</b> - Einen Benutzer aus der Gruppe "Projektsammlungsadministratoren" entfernen
* <b>addcollectionbuildadmin</b> - Einen Benutzer zur Gruppe "Projektsammlungs-Build-Administratoren" hinzufügen
* <b>removecollectionbuildadmin</b> - Einen Benutzer aus der Gruppe "Projektsammlungs-Build-Administratoren" entfernen
* <b>addcollectionbuildsvc</b> - Einen Benutzer zur Gruppe "Projektsammlungs-Build-Dienstkonten" hinzufügen
* <b>removecollectionbuildsvc</b> - Einen Benutzer aus der Gruppe "Projektsammlungs-Build-Dienstkonten" entfernen
* <b>addcollectionsvc</b> - Einen Benutzer zur Gruppe "Projektsammlungs-Dienstkonten" hinzufügen
* <b>removecollectionsvc</b> - Einen Benutzer aus der Gruppe "Projektsammlungs-Dienstkonten" entfernen
* <b>getpipelinevars</b> - Alle Pipeline-Variablen abrufen, die für ein bestimmtes Projekt verwendet werden.
* <b>getpipelinesecrets</b> - Die Namen aller Pipeline-Geheimnisse abrufen, die für ein bestimmtes Projekt verwendet werden.
* <b>getvariablegroups</b> - Alle Variablengruppen und die entsprechenden Variablen abrufen, die für ein bestimmtes Projekt verwendet werden.
* <b>getserviceconnections</b> - Die für ein bestimmtes Projekt verwendeten Dienstverbindungen abrufen.
## Argumente/Optionen
* <b>/credential:</b> - Anmeldeinformationen für die Authentifizierung (PAT oder Cookie). Für alle Module anwendbar.
* <b>/url:</b> - Azure DevOps-URL. Für alle Module anwendbar.
* <b>/search:</b> - Suchbegriff. Nicht für alle Module anwendbar.
* <b>/project:</b> - Projekt, für das eine Aktion ausgeführt werden soll. Nicht für alle Module anwendbar.
* <b>/user:</b> - Aktion gegen einen bestimmten Benutzer ausführen. Nicht für alle Module anwendbar.
* <b>/id:</b> - Wird mit Persistenzmodulen verwendet, um eine Aktion gegen eine bestimmte Token-ID auszuführen. Nicht für alle Module anwendbar.
* <b>/group:</b> - Aktion gegen eine bestimmte Gruppe ausführen. Nicht für alle Module anwendbar.
## Authentifizierungsoptionen
Unten sind die Authentifizierungsoptionen aufgeführt, die Sie mit ADOKit bei der Authentifizierung bei einer Azure DevOps-Instanz haben.
* **Gestohlenes Cookie - UserAuthentication** - Dies wird das `UserAuthentication`-Cookie auf dem Rechner eines Benutzers für die Domäne `.dev.azure.com` sein.
* `/credential:UserAuthentication=ABC123`
* **Gestohlenes Cookie - AadAuthentication** - Dies wird das `AadAuthentication`-Cookie auf dem Rechner eines Benutzers für die Domäne `.dev.azure.com` sein.
* `/credential:eyJ0...`
* **Persönlicher Zugriffstoken (PAT)** - Dies wird ein Zugriffstoken/API-Schlüssel sein, der eine einzelne Zeichenfolge ist.
* `/credential:apiToken`
* **Gestohlenes Zugriffstoken** - Wenn Sie ein entsprechendes Zugriffstoken stehlen oder aktualisieren können, können Sie es ebenfalls verwenden. Bei Verwendung eines Zugriffstokens muss es für die Ressource Azure Resource Manager (ARM) - `"aud":"https://management.core.windows.net/"` oder Azure Devops - `"aud":"499b84ac-1321-427f-aa17-267ca6975798"` gültig sein.
* `/credential:eyJ0..`
## Modul-Detailtabelle
Die folgende Tabelle zeigt die für jedes Modul erforderlichen Berechtigungen.
Angriffsszenario | Modul | Spezielle Berechtigungen? | Notizen
--- | --- | --- | ---
Recon | `check` | Nein |
Recon | `whoami` | Nein |
Recon | `listorgs` | Nein |
Recon | `listrepo` | Nein |
Recon | `searchrepo` | Nein |
Recon | `listproject` | Nein |
Recon | `searchproject` | Nein |
Recon | `searchcode` | Nein |
Recon | `searchfile` | Nein |
Recon | `listuser` | Nein |
Recon | `searchuser` | Nein |
Recon | `listteam` | Nein |
Recon | `searchteam` | Nein |
Recon | `getteammembers` | Nein |
Recon | `listgroup` | Nein |
Recon | `searchgroup` | Nein |
Recon | `getgroupmembers` | Nein |
Recon | `getpermissions` | Nein |
Recon | `creds` | Nein |
Recon | `getbuildlogs` | Ja - `Contributors` oder `Readers` oder `Build Administrators` oder `Project Administrators` oder `Project Team Member` oder `Project Collection Test Service Accounts` oder `Project Collection Build Service Accounts` oder `Project Collection Build Administrators` oder `Project Collection Service Accounts` oder `Project Collection Administrators` |
Recon | `listbuildlogs` | Ja - `Contributors` oder `Readers` oder `Build Administrators` oder `Project Administrators` oder `Project Team Member` oder `Project Collection Test Service Accounts` oder `Project Collection Build Service Accounts` oder `Project Collection Build Administrators` oder `Project Collection Service Accounts` oder `Project Collection Administrators` |
Recon | `searchbuildlogs` | Ja - `Contributors` oder `Readers` oder `Build Administrators` oder `Project Administrators` oder `Project Team Member` oder `Project Collection Test Service Accounts` oder `Project Collection Build Service Accounts` oder `Project Collection Build Administrators` oder `Project Collection Service Accounts` oder `Project Collection Administrators` |
Persistenz | `createpat` | Nein |
Persistenz | `listpat` | Nein |
Persistenz | `removepat` | Nein |
Persistenz | `createsshkey` | Nein |
Persistenz | `listsshkey` | Nein |
Persistenz | `removesshkey` | Nein |
Privilegienausweitung | `addprojectadmin` | Ja - `Project Administrator`, `Project Collection Administrator` oder `Project Collection Service Accounts` |
Privilegienausweitung | `removeprojectadmin` | Ja - `Project Administrator`, `Project Collection Administrator` oder `Project Collection Service Accounts` |
Privilegienausweitung | `addbuildadmin` | Ja - `Project Administrator`, `Project Collection Administrator` oder `Project Collection Service Accounts` |
Privilegienausweitung | `removebuildadmin` | Ja - `Project Administrator`, `Project Collection Administrator` oder `Project Collection Service Accounts` |
Privilegienausweitung | `addcollectionadmin` | Ja - `Project Collection Administrator` oder `Project Collection Service Accounts` |
Privilegienausweitung | `removecollectionadmin` | Ja - `Project Collection Administrator` oder `Project Collection Service Accounts` |
Privilegienausweitung | `addcollectionbuildadmin` | Ja - `Project Collection Administrator` oder `Project Collection Service Accounts` |
Privilegienausweitung | `removecollectionbuildadmin` | Ja - `Project Collection Administrator` oder `Project Collection Service Accounts` |
Privilegienausweitung | `addcollectionbuildsvc` | Ja - `Project Collection Administrator`, `Project Colection Build Administrators` oder `Project Collection Service Accounts` |
Privilegienausweitung | `removecollectionbuildsvc` | Ja - `Project Collection Administrator`, `Project Colection Build Administrators` oder `Project Collection Service Accounts` |
Privilegienausweitung | `addcollectionsvc` | Ja - `Project Collection Administrator` oder `Project Collection Service Accounts` |
Privilegienausweitung | `removecollectionsvc` | Ja - `Project Collection Administrator` oder `Project Collection Service Accounts` |
Privilegienausweitung | `getpipelinevars` | Ja - `Contributors` oder `Readers` oder `Build Administrators` oder `Project Administrators` oder `Project Team Member` oder `Project Collection Test Service Accounts` oder `Project Collection Build Service Accounts` oder `Project Collection Build Administrators` oder `Project Collection Service Accounts` oder `Project Collection Administrators` |
Privilegienausweitung | `getpipelinesecrets` | Ja - `Contributors` oder `Readers` oder `Build Administrators` oder `Project Administrators` oder `Project Team Member` oder `Project Collection Test Service Accounts` oder `Project Collection Build Service Accounts` oder `Project Collection Build Administrators` oder `Project Collection Service Accounts` oder `Project Collection Administrators` |
Privilegienausweitung | `getvariablegroups` | Ja - `Contributors` oder `Readers` oder `Build Administrators` oder `Project Administrators` oder `Project Team Member` oder `Project Collection Test Service Accounts` oder `Project Collection Build Service Accounts` oder `Project Collection Build Administrators` oder `Project Collection Service Accounts` oder `Project Collection Administrators` |
Privilegienausweitung | `getserviceconnections` | Ja - `Project Administrator`, `Project Collection Administrator` oder `Project Collection Service Accounts` |
## Beispiele
### Azure DevOps-Zugriff validieren
#### Anwendungsfall
> *Authentifizierungsprüfung durchführen, um sicherzustellen, dass die Organisation Azure DevOps verwendet und die angegebenen Anmeldeinformationen gültig sind.*
#### Syntax
Geben Sie das Modul `check` an, zusammen mit allen relevanten Authentifizierungsinformationen und der URL. Dies gibt aus, ob die angegebene Organisation Azure DevOps verwendet, und versucht, die angegebenen Anmeldeinformationen zu validieren.
`ADOKit.exe check /credential:apiKey /url:https://dev.azure.com/organizationName`
`ADOKit.exe check /credential:"UserAuthentication=ABC123" /url:https://dev.azure.com/organizationName`
#### Beispielausgabe```
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
#### Anwendungsfall
> *Ermittelt den aktuellen Benutzer und dessen Gruppenmitgliedschaften*
#### Syntax
Geben Sie das `whoami`-Modul zusammen mit den relevanten Authentifizierungsinformationen und der URL an. Dies gibt den aktuellen Benutzer und alle seine Gruppenmitgliedschaften aus.
`ADOKit.exe whoami /credential:apiKey /url:https://dev.azure.com/organizationName`
`ADOKit.exe whoami /credential:"UserAuthentication=ABC123" /url:https://dev.azure.com/organizationName`
#### Beispielausgabe```
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
```
### Organisationen auflisten
#### Anwendungsfall
> *Organisationen mithilfe eines gegebenen Zugriffstokens abrufen.*
#### Syntax
Stellen Sie dem Modul `listorgs` die erforderlichen Authentifizierungsinformationen zur Verfügung. Standardmäßig listet dieser Befehl nur die Organisationen auf, die mit dem bereitgestellten Zugriffstoken zugänglich sind.
- Verwenden Sie **`/mode:aad`**, um **alle** DevOps-Organisationen innerhalb des Azure AD-Mandanten aufzulisten, unabhängig vom direkten Zugriff.
- Verwenden Sie **`/endpoint:ENDPOINT_NAME`**, um einen benutzerdefinierten AEX-Endpunkt anzugeben.
- Zusätzliche Endpunkte können durch Überprüfen des `"X-VSS-DeploymentAffinity"`-Cookies von `aex.dev.azure.com` identifiziert werden.
`ADOKit.exe listorgs /credential:"eyj0..." [/mode:aad] [/endpoint:ENDPOINT_NAME]`
`ADOKit.exe listorgs /credential:"eyj0..." /mode:aad /endpoint:aexprodeus21`
#### Beispielausgabe```
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
```
### Repos auflisten
#### Anwendungsfall
> *Entdecken Sie Repositories, die in einer Azure DevOps-Instanz verwendet werden*
#### Syntax
Geben Sie das Modul `listrepo` zusammen mit allen relevanten Authentifizierungsinformationen und der URL an. Dies gibt den Repository-Namen und die URL aus.
`ADOKit.exe listrepo /credential:apiKey /url:https://dev.azure.com/organizationName`
`ADOKit.exe listrepo /credential:"UserAuthentication=ABC123" /url:https://dev.azure.com/organizationName`
#### Beispielausgabe```
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
```
### Repositories durchsuchen
#### Anwendungsfall
> *Suche nach Repositories anhand des Repository-Namens in einer Azure DevOps-Instanz*
#### Syntax
Geben Sie das Modul `searchrepo` und Ihre Suchkriterien im Befehlszeilenargument `/search:` an, zusammen mit den relevanten Authentifizierungsinformationen und der URL. Dies gibt den passenden Repository-Namen und die URL aus.
`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`
#### Beispielausgabe```
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
```
### Projekte auflisten
#### Anwendungsfall
> *Entdecken Sie Projekte, die in einer Azure DevOps-Instanz verwendet werden*
#### Syntax
Geben Sie das `listproject`-Modul zusammen mit den entsprechenden Authentifizierungsinformationen und der URL an. Dies gibt den Projektnamen, die Sichtbarkeit (öffentlich oder privat) und die URL aus.
`ADOKit.exe listproject /credential:apiKey /url:https://dev.azure.com/organizationName`
`ADOKit.exe listproject /credential:"UserAuthentication=ABC123" /url:https://dev.azure.com/organizationName`
#### Beispielausgabe
`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
```
### Projekte suchen
#### Anwendungsfall
> *Nach Projekten anhand des Projektnamens in der Azure DevOps-Instanz suchen*
#### Syntax
Geben Sie das Modul `searchproject` und Ihre Suchkriterien im Befehlszeilenargument `/search:` an, zusammen mit relevanten Authentifizierungsinformationen und der URL. Dies gibt den passenden Projektnamen, die Sichtbarkeit (öffentlich oder privat) und die URL aus.
`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`
#### Beispielausgabe```
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
```
### Code durchsuchen
#### Anwendungsfall
> *Durchsucht Code nach einem bestimmten Schlüsselwort in einer Azure DevOps-Instanz*
#### Syntax
Geben Sie das `searchcode`-Modul und Ihre Suchkriterien im Befehlszeilenargument `/search:` an, zusammen mit den entsprechenden Authentifizierungsinformationen und der URL. Dies gibt die URL zur übereinstimmenden Codedatei sowie die Zeile im Code aus, die übereinstimmte.
`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`
#### Beispielausgabe```
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
```
### Dateien durchsuchen
#### Anwendungsfall
> *Suchen Sie in Repositorys nach Dateien, die ein bestimmtes Schlüsselwort im Dateinamen enthalten in Azure DevOps*
#### Syntax
Geben Sie das Modul `searchfile` und Ihre Suchkriterien im Befehlszeilenargument `/search:` an, zusammen mit relevanten Authentifizierungsinformationen und der URL. Dies gibt die URL zu der passenden Datei in ihrem jeweiligen Repository aus.
`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`
#### Beispielausgabe```
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
---
[Read more](https://github.com/h4wkst3r/adokit)