Conférence HACKTIVITY 2012. The Big Bang Theory: The Evolution of Pentesting in Enhanced Security. Partie 1

Salutations à tous, comment allez-vous? J'espère que vous allez bien, alors écoutez. Écoutez ce qui m'arrive toujours quand je quitte l'Amérique et que je viens en Asie ou en Europe, dans tous ces autres pays. Je commence à parler, je monte sur scène et commence à parler avec les gens, je leur dis ... comment le dire politiquement ... les gens qui ne sont pas américains sont aussi des gens très gentils, et je suis heureux de les voir et de les entendre.



Écoutez, je pense que vous me comprendrez correctement, alors détendez-vous un peu, redressez les épaules, je suis sérieux! OK, quand je fais mon travail ici, je veux que vous soyez en contact avec moi, pour ainsi dire. J'ai un point d'accès sans fil et quelques applications vulnérables en désordre complet, et j'ai une idée de comment mettre vos programmes en désordre ... L'année dernière, j'ai parlé et je me suis saoulé sur scène, puis, après cela, un critique est venu me voir et m'a dit: « Hé Joe, tu avais une présentation normale, mais la démo n'était clairement pas suffisante! » Par conséquent, aujourd'hui, toute ma présentation sera une démonstration solide, et je me demande ce que vous pourriez ne pas aimer d'autre.

Donc, "L'évolution du pentesting dans des conditions de sécurité accrue". Cela fait 10 ans que je plante le filet et à quel point ils étaient merdiques, ils sont restés les mêmes. Je ne sais pas si vous avez une expérience avec eux, mais le réseau est toujours nul. Et les applications sont toujours nulles. Que se passe-t-il maintenant? Nous avons maintenant 50 millions de produits de sécurité protégeant vos applications, alors quoi? - Suce! - Et tu sors avec eux sur le net, quoi quoi? - Suce! - Et nous avons un tas de choses qui protègent tout ça, ça craint!

Alors, quel sera mon travail aujourd'hui? Qui suis-je? La plupart des networkers me connaissent, je suis un black aux conférences de sécurité, oui, c'est moi, le même gars qui dit habituellement: "Eh bien, celui-ci, comme lui ... un Africain de couleur ... je l'ai vu avant!"

Très bien les gars, pendant un certain temps, j'étais occupé à pirater des réseaux. Donc, je suis un cracker, je suis une malédiction, et celui qui me connaît sait aussi que j'aime boire du rhum et du Coca-Cola. Mais quelque chose a changé dans ma vie, j'ai commencé une nouvelle petite amie, et elle est folle parce que je bois trop et qu'elle n'aime vraiment pas comment je mange, c'est pourquoi j'ai besoin de voyager, donc j'ai dû venir ici, J'ai dû manger tout ce goulasch gras. Alors ne lui dites pas ce que je mange et bois.

Sur cette diapositive, vous voyez ma première performance au DefCon il y a 10 ans, regardez, alors il y avait encore des moniteurs CRT, est-ce que quelqu'un s'en souvient?



J'ai parlé avec beaucoup de gens là-bas et nous étions engagés dans la «capture du drapeau» avec eux. "Capturez le drapeau" - c'était juste une expérience incroyable qui a complètement miraculeusement changé ma vie, tout comme Jésus, j'étais prêt à m'exclamer "Alléluia!", C'était tellement incroyable.
Donc, ce que je veux faire, c'est créer le test Capture the Flag pour les débutants. Si vous êtes débutant, vous n'avez probablement jamais participé à Capture the Flag. Il y a un cours de formation mensuel pour ce test, qui comprend l'étude des problèmes de chiffrement et de déchiffrement, le test d'un réseau, les tests de logiciels malveillants, l'étude des problèmes de rétro-ingénierie, l'utilisation d'exploits, etc. Il s'agit d'un événement très solide et amusant. En bref, essayons de faire quelque chose de similaire.

Sur la diapositive, vous voyez les paramètres du réseau sans fil, je vous demande de ne pas le casser. Si vous souhaitez accéder à un réseau appelé joe-hacktivity-demo, vous pouvez utiliser ce mot de passe.



