Failles de sécurité dans le service de e-commerce "COWS"
********************************************************
Produit :
*********
COWS (CGI Online Worldweb Shopping)
http://www.cows.co.uk/
Versions :
**********
?
Date :
******
14 janvier 2002
Problèmes :
***********
- Récuperation d'infos sur l'ordinateur.
- Listing du repertoire du site.
- Cross Site Scripting.
- Infos sur les utilisateurs (nom, pass, login, adresse, etc).
- Mot de passe admin crypté.
Localisation :
/compatible.cgi
/diagnose.cgi
/cowsconf/*.asc /S
Developpement :
***************
Les webmasters du sites ont bien sûr été avertit.
Bien que difficilements reperables, il existe encore de nombreux sites utilisant
ce service.
Il y a 2 scripts, diagonise.cgi et compatible.cgi . Je n'ai pas fait des recherches
en profondeur sur tout les scripts proposés par COWS. Mais apparemment, ces 2 scripts
servent à tester si l'ordinateur est ou non pret à recevoir les services COWS.
Voici un exemple de ce que peux contenir un script compatible.cgi ou diagonise.cgi :
COWS compatibility test
cowslocation.pl says...
$keya = "209b1547ab52259b";[n]
$license = "28e2266e6517594f";[n]
$cgidir = "/home/host/cowsconf/";[n]
$cgibin = "http://www.host.com/cgi-bin/";[n]
$ssl = "http://www.host.com/cgi-bin/";[n]
1;[n]
/bin/uname says... Linux roo 2.2.20 #3 Fri Nov 9 14:21:09 UTC 2001 i686 unknown
Our real UID is... 1134 (specia)
Our effective UID is... 1134 (specia)
$0 says... compatible.cgi
@INC contains...: /usr/lib/perl5/i386-linux, /usr/lib/perl5, /usr/lib/perl5/site_perl/i386-linux, /usr/lib/perl5/site_perl, .,
Perl version... 5.00503
Testing DBM... DBM file is ok
Testing encryption... Encryption is ok
Found sendmail at /usr/sbin/sendmail
Found sendmail at /usr/bin/sendmail
Found sendmail at /usr/lib/sendmail
This server appears to be compatible with COWS.
ENV variables
SERVER_SOFTWARE = Apache/1.3.12 (Unix) PHP/4.0.4pl1
GATEWAY_INTERFACE = CGI/1.1
DOCUMENT_ROOT = /home/host/www
REMOTE_ADDR = ***.**.*.*.*.**.*.**
SERVER_PROTOCOL = HTTP/1.1
REQUEST_METHOD = GET
REMOTE_HOST = hop-1458-tralala-2-boum-boum
QUERY_STRING =
PATH = /usr/local/bin:/usr/bin:/bin
HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-gsarcade-launch, */*
HTTP_CONNECTION = Keep-Alive
REMOTE_PORT = 1075
SERVER_ADDR = 227.165.162.8
HTTP_ACCEPT_LANGUAGE = fr
SCRIPT_NAME = /cgi-bin/compatible.cgi
HTTP_ACCEPT_ENCODING = gzip, deflate
SCRIPT_FILENAME = /home/host/cgi-bin/compatible.cgi
SERVER_NAME = www.host.com
REQUEST_URI = /cgi-bin/compatible.cgi
SERVER_PORT = 80
HTTP_HOST = www.host.com
SERVER_ADMIN = webmaster@host.com
ls -lR of parent dir gives...
total 281
drwxr-xr-x 2 specia users 1024 May 3 2000 .
drwxr-x--- 5 specia oldsite 1024 Aug 14 2000 ..
-rwxr-xr-x 1 specia users 6719 May 3 2000 accountstatus.cgi
-rwxr-xr-x 1 specia users 7376 May 3 2000 admin-accounts.cgi
-rwxr-xr-x 1 specia users 9276 May 3 2000 admin-catalog.cgi
-rwxr-xr-x 1 specia users 26297 May 3 2000 admin-conf.cgi
-rwxr-xr-x 1 specia users 3981 May 3 2000 admin-currency.cgi
-rwxr-xr-x 1 specia users 14622 May 3 2000 admin-groups.cgi
-rwxr-xr-x 1 specia users 9126 May 3 2000 basket-no-frames.cgi
-rwxr-xr-x 1 specia users 9095 May 3 2000 basket.cgi
-rwxr-xr-x 1 specia users 33300 May 3 2000 browse-no-frames.cgi
-rwxr-xr-x 1 specia users 32885 May 3 2000 browse.cgi
-rwxr-xr-x 1 specia users 7474 May 3 2000 checkout-cc.cgi
-rwxr-xr-x 1 specia users 12471 May 3 2000 checkout-final.cgi
-rwxr-xr-x 1 specia users 5722 May 3 2000 checkout-new.cgi
-rwxr-xr-x 1 specia users 5770 May 3 2000 checkout.cgi
-rwxr-xr-x 1 specia users 3125 May 3 2000 compatible.cgi
-rwxr-xr-x 1 specia users 14415 May 3 2000 cows-setup.cgi
-rwxr-xr-x 1 specia users 217 May 3 2000 cowslocation.pl
-rwxr-xr-x 1 specia users 3975 May 3 2000 get-rates.cgi
-rwxr-xr-x 1 specia users 5201 May 3 2000 invoice.cgi
-rwxr-xr-x 1 specia users 300 May 3 2000 mangle.pl
-rwxr-xr-x 1 specia users 3406 May 3 2000 ntmail.pl
-rwxr-xr-x 1 specia users 3381 May 3 2000 passwordreminder.cgi
-rwxr-xr-x 1 specia users 1201 May 3 2000 shop-force-new-session.cgi
-rwxr-xr-x 1 specia users 1057 May 3 2000 shop.cgi
-rwxr-xr-x 1 specia users 12347 May 3 2000 shoplibs.pl
-rwxr-xr-x 1 specia users 16731 May 3 2000 showorders.cgi
-rwxr-xr-x 1 specia users 415 May 3 2000 unixmail.pl
-rwxr-xr-x 1 specia users 224 May 3 2000 wrapper.cgi
-rwxr-xr-x 1 specia users 8306 May 3 2000 writeorder.cgi
etc...
On a donc dans ces 2 scripts non seulement énormement d'informations sur le systeme,
mais aussi le listing de tout les fichiers se trouvant dans le repertoire où on
se trouve, ainsi que dans tout ses sous-dossiers.
Une deuxieme faille se trouve dans ces scripts.
Si on tape par exemple diagnose.cgi?test, le QUERY_STRING et la REQUEST_URL changerons
forcemment pour donner ceci :
QUERY_STRING = test
REQUEST_URI = /cgi-bin/diagnose.cgi?test
Pour executer du code sur ces pages (Cross site scripting), il suffit de taper une url
comme celles-ci :
/diagnose.cgi?
/compatible.cgi?
Les 2 valeurs vues + haut changerons encore, mais le script sera executé.
Voyons maintenant le dossier COWSCONF.
son sous-dossier custdata :
http://www.hostwithcows.com/cowsconf/custdata/
Custdata est un dossier contenant des fichiers .asc . Mais ce ne sont pas des fichiers à ouvrir
avec PGP.
Si on telecharge un de ces fichiers et qu'on l'ouvre avec un bloc note, voici le genre de chose
qu'on obtient :
fullname = John Phillips email = John@internet.com address1 = 52 Phearbank Road
address2 = Bradford address3 = West Yorkshire postcode = BD8 9JX phone = 01234 password = azerty
bonuspoints = 0 orders =
Nous avons donc ici le nom, le prenom, l'email, l'adresse, le numero de telephone et le mot de
passe NON CRYPTé d'un membre.
Maintenant, si on veut se logger à la place de la personne, il nous faut bien sûr le pass mais
aussi le login.
Pas besoin de chercher bien loin, le login est tout simplement le nom du fichier .asc .
Si les infos vues + haut se trouvent dans le fichier /cowsconf/custdata/J_Phillips.asc ,
il faudra comprendre :
LOGIN : J_Phillips
PASSWORD : azerty
NOM : John Phillips
EMAIL : John@internet.com
etc...
Voyons maintenant le dossier /cowsconf/orders/... Il contient également des fichers .asc, qui,
ouverts, donnent ceci :
Username = John
Date = Mon Jan 3 13:52:13 2000
Time = 946907533
CardType = Visa
Crypted = !,`#/
CardExpires = 01 / 2002
CardValid = 01 / 1995
Nameoncard = p w crane
Shipping.title = First class Post
Shipping.cost = 0.90
PercentDiscount = %
Discount =
Tax = 0.16
Total = 151.01
Status = New
item.1 = cat7654
quantity.1 = 5
price.1 = 29.99
Pointstoadd = 0
Voilà, point de vue vie privée c'est encore raté... on connait le pseudo, pour combien
il a acheté, quand ça carte expires, quelle genre de carte, etc...
Bon vous me direz "au moins on ne sait pas ce qu'il a acheté !"... hé bien, il suffit de se
rendre dans /cowsconf/catalog.asc, de rechercher l' "item.1" dedans, et voila sur ce qu'on tombe :
cat7654,mobile,"Ericsson GA628",29.99,0,0,0,0,0
Pour verifier si c'est bien le bon article, on peut aussi voir le prix.
Reste un fichier asc interessant aussi : /cowsconf/config.asc qui est de ce style :
adminpassword = coVnDoxhYD03Y
back =
basketbgcol = #4E57F4
baskettext = white
browsebgcol = #4E57F4
browseicon = browse.gif
browsetext = white
cardsbymail = 0
cardtypes = Visa, Mastercard, Switch
checkoutbgcol = white
checkouticon = checkout.gif
checkouttext = blue
cheques = 0
chequesonly = 0
convert = 0
currencycode = GBP
currencyunit = £
currentgroupbackground = #AAAACC
currentgrouptext = #000000
custdatadir = /home/sites/host/web/cowsconf/custdata/
fixtablewidth = 1
homeicon = home.gif
homepage = http://www.host.com/
htmldir = /home/sites/host/web/
httpimagedir = http://www.host.com/images/
httpsimagedir = http://www.host.com/images/
imagedir = /home/sites/host/web/images/
more =
nocypher = 0
notifywhenmaxbonusreached = 1
ordersdir = /home/sites/host/web/cowsconf/orders/
ouraddress1 = moorland internet ltd
ouraddress2 = Branscombe, Newton Road
ouraddress3 = Bovey Tracey, Devon
ouraddress4 = England
ouremail = webmaster@host.com
ourhost = Example store
ourpostcode = TQ139BB
parenticon = hand.gif
requirevalidfrom = 1
searchboxbackground = #4E57F4
searchgroups = mobile,remote
searchicon = search.gif
seealsoicon = hand.gif
sendmail = /usr/lib/sendmail
sendusmail = 1
sessdatadir = /home/sites/host/web/cowsconf/sessdata/
shipping.1.additional = 0.15
shipping.1.basic = 0.6
shipping.1.threshold = 3
shipping.1.title = First class Post
shipping.2.additional = 0.15
shipping.2.basic = 0.4
shipping.2.threshold = 2
shipping.2.title = Second class post
showperpagebrief = 6
showperpagenormal = 3
subcaticon = hand.gif
taxname = value added tax
urltocgibin = http://www.host.com/cgi-bin/
urltossl = http://www.host.com/cgi-bin/
usevat = 1
useweight = 0
vatrate.1 = 17.5
searchgroups = mobile,remote
searchgroups = mobile,remote
Bon il contient pas mal de choses pas très interessantes, mais aussi d'autres qui le sont.
On a d'abord bien sûr la ligne
adminpassword = coVnDoxhYD03Y
Je n'ai pas pu aller plus loin à ce sujet, car le service est payant. Mais à mon avis il y a
une possibilité pour utiliser cette ligne, c'est les cookies. Si le password est envoyé
par cookie et qu'il est crypté, il y a pas mal de chance qu'il le soit de cette façon, il
suffirait alors d'envoyer le password en cookie... mais il faut connaitre son nom.
Si le password n'est pas crypté dans le cookie, alors il faut se raporter à la premiere faille.
Il y a aussi les lignes
custdatadir = /home/sites/host/web/cowsconf/custdata/
homepage = http://www.host.com/
htmldir = /home/sites/host/web/
httpimagedir = http://www.host.com/images/
httpsimagedir = http://www.host.com/images/
imagedir = /home/sites/host/web/images/
ordersdir = /home/sites/host/web/cowsconf/orders/
sessdatadir = /home/sites/host/web/cowsconf/sessdata/
urltocgibin = http://www.host.com/cgi-bin/
urltossl = http://www.host.com/cgi-bin/
qui nous permettent de reperer l'emplacement dans le HD et la disposition des dossiers
sources du site.
Patch :
*******
Supprimer Compatible.cgi & Diagonise.cgi.
Renommer le dossier /cowsconf/ où ne pas le mettre online.
Greetz :
********
/
Credits
*******
Tuto achevé le dimanche 20 janvier 2002
par frog-m@n (leselfrog@hotmail.com)