Publicamos a tradução do artigo Instalando o XSS Hunter e verificamos as instruções com nosso próprio exemplo.
Spoiler: Tudo funciona!

Por que XSS Hunter?
Muitos leitores provavelmente já sabem que você pode se registrar em https://xsshunter.com/ e usar o xsshunter gratuitamente. Em suma, esta é uma ferramenta usada principalmente para pesquisas XSS cegas . Por que então implantar seu próprio serviço para essa tarefa, você pergunta.
- Tudo está sob controle. Se algo der errado, você pode verificar e investigar o problema.
- Estabilidade. Você sabe com certeza se o serviço está funcionando ou não. Você pode decidir por si mesmo quando parar. Imagine que você tenha centenas de conjuntos de dados prontos para execução e o proprietário do serviço o desligue repentinamente. Isso seria triste!
- Você está no controle dos dados. As empresas geralmente não gostam de caçadores de bugs que usam soluções de terceiros, porque neste caso não podem verificar se os dados foram excluídos ou não.
Bônus: Graças ao artigo, você descobrirá como tudo funciona.
Se este artigo não for suficiente para você, recomendamos a leitura do trabalho de nossos colegas da Jet Infosystems.

Como usar?
Um guia para usar o XSS Hunter pode ser encontrado no site XSS Hunter GitHub .
Este é um ótimo começo, mas este guia está um pouco desatualizado. A situação é a mesma com a base de código, então tive que mudar algumas coisas para funcionar no Ubuntu 18.04. Neste artigo, vou explicar como trabalhar com o XSS Hunter.
Os primeiros passos
Neste ponto, estou usando o guia oficial como base.
Também presumimos que você tenha um servidor funcional e uma experiência básica de gerenciamento de servidor. Apesar disso, ainda tentarei ir mais fundo. Sinta-se livre para perguntar!
Nós vamos precisar:
- VPS ou outro local para hospedar o serviço
Repetimos as instruções do autor usando o exemplo de VDS Timeweb: timeweb.com/ru/services/vds . Mais adiante no artigo, compartilhamos o que obtivemos em cada etapa, em spoilers ocultos.
- Nome de domínio (você pode encontrar e comprar facilmente. Por exemplo, 1 , 2 , 3 )
Temos: timeweb.com/ru/services/domains .
- Wildcard-. , , . .
:
- Nginx,
- SSL- Let's Encrypt Apache.
XSS Hunter
mailgun
1. Registre uma conta mailgun aqui . Não se esqueça de desmarcar a caixa, observada abaixo na imagem.

2. Siga as instruções para verificar seu endereço de e-mail e número de telefone.
3. Vá para a guia de envio e selecione seu domínio de e-mail.

4. No canto superior direito da tela, adicione os endereços de e-mail onde deseja receber alertas. Este deve ser o seu endereço real e atual. Por exemplo john.doe@gmail.com.
5. Após concluir o acima, clique no botão "Selecionar" no bloco destacado pelo rótulo API.
6. Anote a chave API e o domínio de e-mail. Você precisará deles em breve!
O domínio de e-mail é a última parte do URL da API base: sandboxe678 .
Usando VDS Timeweb como exemplo
: sandbox82f7e729ed934d1189bcc6bd32aaa977.

