
Framework de phishing modulaire avec CLI pour cloner des sites, envoyer des e-mails basés sur des modèles et lancer des campagnes de phishing par e-mail, SMS, iMessage et LinkedIn.
http://section9labs.github.io/Cartero/
Un framework de phishing robuste avec une interface CLI complète. Le projet est né de la nécessité, après des années d'engagements avec des outils qui ne faisaient tout simplement pas le travail. Bien qu'il existe de nombreux projets, nous n'avons pas trouvé de solution adaptée qui nous offre à la fois facilité d'utilisation et personnalisation.
Cartero est un projet modulaire divisé en commandes qui effectuent des tâches indépendantes (c'est-à-dire Mailer, Cloner, Listener, AdminConsole, etc...). De plus, chaque sous-commande dispose d'options de configuration répétables pour configurer et automatiser votre travail.
Par exemple, si nous voulions cloner gmail.com, il suffit d'exécuter les commandes suivantes.```shell ❯❯❯ ./cartero Cloner --url https://gmail.com --path /tmp --webserver gmail_com ❯❯❯ ./cartero Listener --webserver /tmp/gmail_com -p 80 Launching mongodb Puma starting in single mode...
Une fois que nous avons un site opérationnel, nous pouvons simplement utiliser la commande Mailer pour envoyer des e-mails basés sur des modèles à nos victimes:```shell
❯❯❯ ./cartero Mailer --data victims.json --server gmail_com --subject "Internal Memo" --htmlbody email_html.html --attachment payload.pdf --from "John Doe <[email protected]>"
Sending [email protected]
Sending [email protected]
Sending [email protected]
Rejoignez notre communauté Slack sur https://carteroslack.herokuapp.com/
Utilisation de brew 2.1.5 avec ruby comme bibliothèque ruby par défaut```shell ❯❯❯ curl -L https://raw.githubusercontent.com/Section9Labs/Cartero/master/data/scripts/setup.sh | bash
Utilisation de l'installation ruby 2.1.5 via RVM```shell
❯❯❯ curl -L https://raw.githubusercontent.com/Section9Labs/Cartero/master/data/scripts/setup.sh | bash -s -- -r
❯❯❯ \curl -sSL https://get.rvm.io | bash -s stable --ruby
##### MongoDB
Cartero utilise MongoDB + la bibliothèque MongoID pour stocker les données du côté Listener et Admin.
Sur OSX :```shell
❯❯❯ brew install mongodb
Sur Ubuntu / Kali / Debian```shell ❯❯❯ apt-get install mongodb
Sur Arch Linux```
❯❯❯ pacman -Syu mongodb
❯❯❯ git clone https://github.com/section9labs/Cartero ❯❯❯ cd Cartero ❯❯❯ gem install bundle ❯❯❯ bundle install ❯❯❯ cd bin
### Utilisation
### Commandes
Cartero est un CLI très puissant et facile à utiliser.```shell
❯❯❯ ./cartero
Usage: cartero [options]
List of Commands:
AdminConsole, AdminWeb, Mailer, Cloner, Listener, Servers, Templates
Global options:
--proxy [HOST:PORT] Sets TCPSocket Proxy server
-c, --config [CONFIG_FILE] Provide a different cartero config file
-v, --[no-]verbose Run verbosely
-p [PORT_1,PORT_2,..,PORT_N], Global Flag fo Mailer and Webserver ports
--ports
-m, --mongodb [HOST:PORT] Global Flag fo Mailer and Webserver ports
-d, --debug Sets debug flag on/off
--editor [EDITOR] Edit Server
Common options:
-h, --help [COMMAND] Show this message
--list-commands Prints list of commands for bash completion
--version Shows cartero CLI version
Il s'agit d'un simple wrapper pour MongoDB qui nous permet de démarrer et d'arrêter la base de données avec les commandes correspondantes et sur le bon chemin ~/.cartero.```shell ❯❯❯ ./cartero Mongo Usage: Cartero Mongo [options] -s, --start Start MongoDB -k, --stop Stop MongoDB -r, --restart Restart MongoDB -b, --bind [HOST:PORT] Set MongoDB bind_ip and port
Common options: -h, --help Show this message --list-options Show list of available options
#### Cloner
Un cloner de site Web qui nous permet de télécharger et de convertir un site Web en une application Cartero WebServer.
Nous pouvons rapidement et facilement personnaliser le site pour récolter des identifiants, héberger des payloads serveur, ou modifier entièrement le site pour de nombreux usages.```shell
❯❯❯ ./cartero Cloner
Usage: Cartero Cloner [options]
-U, --url [URL_PATH] Full Path of site to clone
-W, --webserver [SERVER_NAME] Sets WebServer name to use
-p, --path [PATH] Sets path to save webserver
-P, --payload [PAYLOAD_PATH] Sets payload path
--useragent [UA_STRING] Sets user agent for cloning
--wget Use wget to clone url
--apache Generate Apache Proxy conf
Common options:
-h, --help Show this message
--list-options Show list of available options
Par défaut, la commande utilise notre implémentation Ruby pour télécharger et convertir les liens en vue de leur rendu, mais nous prenons également en charge une option --wget qui utilisera la commande système wget locale.
Le listener est responsable de l'exécution du WebServer créé via Cloner ou d'un site créé manuellement. Par défaut, nous présentons un site web très simple si aucun n'est fourni.```shell ❯❯❯ ./cartero Listener Usage: Cartero Listener [options] -i, --ip [1.1.1.1] Sets IP interface, default is 0.0.0.0 -p [PORT_1,PORT_2,..,PORT_N], Sets Email Payload Ports to scan --ports -s, --ssl Run over SSL. [this also requires --sslcert and --sslkey] -C, --sslcert [CERT_PATH] Sets Email Payload Ports to scan -K, --sslkey [KEY_PATH] Sets SSL key to use for Listener. -V, --views [VIEWS_FOLDER] Sets SSL Certificate to use for Listener. -P, --public [PUBLIC_FOLDER] Sets a Sinatra public_folder -W [WEBSERVER_FOLDER], Sets the sinatra full path from cloner. --webserver --payload [PAYLOAD] Sets a payload download to serve on /download --customapp [CUSTOM_SINATRA] Sets a custom Sinatra::Base WebApp. Important, WebApp name should be camelized of filename
Common options: -h, --help Show this message --list-options Show list of available options
Les WebServers prennent en charge les clés SSL et les hôtes virtuels sur plusieurs IP, noms d'hôtes et ports.
#### Serveurs
Afin d'envoyer des campagnes d'e-mails, nous devons configurer des serveurs de messagerie et cette commande permet à Cartero de créer, stocker et lister les serveurs. Toutes les données sont stockées dans le répertoire de configuration ~/.cartero.```shell
./cartero Servers
Usage: Cartero Servers [options]
-a, --add [NAME] Add Server
-e, --edit [NAME] Edit Server
-d, --delete [NAME] Edit Server
-l, --list List servers
Configuration options:
-T, --type [TYPE] Set the type
-U, --url [DOMAIN] Set the Mail or WebMail url/address
-M, --method [METHOD] Sets the WebMail Request Method to use [GET|POST]
--api-access [API_KEY] Sets the Linkedin API Access Key
--api-secret [API_SECRET] Sets the Linkedin API Secret Key
--oauth-token [OAUTH_TOKEN] Sets the Linkedin OAuth Token Key
--oauth-secret [OAUTH_SECRET]
Sets the Linkedin OAuth Secret Key
Common options:
-h, --help Show this message
--list-options Show list of available options
Tout comme les serveurs, les campagnes d'e-mails ont également besoin d'un modèle prédéfini pour envoyer du contenu aux victimes. Ce module permet à l'attaquant de suivre, créer, lister et modifier les modèles utilisés dans sa campagne.
Remarque : Il n'est pas nécessaire de configurer les modèles ici, et Mailer accepte un chemin direct vers les modèles d'e-mails à partir de la CLI.```shell ❯❯❯ ./cartero Templates Usage: Cartero Templates [options] -a, --add [NAME] Add Template -e, --edit [NAME] Edit Template -d, --delete [NAME] Edit Template -l, --list List Templates -h, --help Show this message
#### Mailer
La commande et le composant principal du framework Cartero -- Il permet à Cartero d'envoyer des e-mails personnalisés via des modèles à une ou plusieurs adresses e-mail.
Chaque e-mail peut être personnalisé à l'aide du puissant moteur de modèles erb, permettant aux utilisateurs de créer des règles programmatiques complexes dans les modèles afin d'envoyer de grandes quantités d'e-mails très ciblés.
Pour plus d'informations sur la création de modèles personnalisés, veuillez vous référer à nos Exemples.```shell
❯❯❯ ./cartero Mailer
Usage: Cartero Mailer [options]
-D, --data [DATA_FILE] File containing template data sets
-S, --server [SERVER_NAME] Sets Email server to use
-s, --subject [EMAIL_SUBJECT] Sets Email subject
-f, --from [EMAIL_FROM] Sets Email from
-r, --reply-to [EMAIL_REPLY_TO] Sets Email from
-b, --body [FILE_PATH] Sets Email Text Body
-B, --htmlbody [FILE_PATH] Sets Email HTML Body
-c, --charset [CHARSET] Sets Email charset
-C [CONTENT_TYPE], Sets Email content type
--content-type
-a [FILE_1,FILE_2,..,FILE_N], Sets Email Attachments
--attachment
-p [PORT_1,PORT_2,..,PORT_N], Sets Email Payload Ports to scan
--ports
Common options:
-h, --help Show this message
--list-options Show list of available options
Cette commande prend en charge une alternative aux serveurs SMTP / IMAP en envoyant des messages via des services de webmail connus comme vulnérables ou anonymes par le biais de requêtes web.```shell ❯❯❯ ./cartero WebMailer Usage: Cartero WebMailer [options] -R, --raw [RAW_REQUEST_FILE] Sets WebMail Raw Request -S, --server [SERVER_NAME] Sets WebMail server to use -U, --url [URL:PORT] Sets WebMail server url to use -H [HEADER:VAL\nHEADER:VAL], Sets WebMail Headers to use --headers -C, --cookies [COOKIES] Sets WebMail Cookies to use -D, --data [DATA_FILE] File containing template data sets -s, --subject [EMAIL_SUBJECT] Sets Email subject -f, --from [EMAIL_FROM] Sets Email from -r, --reply-to [EMAIL_REPLY_TO] Sets Email reply-to -b, --body [REQUEST_FILE_PATH] Sets Email Text request query Body -p [PORT_1,PORT_2,..,PORT_N], Sets Email Payload Ports to scan --ports
Common options: -h, --help Show this message --list-options Show list of available options
La commande peut être utilisée de deux manières principales. L'une en utilisant une commande brute comme celle obtenue en interceptant le trafic avec un proxy web (par exemple Burp Proxy) et/ou en utilisant la commande servers disponible sur Cartero.
#####Exemple de serveur de webmail pour send-mail.org```json
{
"name": "send-email",
"type": "webmail",
"options": {
"url": "http://send-email.org/send",
"method": "POST",
"cookies": "",
"headers": {
"Host": "send-email.org",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:29.0) Gecko/20100101 Firefox/29.0",
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Language": "en-US,en;q=0.5",
"Accept-Encoding": "gzip, deflate",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest",
"Referer": "http://send-email.org/",
"Content-Length": "126",
"Connection": "keep-alive",
"Pragma": "no-cache"
}
},
"confirmation" : "Your message was sent!"
}
Grâce à cette requête préconfigurée, nous pouvons facilement envoyer des messages en utilisant les mêmes ensembles de données pour Mailer et le même type de modèles. Un exemple est disponible dans /templates/mail/sample.web
#####Exemple de commande :```shell ❯❯❯ ./cartero WebMailer -S webmail -D ~/sample.json -b ../templates/mail/sample.web -r [email protected]
#### LinkedIn
La commande LinkedIn est le premier ajout de réseau social au Cartero Framework. Ce plugin permet aux attaquants d'utiliser la plateforme sociale pour envoyer des messages et attaquer les utilisateurs, le tout depuis LinkedIn.```shell
❯❯❯ ./cartero LinkedIn
Usage: Cartero LinkedIn [options]
-D, --data [DATA_FILE] File containing template data sets
-S, --server [SERVER_NAME] Sets Email server to use
-s, --subject [MESSAGE_SUBJECT] Sets LinkedIn Message subject
-b, --body [FILE_PATH] Sets LinkedIn Message Body
-l, --list [CONNECTIONS|GROUPS] List json of (connections or groups)
--send [MESSAGE|GROUP_UPDATE]
Send one or more (message/s or group/s updates)
-o, --save [FILE_PATH] Sets LinkedIn Message Body
Common options:
-h, --help Show this message
--list-options Show list of available options
La commande nécessite une API de développeur et une clé oauth sur le profil de l'attaquant. Cela peut être facilement obtenu sur https://www.linkedin.com/secure/developer. et un nouveau modèle de serveur peut être créé avec la commande Server.
Permet à Cartero, sur OS X, d'envoyer des iMessages aux adresses des victimes tout comme des e-mails, mais ceux-ci apparaîtront sur chaque iDevice qu'elles ont enregistré auprès d'apple.
Contexte: Après avoir lu des nouvelles sur la façon dont des spammeurs chinois abusent du fait que les messages iMessage seront affichés sur tous les appareils liés au(x) compte(s), une commande rapide a été développée pour permettre aux utilisateurs de Cartero de disposer également de cette fonctionnalité dans le Framework.
Important: cela ne fonctionnera que sous OSX, pour l'instant```shell ❯❯❯ ./cartero IMessage Usage: Cartero IMessage [options] IMPORTANT: This command only works on OSX
-D, --data [DATA_FILE] File containing template data sets
-A, --attachment [ATTACHMENT] Sets iMessage file path to send
-b, --body [BODY_FILE] Sets iMessage message
-m, --message [MESSAGE] Sets iMessage message
Common options: -h, --help Show this message --list-options Show list of available options
iMessage ne permet pas d'envoyer un seul message contenant à la fois du texte et des pièces jointes, mais lorsque les deux sont fournis, le message sera divisé et envoyé sous forme de deux messages individuels.
#####Exemple de commande```shell
❯❯❯ ./cartero IMessage --data /Users/cartero/Desktop/test.json -b ../templates/mail/sample.imsg -a /Users/cartero/Downloads/jon.jpg
Si vous avez un compte GoogleVoice et souhaitez envoyer automatiquement des SMS, cela pourrait être une bonne façon de le faire. Il suit la même infrastructure que toutes les autres commandes.````shell ❯❯❯ ./cartero GoogleVoice Usage: Cartero GoogleVoice [options] -D, --data [DATA_FILE] File containing template data sets -S, --server [SERVER_NAME] Sets SMS server to use -b, --body [FILE_PATH] Sets SMS Text Body -m, --message [MESSAGE] Sets SMS message -u, --username [USER] Sets Google Voice Username -p, --password [PWD] Sets Google Voice password
Common options: -h, --help Show this message --list-options Show list of available options
#### Twilio
Si vous disposez d'un compte Twilio et souhaitez envoyer automatiquement des SMS, c'est peut-être une autre façon d'envoyer des SMS. Il convient de noter qu'il s'agit d'un service payant et qu'il nécessite un jeton d'accès valide (sid) et un secret (secret_token). Pour plus d'informations, veuillez consulter le site Web de Twilio à l'adresse https://www.twilio.com/sms/api````shell
❯❯❯ ./cartero Twilio
Usage: Cartero Twilio [options]
-D, --data [DATA_FILE] File containing template data sets
-S, --server [SERVER_NAME] Sets SMS server to use
-f, --from [NUMBER] Sets SMS from number to use
-b, --body [FILE_PATH] Sets SMS Text Body
-m, --message [MESSAGE] Sets SMS message
-u, --sid [SID] Sets Twilio Username
-p, --token [TOKEN] Sets Twilio password
-A, --attachment [PATH_1||PATH_2||PATH_3] Sets Twilio MMS URL image paths to send
Common options:
-h, --help Show this message
--list-options Show list of available options
L'interface Web Admin est une application Web simple qui permet à l'attaquant de récupérer des informations sur toutes les campagnes.```shell ❯❯❯ ./cartero AdminConsole Usage: Cartero AdminConsole [options] -i, --ip [1.1.1.1] Sets IP interface, default is 0.0.0.0 -p [PORT_1,PORT_2,..,PORT_N], Sets Email Payload Ports to scan --ports -s, --ssl Run over SSL. [this also requires --sslcert and --sslkey] -C, --sslcert [CERT_PATH] Sets Email Payload Ports to scan -K, --sslkey [KEY_PATH] Sets Email Payload Ports to scan
Common options: -h, --help Show this message --list-options Show list of available options
#### AdminConsole
La console d'administration est un outil CLI qui permet de lister les informations sur les personnes, les campagnes, les hits et les identifiants collectés.```shell
❯❯❯ ./cartero AdminConsole
Usage: Cartero AdminConsole [options]
-p, --persons [LATEST_N] Display the list of persons that responded
-i, --hits [LATEST_N] Display the list of hits
-c, --creds [LATEST_N] Display the list of Credentials
-a, --all Sets Email Payload Ports to scan
-f, --filter flag to search by parameters
--email [EMAIL] Display the list of hits
--campaign [CAMPAIGN] Display the list of hits
--ip [IP_ADDRESS] Display the list of hits
Common options:
-h, --help Show this message
--list-options Show list of available options
Les commandes disposent d'un framework assez simple. Les exemples de commandes du framework sont stockés dans Cartero/lib/cartero/commands/*.rb et ~/.cartero/commands/*.rb.```ruby module Cartero module Commands class CommandName < ::Cartero::Command
description( name: "Long Command Name Here", description: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", author: ["Author Name <noname [©] cartero.com>"], type:"General", license: "LGPL", references: [ "https://section9labs.github.io/Cartero", "https://section9labs.github.io/Cartero" ] )
def initialize super do |opts| #OptionsParser options available here. opts.on("-x", "--xoption [DATA_FILE]", String, "Description of command option") do |data| @options.xoption = data end opts.on("-y", "--yoption [DATA_FILE]", String, "Description of command option") do |data| @options.xoption = data end # help() option already provided. # --list-options for auto-complete automatic. end end
def setup # This will be hooked and run before run(). # It is meant as a method so the commands can run everything before that. end
def run # Everything that will run. end
def after # This is the place to run clean-up code. end end end end
### Modèles d'e-mails
Les e-mails sont de simples fichiers txt ou des fichiers HTML limités, selon le format utilisé. Cartero permet un templating complexe grâce à la bibliothèque Ruby erb et à une interface CLI pour aider à créer et à mettre en forme les deux formats.
Les fichiers peuvent être largement personnalisés pour la campagne grâce à erb, qui fournit une substitution dynamique et des décisions programmatiques au moment de l'exécution.
Une autre fonctionnalité importante est le self[:payload] chiffré qui doit être ajouté dans chaque modèle d'e-mail, permettant à Cartero d'identifier l'entité source malgré de multiples transferts ou clics. Ce petit payload est chiffré à l'aide d'une clé générée aléatoirement, ce qui permet aux attaquants de garder leurs données sources sécurisées et à l'abri de la détection.
**EXEMPLE DE FICHIER DE DONNÉES**```json
[{
"email": "[email protected]",
"name": "John Doe"
}, {
"email": "[email protected]",
"name": "Gas Hill"
}, {
"email": "[email protected]",
"name": "John Doe 2"
}, {
"email": "[email protected]",
"name": "Jane Doe - Hotmail",
"subject": "Hotmail Test 123"
}]
MODÈLE D'EXEMPLE HTML```html
This is an automated email to your email <%= self[:email] %>.
<% if self[:ports] %> <% self[:ports].each do |port| %> /image?key=<%= self[:payload] %>"> <% end %> <% end %>
**MODÈLE D'ÉCHANTILLON DE TEXTE**```txt
Hola <%= self[:name] %>,
This email needs to be displayed as HTML.
This is an automated email to your email<%= self[:email] %>.
In addition, this email can also be displayed securely
on http://192.168.1.216:8080/click?key=<%= self[:payload] %>
cheers,
<%= self[:from_name] %>
Les serveurs peuvent être gérés à l'aide de la commande Servers, qui permet d'ajouter, de modifier et de supprimer des serveurs. Remarque : Les serveurs peuvent être modifiés manuellement dans ~/.cartero/servers/*.json
####smtp```json { "name": "gmail", "type": "smtp", "options": { "address": "smtp.yourserver.com", "port": 25, "user_name": "user", "password": "password", "authentication": "plain", "domain": "localhost.localdomain" } }
####linkedin```json
{
"name": "linkedin",
"type": "linkedin",
"options": {
"api_access": "api_access",
"api_secret": "api_secret",
"oauth_token": "oauth_token",
"oauth_secret": "oauth_secret"
}
}
####webmail```json { "name": "webmail-sample", "type": "webmail", "options": { "url": "http://www.send-email.com/data/send/email", "method": "POST", "cookies": "sdajsda09s7das923i3j2l131;21381903810", "headers": { "x-forward": "asdadadasad" } }, "confirmation" : null }
### CHANGELOG
- [CHANGELOG](https://github.com/mrbrutti/cartero/blob/HEAD/CHANGELOG.md)
### TODO
- [TODO](https://github.com/mrbrutti/cartero/blob/HEAD/TODO.md)