Privatebin » Historique » Révision 35
« Précédent |
Révision 35/39
(diff)
| Suivant »
sacha, 19/10/2022 16:52
Privatebin¶
Voir.
Site : https://privatebin.info/
Github : https://github.com/PrivateBin/PrivateBin/blob/master/INSTALL.md#installation
A la mode du moment (janvier 2021) on a des liens de contenus pédophiles postés sur le Privatebin/Pastebin/Paste, j'ai fait un petit script pour gérer le problème.
màj 20211011
On avait fait un patch pour pouvoir log les posts
diff --git a/lib/Controller.php b/lib/Controller.php index 2df522a..e8b688a 100644 --- a/lib/Controller.php +++ b/lib/Controller.php @@ -262,6 +262,7 @@ class Controller } catch (Exception $e) { return $this->_return_message(1, $e->getMessage()); } + syslog(LOG_INFO, "[newPaste] {$_SERVER['REMOTE_ADDR']} {$paste->getId()}"); $this->_return_message(0, $paste->getId(), array('deletetoken' => $paste->getDeleteToken())); } }
C'est dans /var/log/messages sous la forme:
$Date gaia php: [newpaste] $IP $ASH
Pour retirer un contenu je vous propose d'utiliser le script sur le serveur qui héberge le Privatebin: gaia:/root/pedokill.sh
Les url de privatebin ressemblent à: https://pastebin.aquilenet.fr/?ASH#PASSWORD
Pour utiliser le script il suffit de l’exécuter avec en paramètre le ASH#PASSWORD.
Exemple: /root/pedokill.sh abe546d271f749b1#E8Zu84zJUPjFLmzgC3Hg5iJL38WDRfGcAJLxW6XC6DG6
N'hésitez pas à me (Sacha) tenir au jus des améliorations ;)
Une idée est de dégager la première ligne de log qui est celle de l'émetteur du contenu.
J'ai identifiée un motif identique qui est le referer 4ox.fun (je ne vous conseille pas de visiter le site) et ajouté dans l'apache du privatebin (en espérant que ça bloquera bien ce referer):
# Block pedosite RewriteEngine on # Selection par referer (header HTTP) ici 4ox.fun, on peut en rajouter d’autres avec un | ie 4ox.fun|unautrerefererabloque.xyz|.*nowhere RewriteCond %{HTTP_REFERER} 4ox.fun|.*nowhere [NC] # Apache répondra 405 Forbidden --> [F] sans réécrire le path RewriteRule .* - [F]
J'ai fait le ménage en utilisant ce referer:
for i in $(zgrep 4ox.fun /var/log/apache2/pastebin.aqln.access.log* |awk '{print $7}'|sort|uniq); do /root/pedokill.sh $i;done
(c'est bugé il y a des réponses qui n'ont pas le chemin mais du coup le pad ne sera pas effacé puisqu'il n'existe pas, le script vérifie que le chemin existe)
et vérifie s'il y en a de nouveaux:
tail -F /var/log/apache2/pastebin.aqln.access.log |grep 4ox.fun |awk '{if ($9 =="200") print $7} '
#!/bin/bash
pedokill.sh¶
---------------------------------------------¶
Sacha@Aquilenet 20210115¶
Archive et supression d'un lien Privatebin¶
---------------------------------------------¶
Version 20221019: ajout log ip + whois¶
#privatebinpath="/srv/www/aquilenet.fr/PrivateBin/data"
privatebinpath="/srv/www/aquilenet.fr/PrivateBin-data/"
if [ -z "$1" ]; then
echo "Entrer le hash après \"https://pastebin.aquilenet.fr/?\" "
exit 1
fi
ash=$(echo $1|cut -d# -f1)
pass=$(echo $1|cut -d# -f2)
pagepath="$privatebinpath/${ash:0:2}/${ash:2:2}/$ash.php"
ippost=$(grep $ash /var/log/messages|awk '{print $7}')
if [ -z "$ippost" ]; then
ippost=$(zgrep $ash /var/log/messages.*.gz|awk '{print $7}')
if [ -z "$ippost" ]; then echo "IP Post not found ! :("; fi
fi
if [ -f $pagepath ]; then
echo "Archive du lien et logs d'accès"
archivepath="$privatebinpath/archive/$ash"
mkdir -p $archivepath/{logs,privatebin_file}
echo "Post by IP: $ippost" |tee archivepath/privatebin_file/IP-POST
echo "whois $ippost" |tee -a archivepath/privatebin_file/IP-POST
cp $pagepath $archivepath/privatebin_file
echo $pass > $archivepath/privatebin_file/pass
grep $ash /var/log/messages{,.1} > $archivepath/logs/$ash.log
zgrep $ash /var/log/messages*.gz >> $archivepath/logs/$ash.log
grep $ash /var/log/apache2/pastebin.aqln.access.log{,.1} >> $archivepath/logs/$ash.log
zgrep $ash /var/log/apache2/pastebin.aqln.access.log*.gz >> $archivepath/logs/$ash.log
cd $archivepath/logs/ && tar czvf $(date +"%Y%m%d-%H%M")_$ash.tar.gz $archivepath/logs/$ash.log
rm -f $archivepath/logs/$ash.log
echo "Efface le lien PasteBin: \"https://pastebin.aquilenet.fr/?$ash\"" rm -f $pagepath && rdmdir $privatebinpath/${ash:0:2}/${ash:2:2}
else
echo "Mauvais lien !"
fi
Bonux: surveiller les référents¶
On peut surveiller de temps en temps le top des "referer"
awk '{print $11}' /var/log/apache2/pastebin.aqln.access.log|sort |uniq -c|sort -n
Mise à jour¶
Une tâche CRON est exécutée tous les jours à 7h30 pour vérifier la présence d'une nouvelle version publiée sur le github et la télécharger automatiquement dans /srv/www/aquilenet.fr.
Installation automatisée par script.¶
cd /srv/www/aquilenet.fr
sudo ./Install_PrivateBin_Lastest_Version.sh
Si tout s'est bien passé, supprimer l'ancien répertoire et l'archive téléchargée.
Installation manuelle, en cas d'échec du script.¶
Se positionner au bon endroit sur gaia.
user@gaia:$ cd /srv/www/aquilenet.fr/
Normalement l'archive de la dernière version publiée devrait déjà être présente.
ls *.zip
Sinon.
Voir https://github.com/PrivateBin/PrivateBin/releases/latest
Copier l'adresse de l'archive .zip du code source en bas de page puis la télécharger (wget).
Ex : user@gaia:$ wget https://github.com/PrivateBin/PrivateBin/archive/refs/tags/1.4.0.zip
L'extraire l'archive téléchargée.
Ex :sudo unzip -q 1.4.0.zip
Renseigner une variable d'environnement.
Ex: VERSION="-1.4.0"
(oui, AVEC le tiret).
Sauvegarder le nouveau fichier /srv/www/aquilenet.fr/PrivateBin-$VERSION/lib/Controller.php.
cd PrivateBin${VERSION}/lib/ && sudo cp Controller.php{,.ori}
Vérifier que le patch est toujours nécessaire.
sudo grep -B 3 -A 2 -E "array\('deletetoken'" Controller.php
} catch (Exception $e) { return $this->_return_message(1, $e->getMessage()); } $this->_return_message(0, $paste->getId(), array('deletetoken' => $paste->getDeleteToken())); } }
Appliquer le patch.
sudo patch -o Controller.php.new Controller.php /root/PrivateBin_lib_Controller.php.patch
Vérifier que le patch a bien été appliqué au bon endroit.
sudo grep -A 2 -B 2 "syslog" Controller.php.new | md5sum
391ee59c9d3e09edcfead854a513a172 -
Si le hash n'est pas le même, supprimer le nouveau fichier (sudo rm Controller.php.new
) et patcher à la main.
Éditer le fichier puis y chercher la chaîne array('deletetoken'
modifier en suivant le modèle en début de cette page, puis régénérer le fichier .patch (diff file.ori file.new > file.patch
).
Si le hash correspond, on peut renommer le fichier avec sudo mv Controller.php{.new,}
(confirmer l'écrasement).
Modifier le lien symbolique /srv/www/aquilenet.fr/PrivateBin pour le faire pointer vers le nouveau répertoire.
sudo ln -s /srv/www/aquilenet.fr/PrivateBin${VERSION} /srv/www/aquilenet.fr/PrivateBin
Changer le propriétaire du répertoire.
sudo chown -R www-data:www-data /srv/www/aquilenet.fr/PrivateBin${VERSION}
Relancer apache, sudo systemctl reload apache2.service
Vérifier que le patch fonctionne comme attendu en créant un nouveau paste sur https://paste.aquilenet.fr/
sudo tail -f /var/log/messages | grep newpaste
devrait monter votre adresse IP.
Si tout s'est bien passé, supprimer l'ancien répertoire et l'archive téléchargée.
Mis à jour par sacha il y a environ 2 ans · 35 révisions