_ __________________________________ _
-*1*- `^°*;:,.> Protocole FTP: Rappels de Bugs <.,:;*°^`
_________________/¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯By NK¯¯¯¯¯¯¯¯¯¯¯¯¯¯\______________________
Je vais tout d'abord proceder a un rappel bref (je vais essayer) sur la
commande FTP
que ce soit sous Unix ou sous Windows. N'esperez pas connaitre
reellement FTP en utilisant
un client graphique...
Ces premieres informations sont tirées du UNIX Reference Manual, il
s'agit des command
line switches de la commande ftp sous Unix
----------------------------------UNIX-------------------------------------
NAME
ftp - ARPANET file transfer program
SYNOPSIS
ftp [-v] [-d] [-i] [-n] [-g] [host]
En bref:
-v -> Verbose Mode (affiche le maximum d'informations sur les
transferts entre vous et le server)
-d -> Debug Mode
-i -> Coupe le mode d'affichage interactif lors des telechargements
-n -> Active l'autologin de l'utilisateur en fonction du fichiers
.netrc contenus dans son repertoire home
-g -> Desactive le globbing des noms de fichier
---------------------------------------------------------------------------
Il existe des equivalents de ces switches sous Windows (ces
informations sont tirées et traduites de l'aide
sur la commande ftp sous Windows 2000 Server)
----------------------------------WINDOWS----------------------------------
Transfers files to and from a computer running an FTP server service
(sometimes called a daemon). Ftp can be used interactively.
FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-w:windowsize] [-A]
[host]
-v Desactive le verbose mode
-n Desactive l'auto-login au demarrage de la connection.
-i Desactive l'affichage interactif en mode de transfert
de fichiers
-d Active le debugging.
-g Active le globbing des noms de fichiers (voir la
command GLOB).
-s:filename Specifie un fichier texte qui contient des commandes
FTP; les
commandes seront executées apres le demarrage du server.
-a Utile n'importe quelle interface locale pour le
binding de la connection
-A Login en tant qu'anonymous user
-w:buffersize Change la taille du buffer initialement de 4096.
host Specifie un nom d'hote ou une IP auquel se connecter
---------------------------------------------------------------------------
Comme vous pouvez le voir les switchs sous windows sont plus nombreux
que sous Unix.
Notez tout de meme que le commande FTP a ete inventée sous Unix et
qu'il s'agit ici d'une version du client
FTP en mode texte sous Windows 2000 Server (n'esperez pas en obtenir
autant sous Windows 98...)
Apres ce bref rappel qui a du vous paraitre inutile ou succin pour la
plupart, je pense qu'il est de bon
gout de faire suivre les commandes standards du protocole FTP. Tout le
monde ne s'est pas noyé dans les
plaisir de la command line sous Unix (ce rappel est donc a mon gout
necessaire)
Les commandes du protocole FTp sont standard elle du fait evident
qu'il s'agit d'un protocole, donc de
quelque chose d'universel (et non proprietaire comme la plupart des
protocoles proprietaires KRO...)
! -> Appelle l'interpreteur de commande du systeme d'exploitation
(Shell Unix par ex)
? -> Aide concernant les commandes
ascii -> Definis le mode de transfert ASCII
binary -> Definis le mode de transfert binaire (images)
bye -> Deconnecte du server et quitte l'application cliente
cd -> Change de repertoire de travail sur le serveur
close -> Deconnecte du serveur sans quitter l'application cliente
dir [remote_directory] -> Affiche le contenu du repertoire du serveur
disconnect -> Voir Close
get <remote_file> -> Reception d'un fichier du serveur avant
sauvegarde sous le meme nom sur le disque local
help -> Aide concernant les commandes
lcd <local_directory> -> Change de repertoire local de travail
ls [remote_directory] -> Voir Dir
del <remote_file> -> Detruit le fichier concerner sur remote
open [IP/Host] -> Etalit une connection avec le serveur
put <local_file> -> Transmet un fichier local au serveur
pwd -> Indique le chemin du repertoire courant sur le serveur
quit -> Voir Bye
recv <remote_file> <local_file> -> Charge un fichier du serveur avant
de le sauvegarder sur le disque dur local
sous le nom specifier
send -> Voir Put
status -> Indique l'etat du programme
type [ASCII|IMAGE] -> Definit le mode de transfert ou affiche le mode
actuel
user -> se connecte au serveur sous un autre nom en maintenant la
connection
(equivalent de la commande su sous unix)
Il s'agit ici des commandes texte les plus courantes toutefois il
existe d'autres commandes selon les serveurs
on y voit le plus souvent des alias ou des commandes permettant de
faciliter les transferts telles que:
mget <file_masq> -> Permet un telechargement recursif sur un masque de
fichiers tel que *.txt
mput <file_masq> -> Idem que precedement mais en Upload
mdelete <file_masq> -> Idem que precedement mais en destruction de
fichiers sur le serveur
proxy -> Permet de transmettre des commandes a votre proxy FTP si
vous en disposer d'un
newer -> Permet le telechargement des fichiers ayant des dates de
creation plus rescentes
que ceux presents sur le disque local
system -> Affiche le systeme d'exploitation du serveur distant (tres
bonne information...)
trace -> Active le tracage des paquets
tick -> Active le nombre de byte transmis ou telechargées lors d'un
transfert de facon interactive
prompt -> Force l'affichage interactif sur la plupart des commandes
hash -> Force l'affichage d'un '#' pour chaque buffer remplis et
transferré
form -> definis le format de transfert des fichiers
nmap -> Definis un template pour le mappage par defaut des fichiers
bell -> Force le client a faire un son lorsqu'une commande est finie
macdef -> Definir une nouvelle macro commande
idle -> Definis un temps d'idle du coté serveur
size -> Affiche la taille d'un fichier sur le serveur
je vais m'arreter la, il en existe une somme incalculable du fait que
chaque programme client a chercher a ajouter
un jeux de commande personalisées afin de faciliter la navigation FTP...
Il existe aussi comme je vous l'ai dis auparavent de nombreux alias aux
commandes FTP et ce du fait que les machines
du mode de Windows on chercher a utiliser leur propres commandes (Shell
MSDOS) afin de ne pas depayser leur utilisateurs
ainsi comme vous avez pu le constater:
ls a pour equivalent dir
rm a pour equivalent del
bye a pour equivalent disconnect
etc...
Pour avoir plus d'informations sur les commandes reconnues par le
serveur FTP auquel vous etes connecter, je ne
saurais trop vous conseiller de taper les commandes:
- help ou ?
- rhelp (pour Remote Help)
Mais aussi 'site help' qui affiche uniquement les commandes intrasec au
serveur. Ne sous estimez pas cette commande
elle peux vous apporter de grandes informations sur la nature du
serveur et certaines commandes a exploiter. Sur un
serveur glftpd sous Unix par exemple il existe plus de 70 commandes
supplementaires specifiques serveur...
Maintenant ne confondez pas ces commandes avec celles qui sont envoyées
dans vos paquets !!!
En effet, si les commandes que vous tapez sont comprises par le
serveur, cela n'est surrement pas parceque le
serveur les comprends mais plutot parcequ'elles ont ete traduites !
Certes, certaines commandes sont comprise de facon directe comme CD ou
encore QUIT... Mais si tout a l'heure j'ai
parler d'alias c'est bien que quelque part ces commandes sont traduites
par le serveur en leur commande originelle.
Enfin cessont de deliberement deblaterer des conneries qui vous sont
incomprehensibles (je plaisante bien sur :)
Les vrai commandes du protocoles FTP sont:
214-The following commands are recognized (* =>'s unimplemented).
USER PORT STOR MSAM* RNTO NLST MKD CDUP
PASS PASV APPE MRSQ* ABOR SITE XMKD XCUP
ACCT* TYPE MLFL* MRCP* DELE SYST RMD STOU
SMNT* STRU MAIL* ALLO CWD STAT XRMD SIZE
REIN* MODE MSND* REST XCWD HELP PWD MDTM
QUIT RETR MSOM* RNFR LIST NOOP XPWD
214 Direct comments to nk01@infonie.fr.
Les commandes precedées d'un X ne sont pas des commandes originelles,
elles le sont devenues...
En effet, si le RFC 959 definis les commandes FTP standards
conseillées, le RFC 1123 definis une petite
somme de nouvelle commandes renduent a leur tour officielles.
Sur ce lors de l'etablissement d'une connection a un serveur FTP vous
avez sans doute remarquer l'affichage de
codes a 3 chiffres, et ce lors de toute interpretation de commande par
le serveur. (voire ci dessous)
[spy@router spy]$ ftp router
Connected to router.n0past.com.
220 router.n0past.com FTP server (Version wu-2.5.0(1) Tue Jun 8
08:55:12 EDT 199
9) ready.
Name (router:spy): spy
331 Password required for spy.
Password:
230 User spy logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
220, 230 etc...
Ces codes vous paraisse etranges ? Tant mieux, je vais tacher de vous
les traduire de la facon la plus simple
possible !
______________________ ___________ _______________________
| 1 confirmation/refus | | 2 Origine | | 3 codes spécifiques |
¯¯|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯|¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
| |
| +---+---------------------------------+
| | 0 | Syntaxe |
| +---+---------------------------------+
| | 1 | Information |
| +---+---------------------------------+
| | 2 | Liaison |
| +---+---------------------------------+
| | 3 | Authentification |
| +---+---------------------------------+
| | 5 | Systeme de Fichiers |
| +---+---------------------------------+
|
+---+-----------------------------------------------------------+
| 1 | Confirmation provisoire / Autre reponse en attente |
+---+-----------------------------------------------------------+
| 2 | Confirmation definitive |
+---+-----------------------------------------------------------+
| 3 | Confirmation provisoire / Necessite d'autres instructions |
+---+-----------------------------------------------------------+
| 4 | Rejet provisoire |
+---+-----------------------------------------------------------+
| 5 | Rejet definitif |
+---+-----------------------------------------------------------+
C'est plus clair ? Oui/Non
Peux importe votre reponse je vais m'arreter la sur cette
explication... Bah c'est pas que j'en sais pas plus mais
a moi que vous vouliez que je me tape tous les codes d'erreurs un a un
je vois pas comment vous aider plus a ce sujet !
Voila pour ce qui est du protocole FTP, ci dessous je vous ai fait un
petit rappel de bugs a ne pas oublier
A part les exploits sur rootshell, buffer overflow & co, et autres
conneries qui ne marchent plus depuis des
lustres tel que la bounce attack; il ne faut pas oublier les failles
inées du protocole ou encore savoir utiliser,
exploiter tout ce qui est exploitable...
- Par exemple ne pas oublier qu'un IP Masq peux etre contourner par le
plus elementaires des spoof
- Ou encore qu'un acces depuis le LAN sur lequel se trouve le serveur
est toujours plus privilegié qu'un acces
depuis internet...
- Ne pas oublier non plus qu'un 'chmod' sur un fichier peux empecher
beaucoup de choses, par exemple la destruction
du fichier, le plus interessant dans ce cas est de le faire sur
l'index.htm (tres interressant quand apres un hack
on veux faire chier un admin distant... *oups* keske g dis moi)
- Idem, un simple '.' devant le nom d'un fichier peux empecher sa
destruction...
- Ne pas oublier encore que le FTP marche avec la norme ASCII et non
ANSI ce qui amene un bug evident et tres
interessant au niveau de son exploitation:
En effet, uploadez 4 fichiers dans un repertoire, ajoutez y un fichier
contenant un accent.
Par exemple un indéx.html, redemandez maintenant le listing du
repertoire...
Et hop ! La moitié des fichiers a disparu ! (tres pratique... sisi
reflechissez...)
- N'oublier pas les choses evidentes, du type:
Vous avez les l/p administrateur et vous n'etes pas foutu de vous
logger; pensez au su, le loggin direct impossible
comme sur tous les shell Unix de nos jours...
- Pensez que certains serveur FTP acceptent la commande 'passwd' et
vous permettent ainsi de changer le mot de pass
utilisateur.
- N'oubliez pas non plus que la remote execution est POSSIBLE en FTP:
Voir la commande 'SITE EXEC' sur serveur de type Serv-U
- La creation d'alias commandes, ou de macro scripts est realisable
dans la plupart des cas soit a partir de la
commande 'alias' sous les serveur de type Unix, soit a partir de la
commande 'macro' sur les serveur de type Windows
- Enfin pour des attaques ou les operations rapides pensez qu'un script
de connection FTP est plus qu'efficace
(cf le switch ftp -s:filename )
- Les commandes 'site' sont souvent les bienvenues, pensez que si elle
ne sont pas universelles c'est qu'elles ont
pour la plupart tendance a ouvrir des failles. Pensez donc toujours au
'SITE HELP'
(cf la commande 'site exec' monstrueusement dangereuse)