Exporter un fichier texte vers un service en ligne de type pastebin

De Analyse Développement Hacking
Sauter à la navigation Sauter à la recherche

Glider.png

Le wiki : Accueil - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack

Le site : Accueil du site - Annuaire - Blog - Forum - Outils - Utilisateur
Le FTP : Accueil du FTP - Le privatebin : Accueil du privatebin
Le Redmine : Accueil du Redmine

Sommaire

Exporter un fichier texte vers un service en ligne de type pastebin

Exporter une information texte vers termbin

Exporter une information texte depuis Linux Mint vers termbin

# Localiser le programme pastebin sur Linux Mint :
which pastebin
/usr/bin/pastebin
/usr/bin/pastebin provient du package xapps-common et utilise le nouveau site de dépôt GitHub.
/usr/local/bin/pastebin provient du paquetage mintsystem et utilise le site de collage Linux Mint maintenant fermé.
# Cette fonctionnalité dépendrait de la librairie xapps-common qui permettrait de faire fonctionner pastebin sous Linux Mint :
sudo dpkg -l |grep xapps-common
ii  xapps-common                                                1.6.10+tricia                                       all          Common files for XApp desktop apps
# Utiliser pastebin pour partager, par exemple, des logs de votre machine avec d'autres administrateurs système :
inxi -Fxxxzc0 |pastebin
sudo rfkill list all |pastebin
dmesg |pastebin
# Utiliser pastebin pour partager les logs de vos noyaux avec d'autres administrateurs système :
dpkg -l linux-image* | pastebin
# Partager un simple texte :
echo "some test"|pastebin
https://termbin.com/4l2n
# Partager un fichier :
cat test |pastebin
https://termbin.com/m4xc
Avec la participation de Jérémy Pruvost, pour localiser la librairie permettant l'utilisation de pastebin sur Linux Mint.
Source complémentaire : https://forums.linuxmint.com/viewtopic.php?t=249319
Source complémentaire : https://github.com/linuxmint/xapps
Source vers le script pastebin de la librairie xapps de Linux Mint : https://github.com/linuxmint/xapps/blob/master/scripts/pastebin

Exporter une information texte depuis Debian vers termbin

# La même bibliothèque, xapps-common, permet d'utiliser pastebin depuis Debian, à l'aide de netcat :
sudo apt install xapps-common
sudo apt install netcat
cd /usr/share/xapps-common/bin
python3 pastebin ~/test
# Ou, directement :
cat test |/usr/share/xapps-common/bin/pastebin
# Simplifier l'utilisation avec un lien symbolique vers usr/bin/pastebin ou encore, avec un alias via le fichier .bashrc.
cd /usr/share/xapps-common/bin
sudo ln pastebin /usr/bin/pastebin
cat test |pastebin
# Note complémentaire sur Netcat : https://doc.fedora-fr.org/wiki/Netcat,_connexion_client/serveur_en_bash
# De la même façon que cat permet de lire un fichier, netcat permet de lire un socket, c'est à dire un port réseau.
# Lire le manuel de Netcat : man nc

Utiliser pastebinit

Installer pastebinit depuis le dépôt Debian

# Installer pastebinit :
sudo apt-get install pastebinit
# Générer un lien vers pastebin pour exporter le contenu d'un fichier.
pastebinit fichier.txt
# Sous Debian Stretch et Buster, un bogue affiche le message suivant est affiché :
/usr/bin/pastebinit:42: DeprecationWarning: dist() and linux_distribution() functions are deprecated in Python 3.5
 release = platform.linux_distribution()[0].lower()
/usr/bin/pastebinit:413: DeprecationWarning: pasteURLopener style of invoking requests is deprecated. Use newer urlopen functions/methods
 url_opener = pasteURLopener()
# Compléter la commande avec -i et -b semble permettre l'export même si une erreur est toujours affichée :
pastebinit -i hello_unixnlinux.txt -b http://pastebin.com
# Lister les pastebin supportés :
pastebinit -l
- cxg.de
- dpaste.com
- fpaste.org
- lpaste.net
- p.defau.lt
- paste.debian.net
- paste.openstack.org
- paste.pound-python.org
- paste.ubuntu.com
- paste.ubuntu.org.cn
- paste2.org
- pastebin.com
- slexy.org
- sprunge.us
# Et, celui-ci, vu via la même commande, depuis un système ARCH :
- paste.openstack.org

Installer pastebinit depuis le dépôt Github

# Le dépôt de pastebinit sur Github : https://github.com/lubuntu-team/pastebinit
git clone https://github.com/bleachbit/bleachbit.git
cd pastebinit/
sh test.sh
# Il faudrait alors obtenir une clé api dev_key pour modifier la clé dans le programme installé manuellement.

Installer pastebinit depuis le dépôt Salsa de Debian

Source : https://salsa.debian.org/debian/pastebinit

Utiliser ix

sudo cat fichier 2>&1 | curl -F 'f:1=<-' ix.io

Utiliser sprunge

sudo cat fichier | curl -F 'sprunge=<-' http://sprunge.us

Utiliser Fiche avec Termbin

Command line pastebin for sharing terminal output. http://termbin.com
Github : https://github.com/solusipse/fiche

Utiliser cURL

# Envoyer un texte :
curl -s --data 'Hello World!' 'http://paste.c-net.org/'
# Envoyer un fichier :
curl --upload-file '/tmp/file' 'https://paste.c-net.org/'
# Envoyer la sortie d'un résultat :
./bin/hello_world | curl --upload-file - 'http://paste.c-net.org/'

Les pastebin public sont à la disposition des hackers

Pastehunter permet de récupérer de nombreuses informations concernant les pastebin publiés : https://kalilinuxtutorials.com/pastehunter-scanning-pastebin/

Installer son propre serveur pastebin avec PrivateBin

Introduction à PrivateBin

