
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 글로벌 프록시 추가
requests 패키징
디렉토리 구조 최적화
기존 html 리포트 삭제, Perun에서 추출한 html 리포트 사용
json 결과 출력 제거, sqllite3 데이터베이스에 저장으로 변경, 저장 시 중복 제거, 스캔 중 대상 호스트가 db 파일에 이미 존재하면 건너뜀
phpinfo, leaves 등 일반적인 정보 누수 스캔 플러그인 추가
Pdns에 viewdns.info 인터페이스 추가
2019.7.1
핑 탐지에 실패한 호스트 표시
-u 명령에 여러 대상 추가 가능, 쉼표로 구분
핑거프린트 인식 오류 수정
2019.6.18
iis 웹사이트 핑거프린트 인식 오류 문제 수정, apps.json 수정
오류가 발생하기 쉬운 일부 서드파티 라이브러리 및 스크립트 제거
스캔 완료 시 깜빡이는 현상은 프로그램이 먼저 DNS 파싱 및 핑 작업을 수행하기 때문
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 도움말 메시지 표시 및 종료
-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 해석 및 핑 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 Crawl 웹사이트 링크 크롤링 및 테스트
│ ├─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
# 제외할 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을 생성한 후 각 웹 포트에서 접속합니다. 다음 스크립트는 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. 헤더를 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
Antherax의 포트 스캔, 서비스 판단 참고:
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