Projet

Général

Profil

Privatebin » Historique » Version 36

sacha, 19/10/2022 16:53

1 1 sacha
# Privatebin
2
3 34 mathias.bert-barbedienne
Voir.
4
Site : https://privatebin.info/
5
Github : https://github.com/PrivateBin/PrivateBin/blob/master/INSTALL.md#installation
6 1 sacha
7 34 mathias.bert-barbedienne
8 14 sacha
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.
9 13 sacha
10 14 sacha
---
11 13 sacha
12 14 sacha
màj 20211011
13 1 sacha
14 14 sacha
On avait fait un patch pour pouvoir log les posts
15
16 13 sacha
~~~
17
diff --git a/lib/Controller.php b/lib/Controller.php
18
index 2df522a..e8b688a 100644
19
--- a/lib/Controller.php
20
+++ b/lib/Controller.php
21
@@ -262,6 +262,7 @@ class Controller
22
             } catch (Exception $e) {
23
                 return $this->_return_message(1, $e->getMessage());
24
             }
25 18 sacha
+            syslog(LOG_INFO, "[newPaste] {$_SERVER['REMOTE_ADDR']} {$paste->getId()}");
26 13 sacha
             $this->_return_message(0, $paste->getId(), array('deletetoken' => $paste->getDeleteToken()));
27
         }
28
     }
29 1 sacha
30 15 sacha
~~~
31 13 sacha
C'est dans /var/log/messages sous la forme:
32 1 sacha
33 34 mathias.bert-barbedienne
    $Date gaia php: [newpaste] $IP $ASH
34 1 sacha
---
35
36
Pour retirer un contenu je vous propose d'utiliser le script sur le serveur qui héberge le Privatebin: gaia:/root/pedokill.sh
37
38 4 sacha
Les url de privatebin ressemblent à: https://pastebin.aquilenet.fr/?ASH#PASSWORD
39 14 sacha
40
41 1 sacha
42
43 2 sacha
Pour utiliser le script il suffit de l’exécuter avec en paramètre le ASH#PASSWORD.
44 34 mathias.bert-barbedienne
Exemple: /root/pedokill.sh abe546d271f749b1#E8Zu84zJUPjFLmzgC3Hg5iJL38WDRfGcAJLxW6XC6DG6
45 1 sacha
46
N'hésitez pas à me (Sacha) tenir au jus des améliorations ;)
47 2 sacha
48
Une idée est de dégager la première ligne de log qui est celle de l'émetteur du contenu.
49
50
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):
51
52
53
```
54 5 sacha
        # Block pedosite
55
        RewriteEngine on
56 11 pierre.bousquie
        # Selection par referer (header HTTP) ici 4ox.fun, on peut en rajouter d’autres avec un | ie 4ox.fun|unautrerefererabloque.xyz|.*nowhere
57 5 sacha
        RewriteCond %{HTTP_REFERER} 4ox.fun|.*nowhere [NC]
58 11 pierre.bousquie
        # Apache répondra 405 Forbidden --> [F] sans réécrire le path  
59 5 sacha
        RewriteRule .* - [F]
60
61 2 sacha
```
62
63
64
J'ai fait le ménage en utilisant ce referer:
65
66
```
67 4 sacha
for i in $(zgrep 4ox.fun /var/log/apache2/pastebin.aqln.access.log* |awk '{print $7}'|sort|uniq); do /root/pedokill.sh $i;done
68 2 sacha
```
69 8 sacha
(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)
70 2 sacha
71 8 sacha
et vérifie s'il y en a de nouveaux:
72
```
73 9 sacha
tail -F /var/log/apache2/pastebin.aqln.access.log |grep 4ox.fun |awk '{if ($9 =="200") print $7} '
74 8 sacha
```
75 2 sacha
76 36 sacha
~~~
77 2 sacha
#!/bin/bash
78 1 sacha
79
# pedokill.sh
80 35 sacha
# ---------------------------------------------
81 1 sacha
# Sacha@Aquilenet 20210115
82 7 sacha
# Archive et supression d'un lien Privatebin
83 35 sacha
# ---------------------------------------------
84
# Version 20221019: ajout log ip + whois
85 6 sacha
86 35 sacha
#privatebinpath="/srv/www/aquilenet.fr/PrivateBin/data"
87
privatebinpath="/srv/www/aquilenet.fr/PrivateBin-data/"
88 2 sacha
89
if [ -z "$1" ];  then
90
        echo "Entrer le hash après \"https://pastebin.aquilenet.fr/?\" "
