[curl] Test URL login-mot_de_passe [Résolu/Fermé]

Signaler
-
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
-
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

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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
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.
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
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...
J'ai oublié le tout avec une commande CURL directement en ligne de commande.
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
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
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.
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
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 ?
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
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
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"...
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 ?
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
Regarde si "lynx" est installé...
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 ?
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
Un simple "grep" sur le code source en sortie devrait le faire...

Regarde avant à quoi ressemble ce message dans le code source ;-\
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
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
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"
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
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
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 ;-)
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 ?
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
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"
.
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 ?
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
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...
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 ?
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
&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 "...").
"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 ?
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
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 ?
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é.
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
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 ?
Messages postés
179
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
19 février 2017
108
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...
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
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'
Messages postés
179
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
19 février 2017
108
Cette commande ne renvoie pas le message d'erreur.

Est-ce dû peut-être au cookie non pris en compte dans la commande ?
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
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.
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
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 ;-\
Messages postés
179
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
19 février 2017
108
Bonjour,

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

Referer=http://[URL]/index.php
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
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 ;-\
Messages postés
179
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
19 février 2017
108
clic droit sur la méthode POST donne

URL=http://URL/index.php
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
Alors il va peut être falloir demander aux concepteurs de l'appli quel est le fichier appelé lors de l'authentification...
Messages postés
179
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
19 février 2017
108
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.
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 819
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"... ;-\