Nous publions la traduction de l'article Installing XSS Hunter et vérifions les instructions avec notre propre exemple.
Spoiler: Tout fonctionne!
Pourquoi XSS Hunter?
De nombreux lecteurs savent probablement déjà que vous pouvez vous inscrire sur https://xsshunter.com/ et utiliser xsshunter gratuitement. En un mot, il s'agit d'un outil utilisé principalement pour les recherches XSS aveugles . Pourquoi alors déployer votre propre service pour cette tâche, demandez-vous.
- Tout est sous contrôle. Si quelque chose ne va pas, vous pouvez vérifier et étudier le problème.
- La stabilité. Vous savez avec certitude si le service fonctionne ou non. Vous pouvez décider vous-même quand l'arrêter. Imaginez que vous avez des centaines de jeux de données prêts à être exécutés et que le propriétaire du service le désactive soudainement. Ce serait triste!
- Vous contrôlez les données. Les entreprises n'aiment généralement pas les chasseurs de bogues utilisant des solutions tierces, car dans ce cas, elles ne peuvent pas vérifier si les données ont été supprimées ou non.
Bonus: Grâce à l'article, vous découvrirez comment tout fonctionne.
Si cet article ne vous suffit pas, nous vous recommandons de lire les travaux de nos collègues de Jet Infosystems.
Comment utiliser?
Un guide d'utilisation de XSS Hunter est disponible sur le site XSS Hunter GitHub .
C'est un bon début, mais ce guide est un peu dépassé. La situation est la même avec la base de code, j'ai donc dû changer quelques choses pour fonctionner sur Ubuntu 18.04. Dans cet article, je vais vous dire comment travailler avec XSS Hunter après tout.
Les premiers pas
À ce stade, j'utilise le guide officiel comme base.
Nous supposons également que vous avez un serveur fonctionnel et une expérience de base en gestion de serveur. Malgré cela, j'essaierai toujours d'aller plus loin. Sentez-vous libre de poser des questions!
Nous aurons besoin:
- VPS ou autre endroit pour héberger le service
Nous avons répété les instructions de l'auteur en utilisant l'exemple de VDS Timeweb: timeweb.com/ru/services/vds . Plus loin dans l'article, nous partageons ce que nous avons obtenu à chaque étape, dans des spoilers cachés.
Nous avons: timeweb.com/ru/services/domains .
:
XSS Hunter
mailgun
1. Enregistrez un compte mailgun ici . N'oubliez pas de décocher la case, indiquée ci-dessous dans la capture d'écran.
2. Suivez les instructions pour vérifier votre adresse e-mail et votre numéro de téléphone.
3. Accédez à l' onglet Soumettre et sélectionnez votre domaine de messagerie.
4. En haut à droite de l'écran, ajoutez les adresses e-mail auxquelles vous souhaitez recevoir des alertes. Cela devrait être votre adresse réelle et actuelle. Par exemple john.doe@gmail.com.
5. Après avoir terminé ce qui précède, appuyez sur le bouton "Sélectionner" dans le bloc mis en évidence par l'étiquette API.
6. Notez la clé API et le domaine de messagerie. Vous en aurez bientôt besoin!
Le domaine de messagerie est la dernière partie de l'URL de l'API de base: sandboxe678 .
Utilisation de VDS Timeweb comme exemple
: sandbox82f7e729ed934d1189bcc6bd32aaa977.
7. Ouvrez le courrier et recherchez la lettre de mailgun.
8. Confirmez votre adresse e-mail en cliquant sur le lien dans l'e-mail.
(La lettre sera envoyée à l'adresse que vous avez indiquée à l'étape 4, c'est-à-dire, dans notre cas, à john.doe@gmail.com).
Assurez-vous que tout fonctionne
Utilisez la commande suivante pour envoyer un e-mail depuis votre serveur afin de vous assurer que le service est en cours d'exécution.
Remplacez:
[API_KEY] : votre clé API
[API_BASE_URL] : votre URL de base API
[YOUR_EMAIL] : votre véritable email
Par exemple: john.doe@gmail.com .
curl -s --user 'api:[API_KEY]' \
https://api.mailgun.net/v3/[API_BASE_URL]/messages \
-F from='Excited User <mailgun@[API_BASE_URL]>' \
-F to=[YOUR_EMAIL] \
-F subject='Hello' \
-F text='Testing some Mailgun awesomeness!'
Remarque : la version UE du service a une URL différente. Une recherche rapide sur Google ou la vérification de votre compte mailgun vous dira exactement quoi changer.
Note de l'expert Timeweb
curl:
:
curl -s --user 'api:67ee2b8a922268ac335eb00262b33711-9b1bf5d3-919027d8' \https://api.mailgun.net/v3/sandbox82f7e729ed934d1189bcc6bd32aaa977.mailgun.org/messages \
-F from='Excited User <mailgun@sandbox82f7e729ed934d1189bcc6bd32aaa977.mailgun.org>' \
-F to=r.tkach@timeweb.ru \
-F subject='' \
-F text=' MailGun'
:
{
"id": "<20201029124602.1.C81E1E4029FB7DC4@sandbox82f7e729ed934d1189bcc6bd32aaa977.mailgun.org>",
"message": "Queued. Thank you."
}
Vérifiez votre compte pour vous assurer que vous avez reçu un e-mail comme dans l'exemple ci-dessous. S'il n'y a pas d'e-mail, vous devez résoudre le problème avant de passer à l'étape suivante.
Configurer les dépendances
Installez d'abord les packages requis:
# install dependencies
sudo apt-get install nginx && sudo apt-get install postgresql postgresql-contrib
Utilisation de VDS Timeweb comme exemple
root@372526-twosa:~# apt-get install nginx && apt-get install postgresql postgresql-contrib
Ensuite, configurez l'utilisateur et la base de données postgres pour le XSS Hunter. Remplacez EXAMPLE_PASSWORD par un mot de passe plus sécurisé. Je recommande fortement d'utiliser un gestionnaire de mots de passe!
sudo -i -u postgres
psql template1
CREATE USER xsshunter WITH PASSWORD 'EXAMPLE_PASSWORD';
CREATE DATABASE xsshunter;
\q
exit
Utilisation de VDS Timeweb comme exemple
root@372526-twosa:~# sudo -i -u postgres
postgres@372526-twosa:~$ psql template1
psql (10.14 (Ubuntu 10.14-0ubuntu0.18.04.1))
Type "help" for help.
template1=# create user xsshunter with password '6fhQg18YFrna2LbX2EDWHfLoewy32i';
CREATE ROLE
template1=# create database xsshunter;
CREATE DATABASE
template1=# \q
Installation de service
Tout d'abord, nous clonons le référentiel:
git clone https://github.com/mandatoryprogrammer/xsshunter
cd xsshunter
Utilisation de VDS Timeweb comme exemple
root@372526-twosa:~# git clone https://github.com/mandatoryprogrammer/xsshunter
root@372526-twosa:~# cd xsshunter
Remarque : Python2 est requis! Le référentiel ne prend pas en charge Python3.
Pour exécuter le script de configuration, nous devons ajouter une dépendance supplémentaire:
# install yaml support for python
sudo apt-get install pyyaml
Utilisation de VDS Timeweb comme exemple
root@372526-twosa:~/xsshunter# apt install python-pip
root@372526-twosa:~/xsshunter# pip install pyyaml
Merci à l'utilisateur xYantix d' avoir fourni une solution fonctionnelle dans cette pull request .
Configuration du service
Ok, commençons! Nous sommes prêts à exécuter le script de configuration.
# generate yaml config file
./generate_config.py
Utilisation de VDS Timeweb comme exemple
root@372526-twosa:~/xsshunter# ./generate_config.py
Je vais vous montrer le processus étape par étape. Pour voir un exemple de la sortie, consultez l'exemple ci-dessous. J'ai ajouté des chiffres pour faciliter la navigation. Sinon, tout devrait se ressembler.
1. Entrez votre nom de domaine. J'ai utilisé mydomain.com comme exemple.
Utilisation de VDS Timeweb comme exemple
372526-twosa.tmweb.ru.
2. Entrez votre clé API Mailgun que vous avez trouvée et enregistrée précédemment.
3. Entrez votre nom de domaine Mailgun, que vous avez également noté précédemment. (Ce qui commence par un bac à sable).
4. Je pense que ça pourrait être n'importe quoi @ [nom de domaine Mailgun] , mais je suis resté fidèle à la dénomination standard de mailgun puisque le nom n'a pas vraiment d'importance ici. Je suggère d'utiliser: mailgun @ [nom de domaine Mailgun]. N'oubliez pas de remplacer [nom de domaine Mailgun] par le vôtre.
5. Il s'agit d'amener les gens à signaler un abus soupçonné de l'outil. Votre email réel et actuel doit être indiqué ici. Par exemple: john.doe@gmail.com .
6. Si vous avez suivi toutes les étapes de cet article, entrez simplement xsshunter.
7. Entrez le mot de passe que vous avez choisi lors de la création de la base de données. Répertorié ci-dessus comme EXAMPLE_PASSWORD . Remplacez le texte [YOUR_REALLY_SECURE_PASSWORD] par votre mot de passe EXAMPLE_PASSWORD .
8. Comme à l'étape 6, si vous avez suivi ce didacticiel, entrez simplement xsshunter.
Oups! La configuration est terminée!
Si jamais vous avez besoin de modifier ces valeurs, vous pouvez les modifier directement dans le fichier config.yaml.
__ __ _____ _____ _ _ _
\ \ / // ____/ ____| | | | | | |
\ V /| (___| (___ | |__| |_ _ _ __ | |_ ___ _ __
> < \___ \\\\___ \ | __ | | | | '_ \| __/ _ \ '__|
/ . \ ____) |___) | | | | | |_| | | | | || __/ |
/_/ \_\_____/_____/ |_| |_|\__,_|_| |_|\__\___|_|
Setup Utility
(1)
What is the base domain name you will be using?
(ex. localhost, www.example.com)
Domain? mydomain.com
Great! Now let's setup your Mailgun account to send XSS alerts to.
(2)
Enter your API key:
(ex. key-8da843ff65205a61374b09b81ed0fa35)
Mailgun API key: 92740xxxxxxxxxxxxxxxxxxxxxxxxxxx-65bxxx58-8ffxxxxx
(3)
What is your Mailgun domain?
(ex. example.com)
Mailgun domain: sandboxe6784d1f69d9486484bb8db10ab02380.mailgun.org
(4)
What email address is sending the payload fire emails?:
(ex. no-reply@example.com)
Sending email address:
mailgun@sandboxe6784d1f69d9486484bb8db10ab02380.mailgun.org
(5)
Where should abuse/contact emails go?:
(ex. yourpersonal@gmail.com)
Abuse/Contact email: xsshunter@mydomain.com
(6)
What postgres user is this service using?
(ex. xsshunter)
Postgres username: xsshunter
(7)
What is the postgres user's password?
(ex. @!$%@^%UOFGJOEJG$)
Postgres password: [YOUR_REALLY_SECURE_PASSWORD]
(8)
What is the postgres user's DB?
(ex. xsshunter)
Postgres DB: xsshunter
Generating cookie secret...
Minting new nginx configuration file...
Setup complete! Please now copy the 'default' file to
/etc/nginx/sites-enabled/default
This can be done by running the following:
sudo cp default /etc/nginx/sites-enabled/default
Also, please ensure your wildcard SSL certificate and key are available at
the following locations:
/etc/nginx/ssl/mydomain.com.crt; # Wildcard SSL certificate
/etc/nginx/ssl/mydomain.com.key; # Wildcard SSL key
Good luck hunting for XSS!
Utilisation de VDS Timeweb comme exemple
Setup Utility
What is the base domain name you will be using?
(ex. localhost, www.example.com)
Domain? 372526-twosa.tmweb.ru
Great! Now let's setup your Mailgun account to send XSS alerts to.
Enter your API key:
(ex. key-8da843ff65205a61374b09b81ed0fa35)
Mailgun API key: 67ee**************************-9b*******-919*****
What is your Mailgun domain?
(ex. example.com)
Mailgun domain: sandbox82f7e729ed934d1189bcc6bd32aaa977.mailgun.org
What email address is sending the payload fire emails?:
(ex. no-reply@example.com)
Sending email address: mailgun@sandbox82f7e729ed934d1189bcc6bd32aaa977.mailgun.org
Where should abuse/contact emails go?:
(ex. yourpersonal@gmail.com)
Abuse/Contact email: r.tkach@timeweb.ru
What postgres user is this service using?
(ex. xsshunter)
Postgres username: xsshunter
What is the postgres user's password?
(ex. @!$%@^%UOFGJOEJG$)
Postgres password: [EXAMPLE_PASSWORD]
What is the postgres user's DB?
(ex. xsshunter)
Postgres DB: xsshunter
Generating cookie secret...
Minting new nginx configuration file...
Setup complete! Please now copy the 'default' file to /etc/nginx/sites-enabled/default
This can be done by running the following:
sudo cp default /etc/nginx/sites-enabled/default
Also, please ensure your wildcard SSL certificate and key are available at the following locations:
/etc/nginx/ssl/xsshunter.timeweb.ru.crt; # Wildcard SSL certificate
/etc/nginx/ssl/xsshunter.timeweb.ru.key; # Wildcard SSL key
Good luck hunting for XSS!
-mandatory
Vous devriez maintenant avoir 2 nouveaux fichiers dans votre dossier xsshunter:
- config.yaml (contient les clés d'API et les informations d'identification)
- default (contient la configuration nginx)
Configuration NGINX
Changer l'emplacement du certificat SSL
Si vous utilisez Let's Encrypt comme moi, vous devez modifier la valeur par défaut .
Pour que la configuration fonctionne avec les paramètres par défaut de Let's Encrypt, nous devons commenter toutes les entrées:
/etc/nginx/ssl/mydomain.com.crt; # Wildcard SSL certificate
/etc/nginx/ssl/mydomain.com.key; # Wildcard SSL key
et remplacer par
ssl_certificate /etc/letsencrypt/live/mydomain.com-0001/fullchain.pem ; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mydomain.com-0001/privkey.pem; # managed by Certbot
Remarques:
1. Remplacez mydomain.com par votre nom de domaine!
2. Tout ce qui suit le symbole # est un commentaire. Vous pouvez les supprimer si vous le souhaitez.
Votre fichier par défaut devrait maintenant ressembler à ceci:
server {
# Redirect HTTP to www
listen 80;
server_name mydomain.com;
location / {
rewrite ^/(.*)$ https://www.mydomain.com/$1 permanent;
}
}
server {
# Redirect payloads to HTTPS
listen 80;
server_name *.mydomain.com;
proxy_set_header X-Forwarded-For $remote_addr;
return 307 https://$host$request_uri;
client_max_body_size 500M; # In case we have an extra large payload capture
}
server {
# Redirect HTTPS to www
listen 443;
ssl on;
# New conf
ssl_certificate /etc/letsencrypt/live/mydomain.com-0001/fullchain.pem; #
managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mydomain.com-0001/privkey.pem; #
managed by Certbot
# Original conf
#ssl_certificate /etc/nginx/ssl/mydomain.com.crt; # Wildcard SSL certificate
#ssl_certificate_key /etc/nginx/ssl/mydomain.com.key; # Wildcard SSL
certificate key
server_name mydomain.com;
location / {
rewrite ^/(.*)$ https://www.mydomain.com/$1 permanent;
}
}
server {
# API proxy
listen 443;
ssl on;
# New conf
ssl_certificate /etc/letsencrypt/live/mydomain.com-0001/fullchain.pem; #
managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mydomain.com-0001/privkey.pem; #
managed by Certbot
# Original conf
#ssl_certificate /etc/nginx/ssl/mydomain.com.crt; # Wildcard SSL certificate
#ssl_certificate_key /etc/nginx/ssl/mydomain.com.key; # Wildcard SSL
certificate key
server_name *.mydomain.com;
access_log /var/log/nginx/mydomain.com.vhost.access.log;
error_log /var/log/nginx/mydomain.com.vhost.error.log;
client_max_body_size 500M;
location / {
proxy_pass http://localhost:8888;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
# Redirect api to HTTPS
listen 80;
server_name api.mydomain.com; # Subdomain for API server
proxy_set_header X-Forwarded-For $remote_addr;
return 307 https://api.mydomain.com$request_uri;
client_max_body_size 500M; # In case we have an extra large payload capture
}
server {
# Redirect www to HTTPS
listen 80;
server_name www.mydomain.com;
location / {
rewrite ^/(.*)$ https://www.mydomain.com/$1 permanent;
}
}
server {
# GUI proxy
listen 443;
server_name www.mydomain.com;
client_max_body_size 500M;
ssl on;
# New conf
ssl_certificate /etc/letsencrypt/live/mydomain.com-0001/fullchain.pem; #
managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mydomain.com-0001/privkey.pem; #
managed by Certbot
# Original conf
#ssl_certificate /etc/nginx/ssl/mydomain.com.crt; # Wildcard SSL certificate
#ssl_certificate_key /etc/nginx/ssl/mydomain.com.key; # Wildcard SSL
certificate key
location / {
proxy_pass http://localhost:1234;
proxy_set_header Host $host;
}
}
Utilisation de VDS Timeweb comme exemple
server {
# Redirect HTTP to www
listen 80;
server_name 372526-twosa.tmweb.ru;
location / {
rewrite ^/(.*)$ https://www.372526-twosa.tmweb.ru/$1 permanent;
}
}
server {
# Redirect payloads to HTTPS
listen 80;
server_name *.372526-twosa.tmweb.ru;
proxy_set_header X-Forwarded-For $remote_addr;
return 307 https://$host$request_uri;
client_max_body_size 500M; # In case we have an extra large payload capture
}
server {
# Redirect HTTPS to www
listen 443;
ssl on;
ssl_certificate /etc/letsencrypt/live/372526-twosa.tmweb.ru/fullchain.pem; # Wildcard SSL certificate
ssl_certificate_key /etc/letsencrypt/live/372526-twosa.tmweb.ru/privkey.pem; # Wildcard SSL certificate key
server_name 372526-twosa.tmweb.ru;
location / {
rewrite ^/(.*)$ https://www.372526-twosa.tmweb.ru/$1 permanent;
}
}
server {
# API proxy
listen 443;
ssl on;
ssl_certificate /etc/letsencrypt/live/372526-twosa.tmweb.ru/fullchain.pem; # Wildcard SSL certificate
ssl_certificate_key /etc/letsencrypt/live/372526-twosa.tmweb.ru/privkey.pem; # Wildcard SSL certificate key
server_name *.372526-twosa.tmweb.ru;
access_log /var/log/nginx/372526-twosa.tmweb.ru.vhost.access.log;
error_log /var/log/nginx/372526-twosa.tmweb.ru.vhost.error.log;
client_max_body_size 500M;
location / {#
proxy_pass http://localhost:8888;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
# Redirect api to HTTPS
listen 80;
server_name api.372526-twosa.tmweb.ru; # Subdomain for API server
proxy_set_header X-Forwarded-For $remote_addr;
return 307 https://api.372526-twosa.tmweb.ru$request_uri;
client_max_body_size 500M; # In case we have an extra large payload capture
}
server {
# Redirect www to HTTPS
listen 80;
server_name www.372526-twosa.tmweb.ru;
location / {
rewrite ^/(.*)$ https://www.372526-twosa.tmweb.ru/$1 permanent;
}
}
server {
# GUI proxy
listen 443;
server_name www.372526-twosa.tmweb.ru;
client_max_body_size 500M;
ssl on;
ssl_certificate /etc/letsencrypt/live/372526-twosa.tmweb.ru/fullchain.pem; # Wildcard SSL certificate
ssl_certificate_key /etc/letsencrypt/live/372526-twosa.tmweb.ru/privkey.pem; # Wildcard SSL certificate key
location / {
proxy_pass http://localhost:1234;
proxy_set_header Host $host;
}
}
Appliquons la configuration NGINX
L'étape suivante consiste à déplacer le fichier vers le dossier nginx. Il est recommandé d'avoir des fichiers de configuration dans le dossier ... / sites-available , puis de créer des liens symboliques vers les configurations que vous utilisez vers ... / sites-enabled . Nous ferons exactement cela.
Je nomme le fichier de configuration pour qu'il soit clair à partir du nom à quel service il appartient.
Voici comment faire!
# move file and give proper name
cp xsshunter/default /etc/nginx/sites-available/xsshunter-mydomain.com
# symlink the file to sites-enabled to make it active
ln -s /etc/nginx/sites-available/xsshunter-mydomain.com
/etc/nginx/sites-enabled/xsshunter-mydomain.com
# test for errors in the configuration
sudo nginx -t
# if no errors, restart nginx for changes to take effect
sudo systemctl restart nginx
Utilisation de VDS Timeweb comme exemple
root@372526-twosa:~/xsshunter# cp default /etc/nginx/sites-available/372526-twosa.tmweb.ru
root@372526-twosa:~/xsshunter# ln /etc/nginx/sites-available/372526-twosa.tmweb.ru /etc/nginx/sites-enabled/372526-twosa.tmweb.ru
root@372526-twosa:~/xsshunter# nginx -t
root@372526-twosa:~/xsshunter# systemctl restart nginx
Si vous n'avez jamais démarré nginx auparavant, la dernière commande devrait être:
sudo systemctl start nginx
Installation du serveur API
Premièrement, le serveur API a également besoin de certaines dépendances.
Le manuel dit d'exécuter la commande suivante:
sudo apt-get install python-virtualenv python-dev libpq-dev libffi-dev
Utilisation de VDS Timeweb comme exemple
root@372526-twosa:~/xsshunter# apt-get install python-virtualenv python-dev libpq-dev libffi-dev
, python-virtualenv pip.
Réessayer!
Malheureusement, je n'ai pas pu exécuter la commande virtualenv , j'ai donc installé le serveur API avec
pip install virtualenv
Problème résolu, j'ai pu continuer!
Allons dans le répertoire souhaité.
Une fois dans le bon répertoire, vous devez créer un environnement virtuel.
Voici comment procéder:
# change folder - you know that already!
cd xsshunter/api
# find your Python2 executable path
which python2
# create a python2 virtual environment in the env folder
virtualenv -p MY/EXECUTABLE/PATH env
Utilisation de VDS Timeweb comme exemple
root@372526-twosa:~/xsshunter# cd xsshunter/api
root@372526-twosa:~/xsshunter/api# which python2
/usr/bin/python2
root@372526-twosa:~/xsshunter/api# virtualenv -p /usr/bin/python2 env
Running virtualenv with interpreter /usr/bin/python2
New python executable in /root/xsshunter/api/env/bin/python2
Also creating executable in /root/xsshunter/api/env/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
Assurez-vous de changer MY / EXECUTABLE / PATH dans la dernière commande en ce que la commande python2 produit . Pour moi, c'est: / usr / bin / python2 .
Après avoir créé l'environnement virtuel, activez-le avec la commande suivante. Vous devriez remarquer un changement dans votre ligne de commande.
# activate environment
. env/bin/activate
Utilisation de VDS Timeweb comme exemple
root@372526-twosa:~/xsshunter/api# . env/bin/activate
(env) root@372526-twosa:~/xsshunter/api# ls
apiserver.py env logs models probe.js requirements.txt templates
Il existe également des problèmes de dépendance car le référentiel n'est pas activement maintenu.
Ainsi, nous devons apporter les modifications suivantes au fichier requirements.txt :
1. psycopg2 2.6.1 == => psycopg2 == 2.7.3.1
2. bcrypt 2.0.0 == => bcrypt == 3.1.7
Utilisez votre éditeur de texte préféré pour ça. J'utilise VIM.
Une fois que cela est fait, il est temps d'installer toutes les dépendances et de démarrer le serveur API pour vous assurer que tout fonctionne comme prévu. Essayons!
# install requirements
pip install -r requirements.txt
# run the API server
./apiserver.py
Utilisation de VDS Timeweb comme exemple
(env) root@372526-twosa:~/xsshunter/api# pip install -r requirements.txt
(env) root@372526-twosa:~/xsshunter/api# ./apiserver.py
La commande d'installation doit générer les données. Le serveur api ne doit rien afficher. Aucun retrait n'est une bonne nouvelle!
Nous voulons apporter une autre modification avant de terminer la configuration du serveur api. Initialement, il écoute sur l'interface 0.0.0.0 , mais nous avons mandaté via NGINX. Cela signifie que cela n'a pas de sens. Nous allons configurer le serveur pour écouter sur localhost . Cela évitera la confusion et les problèmes.
À l'aide d'un éditeur de texte, modifiez la ligne 684 de apiserver.py de
app.listen (8888) à app.listen (8888, "localhost") .
Merci à swarley7 pour le partage de la solution dans cette pull request .
Enfin: bogue où les téléchargements ne fonctionnent pas comme prévu si le dossier / uploads n'existe pas. Ceci est partagé par sampsonc dans cette pull request .
Créons un dossier et continuons!
# create uploads folder
mkdir xsshunter/api/uploads
Installation du serveur GUI
Ce processus est très similaire au processus sur le serveur api, mais en plus simple.
Allez dans le dossier gui, créez un environnement virtuel, activez-le et installez les dépendances.
# change folder - you know that already!
cd xsshunter/gui
# find your Python2 executable path
which python2
# create a python2 virtual environment in the env folder
virtualenv -p MY/EXECUTABLE/PATH env
# activate environment
. env/bin/activate
# install requirements
pip install -r requirements.txt
# run the GUI server
./guiserver.py
Utilisation de VDS Timeweb comme exemple
root@372526-twosa:~/xsshunter# cd xsshunter/gui
root@372526-twosa:~/xsshunter/gui# which python2
/usr/bin/python2
(env) root@372526-twosa:~/xsshunter/gui# virtualenv -p /usr/bin/python2 env
(env) root@372526-twosa:~/xsshunter/gui# . env/bin/activate
(env) root@372526-twosa:~/xsshunter/gui# pip install -r requirements.txt
(env) root@372526-twosa:~/xsshunter/gui# ./guiserver.py
Encore une fois, la même chose que lors de l'installation du serveur API:
assurez-vous de changer MY / EXECUTABLE / PATH dans la dernière commande en what python2. Pour moi, c'est: / usr / bin / python2 .
Ici aussi, le manque de sortie lors de l'exécution de ./guiserver est une bonne nouvelle.
De plus, tout comme avec le serveur API, nous voulons proxy toutes les connexions via NGINX, de sorte que le serveur n'a pas besoin d'écouter sur l'interface 0.0.0.0 .
À l'aide d'un éditeur de texte, modifiez la ligne 70 de guiserver.py de
app.listen (1234) à app.listen (1234, "localhost").
Touches finales
La première étape consiste à démarrer les deux serveurs. Le billet de blog original suggère d'utiliser tmux. Ce n'est pas parfait pour la production, mais nous sommes des hackers, alors faisons-le quand même! Si vous voulez un service plus stable, je vous laisse cela comme un exercice.
Voici comment le faire fonctionner avec tmux. Si vous avez besoin d'aide, il y a un excellent aide- mémoire ici !
# start a session
tmux session -new xsshunter
# change to api directory
cd xsshunter/api
#run api server
./apiserver
# open new pane
[ctrl]+[b] -> [c]
# change to gui directory
cd xsshunter/gui
# run gui server
./guiserver
# detach from session
[ctrl]+[b] -> [d]
# extra: if you want to open the session again
tmux attach-session -t xsshunter
Et la dernière!
Ouvrez votre domaine et voyez si la page xsshunter vous accueille!
Il devrait ressembler à la première page de xsshunter.com .
Arrivé? Toutes nos félicitations!
Il est temps de verser la bière au verre!
Vérifiez les performances
(https://www.372526-twosa.tmweb.ru/signup) .
www.372526-twosa.tmweb.ru/app Payload - . :
html- .
: js , , js_callback .
XSS Hunter:
:
It works! !
www.372526-twosa.tmweb.ru/app Payload - . :
"><script src=https://tw.372526-twosa.tmweb.ru></script>
html- .
: js , , js_callback .
XSS Hunter:
:
It works! !
: www.372526-twosa.tmweb.ru.
Si vous n'avez pas encore regardé Entourage, vous pouvez commencer maintenant!
Conclusion
Je n'aime pas exécuter quelque chose en tant que root ou en tant qu'utilisateur normal, donc pour l'exécuter en tant que www-data, j'ai créé le script suivant pour le rendre un peu plus facile.
Remplacez apiserver.py par guiserver.py afin d'avoir un script pour chaque serveur. Je serai heureux si vous utilisez cette technique.
Script Shell pour utiliser l'environnement virtuel et démarrer le serveur API:
#!/bin/sh
. env/bin/activate && python apiserver.py
Exécution du script en tant que www-data pour des raisons de sécurité:
# execute script above as www-data user
sudo -u www-data ./run.sh
Terminé!
Merci pour l'attention. J'espère que cela a été utile!