91 1 sacha
exit 1
92
fi
93
94
ash=$(echo $1|cut -d# -f1)
95
pass=$(echo $1|cut -d# -f2)
96
pagepath="$privatebinpath/${ash:0:2}/${ash:2:2}/$ash.php"
97 2 sacha
98 35 sacha
ippost=$(grep $ash /var/log/messages|awk '{print $7}')
99
if [ -z "$ippost" ]; then
100
        ippost=$(zgrep $ash /var/log/messages.*.gz|awk '{print $7}')
101
        if [ -z "$ippost" ]; then echo "IP Post not found ! :("; fi
102
fi
103
104 1 sacha
if [ -f $pagepath ]; then
105
        echo "Archive du lien et logs d'accès"
106
        archivepath="$privatebinpath/archive/$ash"
107 2 sacha
        mkdir -p $archivepath/{logs,privatebin_file}
108 35 sacha
        echo "Post by IP: $ippost" |tee archivepath/privatebin_file/IP-POST
109
        echo "whois $ippost" |tee -a archivepath/privatebin_file/IP-POST
110 1 sacha
        cp $pagepath $archivepath/privatebin_file
111 2 sacha
        echo $pass > $archivepath/privatebin_file/pass
112 35 sacha
        grep $ash /var/log/messages{,.1} > $archivepath/logs/$ash.log
113
        zgrep $ash /var/log/messages*.gz >> $archivepath/logs/$ash.log
114
        grep $ash /var/log/apache2/pastebin.aqln.access.log{,.1}  >> $archivepath/logs/$ash.log
115
        zgrep $ash /var/log/apache2/pastebin.aqln.access.log*.gz >> $archivepath/logs/$ash.log
116 2 sacha
        cd $archivepath/logs/ && tar czvf $(date +"%Y%m%d-%H%M")_$ash.tar.gz $archivepath/logs/$ash.log
117 1 sacha
        rm -f $archivepath/logs/$ash.log
118
119 2 sacha
        echo "Efface le lien PasteBin: \"https://pastebin.aquilenet.fr/?$ash\""
120 6 sacha
        rm -f $pagepath && rdmdir $privatebinpath/${ash:0:2}/${ash:2:2}
121
else
122
        echo "Mauvais lien !"
123 1 sacha
fi
124 36 sacha
~~~
125 12 sacha
126
## Bonux: surveiller les référents
127 1 sacha
128
 On peut surveiller de temps en temps le top des "referer"
129
130
    awk '{print $11}' /var/log/apache2/pastebin.aqln.access.log|sort |uniq -c|sort -n
131 34 mathias.bert-barbedienne
132
## Mise à jour
133
134
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.
135
136
## Installation automatisée par script.
137
`cd /srv/www/aquilenet.fr
138
sudo ./Install_PrivateBin_Lastest_Version.sh`
139
140
Si tout s'est bien passé, supprimer l'ancien répertoire et l'archive téléchargée.
141
142
## Installation manuelle, en cas d'échec du script.
143
Se positionner au bon endroit sur gaia.
144
user@gaia:$ `cd /srv/www/aquilenet.fr/`
145
146
Normalement l'archive de la dernière version publiée devrait déjà être présente.
147
`ls *.zip`
148
149
Sinon.
150
Voir https://github.com/PrivateBin/PrivateBin/releases/latest
151
Copier l'adresse de l'archive .zip du code source en bas de page puis la télécharger (wget).
152
Ex : user@gaia:$ `wget https://github.com/PrivateBin/PrivateBin/archive/refs/tags/1.4.0.zip`
153
154
L'extraire l'archive téléchargée.
155
Ex :`sudo unzip -q 1.4.0.zip`
156
157
Renseigner une variable d'environnement.
158
Ex: `VERSION="-1.4.0"` (oui, **AVEC**  le tiret).
159
160
Sauvegarder le nouveau fichier /srv/www/aquilenet.fr/PrivateBin-$VERSION/lib/Controller.php.
161
`cd PrivateBin${VERSION}/lib/ && sudo cp Controller.php{,.ori}`
162
163
Vérifier que le patch est toujours nécessaire.
164
`sudo grep -B 3 -A 2 -E "array\('deletetoken'" Controller.php`
165
~~~
166
            } catch (Exception $e) {
167
                return $this->_return_message(1, $e->getMessage());
168
	    }
169
            $this->_return_message(0, $paste->getId(), array('deletetoken' => $paste->getDeleteToken()));
170
        }
171
    }
172
~~~
173
Appliquer le patch.
174
`sudo patch -o Controller.php.new Controller.php /root/PrivateBin_lib_Controller.php.patch`
175
176
Vérifier que le patch a bien été appliqué au bon endroit.
177
`sudo grep -A 2 -B 2 "syslog" Controller.php.new | md5sum
178
391ee59c9d3e09edcfead854a513a172  -`
179
180
Si le hash n'est pas le même, supprimer le nouveau fichier (`sudo rm Controller.php.new`) et patcher à la main.
181
É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`).
182
Si le hash correspond, on peut renommer le fichier avec `sudo mv Controller.php{.new,}` (confirmer l'écrasement).
183
184
Modifier le lien symbolique /srv/www/aquilenet.fr/PrivateBin pour le faire pointer vers le nouveau répertoire.
185
`sudo ln -s /srv/www/aquilenet.fr/PrivateBin${VERSION} /srv/www/aquilenet.fr/PrivateBin`
186
187
Changer le propriétaire du répertoire.
188
`sudo chown -R www-data:www-data /srv/www/aquilenet.fr/PrivateBin${VERSION}`
189
190
Relancer apache, `sudo systemctl reload apache2.service`
191
192
Vérifier que le patch fonctionne comme attendu en créant un nouveau paste sur https://paste.aquilenet.fr/
193
`sudo tail -f /var/log/messages | grep newpaste` devrait monter votre adresse IP.
194
195
Si tout s'est bien passé, supprimer l'ancien répertoire et l'archive téléchargée.