[curl] Test URL login-mot_de_passe

Résolu/Fermé
sommam - 24 août 2010 à 10:37
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 31 août 2010 à 16:59
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
25 août 2010 à 12:34
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
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
25 août 2010 à 14:08
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
J'ai oublié le tout avec une commande CURL directement en ligne de commande.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
24 août 2010 à 10:44
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
25 août 2010 à 10:42
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
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
25 août 2010 à 11:18
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
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
25 août 2010 à 14:33
Regarde si "lynx" est installé...
0
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
25 août 2010 à 15:05
Un simple "grep" sur le code source en sortie devrait le faire...

Regarde avant à quoi ressemble ce message dans le code source ;-\
0
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
25 août 2010 à 17:59
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
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
26 août 2010 à 11:03
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
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
26 août 2010 à 12:23
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
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
26 août 2010 à 14:39
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
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
26 août 2010 à 16:18
&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
"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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
26 août 2010 à 18:14
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
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
27 août 2010 à 08:57
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
soummam Messages postés 179 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 19 février 2017 110
27 août 2010 à 12:01
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
27 août 2010 à 15:46
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
soummam Messages postés 179 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 19 février 2017 110
27 août 2010 à 16:06
Cette commande ne renvoie pas le message d'erreur.

Est-ce dû peut-être au cookie non pris en compte dans la commande ?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
27 août 2010 à 16:17
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
27 août 2010 à 17:24
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
soummam Messages postés 179 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 19 février 2017 110
30 août 2010 à 11:01
Bonjour,

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

Referer=http://[URL]/index.php
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
Modifié par jipicy le 30/08/2010 à 11:21
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
soummam Messages postés 179 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 19 février 2017 110
30 août 2010 à 14:31
clic droit sur la méthode POST donne

URL=http://URL/index.php
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
30 août 2010 à 15:07
Alors il va peut être falloir demander aux concepteurs de l'appli quel est le fichier appelé lors de l'authentification...
0
soummam Messages postés 179 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 19 février 2017 110
30 août 2010 à 15:47
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
30 août 2010 à 15:52
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