# PrivateBin est un clone de PasteBin, utilisé pour partager du texte et du code.
# PrivateBin est un outil permettant le partage de texte chiffré de bout en bout en utilisant un système de chiffrement symétrique.
# L'intérêt de PrivateBin est que le serveur n'a pas connaissance du texte qui est partagé par l'outil.
# Pour faire simple, l'administrateur ne peut pas lire les messages depuis le serveur, ni ne connaît l'adresse qui permettra de consulter le message en ligne.
# PrivateBin tend à fournir aux administrateurs de serveurs un outil permettant de nier de manière plausible toute connaissance du contenu des messages et des discussions stockés.
# Il n'a pas pour vocation de conserver le contenu des messages secret, lors d'un partage sur un réseau social analysant les échanges, par exemple.
# Pour conserver le contenu des messages secret, il est nécessaire d'utiliser la protection par mot de passe.
# Le chiffrement de bout en bout permet de rendre lisible un contenu uniquement pour le destinataire.
# Toutes les données sont chiffrées et déchiffrées par le navigateur avec un chiffrement AES-256 GCM.
# Le fichier est rendu illisible à l'aide d'une variable aléatoire que vous êtes le seul à posséder et sans laquelle le fichier reste illisible.
# Toutes les informations sont stockées dans une structure de fichiers.
# Par défaut, PrivateBin n'utilise pas de base de données traditionnelles.
# Avec un fonctionnement par fichiers, la sauvegarde est facilitée, un simple enregistrement des fichiers permettant de sauvegarder Privatebin et sa configuration.
Le site officiel de PrivateBin : https://privatebin.info
Le blog officiel de PrivateBin : https://privatebin.info/category/news.html
Le flux RSS de PrivateBin : https://privatebin.info/feeds/all.atom.xml
Le dépôt officiel de PrivateBin : https://github.com/PrivateBin/PrivateBin
La documentation de PrivateBin : https://github.com/PrivateBin/PrivateBin/wiki/Configuration
L'instance officielle : https://privatebin.net
L'instance Visionduweb : https://privatebin.visionduweb.fr
L'instance Lecannabiste : https://privatebin.visionduweb.fr
# Il est possible de partager son contenu texte à l'aide de trois formats différents :
Texte brut :  Par défaut le format est en "Texte brut", le texte est retransmis tel quel.
Code source : Permet de coloriser le code.
Markdown : Interprète le texte rédigé en Markdown et l'affiche en conséquence.
# Une fois le partage du contenu texte effectué, deux liens sont mis à disposition :
Un lien de partage.
Un lien pour supprimer immédiatement le document PrivateBin.
# La durée de vie du message peut être prédéfini.
# Soit le message est accessible pour quelques minutes ou quelques jours, soit, le message sera supprimé après la lecture, soit, le message ne sera jamais supprimé.

Installer PrivateBin

