
python3 написанный комплексный инструмент сканирования, в основном используемый для проверки выживаемости, обнаружения конфиденциальных файлов (сканирование каталогов / утечка интерфейсов через JS / утечка комментариев в HTML), идентификация WAF/CDN, сканирование портов, идентификация отпечатков/сервисов, идентификация операционной системы, POC-сканирование, SQL-инъекции, обход CDN, запрос соседних сайтов и другие функции. В основном используется для самостоятельного тестирования заказчиком или авторизованного тестирования подрядчиком. Не используйте для разрушительных действий.
English | 简体中文
Python3 комплексный инструмент сканирования, в основном используемый для обнаружения чувствительных файлов (сканирование каталогов и утечка интерфейсов через JS), идентификация WAF/CDN, сканирование портов, идентификация отпечатков/сервисов, идентификация операционной системы, проверка слабых паролей, POC-сканирование, SQL-инъекции, обход CDN, проверка соседних сайтов.
2019.8.19
Добавлен запрет на сканирование доменов gov.cn и edu.cn – программа обнаружит и немедленно завершит работу.
Изменён интерфейс вывода: теперь в формате время + плагин + домен + результат.
Удалён старый плагин SQL-инъекции, добавлен плагин проверки слабых паролей (Mysql, Postgresql, SSH и т.д.).
Объединена база отпечатков Fofa с WEBEYE. Правил отпечатков 2000+.
2019.7.19
Добавлен глобальный прокси socks5.
Упакованы запросы.
Оптимизирована структура каталогов.
Удалён старый HTML-отчёт, теперь используется HTML-отчёт, извлечённый из Perun.
Удалён вывод результатов в JSON, теперь данные сохраняются в базу данных SQLite3; при добавлении производится дедупликация – если цель уже есть в файле .db, она пропускается.
Добавлен плагин для обнаружения утечек информации, таких как phpinfo, листьев.
В PDNS добавлен интерфейс viewdns.info.
2019.7.1
Отображение хостов, у которых пинг не прошёл.
Команда -u может принимать несколько целей, разделённых запятыми.
Исправлена ошибка в распознавании отпечатков.
2019.6.18
Исправлена проблема с неправильным распознаванием отпечатков для сайтов IIS, изменён apps.json.
Удалены некоторые сторонние библиотеки и скрипты, склонные к ошибкам.
Если сканирование завершается сразу – это потому, что программа сначала проверяет DNS-резолвинг и пинг.
При первом использовании Vxscan fake_useragent загружает список UA с https://fake-useragent.herokuapp.com/browsers/0.1.11 — может возникнуть ошибка тайм-аута загрузки.
Python версии > 3.6
requests
pyfiglet
fake-useragent
beautifulsoup4
tldextract
python-nmap
geoip2
lxml
pymongo
virustotal_python
dnspython
pysocks
wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
После распаковки поместите GeoLite2-City.mmdb в vxscan/data/GeoLite2-City.mmdb
wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-ASN.tar.gz
После распаковки поместите GeoLite2-ASN.mmdb в vxscan/data/GeoLite2-ASN.mmdb
pip3 install -r requirements.txt
python3 Vxscan.py -h
optional arguments:
-h, --help показать это справочное сообщение и выйти
-u URL, --url URL Начать сканирование этого URL -u xxx.com
-i INET, --inet INET cidr, напр. 1.1.1.1 или 1.1.1.0/24
-f FILE, --file FILE читать URL из файла
1. Сканирование одного сайта
python3 vxscan.py -u http://www.xxx.com/
2. Сканирование сайтов из файла со списком
python3 vxscan.py -f hosts.txt
3. cidr, напр. 127.0.0.0/24
python3 vxscan.py -i 127.0.0.0/24
├─Vxscan.py мастер-файл
├─data
│ ├─apps.json Информация об отпечатках веб-сайтов
│ ├─apps.txt Информация об отпечатках веб-сайтов (WEBEYE)
│ ├─GeoLite2-ASN.mmdb geoip
│ ├─GeoLite2-City.mmdb asn
├─doc Для хранения изображений и документации
├─report Содержимое, связанное с HTML-отчётами
├─lib
│ ├─common.py Определение CDN, сканирование портов, POC-сканирование и т.д.
│ ├─color.py Цветной вывод в терминал
│ ├─cli_output.py Вывод в терминал
│ ├─active.py Определение DNS-резолвинга и пинга хоста
│ ├─save_html.py Генерация HTML-отчётов
│ ├─waf.py Правила WAF
│ ├─options.py Настройки опций
│ ├─iscdn.py Определение, является ли IP CDN на основе сегмента IP и диапазона ASN
│ ├─osdetect.py Определение версии ОС
│ ├─random_header.py Настраиваемые заголовки
│ ├─settings.py Скрипт настроек
│ ├─vuln.py Пакетный вызов POC-сканирования
│ ├─url.py Дедупликация полученных ссылок
│ ├─verify.py Скрипт, предоставляющий интерфейс верификации
│ ├─sqldb.py Всё, связанное с SQLite3, здесь
│ ├─Requests.py Упакованная библиотека requests с дополнительными настройками
├─script
│ ├─Poc.py Poc-скрипты
│ ├─......
├─Plugins
│ ├─ActiveReconnaissance
│ ├─active.py Определение доступности хоста и проверка DNS-резолвинга
│ ├─check_waf.py Определение WAF сайта
│ ├─crawk.py Обход ссылок сайта и тестирование
│ ├─osdetect.py Определение операционной системы
│ ├─InformationGathering
│ ├─geoip.py Поиск местоположения
│ ├─js_leaks.py Утечка информации из JS
│ ├─PassiveReconnaissance
│ ├─ip_history.py PDNS-интерфейс
│ ├─reverse_domain.py Поиск соседних сайтов
│ ├─virustotal.py VT Pdns-запрос
│ ├─wappalyzer.py Пассивное распознавание CMS-отпечатков
│ ├─Scanning
│ ├─dir_scan Сканирование каталогов
│ ├─port_scan Сканирование портов
├─requirements.txt
├─report.py Генерация HTML-отчётов
├─logo.jpg
├─error.log
# coding=utf-8
# глобальный таймаут
TIMEOUT = 5
# Статусы, которые нужно исключить
BLOCK_CODE = [
301, 403, 308, 404, 405, 406, 408, 411, 417, 429, 493, 502, 503, 504, 999
]
# Количество потоков сканирования
THREADS = 100
# Типы контента, которые нужно исключить
BLOCK_CONTYPE = [
'image/jpeg', 'image/gif', 'image/png', 'application/javascript',
'application/x-javascript', 'text/css', 'application/x-shockwave-flash',
'text/javascript', 'image/x-icon'
]
# Пропускать ли сканирование каталогов
SCANDIR = True
# Запускать ли POC-плагины
POC = True
# Пропускать, если уже есть в базе результатов
CHECK_DB = False
# Страницы 404
PAGE_404 = [
'page_404"', "404.png", '找不到页面', '页面找不到', "Not Found", "访问的页面不存在",
"page does't exist", 'notice_404', '404 not found'
]
# ping
PING = True
# прокси socks5
# SOCKS5 = ('127.0.0.1', 1080)
SOCKS5 = ()
# shodan
SHODAN_API = ''
# VT
VIRUSTOTAL_API = ''
# cookie
COOKIE = {'Cookie': 'test'}
1. Вызов POC на основе открытых портов или результатов распознавания отпечатков
Создайте новый Python-файл в каталоге script, определите функцию check. Параметры: IP-адрес, список портов, список отпечатков. Функция возвращает результат:
import pymongo
from lib.verify import verify
timeout = 2
vuln = ['27017', 'Mongodb']
def check(ip, ports, apps):
# verify используется для проверки наличия в списке сканирования результатов, связанных с Mongodb. Если порт не открыт, сканирование не выполняется.
if verify(vuln, ports, apps):
try:
conn = pymongo.MongoClient(host=ip, port=27017, serverSelectionTimeoutMS=timeout)
database_list = conn.list_database_names()
if not database_list:
conn.close()
return
conn.close()
return '27017 MongoDB Unauthorized Access'
except Exception as e:
pass
2. Перебор по каждому HTTP-порту, открытому на целевом IP
Генерация URL для сканирования на основе переданного списка сервисов портов, затем посещение каждого веб-порта. Следующий скрипт получает заголовок каждого HTTP-порта IP.
from lib.verify import get_list
from lib.random_header import HEADERS
from lxml import etree
import requests
def get_title(url):
try:
r = requests.get(url, headers=HEADERS, timeout=3, verify=False)
html = etree.HTML(r.text)
title = html.xpath('//title/text()')
return url + ' | ' + title[0]
except:
pass
def check(ip, ports, apps):
result = []
probe = get_list(ip, ports)
for i in probe:
out = get_title(i)
if out:
result.append(out)
return result
Как добавить возможности распознавания отпечатков
Измените содержимое файла data/apps.txt
1. Сопоставление по HTTP-заголовку
Cacti|headers|Set-Cookie|Cacti=
2. Сопоставление по телу HTTP-ответа
ASP|index|index|<a[^>]?href=('|")[^http][^>]?.asp(?|#|\1)
3. Разделение заголовков для поиска по k или v
ThinkSNS|match|match|T3_lang
360
360wzws
Anquanbao
Armor
BaiduYunjiasu
AWS WAF
AdNovum
Airee CDN
Art of Defence HyperGuard
ArvanCloud
Barracuda NG
Beluga CDN
BinarySEC
BlockDoS
Bluedon IST
CacheFly CDN
ChinaCache CDN
Cisco ACE XML Gateway
CloudFlare CDN
Cloudfront CDN
Comodo
CompState
DenyALL WAF
DenyAll
Distil Firewall
DoSArrest Internet Security
F5 BIG-IP APM
F5 BIG-IP ASM
F5-TrafficShield
Fastly CDN
FortiWeb
FortiWeb Firewall
GoDaddy
GreyWizard Firewall
HuaweiCloudWAF
HyperGuard Firewall
IBM DataPower
ISAServer
Immunify360
Imperva SecureSphere
Incapsula CDN
Jiasule
KONA
KeyCDN
ModSecurity
NGENIX CDN
NSFOCUS
Naxsi
NetContinuum
NetContinuum WAF
Neusoft SEnginx
Newdefend
Palo Alto Firewall
PerimeterX Firewall
PowerCDN
Profense
Qiniu CDN
Reblaze Firewall
SDWAF
Safe3
Safedog
SiteLock TrueShield
SonicWALL
SonicWall
Sophos UTM Firewall
Stingray
Sucuri
Teros WAF
Usp-Sec
Varnish
Wallarm
WatchGuard
WebKnight
West263CDN
Yundun
Yunsuo
ZenEdge Firewall
aesecure
aliyun
azion CDN
cloudflare CDN
dotDefender
limelight CDN
maxcdn CDN
mod_security
yunsuo
Ниже приведены результаты тестирования сайта сканером AWVS

Распознавание отпечатков в основном использует Wappalyzer и WebEye:
https://github.com/b4ubles/python3-Wappalyzer
https://github.com/zerokeeper/WebEye
Poc основаны на:
BBscan scanner https://github.com/lijiejie/BBScan
POC-T https://github.com/Xyntax/POC-T/tree/2.0/script
Perun https://github.com/WyAtu/Perun
Сканирование портов и определение сервисов основано на:
https://raw.githubusercontent.com/AnthraX1/InsightScan/master/scanner.py
Регулярные выражения для извлечения чувствительной информации из JS:
https://github.com/nsonaniya2010/SubDomainizer
Правила определения WAF основаны на waf00f и whatwaf:
https://github.com/EnableSecurity/wafw00f
https://github.com/Ekultek/WhatWaf
HTML-отчёт использует:
https://github.com/WyAtu/Perun
https://github.com/ly1102