7. Abra o mail e encontre a carta do mailgun.
8. Confirme seu endereço de e-mail clicando no link do e-mail.
(A carta será enviada para o endereço que você especificou na etapa 4, ou seja, no nosso caso, para john.doe@gmail.com).
Certifique-se de que tudo funciona
Use o seguinte comando para enviar e-mail de seu servidor para verificar se o serviço está em execução.
Substitua:
[API_KEY] : sua chave API
[API_BASE_URL] : sua URL base API
[YOUR_EMAIL] : seu email real
Por exemplo: 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!'
Observação : a versão da UE do serviço possui um URL diferente. Uma rápida pesquisa no Google ou verificação de sua conta mailgun dirá exatamente o que alterar.
Nota do especialista 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."
}
Verifique sua conta para se certificar de que recebeu um e-mail como o exemplo abaixo. Se não houver e-mail, você precisará solucionar o problema antes de prosseguir para a próxima etapa.
Configurando dependências
Instale os pacotes necessários primeiro:
# install dependencies
sudo apt-get install nginx && sudo apt-get install postgresql postgresql-contrib
Usando VDS Timeweb como exemplo
root@372526-twosa:~# apt-get install nginx && apt-get install postgresql postgresql-contrib
Em seguida, configure o usuário postgres e o banco de dados para o XSS Hunter. Altere EXAMPLE_PASSWORD para uma senha mais segura. Eu recomendo usar um gerenciador de senhas!
sudo -i -u postgres
psql template1
CREATE USER xsshunter WITH PASSWORD 'EXAMPLE_PASSWORD';
CREATE DATABASE xsshunter;
\q
exit
Usando VDS Timeweb como exemplo
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
Instalação de serviço
Primeiro, clonamos o repositório:
git clone https://github.com/mandatoryprogrammer/xsshunter
cd xsshunter
Usando VDS Timeweb como exemplo
root@372526-twosa:~# git clone https://github.com/mandatoryprogrammer/xsshunter
root@372526-twosa:~# cd xsshunter
Observação : Python2 necessário! O repositório não oferece suporte a Python3.
Para executar o script de configuração, precisamos adicionar uma dependência adicional:
# install yaml support for python
sudo apt-get install pyyaml
Usando VDS Timeweb como exemplo
root@372526-twosa:~/xsshunter# apt install python-pip
root@372526-twosa:~/xsshunter# pip install pyyaml
Obrigado ao usuário xYantix por fornecer uma solução funcional nesta solicitação pull .
Configuração de serviço
Ok, vamos começar! Estamos prontos para executar o script de configuração.
# generate yaml config file
./generate_config.py
Usando VDS Timeweb como exemplo
root@372526-twosa:~/xsshunter# ./generate_config.py
Vou mostrar o processo passo a passo. Para ver um exemplo da saída, consulte o exemplo abaixo. Adicionei números para facilitar a navegação. Caso contrário, tudo deve ser igual.
1. Digite seu nome de domínio. Usei meudominio.com como exemplo.
Usando VDS Timeweb como exemplo
372526-twosa.tmweb.ru.
2. Digite sua chave de API do Mailgun que você encontrou e salvou anteriormente.
3. Digite seu nome de domínio Mailgun, que você também anotou anteriormente. (O que começa com uma caixa de areia).
4. Eu acho que poderia ser qualquer coisa @ [nome de domínio do Mailgun] , mas eu mantive a nomenclatura padrão do mailgun já que o nome não importa aqui. Eu sugiro usar: mailgun @ [nome de domínio Mailgun]. Lembre-se de substituir [nome de domínio Mailgun] pelo seu.
5. Isso é para fazer com que as pessoas relatem um suposto abuso da ferramenta. Seu e-mail real e atual deve ser indicado aqui. Por exemplo: john.doe@gmail.com .
6. Se você seguiu todas as etapas neste artigo, basta inserir xsshunter.
7. Digite a senha que você escolheu ao criar o banco de dados. Listado acima como EXAMPLE_PASSWORD . Substitua o texto [YOUR_REALLY_SECURE_PASSWORD] pela sua senha EXAMPLE_PASSWORD .
8. Como na etapa 6, se você seguiu este tutorial, basta inserir xsshunter.
Ops! A configuração está concluída!
Se você precisar alterar esses valores, pode editá-los diretamente no arquivo 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!
Usando VDS Timeweb como exemplo
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
Agora você deve ter 2 novos arquivos na pasta xsshunter:
- config.yaml (contém chaves de API e credenciais)
- padrão (contém configuração nginx)
Configuração NGINX
Altere a localização do certificado SSL
Se você estiver usando o Let's Encrypt como eu, será necessário modificar o padrão .
Para que a configuração funcione com as configurações padrão de Let's Encrypt, devemos comentar todas as entradas:
/etc/nginx/ssl/mydomain.com.crt; # Wildcard SSL certificate
/etc/nginx/ssl/mydomain.com.key; # Wildcard SSL key
e substitua por
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
Notas:
1. Substitua mydomain.com pelo seu nome de domínio!
2. Tudo após o símbolo # são comentários. Você pode excluí-los se quiser.
Seu arquivo padrão agora deve ter a seguinte aparência:
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;
}
}
Usando VDS Timeweb como exemplo
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;
}
}
Vamos aplicar a configuração NGINX
A próxima etapa é mover o arquivo para a pasta nginx. É considerado uma boa prática ter arquivos de configuração na pasta ... / sites-available e então criar links simbólicos para as configurações que você está usando para ... / sites-enabled . Faremos exatamente isso.
Atribuo um nome ao arquivo de configuração para que fique claro o nome do serviço ao qual ele pertence.
Veja como fazer!
# 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
Usando VDS Timeweb como exemplo
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
Se você nunca iniciou o nginx antes, o último comando deve ser:
sudo systemctl start nginx
Instalando o servidor API
Primeiro, o servidor API também precisa de certas dependências.
O manual diz para executar o seguinte comando:
sudo apt-get install python-virtualenv python-dev libpq-dev libffi-dev
Usando VDS Timeweb como exemplo
root@372526-twosa:~/xsshunter# apt-get install python-virtualenv python-dev libpq-dev libffi-dev
, python-virtualenv pip.
Tente novamente!
Infelizmente, não consegui executar o comando virtualenv , então instalei o servidor API com
pip install virtualenv
Problema resolvido, consegui continuar!
Vamos para o diretório desejado.
Uma vez no diretório certo, você precisa criar um ambiente virtual.
Veja como fazer:
# 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
Usando VDS Timeweb como exemplo
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.
Certifique-se de alterar MY / EXECUTABLE / PATH no último comando para a saída de qual comando python2 . Para mim, é: / usr / bin / python2 .
Depois de criar o ambiente virtual, ative-o com o seguinte comando. Você deve notar uma mudança em sua linha de comando.
# activate environment
. env/bin/activate
Usando VDS Timeweb como exemplo
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

