_ __________________________________ _ -*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)