[curl] Test URL login-mot_de_passe

Résolu
sommam -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Comment tester l'accès d'une application Web directement avec son login-mot de passe + simulation du clic souris pour valider.

Merci par avance

23 réponses

  • 1
  • 2
Résumé de la discussion

Le fil porte sur tester l'accès à une application Web avec login et mot de passe et simuler un clic de validation, en utilisant curl pour automatiser l'envoi des données.
Plusieurs réponses évoquent une commande curl POST avec txtuser et txtpwd et des paramètres comme module, action et origine, tout en soulignant que les cookies gèrent l'état de connexion.
D'autres conseils insistent sur la traçabilité des cookies avec des options comme --cookie-jar et -b/-c, l'importance de récupérer les cookies et des champs cachés avant le POST.
En cas de complexité, plusieurs suggèrent de scripté l'opération et d'enchaîner plusieurs invocations curl, notamment face aux redirections ou à des pages protégées par JavaScript.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. sommam
     
    J'ai mis passwd et bouton pour plus de compréhension.

    Voici la commande réelle que j'ai passée et plus d'info sur le source.

    curl -d "txtuser=toto&txtpwd=titi&bt1=%20Valider%20" [URL]

    <form name="form_cnx" action="index.php" method="post">
    <input type="hidden" name="module" value="connexion" />
    <input type="hidden" name="action" value="getSession" />
    <input type="hidden" name="desc" value="connexion" />
    <input type="hidden" name="origine" value="login" />

    <table class="centrer60 width60 interb">

    <tr>
    <th class="titrecnx width80"> Connexion à l'application </th>
    <td class="gdhcnx width20">10:53:42</td>
    </tr>
    </table>

    <table class="centrer60 width60 interb">
    <tr>

    <th class="width40 entetecnx">Nom d'utilisateur </th>
    <td class="inputbold"><input name="txtuser" id="txtuser" class="inputbold" type="text" size="20" maxlength="16" /></td>
    </tr>
    <tr>
    <th class="width40 entetecnx"> Mot de passe </th>
    <td><input name="txtpwd" id="txtpwd" class="inputbold" type="password" size="20" maxlength="32" /></td>
    </tr>

    ...........

    ...........
    </tr>
    </table>

    <table class="centrer60 width60">
    <tr>
    <td class="width100 validation"><input name="bt1" class="bouton" type="submit" value=" Valider " /></td>
    </tr>
    1
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Essaie avec :

      curl -d "txtuser=toto&txtpwd=titi&bt1=%20Valider%20&module=connexion&action=getSession&desc=connexion&origine=login" -L "http://URL/index.php"


      En cas d'échec, enlèves un par un les nouveaux ajouts et/ou essaies-les un à un, etc.
      0
  2. sommam
     
    En tapant cette commande :
    curl -d "txtuser=toto&txtpwd=titi&bt1=%20Valider%20&module=connexion&action=getSession&desc=connexion&origine=login" -L "http://URL/index.php"

    J'obtiens l'édition du source.

    Ne faudrait-il pas prendre en compte le cookie ?
    Mais comment ?

    Voici ce que j'ai en tapant cette commande.
    curl -I "http://URL/"

    HTTP/1.1 200 OK
    Date: Wed, 25 Aug 2010 11:40:34 GMT
    Server: Apache
    Accept-Ranges: bytes
    X-Powered-By: PHP/4.3.9
    Set-Cookie: PHPSESSID=79a4d0d402f38567981a035beaeb9b17; path=/
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Content-Type: text/html
    1
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Bon apparemment le login s'effectue bien.

      Par contre ta demande concernait la façon de valider une connexion sur une page à l'aide de cURL en ligne de commande.

      Avant de passer à autre chose il faut être sûr que l'identification s'effectue bien.

      J'obtiens l'édition du source.
      C'est normal. Il faut d'une part rajouter l'option "-s" (silence) et parser le tout via un navigateur en mode texte comme "w3m", du style :

      curl -s -d "txtuser=toto&txtpwd=titi&bt1=%20Valider%20&module=connexion&action=getSession&desc=connexion&origine=login" -L "http://URL/index.php" | w3m -dump -T text/html | less

      Histoire de voir si tu es bien logué et que l'affichage correspond à la page demandé...
      Après on verra comment récupérer le cookie de session et le remployer pour les connexions futures...
      0
  3. sommam
     
    J'ai oublié le tout avec une commande CURL directement en ligne de commande.
    0
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Il suffit de passer le tout en ligne de commande via les options de cURL et les paramètres propres à l'application...

    Voir : https://curl.se/docs/httpscripting.html
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sommam
     
    Bonjour,
    J'ai lancé cette commande, ça ne marche pas.
    curl -d "Nom_utilisateur=mon_login&passwd=mon_mot_de_passe&bouton_OK=%20Valider%20" http://URL/

    Pour info :
    J'ai récupéré les variables " Nom_utilisateur - mon_login - Valider " dans le source de la page d'accueil.
    Valider est de type submit

    Merci de m'aiguiller, je suis débutant.
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Re-

      Pourrais-tu afficher le contenu exact du "form" dans le code source s'il te plaît ?

      C'est bien un type form method="POST" ?

      L'URL est bien la bonne en fin de commande ?
      0
  7. sommam
     
    Voici le contenu du FORM

    <form name="form_cnx" action="index.php" method="post">
      <input type="hidden" name="module" value="connexion" />
      <input type="hidden" name="action" value="getSession" />
      <input type="hidden" name="desc" value="connexion" />
      <input type="hidden" name="origine" value="login" />


    J'ai mis URL pour cacher l'@ ip

    Merci de ton aide
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Je ne vois aucun champ "pasword", ni bouton "submit" c'est normal ?
      Tu ne serais pas déjà logué par hasard ?

      J'ai mis URL pour cacher l'@ ip
      Oui ça je l'avais compris, ce que je voulais dire c'est juste que l'URL doit pointer sur la bonne page... ;-\
      Dans ton cas et en voyant le contenu du "form", la page en question devrait être "index.php"...
      0
  8. sommam
     
    curl -s -d "txtuser=toto&txtpwd=titi&bt1=%20Valider%20&module=connexion&action=getSession&desc=connexion&origine=login" -L "http://URL/index.php" | w3m -dump -T text/html | less
    -bash: w3m: command not found

    Visiblement w3m n'est pas installé.
    N'y a t-il pas un navigateur en mode texte par défaut sur Redhat ?
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Regarde si "lynx" est installé...
      0
  9. sommam
     
    lynx n'est pas installé.
    à la limite j'aurais besoin uniquement de vérifier un message d'erreur en retour via un script. Est-ce possible ?
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Un simple "grep" sur le code source en sortie devrait le faire...

      Regarde avant à quoi ressemble ce message dans le code source ;-\
      0
  10. soummam
     
    Finalement j'ai installé Ubuntu sur une machine virtuelle via Virtuabox.
    J'ai installé CURL puis lancé cette commande

    curl -s -d "txtuser=toto&txtpwd=titi&bt1=%20Valider%20&module=connexion&action=getSession&desc=connexion&origine=login" -L "@URL/index.php" | w3m -dump -T text/html | less

    J'ai bien ma page d'accueil, mais j'aurais du avoir un message d'erreur du type Utilisateur ou mot de passe incorrect cer j'ai volontairement mis de faux login-mot de passe

    As-tu une idée jipicy ?
    Merci encore pour ton aide
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      cer j'ai volontairement mis de faux login-mot de passe
      Mais est-ce qu'avec un login et mot de passe correct ça marche au moins ?


      Après comme je te l'ai dit plus haut, il faut parser la page à l'aide de grep à la recherche dudit message d'erreur (ou de succès).

      Voilà un extrait d'un script qui tourne chez moi et qui m'aide à m'authentifier et à récupérer le cookie sur un site avant d'y faire divers traitements...

      #------------------#
      ## Pseudo
      #------------------#
      
      PSEUDO="toto"
      if [ -z "${PSEUDO}" ]
      then
      read -p "Veuillez saisir votre pseudo : " PSEUDO
      fi
      
      #------------------#
      ## Mot de passe
      #------------------#
      
      PASS=""
      if [ -z "${PASS}" ]
      then
      echo
      echo -e "Entrez le mot de passe pour ${PSEUDO} : \c" 
      stty -echo
      read PASS
      stty echo
      echo -e "\n"
      fi
      
      #------------------#
      ## cookie
      #------------------#
      
      if [ ! -e cookies.txt -o "${DATE_COOKIE}" != "${DATE}" ]
      then	
      
      curl -s \
      --cookie-jar "cookies.txt" \
      --data "login=${PSEUDO}&pass=${PASS}&connect=Connexion" \
      -L "${URL}/index.php"  |\
      w3m -dump -T text/html |\
      grep -qo "L'authentification a échoué \!"
      	if [ "$?" = "0" ]
      	then
      	echo "${Red}L'authentification a échoué.${Reset}"
      	echo
      	echo "Veuillez relancer le script et vérifier vos identifiants..."
      	else
      	echo "${LightGreen}Authentification OK.${Reset}"
      	echo
      	fi
      fi
      
      cookie="cookies.txt"
      0
  11. sommam
     
    Merci jipicy,

    Avant de tester ton script, sur la page d'accueil il y a un menu déroulant "Mois de gestion " janvier - février etc.."

    Extrait du source

    <tr>
    <th class="width40 entetecnx"> Mois de gestion </th>
    <td><select name="annee" class="select20 inputslc" >
    <option value="Janv" selected="selected" > janv </option>
    <option value="Fév" > Févv </option>
    <option value="Mars" > Mars </option>
    ....
    .....
    </select>
    </td>
    </tr>


    Que faut-il rajouter à ta commande pour prendre en compte cette option ?
    curl -s -d "txtuser=toto&txtpwd=titi&bt1=%20Valider%20&module=connexion&action=getSession&desc=connexion&origine=login" -L "@URL/index.php" | w3m -dump -T text/html | less

    Thanks
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Re-

      Honnêtement je n'en sais trop rien, le PHP et moi ça fait deux ;-((

      Peut être :

      &selected=Sept


      Perso j'utilise une extension de Firefox qui m'aide à analyser chaque requête et ainsi voir ce qui est réellement transmis, comme la syntaxe des POST DATA ;-)
      0
  12. soummam
     
    Concernant le menu déroulant je verrais ça plus tard car il y a comme un problème quand je rajoute les options --trace-ascii et -b

    curl --trace-ascii -s -d -b "txtuser=toto&txtpwd=titi&bt1=%20Valider%20&module=connexion&action=getSession&desc=connexion&origine=login" -L "[URL]" | w3m -dump -T text/html | less

    curl: (6) Couldn't resolve host 'txtuser=toto&txtpwd=titi&bt1=%20Valider%20&module=connexion&action=getSession&desc=connexion&origine=login'

    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    100 3330 0 3328 0 2 50597 30 --:--:-- --:--:-- --:--:-- 53645


    Avez-vous une idée ?
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Euh... l'option "-b" attend le nom (avec le chemin le cas échéant) du fichier sensé contenir les cookies ;-(

      Donc pas étonnant que tu es une erreur.

      Mon exemple ci-dessus récupère dans un premier temps le cookie (--cookie-jar "cookies.txt") dans un fichier nommé "cookies.txt".
      Une fois l'identification faite et le cookie récupéré, le reste de mon script appelle "curl" comme suit :

      curl -s -b cookies.txt -d "blabla&blabla&blabla&" - L "URL"
      .
      0
  13. soummam
     
    Je n'ai plus l'erreur en passant cette commande, merci

    curl --trace-ascii --cookie-jar "cookies.txt" -s -b cookies.txt -d "txtuser=toto&txtpwd=titi&bt1=%20Valider%20&module=connexion&action=getSession&desc=connexion&origine=login" -L "[URL]/index.php" | w3m -dump -T text/html | less

    Quand j'enlève cette partie module=connexion&action=getSession&desc=connexion&origine=login, j'ai ma page d'accueil.

    Voici la commande en question
    curl --trace-ascii --cookie-jar "cookies.txt" -s -b cookies.txt -d "txtuser=toto&txtpwd=titi&bt1=%20Valider%20" -L "[URL]/index.php" | w3m -dump -T text/html | less

    Il semblerait que la partie prise en compte du login-mot de passe fonctionne pas.

    Qu'en penses-tu ?
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      T'es en train de tout mélanger ;-((

      --cookie-jar "cookies.txt"
      Permet uniquement de récupérer le cookie dans un fichier (cookies.txt) pour d'éventuelles futures connexions en combinaison avec l'option "-d" qui elle sert à transmettre des données comme l'identification via login et mot de passe. Il ne faut pas la combiner avec "-b cookies.txt".

      Dans un 1er temps il faut te focaliser juste sur l'authentification, en essayant de trouver les bonnes options à passées au paramètre "-d".

      C'est pour ça que je t'ai donné au post #18, un lien vers une extension de Firefox qui t'aidera à trouver la bonne syntaxe.

      Une fois que tu auras réussi à trouver la bonne syntaxe, tu pourras stocker le cookie dans un fichier.
      Ensuite, on avisera de passer en plus le bon item de la liste déroulante...
      0
  14. sommam
     
    Tamper Data me donne cela
    POSTDATA=module=connexion&action=getSession&desc=connexion&origine=login&txtuser=toto&txtpwd=titi&annee=2010&bt1=+Valider+

    Que j'ai inclus dans cette commande épurée

    curl -s -d module=connexion&action=getSession&desc=connexion&origine=login&txtuser=y&txtpwd=y&annee=2010&bt1=+Valider+" -L "[URL]/index.php" | w3m -dump -T text/html | less

    J'ai toujours la page d'accueil, visiblement le login-mot de passe n'est toujours pas pris en compte.

    Je continue à chercher pourquoi ?
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      &bt1=+Valider+
      Y'a une case à cocher dans Tamper Data pour avoir le html interprété...

      Essaye la même commande avec "&bt1=%20Valider%20".

      N'oublies pas les " autour des datas (-d "...").
      0
  15. soummam
     
    "Essaye la même commande avec "&bt1=%20Valider%20"."

    curl -s -d "module=connexion&action=getSession&desc=connexion&origine=login&txtuser=toto&txtpwd=titi&annee=2010&bt1=%20Valider%20" -L "[URL]/index.php" | w3m -dump -T text/html | less

    idem : page d'accueil uniquement

    "Y'a une case à cocher dans Tamper Data pour avoir le html interprété..."
    Où se trouve cette case ?
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Où se trouve cette case ?
      Quand tu cliques droit sur une ligne (Post ou autre) dans la fenêtre de Tamper Data et que tu choisis détails, dans la fenêtre qui s'ouvre tu as une case "Décodé".

      Bon on récapitule...

      Depuis Firefox tu affiches ta page d'accueil, tu lances Tamper Data; tu entres ton identifiant et mot de passe et tu valides. A partir de là, tu cherches dans Tamper Data la ligne Post, clic gauche pour la surligner et clic droit sur la ligne POSTDATA dans laquelle tu récupères les valeurs telle quelles doivent être passées via le paramètre "-d" et sur la ligne "Referer" l'url à passer au paramètre "-L".

      C'est exact ?

      Qu'as-tu à ce moment là comme page affichée ? Quel message te dis que l'authentification à réussi ?

      Ensuite depuis une console tu lances la commande curl comme mentionné auparavant, et donc via "w3m" et "less" tu n'obtiens pas le même affichage ?
      0
  16. sommam
     
    Bonjour jipicy,

    J'ai suivi tes conseils pour Tamperdata.
    Referer=[URL]/index.php
    POSTDATA=module=connexion&action=getSession&desc=connexion&origine=login&txtuser=toto&txtpwd=titi&annee=2010&bt1=+Valider+

    codé bt1=+Valider+
    décodé bt1= Valider

    J'ai lancé cette commande :
    curl -s -d "module=connexion&action=getSession&desc=connexion&origine=login&txtuser=toto&txtpwd=titi&annee=2010&bt1=%20Valider%20" -L "[URL]/index.php" | w3m -dump -T text/html | less

    Valider avec ou sans %20 --> même résultat que lorsque j'appelle l'URL via firefox. A savoir la page d'accueil avec
    Nom de l'application
    LOGIN
    Mot de passe
    Année


    Une seule différence, via firefox, il y a le message :
    Erreur sur le login et/ou mot de passe

    Je cherche de mon coté.
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Et avec :

      curl -s -d "module=connexion&action=getSession&desc=connexion&origine=login&txtuser=toto&txtpwd=titi&annee=2010&bt1=%20Valider%20" -L "[URL]/index.php" | w3m -dump -T text/html | grep 'Erreur sur le login'

      Tu as quelque chose ?

      Et si tu t'authentifies correctement via Firefox, tu as quoi en retour ?
      0
  17. soummam Messages postés 184 Statut Membre 110
     
    Le grep 'Erreur sur le login' ne renvoie rien.

    Sur Firefox le source de la page donne cela partiellement

    <div id="contenu">
    <div id="error">
    <ul>
    <li>Erreur sur le login et/ou mot de passe .</li>
    </ul>
    </div>


    Je ne comprends pas pourquoi qu'en ligne de commande je n'ai pas ce message.

    Je continue à chercher...
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Essaye sans passer la page à "w3m" et en parsant directement le code source :

      curl -s -d "module=connexion&action=getSession&desc=connexion&origine=login&txtuser=toto&txtpwd=titi&annee=2010&bt1=%20Valider%20" -L "[URL]/index.php" | grep 'Erreur sur le login'
      0
  18. soummam Messages postés 184 Statut Membre 110
     
    Cette commande ne renvoie pas le message d'erreur.

    Est-ce dû peut-être au cookie non pris en compte dans la commande ?
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Non, le cookie ne sert que pour ne pas avoir à s'identifier à chaque fois.
      Dans mon exemple plus haut, la syntaxe "--cookie-jar" ne sert qu'à récupérer et stocker le cookie dans un fichier.
      0
    2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Je pense à un truc, regarde dans la fenêtre Tamper Data (celle du haut) la ligne de la méthode POST et l'URL correspondante... ce n'est peut être pas index.php, mais un truc du genre "connexion.php" ou autre ;-\
      0
  19. soummam Messages postés 184 Statut Membre 110
     
    Bonjour,

    Je confirme l'URL correspondante à la méthode POST est bien :

    Referer=http://[URL]/index.php
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Non justement, ce n'est pas celle du Referer qu'il faut prendre, mais celle pointée par un clic droit (détails) dans la fenêtre du haut sur la ligne POST ;-\
      0
  20. soummam Messages postés 184 Statut Membre 110
     
    clic droit sur la méthode POST donne

    URL=http://URL/index.php
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Alors il va peut être falloir demander aux concepteurs de l'appli quel est le fichier appelé lors de l'authentification...
      0
  21. soummam Messages postés 184 Statut Membre 110
     
    Peut-être une piste malgré tes remarques précédentes concernant les cookies.
    La plupart des serveurs utilisent des cookies pour suivre le statut de la connexion du client (voir paragraphe plus bas en gras).

    Source : https://curl.se/docs/httpscripting.html
    13. Web Login

    While not strictly just HTTP related, it still cause a lot of people problems
    so here's the executive run-down of how the vast majority of all login forms
    work and how to login to them using curl.

    It can also be noted that to do this properly in an automated fashion, you
    will most certainly need to script things and do multiple curl invokes etc.

    First, servers mostly use cookies to track the logged-in status of the
    client, so you will need to capture the cookies you receive in the
    responses. Then, many sites also set a special cookie on the login page (to
    make sure you got there through their login page) so you should make a habit
    of first getting the login-form page to capture the cookies set there.


    Some web-based login systems features various amounts of javascript, and
    sometimes they use such code to set or modify cookie contents. Possibly they
    do that to prevent programmed logins, like this manual describes how to...
    Anyway, if reading the code isn't enough to let you repeat the behavior
    manually, capturing the HTTP requests done by your browers and analyzing the
    sent cookies is usually a working method to work out how to shortcut the
    javascript need.

    In the actual <form> tag for the login, lots of sites fill-in random/session
    or otherwise secretly generated hidden tags and you may need to first capture
    the HTML code for the login form and extract all the hidden fields to be able
    to do a proper login POST. Remember that the contents need to be URL encoded
    when sent in a normal POST.
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Ben c'est ce que je te disais dans mon post #20, dans mon exemple je récupère le cookie via une page "connexion.php"... ;-\
      0
  • 1
  • 2