Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
transfer.sh — Partage de fichiers facile et rapide depuis la ligne de commande. | Kitploit
Outils/GitHubGitHub/dutchcoders/transfer.sh
Utilitaires GénérauxOutils de Chiffrement/DéchiffrementExfiltration de Données
GitHubdutchcoders/transfer.sh

transfer.sh

Partage de fichiers facile et rapide depuis la ligne de commande.

Voir le dépôt
15.9k1.6kil y a 2 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

AVERTISSEMENT DE SÉCURITÉ

Contournement du filtrage IP et de l'authentification HTTP via l'usurpation non authentifiée de l'en-tête X-Forwarded-For

transfer.sh Go Report Card Docker pulls Build Status

Partage de fichiers facile et rapide depuis la ligne de commande. Ce code contient le serveur avec tout ce dont vous avez besoin pour créer votre propre instance.

Transfer.sh prend actuellement en charge les fournisseurs s3 (Amazon S3), gdrive (Google Drive), storj (Storj) et le système de fichiers local (local).




Avertissement

@stefanbenten est un mainteneur de ce dépôt et la personne qui héberge une installation publique bien connue du logiciel dans ce dépôt.

Les deux sont de toute façon indépendants, et le dépôt n'est pas l'endroit pour adresser des demandes et des problèmes concernant l'une ou l'autre des installations publiques.

Aucune installation publique tierce du logiciel dans le dépôt ne sera annoncée ou mentionnée dans le dépôt lui-même, pour des raisons de sécurité.

La position officielle de moi, @aspacca, en tant que mainteneur du dépôt, est que si vous souhaitez utiliser le logiciel, vous devez héberger votre propre installation.




Utilisation

Cette section décrit comment utiliser transfer.sh


Téléversement```bash

$ curl -v --upload-file ./hello.txt https://transfer.sh/hello.txt

root@kitploit:~
<br />

### Chiffrer & Télécharger```bash
$ gpg --armor --symmetric --output - /tmp/hello.txt | curl --upload-file - https://transfer.sh/test.txt

Télécharger & Décrypter```bash

$ curl https://transfer.sh/1lDau/test.txt | gpg --decrypt --output /tmp/hello.txt

root@kitploit:~
<br />

### Soumettre à Virustotal```bash
$ curl -X PUT --upload-file nhgbhhj https://transfer.sh/test.txt/virustotal

Suppression```bash

$ curl -X DELETE

root@kitploit:~
<br />

---

<br />

## En-têtes de requête

Cette section explique comment gérer les en-têtes de requête avec curl :

<br />

### Max-Downloads```bash
$ curl --upload-file ./hello.txt https://transfer.sh/hello.txt -H "Max-Downloads: 1" # Limit the number of downloads

Max-Days```bash

$ curl --upload-file ./hello.txt https://transfer.sh/hello.txt -H "Max-Days: 1" # Set the number of days before deletion

root@kitploit:~
<br />

### X-Encrypt-Password

#### Attention, n'utilisez cette fonctionnalité que sur votre serveur auto-hébergé : faire confiance à un service tiers pour le chiffrement côté serveur est à vos propres risques```bash
$ curl --upload-file ./hello.txt https://your-transfersh-instance.tld/hello.txt -H "X-Encrypt-Password: test" # Encrypt the content server side with AES256 using "test" as password

X-Decrypt-Password

Attention, n'utilisez cette fonctionnalité que sur votre serveur auto-hébergé : faire confiance à un service tiers pour le chiffrement côté serveur est à vos risques et périls```bash

$ curl https://your-transfersh-instance.tld/BAYh0/hello.txt -H "X-Decrypt-Password: test" # Decrypt the content server side with AES256 using "test" as password

root@kitploit:~
<br />

---

<br />

## En-têtes de réponse

Cette section explique comment gérer les en-têtes de réponse :

<br />

### X-Url-Delete

