天天看點

一款實用綜合掃描工具,Vxscan 介紹

Vxscan是用python3寫的綜合掃描工具,主要用來敏感檔案探測(目錄掃描與js洩露),WAF/CDN識别,端口掃描,指紋/服務識别,作業系統識别,弱密碼探測,POC掃描,SQL注入,繞過CDN,查詢旁站等功能。

安裝說明

要求Python版本大于3.6:

git clone https://github.com/al0ne/Vxscan 

cd Vxscan 

apt install libpq-dev nmap 

wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
           

解壓後将裡面的GeoLite2-City.mmdb放到vxscan/db/GeoLite2-City.mmdb。

pip3 install -r requirements.txt
           

主要功能

使用多線程掃描目錄;

使用笛卡爾乘積方式生成字典清單,支援自定義字典清單;

随機的UserAgent、XFF、X-Real-IP;

存活探測,對掃描目标先通過socket.gethostbyname判斷解析在通過ping判斷存活;

自定義404頁面識别,通路随機頁面然後通過difflib對比相似度,識别自定義302跳轉;

掃描目錄時先探測http端口,将一個主機多個http端口加入到掃描目标中;

過濾無效Content-Type,無效狀态嗎;

WAF/CDN探測,內建100+常見WAF與CDN指紋;

使用socket發包探測常見端口,發送不同payload探測端口服務指紋;

遇到全端口開放的主機(portspoof)自動跳過;

調用wappalyzer.json與WebEye判斷網站指紋,內建1200+常見指紋;

檢測到CDN或者WAF網站自動跳過;

調用nmap識别作業系統指紋;

根據端口開放調用弱密碼探測腳本(FTP/SSH/TELNET/Mysql/MSSQL…);

根據指紋識别或者端口調用POC掃描,或将IP開放的WEB端口上打一遍;

分析js檔案裡面的敏感資産資訊(域名、郵箱、apikey、password等);

抓取網站連接配接,測試SQL注入,LFI等;

調用一些線上接口擷取資訊,通過VT pdns判斷真實IP,通過www.yougetsignal.com、api.hackertarget.co查詢網站旁站。

使用方式

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  
  -t THREADS, --threads THREADS  
                        Set scan thread, default 150  
  -e EXT, --ext EXT     Set scan suffix, -e php,asp  
  -w WORD, --word WORD  Read the dict from the file
           

1.掃描一個網站

python3 vxscan.py -u http://www.xxx.com/ 
           

2.從檔案清單裡掃描網站

python3 vxscan.py -f hosts.txt 
           

3.掃描一個C段

python3 vxscan.py -i 127.0.0.0/24 
           

4.設定線程100,組合隻用php字尾,使用自定義字典

python3 vxscan.py -u http://www.xxx.com -e php -t 100 -w ../dict.txt 
           

目錄結構

/
    ├─Vxscan.py  主檔案
    ├─db
    │  ├─apps.json  Web指紋資訊
    │  ├─apps.txt  Web指紋資訊(WEBEYE)
    │  ├─password.txt  密碼字典
    ├─report    報告目錄
    ├─lib       
    │  ├─common.py    判斷CDN、端口掃描、POC掃描等
    │  ├─color.py   終端顔色輸出
    │  ├─active.py   判斷dns解析與ping ip存活
    │  ├─save_html.py     生成html報表
    │  ├─crack.py     測試弱密碼
    │  ├─waf.py     waf規則
    │  ├─osdetect.py   作業系統版本識别
    │  ├─random_header.py   自定義header頭
    │  ├─scan_port.py        端口掃描腳本
    │  ├─jsparse.py      抓取網站js連接配接,分析ip位址,連結,Email等
    │  ├─settings.py      設定腳本
    │  ├─pyh.py     生成html
    │  ├─wappalyzer.py    指紋識别腳本
    │  ├─SQLi.py    抓取網站連接配接,測試SQL注入腳本
    ├─script  
    │  ├─Poc.py         Poc腳本
    │  ├─......
    ├─requirements.txt
    ├─logo.jpg
    ├─error.log
配置檔案
修改lib/settings.py

# 全局逾時時間
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'
]

# 是否跳過目錄掃描
SKIP = True

# 儲存的檔案名
html_name = time.strftime("%Y%m%d%H%M%S", time.localtime())

# shodan
shodan_api = ''

# VT接口
virustotal_api = 'xxxxxxxxxxxxxxxxxxxxxxxxxx'

# 添加Cookie
COOKIE = {'Cookie': 'Vxscan 1.0'}

# 設定密碼
PASS = ['password']
           

POC編寫

案例1 根據端口開放或者指紋識别結果來調用POC

在script目錄下建立python檔案,定義好check函數,傳進來的參數主要是ip位址、端口清單、指紋識别清單,然後将結果return回去:

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 Probe
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 = Probe(ip, ports)
    for i in probe:
        out = get_title(i)
        if out:
            result.append(out)
    return result
           

案例3 根據端口開放調用弱密碼探測:

from lib.verify import verify, GetHosts
import concurrent.futures
import pymysql

vuln = ['mysql', '3306']
user = ['root']
result = ''


def mysqlBruteforce(task):
    global result
    address, username, password = task.split('|')
    try:
        db = pymysql.connect(address, username, password, "mysql")
        result = 'Mysql User: ' + username + ' Pass: ' + password
except:
        pass


def check(ip, ports, apps):
    global result
if verify(vuln, ports, apps):
        # GetHosts會根據ip和使用者名還有lib/settings.py裡設定的密碼生成一個要爆破的清單, 
        hosts = GetHosts(ip, user)
        with concurrent.futures.ThreadPoolExecutor(max_workers=40) as executor:
            executor.map(mysqlBruteforce, hosts)
    return result
           

http://www.45zq.cn/portal/article/index/id/145.html