# Installer PrivateBin depuis le dépôt officiel de PrivateBin sur GitHub.
# Prérequis :
sudo apt install -y apache2 php php-xml php-mbstring php-mysql php-json php-pdo 
# Télécharger Privatebin dans le répertoire de votre site sur le serveur :
sudo -s
cd /var/www
mkdir privatebin.visionduweb.fr
cd /var/www/privatebin.visionduweb.fr/
apt install git
git clone https://github.com/PrivateBin/PrivateBin.git
cd PrivateBin
# Ne pas conserver le robots.txt de PrivateBin pour ne pas écraser le miens.
rm robots.txt
mv .htaccess.disabled .htaccess
# Remplacer le favicon original par celui de visionduweb :
wget https://www.visionduweb.fr/favicon.ico
# Copier le favion.ico dans le dossier img :
cp favicon.ico img/favicon.ico
# Laisser PrivateBin dans le dossier clone original n'est pas forcément judicieux.
# Pour une meilleure configuration, le déplacer vers le répertoire racine du site, dans mon cas, il suffit de faire remonter les fichiers de un niveau.
mv * ../
mv .* ../
cd ..
rm -R PrivateBin
# Supprimer les éléments concernant Git.
rm -R .git*
# Interdire à tous les robots d'accéder aux messages.
# Un fichier robots.txt est fourni dans le répertoire racine de PrivateBin.
# Il est recommandé de le placer à la racine de votre répertoire Web si vous avez installé PrivateBin dans un sous-répertoire.
# Dans mon cas, j'utilise déjà un fichier robots.txt personnalisé, donc, je supprime le fichier proposé dans le paquet de PrivateBin.
#
#
#        GGGGGGGGGGGGG                                                     lllllll
#     GGG::::::::::::G                                                     l:::::l
#   GG:::::::::::::::G                                                     l:::::l
#  G:::::GGGGGGGG::::G                                                     l:::::l
# G:::::G       GGGGGG   ooooooooooo      ooooooooooo      ggggggggg   gggggl::::l     eeeeeeeeeeee    
#G:::::G               oo:::::::::::oo  oo:::::::::::oo   g:::::::::ggg::::gl::::l   ee::::::::::::ee  
#G:::::G              o:::::::::::::::oo:::::::::::::::o g:::::::::::::::::gl::::l  e::::::eeeee:::::ee
#G:::::G    GGGGGGGGGGo:::::ooooo:::::oo:::::ooooo:::::og::::::ggggg::::::ggl::::l e::::::e     e:::::e
#G:::::G    G::::::::Go::::o     o::::oo::::o     o::::og:::::g     g:::::g l::::l e:::::::eeeee::::::e
#G:::::G    GGGGG::::Go::::o     o::::oo::::o     o::::og:::::g     g:::::g l::::l e:::::::::::::::::e 
#G:::::G        G::::Go::::o     o::::oo::::o     o::::og:::::g     g:::::g l::::l e::::::eeeeeeeeeee  
# G:::::G       G::::Go::::o     o::::oo::::o     o::::og::::::g    g:::::g l::::l e:::::::e           
#  G:::::GGGGGGGG::::Go:::::ooooo:::::oo:::::ooooo:::::og:::::::ggggg:::::gl::::::le::::::::e          
#   GG:::::::::::::::Go:::::::::::::::oo:::::::::::::::o g::::::::::::::::gl::::::l e::::::::eeeeeeee  
#     GGG::::::GGG:::G oo:::::::::::oo  oo:::::::::::oo   gg::::::::::::::gl::::::l  ee:::::::::::::e  
#        GGGGGG   GGGG   ooooooooooo      ooooooooooo       gggggggg::::::gllllllll    eeeeeeeeeeeeee  
#                                                                   g:::::g
#                                                       gggggg      g:::::g
#                                                       g:::::gg   gg:::::g
#                                                        g::::::ggg:::::::g
#                                                         gg:::::::::::::g
#                                                           ggg::::::ggg
#                                                              gggggg
# Interdire tous les robots :
User-agent: *
Disallow: /
# Un fichier .htaccess.disabled est fourni dans le répertoire racine de PrivateBin. Il permet de bloquer certains robots et robots de balayage de liens connus.
# Le premier bloc pourrait être supprimé, une fois Bad Bot BLocker installé.
# Le second bloc peut être conservé car il surcharge la configuration du serveur pour les limitations de chargement.
# Renommer .htaccess.disabled en .htaccess pour l'activer sur Apache2.
RewriteEngine on
RewriteCond !%{HTTP_USER_AGENT} "Let's Encrypt validation server" [NC]
RewriteCond %{HTTP_USER_AGENT} ^.*(bot|spider|crawl|https?://|WhatsApp|SkypeUriPreview|facebookexternalhit) [NC]
RewriteRule .* - [R=403,L]

<IfModule mod_php7.c>
php_value max_execution_time 30
php_value post_max_size 10M
php_value upload_max_size 10M
php_value upload_max_filesize 10M
php_value max_file_uploads 100
</IfModule>
# On retrouve la liste des images, et, leurs tailles, depuis le dépôt officiel : https://github.com/PrivateBin/PrivateBin/tree/master/img
# Modifier les images dans le dossier img de son dépôt privé pour changer le favicon du site PrivateBin en fonction de votre charte graphique.
# favicon-16x16.png
# favicon-32x32.png
# icon.svg
# glider-180x180.png (Pour le code Opengraph.)
# Les fichiers et dossiers appartiennent à "root:root" sauf le dossier data qui appartient à "www-data:www-data".
Privatebin est fonctionnel depuis l'adresse du site : https://privatebin.visionduweb.fr
Consulter le VirtualHost mis en place pour PrivateBin.

Installer un certificat HTTPS

# Sans HTTPS, PrivateBin n'est pas sécurisé, car les fichiers JavaScript peuvent être manipulés pendant la transmission.
# Installer par exemple, un certificat Let's Encrypt.

Durcir la politique des droits sur les dossiers et fichiers

# Quelques scénarios d'installation courantes :
# Serveur Web Apache "classique" avec mod_php - Dans ce cas, les scripts PHP sont exécutés en tant que processus enfants du serveur apache et en tant que même utilisateur que le serveur apache.
# Puisqu'il n'y a qu'un seul utilisateur dans ce scénario qui a besoin d'accès, on pourrait aller avec seulement des autorisations au niveau du propriétaire (0600 au lieu de 0640 par exemple).
# Si PHP s'exécute en tant que processus (rapide) cgi ou PHP-FPM (gestionnaire de processus rapide), le serveur Web et PHP peuvent être exécuté avec des utilisateurs distincts.
# Ceci est très fréquent sur les hébergeurs partagés, où les scripts PHP de chaque client sont exécutés dans leur propre utilisateur, afin qu'ils ne puissent pas lire les autres fichiers des clients.
# Pour que cette configuration fonctionne, le propriétaire doit être défini sur le même que le processus PHP et le groupe doit être défini sur un groupe dans lequel se trouve l'utilisateur du serveur Web.
# Les autorisations doivent ressembler à ceci :
Répertoires: 0550 (Lecture seule pour le propriétaire et le groupe, non accessible aux autres.)
Répertoire de données: 0750 (Accessible en écriture pour le propriétaire, en lecture seule pour le groupe, non accessible pour les autres.)
Fichiers: 0640 (Accessibles en écriture pour le propriétaire, en lecture seule pour le groupe, non accessibles pour les autres.), les fichiers créés obtiennent ces autorisations automatiquement.
# Pour la plupart des configurations, il est possible d'utiliser le script suivant.
# Créer le script chmod-chown-privatebin.sh :
sudo mkdir /home/utilisateur/scripts-maintenance/
sudo nano /home/utilisateur/scripts-maintenance/chmod-chown-privatebin.sh
#!/bin/sh
# Les répertoires de PrivateBin :
pbpath='/var/www/privatebin.visionduweb.fr'
pbdata='/var/www/privatebin.visionduweb.fr/data'
# Utilisateur PHP de PrivateBin et du serveur web Apache (Se sont souvent les mêmes.)
# pbuser='php'
pbuser='www-data'
htgroup='www-data'
rootuser='root'

# Créer le dossier de stockage en fonction de la configuration souhaitée.
# Par défaut, le dossier data est utilisé.
mkdir -p "$pbdata"

echo "chmod"
find "${pbpath}/" -type f -print0 | xargs -0 chmod 0640
find "${pbpath}/" -type d -print0 | xargs -0 chmod 0550
find "${pbdata}/" -type f -print0 | xargs -0 chmod 0640
find "${pbdata}/" -type d -print0 | xargs -0 chmod 0750

echo "chown"
chown -R ${rootuser}:${htgroup} "${pbpath}/"
chown -R ${pbuser}:${rootuser} "${pbdata}/"
Le dossier conteneur du site, dans /var/www/ aura des droits CHMOD en 550 et appartiendra à "root:www-data".
dr-xr-x--- 13 root www-data 4096 juin  21 04:31 privatebin.visionduweb.fr
Documentation : https://github.com/PrivateBin/PrivateBin/wiki/FAQ#what-are-the-recommended-file-and-folder-permissions-for-privatebin

Configurer PrivateBin

Dupliquer le fichier conf.sample.php en conf.php

cd /var/www/privatebin.visionduweb.fr/cfg
sudo cp conf.sample.php conf.php
sudo nano conf.php
# Le titre du site :
name = "Visionduweb - PrivateBin"
# Changer le titre du site va également changer le nom du programme dans le texte en bas à droite.
# Une issue est ouverte : https://github.com/PrivateBin/PrivateBin/issues/641
# Activer ou désactiver la fonction de discussion, la discussion est activée par défaut :
discussion = true
# Autoriser le chargement de fichiers :
fileupload = true
# Une taille limite en octets pour les messages et commentaires stockés :
sizelimit = 10485760
# Afficher une notice :
notice = "Visionduweb met à disposition une instance non modifiée du projet opensource PrivateBin 1.3.4 dans sa version stable.
Utiliser ce service n'entraîne aucun risque pour votre sécurité.
Votre message est chiffré et mis à disposition depuis une adresse URL transmise une fois le message créé.
L'administrateur du serveur ne pourra pas connaître l'addresse de votre message ni décrypter son contenu depuis le serveur.
Une fois expiré, votre message sera totalement supprimé du serveur."
# Par défaut, la langue utilisée s'adapte à la provenance de l'utilisateur.
# Malgré tout, lors d'un partage sur Facebook, Twitter, Discord, la description du site est en anglais.
# La description du site reste en anglais, même une fois que le fichier de langue ait été traduit : https://github.com/PrivateBin/PrivateBin/issues/642
# Il faut forcer la langue en français ! Le navigateur devrait pourtant savoir que je suis français, soit du fait de la configuration, soit, du fait de mon adresse IP.
# En forçant la langue par défaut, PrivateBin propose la description directement en français suite à un partage sur un réseau social.
languageselection = true
languagedefault = "fr"
# Définir les options d'expirations proposées depuis l'outil en ligne.
# Commenter la conservation à vie et ajouter une conservation sur 2ans, 5ans et 10 ans.
[expire_options]
; Set each one of these to the number of seconds in the expiration period,
; or 0 if it should never expire
;5min = 300
10min = 600
1hour = 3600
1day = 86400
1week = 604800
; Well this is not *exactly* one month, it's 30 days:
1month = 2592000
1year = 31536000
2year = 63072000
5year = 157680000
10year = 315360000
;never = 0
# Limiter une durée d'attente minimum de création d'un message pour chaque adresse IP :
[traffic]
; time limit between calls from the same IP address in seconds
; Set this to 0 to disable rate limiting.
limit = 45
Documentation sur la configuration du fichier conf.php : https://github.com/PrivateBin/PrivateBin/wiki/Configuration

Modifier l'emplacement du fichier de configuration

# Le fichier cfg/conf.php peut être configuré puis déplacé à un autre endroit.
# Il est alors nécessaire de redéfinir la variable d'environnement CONFIG_PATH.
# Définition de la valeur avec Apache Vhost :
SetEnv CONFIG_PATH /var/lib/privatebin/conf.php
# Définition de la valeur avec php-fpm :
env [CONFIG_PATH] = /var/lib/privatebin/conf.php
# Le fichier index.php peut être modifié pour modifier le chemin par défaut vers la configuration et améliorer la sécurité.
# Définition de la valeur avec un fichier index.php :
putenv ('CONFIG_PATH = /var/lib/privatebin/conf.php');

Forcer PrivateBin à purger les dossiers périmés

# Le mécanisme de purge fonctionne par défaut, par contre, il reste 2 dossiers vides qui sont alors inutiles !
# Une tâche cron pourra supprimer les répertoires vides qui auront été purgés précédemment par l'outil.
# La commande pour purger les dossiers vides :
find /var/www/privatebin.visionduweb.fr/data -type d -empty -delete
# La tâche cron :
# sudo crontab -e
# Supprimer les dossiers vides de /var/www/privatebin.visionduweb.fr/data/
# Tâche effectuée à 6h 00.
0 6 * * * find /var/www/privatebin.visionduweb.fr/data -type d -empty -delete
Documentation : https://github.com/PrivateBin/PrivateBin/wiki/Configuration#purge
PrivateBin doesn't automatically delete the files of expired pastes from the file system : https://github.com/PrivateBin/PrivateBin/issues/599
Demande d'explications complémentaires sur le mécanisme de purge : https://github.com/PrivateBin/PrivateBin/issues/640

Améliorer le rendu pour opengraph

L'opengraph ne fonctionne pas sur Twitter : https://github.com/PrivateBin/PrivateBin/issues/644
L'opengraph ne fonctionne pas sur Discord : https://github.com/PrivateBin/PrivateBin/issues/645
# Éditer les fichiers suivants :
sudo nano ./tpl/page.php
sudo nano ./tpl/bootstrap.php
# Modifier la ligne suivante avec son image :
<link rel="apple-touch-icon" href="https://privatebin.visionduweb.fr/glider-180x180.png" sizes="180x180" />
# Les lignes suivantes sont fonctionnelles pour Opengraph :
<!-- Twitter/social media cards -->
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="Message chiffré sur PrivateBin" />
<meta name="twitter:description" content="Visiter ce lien pour voir la note. Donner l'URL à une autre personne lui permet également d'accéder à la note." />
<meta name="twitter:image" content="https://privatebin.visionduweb.fr/img/glider.png" />
<meta property="og:title" content="Visionduweb - PrivateBin" />
<meta property="og:site_name" content="Visionduweb - PrivateBin" />
<meta property="og:description" content="Visiter ce lien pour voir la note. Donner l'URL à une autre personne lui permet également d'accéder à la note." />
<meta property="og:image" content="https://privatebin.visionduweb.fr/img/glider.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="180" />
<meta property="og:image:height" content="180" />
# Je supprime les éléments suivants présents à la fin de chaque image :
?<?php echo rawurlencode($VERSION); ?>
# Les images de la carte Twitter doivent avoir un poids inférieure à 5 Mo.
# Les formats JPG, PNG, WEBP et GIF sont pris en charge. Seule la première image d'un GIF animé sera utilisée. SVG n'est pas pris en charge.
D'après la documentation de Twitter : https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/markup
# La taille des images pour Twitter doit être au minimum de 144x144px ou au maximum de 4096x4096px.
D'après la documentation de Twitter : https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/summary
# La taille des images pour Facebook doit être au minimum de 200px par 200px.
# Une fois l'adresse URL passée en chemin absolu, l'image va s'afficher.

Vérifier que les fichiers officiels de PrivateBin soient utilisés

# Tout navigateur suffisamment moderne pour pouvoir exécuter PrivateBin refusera de charger l'application si le fichier JavaScript a été modifié et sans mettre à jour le hachage SRI sur le serveur.
# Un utilisateur de votre instance PrivateBin hébergé sur serveur peut donc faire ce qui suit :
# Visiter votre instance PrivateBin dans un navigateur.
# Ouvrir la vue du code source des sites Web en utilisant la console du développeur Web.
# Rechercher privatebin.js et comparer le hachage SRI avec celui de la version en question.
# Si cela correspond, le script n'a pas été manipulé. L'utilisateur peut supposer que leur navigateur continue d'utiliser la version mise en cache de ce fichier au moins pendant cette session.
# Considérer le fichier JavaScript suivant : https://privatebin.visionduweb.fr/js/privatebin.js
# Pour la version 1.3.4 de PrivateBin, le hachage SRI est sha512-+4ay2Dw/9w/DOTutdpoiHvF6RxqV0V8ABSXHlebjGbQ7Td+3If7mOZ5OIu/lWCifcgP6vyhJuiB8+jl8FGtuwg==
# Générer un hachage SRI depuis https://www.srihash.org
The URL does not support Cross-Origin Resource Sharing (CORS), when it should send a response header like Access-Control-Allow-Origin: *
# Générer un hachage SRI depuis https://report-uri.com/home/sri_hash
The server does not have CORS enabled. This resource can't be integrity checked.
# Générer un hachage SRI depuis https://zinoui.com/tools/sri-generator
sha512-pIM3/kBh5nI0TNPXyjhhqCrLE2enQc0DjiIfmpH2RoHaeDPNh2aTKIqEf8Ms6JMGWD/xJreAU7XUElWgELCkYQ==
# La CSP pourrait forcer l'usage de SRI depuis le VirtualHost de Apache, pour prendre en considération le contrôle avec SRI.
Source : https://github.com/PrivateBin/PrivateBin/issues/647
Source complémentaire : https://privatebin.info/reports/zerobin-audit.html

Utiliser l'API pour exporter du contenu vers PrivateBin

Documentation officielle pour l'API de PrivateBin : https://github.com/PrivateBin/PrivateBin/wiki/API

Clients Privatebin

# Un client PrivateBin devrait permettre d'exporter un contenu texte de sa machine, vers un message PrivateBin sur son serveur.
Liste de clients : https://github.com/PrivateBin/PrivateBin/wiki/Third-party-clients

PBinCLI

PrivateBin-Python-Cli - Original : https://github.com/PrivateBin/PrivateBin-Python-Cli
PrivateBin-Python-Cli - Plus récent : https://github.com/r4sas/PBinCLI
apt-get install python3-pip
pip3 install virtualenv
git clone https://github.com/r4sas/PBinCLI.git
cd PBinCLI
pip install -r requirements.txt
# Démarrer l'environnement virtuel et installer pbincli :
python3 -m virtualenv --python=python3 venv
. venv/bin/activate
pip install pbincli
# Attention, cette étape prete à confusion, car, ici, je suis en root, mais, elle peut être menée en simple utilisateur.
# Les deux situations fonctionnent, et, il faudra repréciser dans ce tutoriel, le contexte, root, ou, utilisateur.
# Créer un dossier pbincli dans le dossier .config du dossier root :
mkdir /root/.config/pbincli
nano ~/.config/pbincli/pbincli.conf
# Ajouter :
server=https://privatebin.visionduweb.fr/
# Envoyer un texte :
pbincli send --text "Hello!"
# Affiche :
Paste uploaded!
PasteID:	46c1841b612e8248
Password:	G23qZjKKtRqynM9o4gd4Paihsk5QbBj6gwMzEK6ToyBC
Delete token:	d351841fc045157321303f01c212a8b3d735d313a1357609c2f2ce0778884393
Link:		https://privatebin.visionduweb.fr/?46c1841b612e8248#G23qZjKKtRqynM9o4gd4Paihsk5QbBj6gwMzEK6ToyBC
# Ou :
pbincli send - <<EOF
Hello! This is test paste!
EOF
# Affiche :
Paste uploaded!
PasteID:	36965ceb4846d57d
Password:	Hsk63YNTdaSBryEeEB5sKKcbDRcm4juqYLti1ND77FY7
Delete token:	45fdc78e3b44ea65e0d7d6634d84c92f08d0329eff88b0fb9522db66aab4efc7
Link:		https://privatebin.visionduweb.fr/?36965ceb4846d57d#Hsk63YNTdaSBryEeEB5sKKcbDRcm4juqYLti1ND77FY7
# Envoyer un fichier :
pbincli send -t "FILE LOG" -f FILE.log
Paste uploaded!
PasteID:	54e314bd01a42a95
Password:	2HFJDEB3Xb9HpbiVzZs6tbQzGBV5QHFUBT3wJxKVYR1K
Delete token:	764a72ac34217dd56a1834d6905bebf48673949daf24785ed299b4f56b55b525
Link:		https://paste.i2pd.xyz/?54e314bd01a42a95#2HFJDEB3Xb9HpbiVzZs6tbQzGBV5QHFUBT3wJxKVYR1K
# Afficher le contenu d'un fichier texte sur le privatebin :
cat FILE.log | pbincli send
# Affiche :
Paste uploaded!
PasteID:	b204b2f53acf8da2
Password:	GaB9JUDmMFWhiGBCERrHxbB8BuDrQjZBwaUJLgTuwfHc
Delete token:	d95856343fb1e5cb3050d00723a17b6041516c1a8a57065c84caacc7df389d80
Link:		https://privatebin.visionduweb.fr/?b204b2f53acf8da2#GaB9JUDmMFWhiGBCERrHxbB8BuDrQjZBwaUJLgTuwfHc
# Récupérer le message au format pasteID#Password :
pbincli get 54e314bd01a42a95#2HFJDEB3Xb9HpbiVzZs6tbQzGBV5QHFUBT3wJxKVYR1K
# Affiche :
Paste received!
Found text in paste. Saving it to paste-54e314bd01a42a95.txt
Found file, attached to paste. Saving it to FILE.log
# Pour supprimer un message en ligne de commande, fournir la première partie PasteID puis le Delete Token :
pbincli delete -p bc7d091dfd432c2d -t db3e36d6f0c16a8ae7ba6eab07eade62c3ce18c645572ecb921e0beacc5c7775
# Pour utiliser l'aide, passer l'argument à la fin :
pbincli send -h
# Quitter l'environnement virtuel de Python :
exit
# Il vaudrait mieux utiliser la commande appropriée "deactivate" : https://virtualenv.pypa.io/en/stable/user_guide.html#activators
deactivate
# Issue : https://github.com/r4sas/PBinCLI/issues/25
# Revenir à l'environnement virtuel suite à un redémarrage, il suffit de réactiver l'environnement.
. venv/bin/activate
# Vérifier si le paquet est encore présent ou non, une fois que l'activation / désactivation est correctement menée.
# Je constate que le paquet pbincli n'est plus présent dans mon environnement virtuel et je dois le réinstaller en répétant la méthode ci-dessus :
pip install pbincli
# Au final, ça fonctionne globalement bien, et, rapidement !
# L'enchaînement de commandes pour arriver à publier un fichier texte est un peu contraignant.
# Utiliser un alias adapté devrait permettre de pouvoir optimiser l'exportation d'un contenu vers le serveur PrivateBin.

Cpaste

Copier le contenu du dépôt officiel dans un fichier cpaste.py : https://git.cryptomilk.org/projects/cpaste.git/tree/cpaste
# Installer :
apt install python3-requests
apt install python3-cryptography
# Ou :
virtualenv -p python3 myvenv
# Activer au début de l'utilisation :
source myvenv/bin/activate
pip3 install requests
pip3 install cryptography
pip3 install Pygments
# Désactiver à la fin de l'utilisation :
deactivate
# Éditer le script cpaste.py :
# Modifier l'adresse url : https://cpaste.org
# Remplacer l'adresse url : https://privatebin.visionduweb.fr
python ./cpaste.py --help
Usage: cpaste.py [options]

Options:
  -h, --help            show this help message and exit
  -f FILE, --file=FILE  Read from a file instead of stdin
  -p PASSWORD, --password=PASSWORD
                        Create a password protected paste
  -e EXPIRE, --expire=EXPIRE
                        Expiration time of the paste (default: 1day)
  -s, --sourcecode      Use source code highlighting
  -m, --markdown        Parse paste as markdown
  -b, --burn            Burn paste after reading
  -o, --opendiscussion  Allow discussion for the paste
  -a FILE, --attachment=FILE
                        Specify path to a file to attachment to the paste
# Afficher un texte simple :
echo OK | python cpaste.py
Delete paste: https://privatebin.visionduweb.fr/?pasteid=7701a5b2205fcfec&deletetoken=4e3e068b3469e62a2789625ac178f9c7db28d45dc9e5ad4be4a06ac97a9d4064
### Paste (syntaxhighlighting): https://privatebin.visionduweb.fr/?7701a5b2205fcfec#92iwt9Wkx4qmkLbXNKp6d6D3vsJzkDbKmQF23EMrVA8J
# Afficher un texte en Markdown :
echo "# Hello World" | python cpaste.py -m
Delete paste: https://privatebin.visionduweb.fr/?pasteid=3907de376d01bd6e&deletetoken=f4d90a3f549febc91153cdd214b6d0ef716321ea27502eeb280c9f0aea36d356
### Paste (markdown): https://privatebin.visionduweb.fr/?3907de376d01bd6e#758Bbfb1EnyRZy5AjgqgiFEn7qSdMRgTLEJoZYetNUge

Privatebin-cli

Dépôt officiel : https://github.com/pixelfactoryio/privatebin-cli
# Télécharger et installer NODE.js depuis les binaires :
cd /usr/bin/
curl http://nodejs.org/dist/node-latest.tar.gz -o node-latest.tar.gz
tar xvf node-latest.tar.gz
cd node-v14.4.0/
./configure
make
# Longue installation :
sudo make install
# Penser que au lieu de faire make install, on peut utiliser la commande checkinstall qui va créer un fichier .deb devant permettre la suppression et la réinstallation.
node -v
# Retourne v14.4.0
# Installer le client :
npm install -g @pixelfactory/privatebin
# L'installation du client privatebin est positionnée dans le répertoire /usr/local/lib/node_modules/@pixelfactory/privatebin.
# Ce répertoire a été identifié à l'aide de la commande :
find / -type d -iname "privatebin"
/usr/local/lib/node_modules/@pixelfactory/privatebin
# La version indiquée dans le fichier yml n'est pas la dernière version de PrivateBin.
# Envoyer un message vers PrivateBin :
privatebin send -e 5min -o json "Hello World"
# Va effectivement fonctionner :
{
  "pasteId": "5d4c4dd271fadcac",
  "pasteURL": "https://privatebin.net/?5d4c4dd271fadcac#Bcs8wp2L1Eqb5j2Xa1KcwaWCsRr69WoHSbKXQ3gFJSx8",
  "deleteURL": "https://privatebin.net/?pasteid=5d4c4dd271fadcac&deletetoken=65f71269a55f27f570f15104c1d013eb53493e2ae9fce63199160b5a8198bd81"
}
# Envoyer un message vers PrivateBin :
echo 'Hello World' | privatebin send -e 5min
# Afficher le contenu d'un message :
privatebin get "https://privatebin.net/?ccd05227e7bab99c#GWk29DqQx6NAfMYHgMeDeR76QSyL82fHHg5yGu3U8fft"
Hello World
# Trouver le fichier qui configure l'utilisation du nom de domaine https://privatebin.net :
grep -r https://privatebin.net ./
./build/cmd/send.js:        .option('-u, --url <string>', 'privateBin host', 'https://privatebin.net')
./README.md:  -u, --url <string>      privateBin host (default: "https://privatebin.net")
./README.md:  "pasteURL": "https://privatebin.net/?ccd05227e7bab99c#GWk29DqQx6NAfMYHgMeDeR76QSyL82fHHg5yGu3U8fft",
./README.md:  "deleteURL": "https://privatebin.net/?pasteid=ccd05227e7bab99c&deletetoken=62a14a8483452485902b2e86e56f07269dd484f305d7d210d2375397deb79c1b"
./README.md:pasteURL: https://privatebin.net/?649aa8c062d4ed4d#Gt3NoxrGF8Tck5j9bBrsuFjbEaCyEBfBiGi1g8qCF2kv
./README.md:deleteURL: https://privatebin.net/?pasteid=649aa8c062d4ed4d&deletetoken=b2dae42a762cf0b5e1dbf1fd5113356ba370218091668950c7f6a2d181a07ac6
./README.md:$ privatebin get "https://privatebin.net/?ccd05227e7bab99c#GWk29DqQx6NAfMYHgMeDeR76QSyL82fHHg5yGu3U8fft"
./src/cmd/send.ts:    .option('-u, --url <string>', 'privateBin host', 'https://privatebin.net')
# Éditer le fichier suivant pour changer l'adresse URL du dépôt pour utiliser pour le serveur :
nano build/cmd/send.js
# Remplacer privatebin.net par privatebin.visionduweb.fr
# Je remplace également cette valeur dans le fichier suivant, même si je ne sais pas si cela change réellement quelque chose :
nano src/cmd/send.ts
# Le nouveau test sera fonctionnel pour publier du texte vers l'adresse de mon instance PrivateBin :
privatebin send -e 5min -o json "Hello World"
{
  "pasteId": "71b51989d96192cc",
  "pasteURL": "https://privatebin.visionduweb.fr/?71b51989d96192cc#2YDvUht5oAYF8qR5uoMh8RLuvH2yZyCQS8UKRJ8Z9H7H",
  "deleteURL": "https://privatebin.visionduweb.fr/?pasteid=71b51989d96192cc&deletetoken=f9ec9f4bfbb82a31aa623acfc17c496985e3e20bec9a6141126f9091abb8a9c1"
}
# Le nouveau test sera fonctionnel pour publier le contenu d'un fichier texte vers l'adresse de mon instance PrivateBin :
cat README | privatebin send -e 5min
pasteId: 800b265606db9ace
pasteURL: https://privatebin.visionduweb.fr/?800b265606db9ace#CcCizZKUEjyxcwKKwwZEhDoYzjL7qQ7DkkddPcKMnAYv
deleteURL: https://privatebin.visionduweb.fr/?pasteid=800b265606db9ace&deletetoken=ff3a8cf1692688e16bf3b5b4163b3c54574ba30b98a0654cbc505136bec10442

PrivateBin-Groovy

Dépôt officiel : https://github.com/kkingsley-BF/PrivateBin-Groovy/blob/master/Paste.groovy
# Pas très parlant pour utiliser ce client avec PrivateBin.
# Je n'ai pas continué avec ce client, puisque les 3 autres clients semblent plus ou moins bien fonctionner et être utilisables.

Getpaste

Un outil pour télécharger des articles pastebin, et non pas, pour envoyer du contenu dans un PrivateBin : https://github.com/grawity/code/blob/master/net/getpaste

Politique de sécurité

Chiffrement

# Le contenu JSON des messages et des commentaires est accessible, y compris certaines métadonnées qui ne sont pas exposées dans l'API, mais le message et les commentaires sont chiffrés.
# L'administrateur du serveur ne devrait pas connaître la clé, car elle est générée de manière aléatoire par le créateur du message, côté client.
# Les différentes propriétés de la chaîne JSON sont expliquées dans la page wiki sur le format de chiffrement.
Source : https://github.com/PrivateBin/PrivateBin/wiki/Encryption-format#data-passed-in

Que faire en cas de spam

# Que ce passe t'il si des publications inutiles sont effectuées, du type, copie d'une encyclopédie en mode flood, et, conservation à vie ?
# Depuis le fichier de configuration, j'ai retiré l'option de conservation à vie, pour la remplacer par un choix de conservation sur 2, 5 et 10 ans.
# Comment faire fasse à un tel flood, si il n'est pas possible pour les administrateurs de consulter le contenu du message chiffré, pour s'assurer de sa légitimité ?

Règles de bon usage de PrivateBin

# Pour garantir une meilleur sécurité de son message, il est recommander de cocher l'autodestruction après lecture, et, d'ajouter un mot de passe au message.
# En effet, il pourrait être possible d'intercepter le message chiffré sans que celui-ci ne soit détruit, le client n'en serait donc pas informé.
# Ajouter un mot de passe permet donc de renforcer la sécurité et minimise les risques de lecture de l'information.

JavaScript n'est pas sécurisé

https://github.com/PrivateBin/PrivateBin/wiki/FAQ#but-javascript-encryption-is-not-secure

Mesures prises après l'audit de sécurité ZeroBin de 2014

https://privatebin.info/reports/zerobin-audit.html

Sauvegarder PrivateBin

Sauvegarder

# La création d'une sauvegarde de PrivateBin commence par la création d'une archive Tar :
tar -czvf private-bin.tar.gz /var/www/privatebin.visionduweb.fr/
# Chiffrer la sauvegarde avec GPG :
gpg -c private-bin.tar.gz
# Terminer le processus de sauvegarde en supprimant l'archive d'origine :
sudo rm private-bin.tar.gz

Restaurer

# Pour restaurer votre sauvegarde PrivateBin, déplacer private-bin.tar.gz.gpg dans /var/www/lesite/ :
sudo mv /chemin/vers/private-bin.tar.gz.gpg /var/www/privatebin.visionduweb.fr/
# Déchiffrer le fichier avec GPG :
gpg -c private-bin.tar.gz.gpg
# Extraire l'archive et déplacer la sauvegarde en production :
tar -zvxf private-bin.tar.gz
cd privatebin.visionduweb.fr 
mv * ../
cd ..
rm -R privatebin.visionduweb.fr
cd /var/www/privatebin.visionduweb.fr

Utiliser une base de données à la place des fichiers

# Prérequis :
sudo apt install -y mariadb-server mariadb-client
sudo mysql_secure_installation

Créer la base de données

# Créer une base de données privatebin et un utilisateur privatebin :
mysql -u root -p
CREATE DATABASE privatebin DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'privatebin'@'localhost' IDENTIFIED BY 'newpassword';
GRANT ALL PRIVILEGES ON privatebin.* TO 'privatebin'@'localhost';
exit;
# Il est préférable de ne pas donner tous les privilèges et de restreindre les droits suivants sur votre utilisateur de la base de données privatebin.
# Les droits de l'utilisateur de la base de données :
INSERT, SELECT, DELETE sur les tables prefix_paste et de prefix_comment.
SELECT sur la table prefix_config.
# Si PrivateBin doit créer lui même les tables :
CREATE, INDEX, ALTER sur la base de données privatebin.
INSERT, UPDATE sur la table prefix_config.

Créer les tables

# Dans le fichier de configuration, les sections [model] et [model_options] permettent de configurer la façon préférée de stocker les messages et les discussions sur votre serveur.
# Le système de fichiers est le modèle par défaut, il stocke les messages dans des fichiers dans le dossier de données.
# Il s'agit de la configuration recommandée pour la plupart des sites.
# Toutes les bases de données prises en charge par PDO devraient pouvoir être utilisées.
# La création automatique de table est fournie pour pdo_ibm, pdo_informix, pdo_mssql, pdo_mysql, pdo_oci, pdo_pgsql et pdo_sqlite.
# Vous pouvez fournir un préfixe de table si vous devez partager la base de données PrivateBin avec une autre application ou si vous souhaitez utiliser un préfixe pour des raisons de sécurité.
# L'option de préfixe de table est appelée tbl.
CREATE TABLE prefix_paste (
     dataid CHAR(16) NOT NULL,
     data MEDIUMBLOB,
     postdate INT,
     expiredate INT,
     opendiscussion INT,
     burnafterreading INT,
     meta TEXT,
     attachment MEDIUMBLOB,
     attachmentname BLOB,
     PRIMARY KEY (dataid)
 );
 
 CREATE TABLE prefix_comment (
     dataid CHAR(16),
     pasteid CHAR(16),
     parentid CHAR(16),
     data BLOB,
     nickname BLOB,
     vizhash BLOB,
     postdate INT,
     PRIMARY KEY (dataid)
 );
 CREATE INDEX parent ON prefix_comment(pasteid);
 
 CREATE TABLE prefix_config (
     id CHAR(16) NOT NULL, value TEXT, PRIMARY KEY (id)
 );
 INSERT INTO prefix_config VALUES('VERSION', '1.3.4');

Modifier la configuration de PrivateBin pour l'utilisation de la base de données

# Configurer le fichier cfg.php vu précédemment :
# La configuration par défaut :
[model]
; name of data model class to load and directory for storage
; the default model "Filesystem" stores everything in the filesystem
class = Filesystem
[model_options]
dir = PATH "data"

;[model]
; example of DB configuration for MySQL
;class = Database
;[model_options]
;dsn = "mysql:host=localhost;dbname=privatebin;charset=UTF8"
;tbl = "privatebin_" ; table prefix
;usr = "privatebin"
;pwd = "Z3r0P4ss"
;opt[12] = true ; PDO::ATTR_PERSISTENT
# La configuration pour utiliser la base de données privatebin créé sous MariaDB :
; [model]
; name of data model class to load and directory for storage
; the default model "Filesystem" stores everything in the filesystem
; class = Filesystem
; [model_options]
; dir = PATH "data"

[model]
class = Database
[model_options]
dsn = "mysql:host=localhost;dbname=privatebin;charset=UTF8"
tbl = "privatebin_" ; table prefix
usr = "privatebin"
pwd = "newpassword"
opt[12] = true ; PDO::ATTR_PERSISTENT
# Redémarrer Apache2 :
sudo systemctl restart apache2.service

Prévisualiser le rendu lors d'un affichage avec Markdown

# Par défaut, c'est la syntax Markdown de Showndown qui est utilisée par PrivateBin : https://github.com/showdownjs/showdown/wiki/Showdown's-Markdown-syntax
Générateur Markdown showdownjs : http://demo.showdownjs.com
Générateur Markdown stackedit : https://stackedit.io/app#
Cet exemple est créé et valide pour une durée de 10 ans : https://privatebin.visionduweb.fr/?26eb5915be175b64#3HwJbXya8Tiay4Lj25LGv9Kww3eBExM5T5FVL6t9c5JA
Expire le 25 juin 2030.
Autres générateurs.

Petit plus

# Ajout du fichier pubkey.txt à la racine du site pour permettre les échanges chiffrés avec l'administrateur du serveur.

Bibliographie

Ok.png How to Install PrivateBin on Debian 9 : https://nxnjz.net/2019/02/how-to-install-privatebin-on-debian-9/
Ok.png Installation de PrivateBin sur Debian 9 : https://www.abyssproject.net/2017/10/installation-de-privatebin-debian-9/
Ok-ko.png Source : https://github.com/PrivateBin/PrivateBin/blob/master/INSTALL.md#installation

Alternative avec Cryptpad

Cryptpad : https://cryptpad.fr/drive/

NAVIGATION

PARTICIPER ET PARTAGER

Bienvenue sur le wiki de Vision du Web.
De nombreuses pages sont partagées sur ce wiki.
Créer un compte utilisateur pour participer sur le wiki.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Utiliser la recherche interne du wiki pour trouver votre contenu.
La page de discussion de VisionDuWeb vous permet de poser une question.
Utiliser la recherche interne du site pour chercher dans tout le contenu.
Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique.
Protéger votre système Linux ou Windows en lisant la page dédié à la sécurité.
Améliorer le contenu des pages avec vos propositions depuis l'onglet discussion.

SOUTENIR CE WIKI

Soutenir le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Gagner des Altcoins - Miner des Altcoins.