L'URL utilisée pour demander la suppression d'un fichier et renvoyée comme en-tête de réponse :```bash
curl -sD - --upload-file ./hello.txt https://transfer.sh/hello.txt | grep -i -E 'transfer\.sh|x-url-delete'
x-url-delete: https://transfer.sh/hello.txt/BAYh0/hello.txt/PDw0NHPcqU
https://transfer.sh/hello.txt/BAYh0/hello.txt



Exemples

Voir des exemples d'utilisation sur examples.md


Aliases de lien

Créer un lien de téléchargement direct :

https://transfer.sh/1lDau/test.txt --> https://transfer.sh/get/1lDau/test.txt

Fichier intégré :

https://transfer.sh/1lDau/test.txt --> https://transfer.sh/inline/1lDau/test.txt




Utilisation

Si vous souhaitez utiliser TLS avec les certificats Let's Encrypt, définissez lets-encrypt-hosts sur votre domaine, définissez tls-listener sur :443 et activez force-https.

Si vous souhaitez utiliser TLS avec vos propres certificats, définissez tls-listener sur :443, force-https, tls-cert-file et tls-private-key.




Développement

Passé à GO111MODULE```bash go run main.go --provider=local --listener :8080 --temp-path=/tmp/ --basedir=/tmp/

root@kitploit:~
<br />

---

<br />

## Compilation```bash
$ git clone [email protected]:dutchcoders/transfer.sh.git
$ cd transfer.sh
$ go build -o transfersh main.go



Docker

Pour un déploiement facile, nous avons créé un conteneur Docker officiel. Il existe deux variantes, ne différant que par l'utilisateur qui exécute le processus.

Celui par défaut s'exécutera en tant que root :

[!WARNING] Il est déconseillé d'utiliser le tag latest pour WatchTower ou des outils similaires. Le tag latest peut référencer des versions développeur non publiées, des builds de test et des correctifs pour des versions plus anciennes. Utilisez un tag de version réel jusqu'à ce que transfer.sh prenne en charge les tags de version majeure ou mineure.```bash docker run --publish 8080:8080 dutchcoders/transfer.sh:latest --provider local --basedir /tmp/

root@kitploit:~
<br />

### Aucun root

Les tags `-noroot` indiquent des builds d'images qui s'exécutent avec le moins de privilèges possible pour réduire la surface d'attaque en cas de compromission d'une application.

> [!NOTE]
> L'utilisation de `-noroot` est **recommandée**

<br />

Celle taguée avec le suffixe `-noroot` utilisera `5000` comme UID et GID :```bash
docker run --publish 8080:8080 dutchcoders/transfer.sh:latest-noroot --provider local --basedir /tmp/

[!NOTE] Détails de l'historique de développement sur :

  • https://github.com/dutchcoders/transfer.sh/pull/418

Tags


Construction du conteneur

Vous pouvez également construire le conteneur vous-même. Cela vous permet de choisir quel UID/GID sera utilisé, par exemple lors de l'utilisation de montages NFS :```bash

Build arguments:

* RUNAS: If empty, the container will run as root.

Set this to anything to enable UID/GID selection.

* PUID: UID of the process. Needs RUNAS != "". Defaults to 5000.

* PGID: GID of the process. Needs RUNAS != "". Defaults to 5000.

docker build -t transfer.sh-noroot --build-arg RUNAS=doesntmatter --build-arg PUID=1337 --build-arg PGID=1338 .

root@kitploit:~
<br />

---

<br />

## Utilisation de S3