Il y a un fichier texte ici, la raison de sa création est simplement de vous permettre de copier et coller les informations dans la barre d'adresse du navigateur. Habituellement, les gens le font avec des choses comme Windows 7, mais tout ce dont vous avez besoin dans ce cas est juste un navigateur Web. Donc, si vous avez Firefox, Chrome, il vous suffit d'ouvrir votre iPad ou votre ordinateur portable, de copier ce texte et de vous rendre sur le site Web de la librairie en ligne. J'ai un système de détection d'intrusion IDS, je fais fonctionner Snort Box, et nous allons simplement garder ce réseau opérationnel. Nous allons utiliser un tas d'applications Web, un tas d'injections SQL, un tas de scripts intersites contre cet hôte qui a cette application Web. Ensuite, nous avons une autre «boîte» dans laquelle il y a un pare-feu configuré pour que je puisse vous guider autour de certains identifiants et pare-feu. Nous y entrons, en discutons et faisons des choses intéressantes là-bas.

Alors, dois-je continuer d'expliquer ou puis-je commencer? Bon, commençons. J'ai un système de détection d'intrusion délicat dans mon ordinateur portable ici. Maintenant, je vais agrandir l'image sur l'écran où le fichier texte est affiché. Vous pouvez vérifier son adresse dans la barre du navigateur, c'est notre fichier texte.



Je vais implémenter des scripts intersites en utilisant du SQL trivial, mais si vous voulez bricoler l'application plus sérieusement, vous pouvez vérifier ce fichier texte, qui a deux applications. L'application 2.6, développée sur la plate-forme ASP.NET, vérifie que le réseau fonctionne, il s'agit d'une version mise à jour de la plate-forme DotNet avec une bibliothèque de script intersite et quelques autres mécanismes de sécurité, et un fichier web.config modifié pour charger d'autres bibliothèques de sécurité.

L'application à 2.7 est la même application que la précédente, mais elle a non seulement toutes les fonctionnalités de sécurité DotNet, mais aussi un pare-feu pour les applications réseau. Donc, je veux "brouiller" avec cette application à 2,35, et je vais en parler.



Si vous connaissez les bases de l'écriture de scripts intersites et de l'injection SQL, vous comprendrez ce que sont les versions 2.6, 2.5 et 2.7. Nous avons donc ce fichier texte que nous pouvons copier et coller. Parlons du paramètre que j'insère dans la barre d'adresse de notre site. Il s'agit de bookdetail.aspx? Id = 2, et le point d'interrogation signifie que l'ID du paramètre ID dont nous avons besoin est 2. En fait, ce qui se passe, c'est que l'interface de votre serveur Web parle à la base de données du serveur Web pour savoir s'il y a une entrée, lié à cet identifiant de données est un ID avec une valeur de 2. Et la base de données répond à l'interface: "oui, mec, j'ai ce dont vous avez besoin!"



Ce que nous allons faire maintenant, c'est de vérifier si l'injection SQL fonctionne pour nous. Par conséquent, nous allons jeter ici un code simple sous forme de guillemets à la fin et voir que cela a conduit au message d'erreur "Ouvrir les guillemets après la chaîne de caractères". Il s'agit de l'un des tests les plus courants lorsque vous remplacez un paramètre par un guillemet ou utilisez le guillemet directement comme paramètre. Cela arrive souvent et il n'y a rien de surprenant.



Essayons un peu différemment. Je remplacerai la chaîne de paramètres par la valeur bookdetail.aspx? Id = 4. Veuillez noter - lorsque je remplace ce 4 par un deux, la page affichée change, l'image en haut de la page change. Essayez maintenant de prendre les deux entre parenthèses, l'image a encore changé. Si j'écris à la fin de la ligne (4-2), l'image sera la même qu'avec 2 à la fin de la ligne. Si j'écris entre parenthèses (4-1), la page aura la même apparence que si je mets le chiffre 3 à la fin, c'est-à-dire que j'assimile l'ID au triple.



