
python3で書かれた総合スキャンツール。主に生存確認、機密ファイル検出(ディレクトリスキャン/JS漏洩インターフェース/HTMLコメント漏洩)、WAF/CDN識別、ポートスキャン、指紋/サービス識別、OS識別、POCスキャン、SQLインジェクション、CDN回避、周辺サイトの検索などの機能を備えています。主に自社テストや許可を得た第三者テストを目的としており、破壊行為には使用しないでください。
English | 简体中文
Python3 による総合スキャンツール。主に機密ファイル検出(ディレクトリスキャン、JSリークインターフェース)、WAF/CDN識別、ポートスキャン、フィンガープリント/サービス識別、OS識別、弱パスワード検出、POCスキャン、SQLインジェクション、CDNバイパス、サブドメイン調査に使用します。
2019.8.19
gov.cn および edu.cn ドメイン名のスキャンを禁止する機能を追加。プログラムが検出すると即座に終了します。
プログラムの出力インターフェースを変更。「時間 + プラグイン + ドメイン名 + 結果」形式に。
元のSQLインジェクションプラグインを削除し、弱パスワード検出プラグイン(Mysql、Postgresql、SSH 等)を追加。
Fofaのフィンガープリント識別ライブラリとWEBEYEを統合。フィンガープリントルール数 2000+。
2019.7.19
socks5 グローバルプロキシを追加。
requests をパッケージ化。
ディレクトリ構成を最適化。
元の HTML レポートを削除し、Perun から抽出した HTML レポートを使用。
JSON 結果出力を削除し、sqllite3 データベースに保存するように調整。重複排除してデータベースに格納。スキャン中にターゲットホストが db ファイルに既に存在する場合はスキップ。
phpinfo、一般的な情報漏洩スキャンプラグインを追加。
Pdns に viewdns.info のインターフェースを追加。
2019.7.1
ping 検出に失敗したホストを表示。
-u コマンドで複数のターゲットをカンマ区切りで追加可能に。
フィンガープリント認識のバグを修正。
2019.6.18
iis サイトのフィンガープリント認識エラーを修正。apps.json を修正。
エラーが発生しやすいサードパーティライブラリとスクリプトを一部削除。
スキャンがすぐに終了してしまう場合は、プログラムが最初に DNS 解決と ping 操作を行うためです。
初回 Vxscan 使用時、fake_useragent が https://fake-useragent.herokuapp.com/browsers/0.1.11 から UA リストをロードするため、タイムアウトエラーが発生する可能性があります。
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 show this help message and exit
-u URL, --url URL Start scanning this url -u xxx.com
-i INET, --inet INET cidr eg. 1.1.1.1 or 1.1.1.0/24
-f FILE, --file FILE read the url from the file
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 Webフィンガープリント情報
│ ├─apps.txt Webフィンガープリント情報 (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解決とping IP生存確認
│ ├─save_html.py HTMLレポート生成
│ ├─waf.py WAFルール
│ ├─options.py オプション設定
│ ├─iscdn.py IPセグメントとASN範囲に基づいてIPがCDNかを判定
│ ├─osdetect.py OSバージョン識別
│ ├─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 OS識別
│ ├─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
# 除外するContent-Type
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
# 結果dbに存在する場合はスキップ
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を呼び出す
script ディレクトリに新しい Python ファイルを作成し、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. ターゲットIPの各HTTPポートに対して走査
渡されたポートサービスのリストに基づいてスキャンするURLを生成し、各Webポートにアクセスします。次のスクリプトはIPの各HTTPポートのタイトルを取得します。
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. Headersを分割して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 スキャナー https://github.com/lijiejie/BBScan
POC-T https://github.com/Xyntax/POC-T/tree/2.0/script
Perun https://github.com/WyAtu/Perun
AnthraX のポートスキャン、サービス判定を参照:
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