Pour l'utilisation avec un bucket AWS S3, il vous suffit de spécifier les options suivantes :
- fournisseur `--provider s3`
- aws-access-key _(via le paramètre ou la variable d'environnement `AWS_ACCESS_KEY`)_
- aws-secret-key _(via le paramètre ou la variable d'environnement `AWS_SECRET_KEY`)_
- bucket _(via le paramètre ou la variable d'environnement `BUCKET`)_
- s3-region _(via le paramètre ou la variable d'environnement `S3_REGION`)_

Si vous spécifiez la s3-region, vous n'avez pas besoin de définir l'URL du point de terminaison car le point de terminaison correct sera utilisé automatiquement.

<br />

### Fournisseurs S3 personnalisés

Pour utiliser un fournisseur S3 non-AWS personnalisé, vous devez spécifier le point de terminaison tel que défini par votre fournisseur de cloud.

<br />

---

<br />

## Fournisseur Storj Network

Pour utiliser le réseau Storj en tant que fournisseur de stockage, vous devez spécifier les indicateurs suivants :
- fournisseur `--provider storj`
- storj-access _(via le paramètre ou la variable d'environnement STORJ_ACCESS)_
- storj-bucket _(via le paramètre ou la variable d'environnement STORJ_BUCKET)_

<br />

### Création du bucket et du scope

Vous devez créer un access grant (ou le copier depuis la configuration d'uplink) ainsi qu'un bucket en préparation.

Pour commencer, connectez-vous à votre compte et accédez au menu Access Grant, puis démarrez l'assistant en haut à droite.

Saisissez le nom de votre access grant de votre choix, cliquez sur *Suivant* et restreignez-le si nécessaire/souhaité.
Ensuite, continuez soit en CLI, soit dans le navigateur. Ensuite, il vous sera demandé une phrase de passe utilisée comme clé de chiffrement.
**Assurez-vous de la conserver en lieu sûr. Sans elle, vous perdrez la capacité de déchiffrer vos fichiers !**

Ensuite, vous pouvez copier l'access grant, puis démarrer le point de terminaison de transfer.sh. 
Il est recommandé de fournir à la fois l'access grant et le nom du bucket en tant que variables d'environnement pour une sécurité renforcée.

Exemple :```
export STORJ_BUCKET=<BUCKET NAME>
export STORJ_ACCESS=<ACCESS GRANT>
transfer.sh --provider storj



Utilisation de Google Drive

Pour l'utilisation avec Google Drive, vous devez spécifier les options suivantes :

  • provider
  • gdrive-client-json-filepath
  • gdrive-local-config-path
  • basedir

Création du fichier Json client Gdrive

Vous devez créer un ID client OAuth depuis console.cloud.google.com, télécharger le fichier et le placer dans un répertoire sûr.


Exemple d'utilisationgo run main.go --provider gdrive --basedir /tmp/ --gdrive-client-json-filepath /[credential_dir] --gdrive-local-config-path [directory_to_save_config]




Shell functions

Bash, ash and zsh (multiple files uploaded as zip archive)

Add this to .bashrc or .zshrc or its equivalent
root@kitploit:~
transfer() ( if [ $# -eq 0 ]; then printf "Aucun argument spécifié.\nUtilisation :\n transfer <fichier|répertoire>\n ... | transfer <nom_fichier>\n">&2; return 1; fi; file_name=$(basename "$1"); if [ -t 0 ]; then file="$1"; if [ ! -e "$file" ]; then echo "$file: Fichier ou répertoire inexistant">&2; return 1; fi; if [ -d "$file" ]; then cd "$file" || return 1; file_name="$file_name.zip"; set -- zip -r -q - .; else set -- cat "$file"; fi; else set -- cat; fi; url=$("$@" | curl --silent --show-error --progress-bar --upload-file "-" "https://transfer.sh/$file_name"); echo "$url"; )```

<br />

#### Now you can use transfer function

$ transfer hello.txt```


Bash and zsh (with delete url, delete token output and prompt before uploading)

Add this to .bashrc or .zshrc or its equivalent
Expand

root@kitploit:~
```bash
transfer()
{
    local file
    declare -a file_array
    file_array=("${@}")

    if [[ "${file_array[@]}" == "" || "${1}" == "--help" || "${1}" == "-h" ]]
    then
        echo "${0} - Téléchargez des fichiers arbitraires vers \"transfer.sh\"."
        echo ""
        echo "Utilisation : ${0} [options] [<fichier>]..."
        echo ""
        echo "OPTIONS :"
        echo "  -h, --help"
        echo "      afficher ce message"
        echo ""
        echo "EXEMPLES :"
        echo "  Télécharger un seul fichier depuis le répertoire de travail actuel :"
        echo "      ${0} \"image.img\""
        echo ""
        echo "  Télécharger plusieurs fichiers depuis le répertoire de travail actuel :"
        echo "      ${0} \"image.img\" \"image2.img\""
        echo ""
        echo "  Télécharger un fichier depuis un autre répertoire :"
        echo "      ${0} \"/tmp/some_file\""
        echo ""
        echo "  Télécharger tous les fichiers du répertoire de travail actuel. Attention à la limitation de débit du serveur web ! :"
        echo "      ${0} *"
        echo ""
        echo "  Télécharger un seul fichier depuis le répertoire de travail actuel et filtrer le jeton de suppression et le lien de téléchargement :"
        echo "      ${0} \"image.img\" | awk --field-separator=\": \" '/Delete token:/ { print \$2 } /Download link:/ { print \$2 }'"
        echo ""
        echo "  Afficher le texte d'aide depuis \"transfer.sh\" :"
        echo "      curl --request GET \"https://transfer.sh\""
        return 0
    else
        for file in "${file_array[@]}"
        do
            if [[ ! -f "${file}" ]]
            then
                echo -e "\e[01;31m'${file}' n'a pas été trouvé ou n'est pas un fichier.\e[0m" >&2
                return 1
            fi
        done
        unset file
    fi

    local upload_files
    local curl_output
    local awk_output

    du -c -k -L "${file_array[@]}" >&2
    # être compatible avec "bash"
    if [[ "${ZSH_NAME}" == "zsh" ]]
    then
        read $'upload_files?\e[01;31mVoulez-vous vraiment télécharger les fichiers ci-dessus ('"${#file_array[@]}"$') vers "transfer.sh" ? (Y/n) : \e[0m'
    elif [[ "${BASH}" == *"bash"* ]]
    then
        read -p $'\e[01;31mVoulez-vous vraiment télécharger les fichiers ci-dessus ('"${#file_array[@]}"$') vers "transfer.sh" ? (Y/n) : \e[0m' upload_files
    fi

    case "${upload_files:-y}" in
        "y"|"Y")
            # pour la barre de progression, exécutez "curl" pour chaque fichier.
            # les paramètres "--include" et "--form" supprimeront la barre de progression.
            for file in "${file_array[@]}"
            do
                # afficher le lien de suppression et filtrer le jeton de suppression de l'en-tête de réponse après le téléchargement.
                # il est important de sauvegarder "stdout" de "curl" via un sous-shell dans une variable ou de le rediriger vers une autre commande,
                # qui redirige simplement vers "stdout" afin d'avoir une sortie correcte par la suite.
                # la barre de progression est redirigée vers "stderr" et n'est affichée que
                # si "stdout" est redirigé vers quelque chose ; par ex. ">/dev/null", "tee /dev/null" ou "| <some_command>".
                # l'en-tête de réponse est redirigée vers "stdout", donc rediriger "stdout" vers "/dev/null" n'a pas de sens.
                # rediriger "stderr" de "curl" vers "stdout" ("2>&1") supprimera la barre de progression.
                curl_output=$(curl --request PUT --progress-bar --dump-header - --upload-file "${file}" "https://transfer.sh/")
                awk_output=$(awk \
                    'gsub("\r", "", $0) && tolower($1) ~ /x-url-delete/ \
                    {
                        delete_link=$2;
                        print "Delete command: curl --request DELETE " "\""delete_link"\"";

                        gsub(".*/", "", delete_link);
                        delete_token=delete_link;
                        print "Delete token: " delete_token;
                    }

                    END{
                        print "Download link: " $0;
                    }' <<< "${curl_output}")

                # renvoyer les résultats via "stdout", "awk" ne le fait pas pour une raison quelconque.
                echo -e "${awk_output}\n"

                # éviter autant que possible la limitation de débit ; nginx : trop de demandes.
                if (( ${#file_array[@]} > 4 ))
                then
                    sleep 5
                fi
            done
            ;;

        "n"|"N")
            return 1
            ;;

        *)
            echo -e "\e[01;31mEntrée incorrecte : '${upload_files}'.\e[0m" >&2
            return 1
    esac
}

Sample output

root@kitploit:~
$ ls -lh
total 20M
-rw-r--r-- 1 <some_username> <some_username> 10M Apr  4 21:08 image.img
-rw-r--r-- 1 <some_username> <some_username> 10M Apr  4 21:08 image2.img
$ transfer image*
10240K  image2.img
10240K  image.img
20480K  total
Voulez-vous vraiment télécharger les fichiers ci-dessus (2) vers "transfer.sh" ? (Y/n):
######################################################################################################################################################################################################################################## 100.0%
Commande de suppression : curl --request DELETE "https://transfer.sh/wJw9pz/image2.img/mSctGx7pYCId"
Jeton de suppression : mSctGx7pYCId
Lien de téléchargement : https://transfer.sh/wJw9pz/image2.img

######################################################################################################################################################################################################################################## 100.0%
Commande de suppression : curl --request DELETE "https://transfer.sh/ljJc5I/image.img/nw7qaoiKUwCU"
Jeton de suppression : nw7qaoiKUwCU
Lien de téléchargement : https://transfer.sh/ljJc5I/image.img

$ transfer "image.img" | awk --field-separator=": " '/Delete token:/ { print $2 } /Download link:/ { print $2 }'
10240K  image.img
10240K  total
Voulez-vous vraiment télécharger les fichiers ci-dessus (1) vers "transfer.sh" ? (Y/n):
######################################################################################################################################################################################################################################## 100.0%
tauN5dE3fWJe
https://transfer.sh/MYkuqn/image.img```

<br />

---

<br />

## Contributions

Contributions are welcome.

<br />

---

<br />

## Creators

**Remco Verhoef**
- <https://twitter.com/remco_verhoef>
- <https://twitter.com/dutchcoders>

**Uvis Grinfelds**

<br />

---

<br />

## Maintainers

- **Andrea Spacca**
- **Stefan Benten**

<br />

---

<br />

## Copyright and License

Code and documentation copyright 2011-2018 Remco Verhoef.
Code and documentation copyright 2018-2020 Andrea Spacca.
Code and documentation copyright 2020- Andrea Spacca and Stefan Benten.

Code released under [the MIT license](https://github.com/dutchcoders/transfer.sh/blob/HEAD/LICENSE).
Télécharger l’outil
ParamètreDescriptionValeurEnv
listenerport à utiliser pour http (:80)LISTENER
profile-listenerport à utiliser pour le profileur (:6060)PROFILE_LISTENER
force-httpsrediriger vers httpsfalseFORCE_HTTPS
tls-listenerport à utiliser pour https (:443)TLS_LISTENER
tls-listener-onlyindicateur pour activer uniquement l'écouteur TLSTLS_LISTENER_ONLY
tls-cert-filechemin vers le certificat TLSTLS_CERT_FILE
tls-private-keychemin vers la clé privée TLSTLS_PRIVATE_KEY
http-auth-userutilisateur pour l'authentification HTTP de base sur le téléchargementHTTP_AUTH_USER
http-auth-passmot de passe pour l'authentification HTTP de base sur le téléchargementHTTP_AUTH_PASS
http-auth-htpasswdchemin du fichier htpasswd pour l'authentification HTTP de base sur le téléchargementHTTP_AUTH_HTPASSWD
http-auth-ip-whitelistliste séparée par des virgules des adresses IP autorisées à télécharger sans défi d'authentificationHTTP_AUTH_IP_WHITELIST
virustotal-keyclé API VirusTotalVIRUSTOTAL_KEY
ip-whitelistliste séparée par des virgules des adresses IP autorisées à se connecter au serviceIP_WHITELIST
ip-blacklistliste séparée par des virgules des adresses IP non autorisées à se connecter au serviceIP_BLACKLIST
temp-pathchemin vers le dossier temporairetemp systèmeTEMP_PATH
web-pathchemin vers les fichiers web statiques (pour le développement ou l'interface frontale personnalisée)WEB_PATH
proxy-pathpréfixe de chemin lorsque le service est exécuté derrière un proxy (un préfixe / sera supprimé)PROXY_PATH
proxy-portport du proxy lorsque le service est exécuté derrière un proxyPROXY_PORT
email-contactcontact email pour l'interface frontaleEMAIL_CONTACT
ga-keyclé Google Analytics pour l'interface frontaleGA_KEY
providerquel fournisseur de stockage utiliser(s3, storj, gdrive ou local)
uservoice-keyclé UserVoice pour l'interface frontaleUSERVOICE_KEY
aws-access-keyclé d'accès AWSAWS_ACCESS_KEY
aws-secret-keyclé secrète AWSAWS_SECRET_KEY
bucketcompartiment AWSBUCKET
s3-endpointPoint de terminaison S3 personnalisé.S3_ENDPOINT
s3-regionrégion du compartiment S3eu-west-1S3_REGION
s3-no-multipartdésactive le téléchargement multipart S3falseS3_NO_MULTIPART
s3-path-styleForce les URL de style chemin, requis pour Minio.falseS3_PATH_STYLE
storj-accessAccès pour le projetSTORJ_ACCESS
storj-bucketCompartiment à utiliser dans le projetSTORJ_BUCKET
basedirchemin de stockage pour le fournisseur local/gdriveBASEDIR
gdrive-client-json-filepathchemin vers la configuration JSON du client OAuth pour le fournisseur gdriveGDRIVE_CLIENT_JSON_FILEPATH
gdrive-local-config-pathchemin pour stocker le cache de configuration local de transfer.sh pour le fournisseur gdriveGDRIVE_LOCAL_CONFIG_PATH
gdrive-chunk-sizetaille des morceaux pour le téléchargement gdrive en mégaoctets, doit être inférieure à la mémoire disponible (8 Mo)GDRIVE_CHUNK_SIZE
lets-encrypt-hostshôtes à utiliser pour les certificats Let's Encrypt (séparés par des virgules)HOSTS
logchemin vers le fichier journalLOG
cors-domainsliste séparée par des virgules des domaines pour CORS, son activation permet CORSCORS_DOMAINS
clamav-hosthôte pour la fonctionnalité ClamAVCLAMAV_HOST
perform-clamav-prescanpré-numériser chaque téléchargement en utilisant ClamAV (clamav-host doit être le socket Unix local de clamd)PERFORM_CLAMAV_PRESCAN
rate-limitdemandes par minuteRATE_LIMIT
max-upload-sizetaille maximale de téléchargement en kilo-octetsMAX_UPLOAD_SIZE
purge-daysnombre de jours après lesquels les téléchargements sont purgés automatiquementPURGE_DAYS
purge-intervalintervalle (heures) pour exécuter la purge automatique (sauf S3 et Storj)PURGE_INTERVAL
random-token-lengthlongueur du jeton aléatoire pour le chemin de téléchargement (double taille pour le chemin de suppression)6RANDOM_TOKEN_LENGTH
NomUtilisation
latestDernière construction CI, peut être nightly, à un commit, à un tag, etc.
latest-norootDernière construction CI, peut être nightly, à un commit, à un tag, etc. utilisant [no root]
nightlyConstruction CI planifiée chaque nuit à minuit UTC
nightly-norootConstruction CI planifiée chaque nuit à minuit UTC utilisant [no root]
edgeDernière construction CI après chaque commit sur main
edge-norootDernière construction CI après chaque commit sur main utilisant [no root]
vx.y.zConstruction CI après le marquage d'une version
vx.y.z-norootConstruction CI après le marquage d'une version utilisant [no root]