Alors, lequel d'entre vous a exploré ces questions tout en faisant un pentesting? Vous pensez que oui: "OK, je vais coller le code SQL ici dans la barre d'adresse, et il me redirigera vers la page d'accueil, et maintenant je le changerai, et il pourra m'envoyer où j'en ai besoin ou encore sur la page d'accueil." En fait, vous supprimez les messages d'erreur et l'absence d'un message d'erreur ODBS vous fait danser de joie car vous avez pu injecter du code SQL.

Je vois que quelque chose ne va pas, mais je ne peux pas le réparer. Et que se passe-t-il? Votre développeur se considère comme le plus intelligent car il a pu supprimer les messages d'erreur. Mais que se passe-t-il vraiment lorsque vous forcez la base de données à effectuer tous ces calculs arithmétiques?

Ainsi, la base de données effectue ce calcul: (4-1), et nous obtenons la page 3. Nous venons de prouver que l'injection SQL est maintenant possible. Vous pouvez donc retourner voir le développeur et lui dire: "non, non, non, mec, tu as toujours la possibilité d'injection SQL, malgré le fait qu'il n'y ait pas de message d'erreur!" Vous ne pouvez que le réparer un peu, et cela se produit tout le temps et partout.

J'ai utilisé des astuces de ce type, mais les jeux changent, et maintenant beaucoup de gens utilisent une telle chose comme un pare-feu d'application Web. Par conséquent, si vous entrez quelque chose comme: 2 ou 1 dans (sélectionner l'utilisateur) - dans la chaîne de paramètre d'adresse, vous obtenez généralement un message d'erreur en raison du préfixe incorrect du nom du propriétaire de la base de données DBO (propriétaire de la base de données) pour ce type de données. Dans ce cas, le pare-feu tombe dans le piège à ce stade du choix de l'utilisateur et dit: "non, non, non, je ne peux pas faire de choix"!



Par conséquent, lorsque vous voyez de telles choses, cela signifie que si vous n'avez pas encore déterminé si vous avez rencontré un pare-feu d'application Web ou si vous ne faites pas ces astuces arithmétiques, il existe toujours un bon moyen de savoir s'il y a une injection SQL dans ce cas et si Cette application Web est un pare-feu.

Je vais vous dire qu'il y a une chose terrible: la nécessité de procéder au pentesting de la chaîne de vente au détail. Est-ce que l'un d'entre vous sait ce que cela signifie en anglais? PCI? Je déteste PCI, mais je suis constamment engagé dans le pentesting de la chaîne de vente au détail. PCI est une norme de sécurité des données basée sur le règlement PCI DSS (2008 Payment Card Industry Data Security Standard). «Retail Network Pentesting» vous permet de vérifier la conformité avec la norme PCI et d'identifier les menaces réelles.

Cette norme est une sagesse infinie qui dit la vérité: "ils doivent ... cela doit être ..." et vous devez utiliser des normes de chiffrement sécurisées conformément aux normes d'authentification internationales, et vous le ferez ... ou vous pouvez utiliser le pare-feu de votre application Web.

Tous les utilisateurs avec qui j'ai travaillé ont fait la bonne chose, ils ont effectué la modélisation des menaces, puis ils ont organisé une réunion, une autre réunion, puis ils se sont à nouveau rencontrés et ont finalement tout réglé. Tu le crois? Et non! Ils "ont rendu leur camion" et ses capteurs de stationnement ont émis de tels signaux inverses. Ils ont simplement caché le problème dans un placard, hors de vue, et ont dit: "nous avons tout réglé!"

Je vais maintenant vous montrer encore une chose qui, à mon avis, est très intéressante à jouer. Regardez ici. Tout ce que j'ai fait jusqu'à présent, c'est implémenter SQL. Maintenant, je vais le faire - je vais sélectionner l'adresse de la base de données principale, la copier et la coller dans la barre d'adresse du navigateur. Nous voyons que la première base de données est appelée «BookApp» lorsque le dernier paramètre de la chaîne de paramètres d'adresse est 0.



Maintenant, je vais remplacer ce 0 par 1, et vous verrez ce qui s'est passé - nous avons vu que la deuxième base de données est appelée «maître».



Ensuite, nous changeons 1 en 2 et voyons que la base de données suivante s'appelle «tempdb».



Aide-moi maintenant! Pourriez-vous dire que nous avons identifié l'injection SQL? Oui, c'est parfait! Mais le problème est que rien dans mon programme de détection d'intrusion IDS n'est devenu rouge! Ce truc, qui n'est pas rouge à l'écran, quand on fait l'injection SQL, aucune menace n'a été détectée!



Ok, maintenant regarde ici - je dois faire quelque chose de mal. Je ne prends pas les informations de la base de données directement de la base de données, et qu'est-ce que cette chose me dit que je souligne en rouge?



Non, attends une minute! Je vais essayer de le faire différemment. Au lieu de la numérotation de la base de données, utilisons la numérotation de la ligne du tableau ci-dessus qui est écrite «Erreur d'injection SQL - récupération d'une table de base de données».



Je copie ces données et les colle dans la barre d'adresse du navigateur. Regardez ce que nous avons maintenant - la phrase (sélectionnez le premier nom parmi les sujets où xtype = char (85)) - donne quoi?

À droite, le nom de la base de données BOOKMASTER principale. Je pense que c'est l'injection SQL, qui pense la même chose? Même Stevie Wonder pouvait voir qu'il s'agissait d'une injection SQL!



Mais regardons ici - 0 menace! Mais c'est un système bon marché, il a des erreurs, les règles n'ont pas été mises à jour.



Je pense que les règles de validation IDS sont un peu dépassées, je les ai téléchargées ce matin, et elles sont un peu, un peu dépassées. Peut-être que je me suis trompé ici, j'ai téléchargé les anciennes règles et j'ai dû télécharger les dernières règles, qui ne durent pas plus de 3 heures - je ne sais pas.
Mais regardons plus loin. Et si nous essayons de copier d'autres données sur lesquelles il est indiqué «Erreur d'injection SQL - récupération de 2 tables de base de données».



Ainsi, les enregistrements de la 2e base de données nous donnent ce qu'on appelle des «sysdiagrammes».



Autrement dit, nous avons posé la question, le paramètre xtype = char (85)) et le nom 'BOOKMASTER' peuvent-ils donner le nom d'un niveau supérieur à BOOKMASTER? En d'autres termes, le système peut-il me donner le nom de la table qui suit? C'est ainsi que nous listons la base de données - dès que vous récupérez le nom de la base de données et le nom de la table, vous continuez à demander: "Hé mec, puis-je obtenir un nom de table plus grand que celui que je regarde en ce moment?", Et vous continuez simplement ce processus et obtenez les noms des nouvelles tables.