Também existem problemas de dependência, pois o repositório não é mantido ativamente.
Portanto, temos que fazer as seguintes alterações no arquivo requirements.txt :
1. psycopg2 == 2.6.1 => psycopg2 == 2.7.3.1
2. bcrypt == 2.0.0 => bcrypt == 3.1.7
Use seu editor de texto favorito por esta. Estou usando o VIM.
Feito isso, é hora de instalar todas as dependências e iniciar o servidor API para garantir que tudo esteja funcionando conforme o esperado. Vamos tentar!
# install requirements
pip install -r requirements.txt
# run the API server
./apiserver.py
Usando VDS Timeweb como exemplo
(env) root@372526-twosa:~/xsshunter/api# pip install -r requirements.txt
(env) root@372526-twosa:~/xsshunter/api# ./apiserver.py
O comando de instalação deve gerar os dados. O servidor api não deve produzir nada. Nenhuma retirada é uma boa notícia!
Queremos fazer mais uma alteração antes de concluir a configuração do servidor API. Inicialmente, ele escuta na interface 0.0.0.0 , mas nós procuramos por meio de NGINX. Isso significa que não faz sentido. Vamos configurar o servidor para escutar no localhost . Isso evitará confusão e problemas.
Usando um editor de texto, altere a linha 684 em apiserver.py de
app.listen (8888) para app.listen (8888, "localhost") .
Agradecemos a swarley7 por compartilhar a solução nesta solicitação pull .
Finalmente: Bug em que os uploads não funcionam como esperado se a pasta / uploads não existir. Isso é compartilhado por sampsonc nesta solicitação de pull .
Vamos criar uma pasta e continuar!
# create uploads folder
mkdir xsshunter/api/uploads
Instalando o servidor GUI
Este processo é muito semelhante ao processo no servidor api, só que mais simples.
Vá até a pasta gui, crie um ambiente virtual, ative-o e instale as dependências.
# 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
Usando VDS Timeweb como exemplo
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
Novamente, o mesmo que ao instalar o servidor API:
Certifique-se de alterar MY / EXECUTABLE / PATH no último comando para o que python2. Para mim, é: / usr / bin / python2 .
Aqui, também, a falta de saída ao executar ./guiserver é uma boa notícia.
Além disso, assim como com o servidor API, queremos proxy para todas as conexões por meio de NGINX, para que o servidor não precise escutar na interface 0.0.0.0 .
Usando um editor de texto, altere a linha 70 em guiserver.py de
app.listen (1234) para app.listen (1234, "localhost").
Toques finais
A primeira etapa é iniciar os dois servidores. A postagem original do blog sugere o uso do tmux. Não é perfeito para produção, mas somos hackers, então vamos fazer assim mesmo! Se você deseja um serviço mais estável, deixarei isso para você como um exercício.
Veja como colocá-lo em funcionamento com o tmux. Se precisar de ajuda, há uma ótima folha de dicas aqui !
# 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
E o último!
Abra seu domínio e veja se a página xsshunter o cumprimenta!
Deve ser semelhante à primeira página de xsshunter.com .
Aconteceu? Parabéns!
É hora de servir cerveja no copo!

Verifique o desempenho
(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.
Se você ainda não assistiu o Entourage, pode começar agora!
Conclusão
Não gosto de executar algo como root ou como um usuário normal, então para executá-lo como dados www, fiz o seguinte script para torná-lo um pouco mais fácil.
Substitua apiserver.py por guiserver.py para que você tenha um script por servidor. Ficarei feliz se você usar essa técnica.
Script de shell para usar o ambiente virtual e iniciar o servidor API:
#!/bin/sh
. env/bin/activate && python apiserver.py
Executando o script como www-data por razões de segurança:
# execute script above as www-data user
sudo -u www-data ./run.sh
Feito!
Obrigado pela atenção. Espero que tenha sido útil!