[Информационная безопасность] Установка XSS Hunter (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Публикуем перевод статьи Installing XSS Hunter и проверяем инструкцию на собственном примере.
Спойлер: Всё работает!
Почему XSS Hunter?
Многие читатели, вероятно, уже знают, что можно зарегистрироваться на сайте https://xsshunter.com/ и бесплатно использовать xsshunter. В двух словах, это инструмент, который применяют в основном для поиска blind XSS. Зачем тогда разворачивать собственный сервис для этой задачи, спросите вы.
1. Всё под контролем. Если что-то пойдет не так, вы сможете проверить и изучить проблему.
2. Стабильность. Вы точно знаете, работает сервис или нет. Можно самостоятельно решать, когда его остановить. Представьте, что у вас готовы к выполнению сотни наборов данных, а обладатель сервиса его внезапно выключает. Это было бы печально!
3. Вы контролируете данные. Компании обычно не любят багхантеров, использующих сторонние решения, поскольку в таком случае не могут проверить, удалены данные или нет.
Бонус: Благодаря статье, вы узнаете, как всё устроено.
Если этой статьи вам будет недостаточно, рекомендуем прочитать работу наших коллег из компании «Инфосистемы Джет».
Как использовать?
Руководство по использованию XSS Hunter можно найти на сайте GitHub XSS Hunter.
Это отличный старт, но данное руководство немного устарело. Та же ситуация и с кодовой базой, поэтому для работы в Ubuntu 18.04 мне пришлось кое-что изменить. В статье я расскажу, как все-таки работать с XSS Hunter.
Первые шаги
На этом этапе я беру за основу официальное руководство.
Также мы подразумеваем, что у вас есть рабочий сервер и базовый опыт управления сервером. Несмотря на это, я все-таки попробую углубиться. Не стесняйтесь задавать вопросы!
Нам потребуется:
- VPS или другое место для размещения сервиса
- Доменное имя (Легко можно найти и купить. Например, 1, 2, 3)
- Wildcard-сертификат. Следуя руководству, получите один сертификат для домена, который вы купили. По этой ссылке также представлена официальная документация.
Рекомендуем ознакомиться с данными инструкциями:
Установка XSS Hunter
Получение учетной записи mailgun
1. Зарегистрируйте учетную запись mailgun здесь. Не забудьте убрать галочку, отмечено ниже на скриншоте.
2. Следуйте инструкциям, чтобы подтвердить адрес электронной почты и номер телефона.
3. Перейдите на вкладку отправки и выберите свой почтовый домен.
4. Справа в верхней части экрана добавьте адреса электронной почты, куда вы хотите получать оповещения. Это должен быть ваш реальный и актуальный адрес. Например, john.doe@gmail.com.
5. Выполнив указанное выше, нажмите кнопку «Выбрать» в блоке, который выделен надписью API.
6. Запишите ключ API и домен электронной почты. Они вам скоро понадобятся!
Домен электронной почты — это последняя часть базового URL-адреса API: sandboxe678.
На примере Timeweb
SPL
sandbox82f7e729ed934d1189bcc6bd32aaa977
7. Откройте почту и найдите письмо от mailgun.
8. Подтвердите адрес электронной почты, нажав на ссылку в письме.
(Письмо будет отправлено на указанный вами адрес в шаге 4, то есть в нашем случае на john.doe@gmail.com).
Убедимся, что всё работает
Используйте следующую команду для отправки письма со своего сервера, чтобы убедиться, что служба работает.
Замените:
[API_KEY]: ваш ключ API
[API_BASE_URL]: ваш базовый URL API
[YOUR_EMAIL]: ваш реальный email
Например: 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!'
Примечание: Версия сервиса для стран ЕС имеет другой URL. Быстрый поиск в Google или проверка вашей учетной записи mailgun подскажут вам, что именно изменить.
Примечание от эксперта Timeweb
SPL
Не забудьте установить 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."
}
Проверьте свою учетную запись, чтобы убедиться, что вы получили письмо, как в примере ниже. Если письма нет, прежде чем перейти к следующему этапу, необходимо устранить неполадки.
Настройка зависимостей
Сначала установите необходимые пакеты:
# install dependencies
sudo apt-get install nginx && sudo apt-get install postgresql postgresql-contrib
На примере Timeweb
SPL
root@372526-twosa:~# apt-get install nginx && apt-get install postgresql postgresql-contrib
Затем заведите пользователя и базу данных postgres для XSS Hunter. Измените EXAMPLE_PASSWORD на более безопасный пароль. Очень рекомендую использовать менеджер паролей!
sudo -i -u postgres
psql template1
CREATE USER xsshunter WITH PASSWORD 'EXAMPLE_PASSWORD';
CREATE DATABASE xsshunter;
\q
exit
На примере Timeweb
SPL
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
Установка сервиса
Сначала клонируем репозиторий:
git clone https://github.com/mandatoryprogrammer/xsshunter
cd xsshunter
На примере Timeweb
SPL
root@372526-twosa:~# git clone https://github.com/mandatoryprogrammer/xsshunter
root@372526-twosa:~# cd xsshunter
Обратите внимание: требуется Python2! Репозиторий не поддерживает Python3.
Чтобы запустить скрипт конфигурации, нам нужно добавить дополнительную зависимость:
# install yaml support for python
sudo apt-get install pyyaml
На примере Timeweb
SPL
root@372526-twosa:~/xsshunter# apt install python-pip
root@372526-twosa:~/xsshunter# pip install pyyaml
Благодарим пользователя xYantix за предоставление рабочего решения в этом pull-request.
Настройка сервиса
Отлично, приступим! Мы готовы к запуску скрипта настройки.
# generate yaml config file
./generate_config.py
На примере Timeweb
SPL
root@372526-twosa:~/xsshunter# ./generate_config.py
Покажу процесс шаг за шагом. Чтобы увидеть пример вывода, см. пример ниже. Я добавил числа для удобной навигации. В остальном все должно выглядеть одинаково.
1. Введите ваше доменное имя. Я использовал mydomain.com в качестве примера.
На примере Timeweb
SPL
У нас это 372526-twosa.tmweb.ru.
2. Введите свой ключ API Mailgun, который вы нашли и сохранили ранее.
3. Введите свое доменное имя Mailgun, которое вы также записали ранее. (То, что начинается с sandbox).
4. Я считаю, это может быть что_угодно@[имя домена Mailgun], но я придерживался стандартного именования от mailgun, так как имя здесь не имеет особого значения. Я предлагаю использовать: mailgun@[имя домена Mailgun]. Не забудьте заменить [имя домена Mailgun] на свое.
5. Это необходимо для того, чтобы люди сообщали о предполагаемом злоупотреблении инструментом. Здесь должен быть указан ваш реальный и актуальный email. Например: john.doe@gmail.com.
6. Если вы повторили все шаги из этой статьи, просто введите xsshunter.
7. Введите пароль, который вы выбрали при создании базы данных. Указано выше, как EXAMPLE_PASSWORD. Замените текст [YOUR_REALLY_SECURE_PASSWORD] вашим паролем EXAMPLE_PASSWORD.
8. Как и в шаге №6, если вы следовали этому руководству, просто введите xsshunter.
Оп! Настройка завершена!
Если вам когда-нибудь понадобится изменить эти значения, вы можете отредактировать их прямо в файле 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!
На примере Timeweb
SPL
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
Теперь у вас должно быть 2 новых файла в папке xsshunter:
- config.yaml (содержит ключи API и учетные данные)
- default (содержит конфигурацию nginx)
Конфигурация NGINX
Изменим расположение сертификата SSL
Если вы так же, как и я, используете Let's Encrypt, вам необходимо изменить файл default.
Чтобы конфигурация работала с настройками Let's Encrypt по умолчанию, мы должны закомментировать все вхождения:
/etc/nginx/ssl/mydomain.com.crt; # Wildcard SSL certificate
/etc/nginx/ssl/mydomain.com.key; # Wildcard SSL key
и заменить на
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
Примечания:
1. Замените mydomain.com на свое доменное имя!
2. Всё после символа # является комментариями. Вы можете удалить их, если хотите.
Теперь ваш файл default должен выглядеть так:
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;
}
}
На примере Timeweb
SPL
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;
}
}
Применим конфигурацию NGINX
Следующий шаг — это переместить файл в папку nginx. Считается хорошей практикой иметь файлы конфигурации в папке .../sites-available, а затем создавать символические ссылки на конфигурации, которые вы используете, на .../sites-enabled. Мы поступим именно так.
Я называю файл конфигурации так, чтобы из названия было понятно, к какому сервису он принадлежит.
Ниже описано, как это сделать!
# 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
На примере Timeweb
SPL
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
Если вы никогда раньше не запускали nginx, последняя команда должна быть следующей:
sudo systemctl start nginx
Установка сервера API
Во-первых, серверу API также нужны определенные зависимости.
В руководстве сказано, что нужно выполнить следующую команду:
sudo apt-get install python-virtualenv python-dev libpq-dev libffi-dev
На примере Timeweb
SPL
root@372526-twosa:~/xsshunter# apt-get install python-virtualenv python-dev libpq-dev libffi-dev
Стоит добавить, что возможно python-virtualenv придется проинсталлировать посредством pip.
Попробуйте повторить!
К сожалению, у меня не получилось запустить команду virtualenv, поэтому я установил сервер API с помощью
pip install virtualenv
Проблема решена, я смог продолжить!
Перейдем в нужную директорию.
Оказавшись в нужном каталоге, необходимо создать виртуальную среду.
Вот как это сделать:
# 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
Убедитесь, что вы изменили MY/EXECUTABLE/PATH в последней команде на то, что было на выходе команды which python2. Для меня это: /usr/bin/python2.
После того, как мы создали виртуальную среду, активируйте ее с помощью следующей команды. Вы должны заметить изменение в вашей командной строке.
# activate environment
. env/bin/activate
На примере Timeweb
SPL
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
Наблюдаются также проблемы с зависимостями, поскольку репозиторий активно не поддерживается.
Таким образом, мы должны внести следующие изменения в файл requirements.txt:
1. psycopg2 == 2.6.1 => psycopg2 == 2.7.3.1
2. bcrypt == 2.0.0 => bcrypt == 3.1.7
Используйте любимый текстовый редактор для этого. Я пользуюсь VIM.
Как только это будет сделано, пора установить все зависимости и запустить сервер API, чтобы убедиться, что все работает должным образом. Давайте попробуем!
# install requirements
pip install -r requirements.txt
# run the API server
./apiserver.py
На примере Timeweb
SPL
(env) root@372526-twosa:~/xsshunter/api# pip install -r requirements.txt
(env) root@372526-twosa:~/xsshunter/api# ./apiserver.py
Команда установки должна вывести данные. Api-сервер не должен ничего выводить. Отсутствие вывода — хорошие новости!
Мы хотим внести еще одно изменение, прежде чем закончить настройку сервера api. Первоначально он прослушивает интерфейс 0.0.0.0, но мы проксируем через NGINX. Это означает, что в этом нет смысла. Мы настроим сервер на прослушивание на localhost. Это позволит избежать путаницы и проблем.
Используя текстовый редактор, измените строку 684 в apiserver.py с
app.listen( 8888 ) на app.listen( 8888, «localhost» ).
Спасибо swarley7 за то, что поделился решением в этом pull request.
Наконец-то: Ошибка, из-за которой загрузки не работают должным образом, если папка /uploads не существует. Этим поделился sampsonc в этом pull request.
Давайте создадим папку и продолжим!
# create uploads folder
mkdir xsshunter/api/uploads
Установка GUI-сервера
Этот процесс очень похож на процесс на сервере api, только проще.
Переходим в папку gui, создаем виртуальную среду, активируем ее и устанавливаем зависимости.
# 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
На примере Timeweb
SPL
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
Опять же, как и при установке API-сервера:
Убедитесь, что вы изменили MY/EXECUTABLE/PATH в последней команде на то, что было на выходе команды which python2. Для меня это: /usr/bin/python2.
Здесь также отсутствие вывода при запуске ./guiserver — это хорошая новость.
Также, как и в случае с сервером API, мы хотим проксировать все соединения через NGINX, поэтому серверу не нужно прослушивать интерфейс 0.0.0.0.
Используя текстовый редактор, измените строку 70 в guiserver.py с
app.listen( 1234 ) на app.listen( 1234, «localhost» ).
Последние штрихи
Первый шаг — запустить оба сервера. В оригинальном посте в блоге предлагается использовать tmux. Он не идеален для продакшена, но мы хакеры, так что давайте все равно сделаем это! Если вам нужен более стабильный сервис, я оставлю это вам в качестве упражнения.
Вот как запустить это все с помощью tmux. Если вам нужна помощь, здесь есть отличная шпаргалка!
# 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
И последнее!
Откройте свой домен и посмотрите, приветствует ли вас страница xsshunter!
Она должен выглядеть так же, как первая страница сайта xsshunter.com.
Получилось? Поздравляю!
Время разливать пиво по бокалам!
Проверим работоспособность
SPL
Переходим на страницу (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.
Если вы еще не смотрели сериал «Красавцы» (Entourage), можно начать прямо сейчас!
Заключение
Мне не нравится запускать что-то как root либо обычный пользователь, поэтому, чтобы запустить это как www-data, я сделал следующий скрипт, чтобы сделать его немного проще.
Замените apiserver.py на guiserver.py, чтобы иметь по одному скрипту для каждого сервера. Я буду рад, если вы будете использовать этот прием.
Shell-скипт для использования виртуального окружения и запуска сервера API:
#!/bin/sh
. env/bin/activate && python apiserver.py
Запуск скрипта как www-data из соображений безопасности:
# execute script above as www-data user
sudo -u www-data ./run.sh
Готово!
Спасибо за внимание. Надеюсь, было полезно!
===========
Источник:
habr.com
===========
===========
Автор оригинала: Robin Lunde
===========Похожие новости:
- [Информационная безопасность, Разработка под iOS, Разработка под MacOS, Софт] Apple пересмотрит методы подтверждения приложений на Mac
- [Разработка веб-сайтов, Habr, Тестирование веб-сервисов] Различные методы брутфорс атак WordPress
- [Информационная безопасность, IT-инфраструктура] Смартфоны Nokia 1.3, Nokia 2.4 и Nokia 5.3 совместимы с EMM SafePhone
- [Информационная безопасность, Криптография, Криптовалюты] Более 25 хакерских групп стали работать по модели «криптовымогательство как услуга»
- [Информационная безопасность, Карьера в IT-индустрии, Социальные сети и сообщества] Опытный хакер Мадж возглавит отдел безопасности Twitter
- [Информационная безопасность, Open source, Администрирование баз данных] Сканер для выявления слабых паролей в СУБД
- [Информационная безопасность, Геоинформационные сервисы, Социальные сети и сообщества] Военные США покупают информацию из популярных приложений: расследование Vice
- [Информационная безопасность, Совершенный код, Управление продуктом, Софт] Строим безопасную разработку в ритейлере. Часть 2, SAP-приложения
- [Информационная безопасность, Законодательство в IT, Читальный зал] Apple обвинили в слежке за пользователями через рекламный трекер IDFA
- [Java] Spring Security — пример REST-сервиса с авторизацией по протоколу OAuth2 через BitBucket и JWT
Теги для поиска: #_informatsionnaja_bezopasnost (Информационная безопасность), #_xss, #_xss_ujazvimost (xss уязвимость), #_xss_vulnerability, #_blind_xss, #_bughunting, #_informatsionnaja_bezopasnost (информационная безопасность), #_bezopasnost (безопасность), #_security, #_blog_kompanii_timeweb (
Блог компании Timeweb
), #_informatsionnaja_bezopasnost (
Информационная безопасность
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:35
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Публикуем перевод статьи Installing XSS Hunter и проверяем инструкцию на собственном примере.
Спойлер: Всё работает! Почему XSS Hunter? Многие читатели, вероятно, уже знают, что можно зарегистрироваться на сайте https://xsshunter.com/ и бесплатно использовать xsshunter. В двух словах, это инструмент, который применяют в основном для поиска blind XSS. Зачем тогда разворачивать собственный сервис для этой задачи, спросите вы. 1. Всё под контролем. Если что-то пойдет не так, вы сможете проверить и изучить проблему. 2. Стабильность. Вы точно знаете, работает сервис или нет. Можно самостоятельно решать, когда его остановить. Представьте, что у вас готовы к выполнению сотни наборов данных, а обладатель сервиса его внезапно выключает. Это было бы печально! 3. Вы контролируете данные. Компании обычно не любят багхантеров, использующих сторонние решения, поскольку в таком случае не могут проверить, удалены данные или нет. Бонус: Благодаря статье, вы узнаете, как всё устроено. Если этой статьи вам будет недостаточно, рекомендуем прочитать работу наших коллег из компании «Инфосистемы Джет».
Как использовать? Руководство по использованию XSS Hunter можно найти на сайте GitHub XSS Hunter. Это отличный старт, но данное руководство немного устарело. Та же ситуация и с кодовой базой, поэтому для работы в Ubuntu 18.04 мне пришлось кое-что изменить. В статье я расскажу, как все-таки работать с XSS Hunter. Первые шаги На этом этапе я беру за основу официальное руководство. Также мы подразумеваем, что у вас есть рабочий сервер и базовый опыт управления сервером. Несмотря на это, я все-таки попробую углубиться. Не стесняйтесь задавать вопросы! Нам потребуется:
Рекомендуем ознакомиться с данными инструкциями:
Установка XSS Hunter Получение учетной записи mailgun 1. Зарегистрируйте учетную запись mailgun здесь. Не забудьте убрать галочку, отмечено ниже на скриншоте. 2. Следуйте инструкциям, чтобы подтвердить адрес электронной почты и номер телефона. 3. Перейдите на вкладку отправки и выберите свой почтовый домен. 4. Справа в верхней части экрана добавьте адреса электронной почты, куда вы хотите получать оповещения. Это должен быть ваш реальный и актуальный адрес. Например, john.doe@gmail.com. 5. Выполнив указанное выше, нажмите кнопку «Выбрать» в блоке, который выделен надписью API. 6. Запишите ключ API и домен электронной почты. Они вам скоро понадобятся! Домен электронной почты — это последняя часть базового URL-адреса API: sandboxe678. На примере TimewebSPLsandbox82f7e729ed934d1189bcc6bd32aaa977
7. Откройте почту и найдите письмо от mailgun. 8. Подтвердите адрес электронной почты, нажав на ссылку в письме. (Письмо будет отправлено на указанный вами адрес в шаге 4, то есть в нашем случае на john.doe@gmail.com). Убедимся, что всё работает Используйте следующую команду для отправки письма со своего сервера, чтобы убедиться, что служба работает. Замените: [API_KEY]: ваш ключ API [API_BASE_URL]: ваш базовый URL API [YOUR_EMAIL]: ваш реальный email Например: 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!' Примечание: Версия сервиса для стран ЕС имеет другой URL. Быстрый поиск в Google или проверка вашей учетной записи mailgun подскажут вам, что именно изменить. Примечание от эксперта TimewebSPLНе забудьте установить 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." } Проверьте свою учетную запись, чтобы убедиться, что вы получили письмо, как в примере ниже. Если письма нет, прежде чем перейти к следующему этапу, необходимо устранить неполадки. Настройка зависимостей Сначала установите необходимые пакеты: # install dependencies
sudo apt-get install nginx && sudo apt-get install postgresql postgresql-contrib На примере TimewebSPLroot@372526-twosa:~# apt-get install nginx && apt-get install postgresql postgresql-contrib
Затем заведите пользователя и базу данных postgres для XSS Hunter. Измените EXAMPLE_PASSWORD на более безопасный пароль. Очень рекомендую использовать менеджер паролей! sudo -i -u postgres
psql template1 CREATE USER xsshunter WITH PASSWORD 'EXAMPLE_PASSWORD'; CREATE DATABASE xsshunter; \q exit На примере TimewebSPLroot@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 Установка сервиса Сначала клонируем репозиторий: git clone https://github.com/mandatoryprogrammer/xsshunter
cd xsshunter На примере TimewebSPLroot@372526-twosa:~# git clone https://github.com/mandatoryprogrammer/xsshunter
root@372526-twosa:~# cd xsshunter Обратите внимание: требуется Python2! Репозиторий не поддерживает Python3. Чтобы запустить скрипт конфигурации, нам нужно добавить дополнительную зависимость: # install yaml support for python
sudo apt-get install pyyaml На примере TimewebSPLroot@372526-twosa:~/xsshunter# apt install python-pip
root@372526-twosa:~/xsshunter# pip install pyyaml Благодарим пользователя xYantix за предоставление рабочего решения в этом pull-request. Настройка сервиса Отлично, приступим! Мы готовы к запуску скрипта настройки. # generate yaml config file
./generate_config.py На примере TimewebSPLroot@372526-twosa:~/xsshunter# ./generate_config.py
Покажу процесс шаг за шагом. Чтобы увидеть пример вывода, см. пример ниже. Я добавил числа для удобной навигации. В остальном все должно выглядеть одинаково. 1. Введите ваше доменное имя. Я использовал mydomain.com в качестве примера. На примере TimewebSPLУ нас это 372526-twosa.tmweb.ru.
2. Введите свой ключ API Mailgun, который вы нашли и сохранили ранее. 3. Введите свое доменное имя Mailgun, которое вы также записали ранее. (То, что начинается с sandbox). 4. Я считаю, это может быть что_угодно@[имя домена Mailgun], но я придерживался стандартного именования от mailgun, так как имя здесь не имеет особого значения. Я предлагаю использовать: mailgun@[имя домена Mailgun]. Не забудьте заменить [имя домена Mailgun] на свое. 5. Это необходимо для того, чтобы люди сообщали о предполагаемом злоупотреблении инструментом. Здесь должен быть указан ваш реальный и актуальный email. Например: john.doe@gmail.com. 6. Если вы повторили все шаги из этой статьи, просто введите xsshunter. 7. Введите пароль, который вы выбрали при создании базы данных. Указано выше, как EXAMPLE_PASSWORD. Замените текст [YOUR_REALLY_SECURE_PASSWORD] вашим паролем EXAMPLE_PASSWORD. 8. Как и в шаге №6, если вы следовали этому руководству, просто введите xsshunter. Оп! Настройка завершена! Если вам когда-нибудь понадобится изменить эти значения, вы можете отредактировать их прямо в файле 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! На примере TimewebSPLSetup 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 Теперь у вас должно быть 2 новых файла в папке xsshunter:
Конфигурация NGINX Изменим расположение сертификата SSL Если вы так же, как и я, используете Let's Encrypt, вам необходимо изменить файл default. Чтобы конфигурация работала с настройками Let's Encrypt по умолчанию, мы должны закомментировать все вхождения: /etc/nginx/ssl/mydomain.com.crt; # Wildcard SSL certificate /etc/nginx/ssl/mydomain.com.key; # Wildcard SSL key и заменить на 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 Примечания: 1. Замените mydomain.com на свое доменное имя! 2. Всё после символа # является комментариями. Вы можете удалить их, если хотите. Теперь ваш файл default должен выглядеть так: 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; } } На примере TimewebSPLserver {
# 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; } } Применим конфигурацию NGINX Следующий шаг — это переместить файл в папку nginx. Считается хорошей практикой иметь файлы конфигурации в папке .../sites-available, а затем создавать символические ссылки на конфигурации, которые вы используете, на .../sites-enabled. Мы поступим именно так. Я называю файл конфигурации так, чтобы из названия было понятно, к какому сервису он принадлежит. Ниже описано, как это сделать! # 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 На примере TimewebSPLroot@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 Если вы никогда раньше не запускали nginx, последняя команда должна быть следующей: sudo systemctl start nginx Установка сервера API Во-первых, серверу API также нужны определенные зависимости. В руководстве сказано, что нужно выполнить следующую команду: sudo apt-get install python-virtualenv python-dev libpq-dev libffi-dev На примере TimewebSPLroot@372526-twosa:~/xsshunter# apt-get install python-virtualenv python-dev libpq-dev libffi-dev
Стоит добавить, что возможно python-virtualenv придется проинсталлировать посредством pip.
Попробуйте повторить! К сожалению, у меня не получилось запустить команду virtualenv, поэтому я установил сервер API с помощью pip install virtualenv Проблема решена, я смог продолжить! Перейдем в нужную директорию. Оказавшись в нужном каталоге, необходимо создать виртуальную среду. Вот как это сделать: # 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 Убедитесь, что вы изменили MY/EXECUTABLE/PATH в последней команде на то, что было на выходе команды which python2. Для меня это: /usr/bin/python2. После того, как мы создали виртуальную среду, активируйте ее с помощью следующей команды. Вы должны заметить изменение в вашей командной строке. # activate environment
. env/bin/activate На примере TimewebSPLroot@372526-twosa:~/xsshunter/api# . env/bin/activate
(env) root@372526-twosa:~/xsshunter/api# ls apiserver.py env logs models probe.js requirements.txt templates Наблюдаются также проблемы с зависимостями, поскольку репозиторий активно не поддерживается. Таким образом, мы должны внести следующие изменения в файл requirements.txt: 1. psycopg2 == 2.6.1 => psycopg2 == 2.7.3.1 2. bcrypt == 2.0.0 => bcrypt == 3.1.7 Используйте любимый текстовый редактор для этого. Я пользуюсь VIM. Как только это будет сделано, пора установить все зависимости и запустить сервер API, чтобы убедиться, что все работает должным образом. Давайте попробуем! # install requirements
pip install -r requirements.txt # run the API server ./apiserver.py На примере TimewebSPL(env) root@372526-twosa:~/xsshunter/api# pip install -r requirements.txt
(env) root@372526-twosa:~/xsshunter/api# ./apiserver.py Команда установки должна вывести данные. Api-сервер не должен ничего выводить. Отсутствие вывода — хорошие новости! Мы хотим внести еще одно изменение, прежде чем закончить настройку сервера api. Первоначально он прослушивает интерфейс 0.0.0.0, но мы проксируем через NGINX. Это означает, что в этом нет смысла. Мы настроим сервер на прослушивание на localhost. Это позволит избежать путаницы и проблем. Используя текстовый редактор, измените строку 684 в apiserver.py с app.listen( 8888 ) на app.listen( 8888, «localhost» ). Спасибо swarley7 за то, что поделился решением в этом pull request. Наконец-то: Ошибка, из-за которой загрузки не работают должным образом, если папка /uploads не существует. Этим поделился sampsonc в этом pull request. Давайте создадим папку и продолжим! # create uploads folder
mkdir xsshunter/api/uploads Установка GUI-сервера Этот процесс очень похож на процесс на сервере api, только проще. Переходим в папку gui, создаем виртуальную среду, активируем ее и устанавливаем зависимости. # 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 На примере TimewebSPLroot@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 Опять же, как и при установке API-сервера: Убедитесь, что вы изменили MY/EXECUTABLE/PATH в последней команде на то, что было на выходе команды which python2. Для меня это: /usr/bin/python2. Здесь также отсутствие вывода при запуске ./guiserver — это хорошая новость. Также, как и в случае с сервером API, мы хотим проксировать все соединения через NGINX, поэтому серверу не нужно прослушивать интерфейс 0.0.0.0. Используя текстовый редактор, измените строку 70 в guiserver.py с app.listen( 1234 ) на app.listen( 1234, «localhost» ). Последние штрихи Первый шаг — запустить оба сервера. В оригинальном посте в блоге предлагается использовать tmux. Он не идеален для продакшена, но мы хакеры, так что давайте все равно сделаем это! Если вам нужен более стабильный сервис, я оставлю это вам в качестве упражнения. Вот как запустить это все с помощью tmux. Если вам нужна помощь, здесь есть отличная шпаргалка! # 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 И последнее! Откройте свой домен и посмотрите, приветствует ли вас страница xsshunter! Она должен выглядеть так же, как первая страница сайта xsshunter.com. Получилось? Поздравляю! Время разливать пиво по бокалам! Проверим работоспособностьSPLПереходим на страницу (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.
Если вы еще не смотрели сериал «Красавцы» (Entourage), можно начать прямо сейчас! Заключение Мне не нравится запускать что-то как root либо обычный пользователь, поэтому, чтобы запустить это как www-data, я сделал следующий скрипт, чтобы сделать его немного проще. Замените apiserver.py на guiserver.py, чтобы иметь по одному скрипту для каждого сервера. Я буду рад, если вы будете использовать этот прием. Shell-скипт для использования виртуального окружения и запуска сервера API: #!/bin/sh
. env/bin/activate && python apiserver.py Запуск скрипта как www-data из соображений безопасности: # execute script above as www-data user
sudo -u www-data ./run.sh Готово! Спасибо за внимание. Надеюсь, было полезно! =========== Источник: habr.com =========== =========== Автор оригинала: Robin Lunde ===========Похожие новости:
Блог компании Timeweb ), #_informatsionnaja_bezopasnost ( Информационная безопасность ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:35
Часовой пояс: UTC + 5