Mais revenons en arrière et regardons mon programme - cela montre encore une fois que le nombre de menaces de sécurité uniques est de 0. Nous avons encore un problème!



Que se passe-t-il si j'essaie l'injection SQL basée sur l'union, SQL basée sur l'union? Ici, j'ai plusieurs autres types d'injections SQL, et maintenant nous insérons simplement une ligne qui pointe immédiatement vers un enregistrement dont l'ID est 100.



Par conséquent, nous obtenons la réponse que le nombre 100 est en dehors de la plage de valeurs valide. Parce que si j'ai 10 colonnes, puis-je en choisir 5? Bien sûr! Puis-je choisir 20 colonnes sur 10? Bien sûr que non! Autrement dit, la base de données répond: "Je suis désolé, mec, mais je n'ai pas autant de colonnes!" Très bien, je change de 100 à 50, et elle m'écrit à nouveau: "50 est hors de portée". D'accord, qu'en est-il de 25? Non, 25 est également hors de portée. Dites-moi quoi d'autre composer? 13? C'est un numéro malchanceux, mais bon, nous composons le 13, et il est également hors de portée.

Prenons 9! Génial, les neuf ont fonctionné! C'est l'entrée correcte, j'ai besoin de plus de 9, mais moins que la valeur limite, alors jouons un peu plus pour savoir combien de colonnes notre table a.



Alors, comment pouvons-nous déterminer le nombre de colonnes dans une table? Maintenant, nous allons insérer dans la barre d'adresse une séquence de 1 à 9, qui est appelée «déclaration d'union» ou «déclaration unie». Cette instruction combine ce que le développeur a écrit avec ce que vous avez écrit vous-même.



Mais vous devez avoir le bon nombre de chiffres pour les deux options afin de déterminer le numéro sur lequel se terminent vos colonnes. Nous allons faire cette astuce - attribuer au nombre 2 une valeur négative, c'est-à-dire la fixer dans la barre d'adresse 2 par –2. Voyez ce que nous obtenons.



L'image avec la couverture du livre a disparu, mais tous ces chiffres sont apparus - ce sont les numéros de colonne dans le tableau de la base de données. Allez, dis-moi le numéro! Deux? Eh bien, que ce soit 2. Je remplace 2 dans la séquence par le mot "utilisateur", et maintenant l'utilisateur dbo apparaît à la place du nom du livre 2 sur la page.



Et si je passe au numéro 3? Ensemble, j'écrirai le numéro 3 @@ version. Vous voyez ce que nous avons sur la page maintenant?



Maintenant les gars m'aident! Pouvons-nous maintenant dire que nous avons une injection SQL?



Toujours rien! Le système de sécurité ne voit aucune injection SQL.

J'ai commencé ma carrière dans la sécurité en tant qu'analyste de systèmes de détection d'intrusions IDS. C'était une vie terrible, il fallait surveiller les interceptions de paquets toute la journée, et probablement rien de plus que, probablement, le mariage, donc ça ne vous oblige pas à vous mettre une balle dans la tête.

Je veux dire, j'étais comme les autres, j'ai vu toute la journée que c'était très mauvais, et quand vous commencez à voir ces choses qui passent près de vous, c'est tout simplement à couper le souffle, c'est fou.

Disons donc que nous allons faire quelque chose d'intéressant. Je vais peut-être le sortir d'ici, le copier et le faire glisser ici. Donc, j'insère la version de la base de données, le nom du serveur dans la barre d'adresse, puis master.sys.fn_varbintohexstr (password_hash) - rien d'intéressant, non?



Maintenant, nous obtenons de telles données sur la page, et je pense que la ligne supérieure nous sera utile.



L'important est que nous puissions découvrir que IDS est la grande chose à notre disposition! Alors qui est avec moi? Exécutez de toute urgence et achetez l'un de ces programmes!

L'écran montre que le programme n'a à nouveau détecté aucune injection SQL.



C'est juste un excellent programme, c'est encore mieux que nous le pensons, car il peut compiler tous ces journaux d'utilisateurs inutiles que personne ne regarde jamais, et c'est cool! D'accord, supposons que nous faisons quelque chose d'intéressant après tout. Nous utilisons ces paramètres: 1 = 1, 1 = 2 et 1 * 1. Un est-il égal à un? Oui Un est-il égal à deux? Non, pas égal. Mais ce que nous devons faire est de vérifier si les changements sur la bonne page que nous voulons dire sont «énumérés».



Je copie et colle les paramètres de la première ligne 1 = 1 dans la barre d'adresse, regarde la page, puis change cette expression en 1 = 2. Si la page change d'une manière «malhonnête» - comme vous pouvez le voir, elle a vraiment changé - alors sur cette base, du point de vue de la programmation, je peux conclure qu'il y a une injection SQL. 1=1 1=2, : «, dbo 1=1, , dbo 1=1, , , dbo». ? , IDS – ! , .
. . , ? , . , . «1 - 1».



– . , , . « ? – , ! – , ? – , ! – , «»?» , .

25:50

HACKTIVITY 2012. : . 2e partie


:)


, . ? ? , , VPS $4.99 , entry-level , : VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps $19 ? ( RAID1 RAID10, 24 40GB DDR4).

Dell R730xd 2 - Equinix Tier IV ? 2 Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 $199 ! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — $99! . c Dell R730xd 5-2650 v4 9000 ?

Source: https://habr.com/ru/post/fr480388/


All Articles