
用于将 Aircrack-ng 捕获文件解析到 SQLite 数据库并提取有用信息的脚本,例如握手包(以 22000 hashcat 格式)、企业网络 (MGT) 身份信息和 EAP-MD5 挑战/响应对、X.509 证书以及每个网络的 RSN/WPA 安全配置、AP 宣告的 802.11r/k/v、多 BSSID 和信道切换能力、AP、客户端及其探测请求之间的有趣关系、WPS 信息,以及所有看到的 AP 的全局视图。
Certificate 表中。AP 表中。hashcat -m 4800),并存储在 EAPMD5 表中。Probe 表中)识别客户端指纹。SummaryAP 视图),按 ESSID 和加密方式对 AP 进行分组,显示 AP 和客户端数量、WPA 版本和 PMF 状态以及每组中的每个制造商,以便快速了解附近网络的安全状况(并发现运行混合/降级安全的 SSID)。AP 表中记录每个 AP 的 Wi-Fi 保护设置 (WPS) 配置。mfpc(支持)和 mfpr(必需)标志,以及派生的 pmf 状态(必需、(可选时)或 ),存储在 表中。docker pull r4ulcl/wifi_db
### 手动安装
#### 基于 Debian 的系统(Ubuntu、Kali、Parrot 等)
依赖项:
- python3
- python3-pip
- tshark
- hcxtools``` bash
sudo apt install tshark
sudo apt install python3 python3-pip
sudo apt install pkg-config libcurl4-openssl-dev libssl-dev zlib1g-dev make gcc
git clone https://github.com/ZerBea/hcxtools.git
cd hcxtools
make
sudo make install
cd ..
安装(使用虚拟环境)``` bash
git clone https://github.com/r4ulcl/wifi_db cd wifi_db
sudo apt update ; sudo apt install python3-venv python3 -m venv wifi_db_env source wifi_db_env/bin/activate
pip3 install -r requirements.txt
> 必须在每个新的 shell 中激活虚拟环境(`source wifi_db_env/bin/activate`)
> 才能运行 `wifi_db.py`。使用 `deactivate` 退出虚拟环境。
#### Arch
依赖项:
- python3
- python3-pip
- tshark
- hcxtools``` bash
sudo pacman -S wireshark-qt
sudo pacman -S python-pip python
git clone https://github.com/ZerBea/hcxtools.git
cd hcxtools
make
sudo make install
cd ..
安装(使用虚拟环境)``` bash
git clone https://github.com/r4ulcl/wifi_db cd wifi_db
python3 -m venv wifi_db_env source wifi_db_env/bin/activate
pip3 install -r requirements.txt
> 虚拟环境必须在每个新 shell 中激活(`source wifi_db_env/bin/activate`),然后才能运行 `wifi_db.py`。使用 `deactivate` 退出。
## 用法
### 在 [WiFiChallenge Lab](https://lab.wifichallenge.com/) 中的使用示例
- https://r4ulcl.com/posts/wifi_db-in-wifichallenge-lab/
### 使用 airodump-ng 扫描
运行 airodump-ng 并使用 -w 保存输出:``` bash
sudo airodump-ng wlan0mon -w scan --manufacturer --wps --gpsd
#Folder with captures CAPTURESFOLDER=/home/user/wifi
touch db.SQLITE chmod a+rw db.SQLITE
docker run -t -v $PWD/db.SQLITE:/app/db.SQLITE -v $CAPTURESFOLDER:/captures/ r4ulcl/wifi_db
- `-v $PWD/db.SQLITE:/app/db.SQLITE`: 将输出保存到当前文件夹的 db.SQLITE 文件中
- `-v $CAPTURESFOLDER:/captures/`: 将包含抓包文件的文件夹共享到 Docker

### 使用手动安装创建 SQLite 数据库
创建抓包后,我们可以通过导入该抓包来创建数据库。为此,请提供不带格式的抓包名称。记得先激活虚拟环境(`source wifi_db_env/bin/activate`)。``` bash
python3 wifi_db.py scan-01
如果存在多个抓包,我们可以直接加载它们所在的文件夹。并且使用 -d 可以重命名输出数据库。``` bash
python3 wifi_db.py -d database.sqlite scan-folder

### 打开数据库
数据库可使用以下工具打开:
- [sqlitebrowser](https://sqlitebrowser.org/)

下面是一个 ProbeClientsConnected 表的示例。

### 参数``` bash
usage: wifi_db.py [-h] [-v] [--debug] [-o] [-t LAT] [-n LON] [--source [{aircrack-ng,kismet,wigle}]] [-d DATABASE] capture [capture ...]
positional arguments:
capture capture folder or file with extensions .csv, .kismet.csv, .kismet.netxml, or .log.csv. If no extension is provided, all types will
be added. This option supports the use of wildcards (*) to select multiple files or folders.
options:
-h, --help show this help message and exit
-v, --verbose increase output verbosity
--debug increase output verbosity to debug
-o, --obfuscated Obfuscate MAC and BSSID with AA:BB:CC:XX:XX:XX-defghi (WARNING: replace all database)
-t LAT, --lat LAT insert a fake lat in the new elements
-n LON, --lon LON insert a fake lon in the new elements
--source [{aircrack-ng,kismet,wigle}]
source from capture data (default: aircrack-ng)
-d DATABASE, --database DATABASE
output database, if exist append to the given database (default name: db.SQLITE)
TODO
TODO
wifi_db 包含多个表,用于存储 airodump-ng 捕获的无线网络流量相关信息。具体表结构如下:
AP:该表存储捕获期间检测到的接入点(AP)的信息,包括其 MAC 地址 (bssid)、网络名称 (ssid)、网络是否隐藏 (cloaked)、制造商 (manuf)、信道 (channel)、频率 (frequency)、运营商 (carrier)、加密类型 (encryption) 以及从此 AP 接收的总数据包数 (packetsTotal)。它还保存管理帧保护能力/要求标志 (mfpc, mfpr) 以及从信标中解析出的 RSN/WPA 安全细节,这些是 1:1 的 AP 属性,因此直接存储在 AP 行中:协商的 wpa_version(WPA2、WPA3、WPA2/WPA3 过渡、OWE)、认证和密钥管理套件 (akm_suites,例如 PSK、SAE、802.1X)、成对密码 (pairwise_ciphers) 和组密码 ()(CCMP-128、GCMP-256、TKIP 等)、当存在 802.1X AKM 时设置的 标志、管理帧保护状态 (:必需、支持或禁用)、原始 位域及其人类可读解码 (,例如 → )。同样,它也保存 Wi-Fi 保护设置 (WPS) 配置,这是另一个 1:1 的 AP 属性:通告的网络名称 ()、WPS 版本 ()、设备名称 ()、型号名称 ()、型号编号 ()、配置方法 () 及其人类可读解码 (,例如 → ),以及键盘配置方法 ()。最后,它存储从信标和探测响应中解析出的 802.11 管理能力:802.11r 快速 BSS 过渡标志 () 及其 、802.11k 无线资源测量标志 ()、802.11v BSS 过渡管理标志 ()、多 BSSID 通告 () 及其 、信道切换通告标志 () 及其目标信道 (),以及 ,当网络名称是从探测响应/(重)关联请求而非信标中恢复时设置。该表使用 MAC 地址作为主键。
ProbeClients:该视图选择探测的 MAC 地址、客户端设备的制造商和类型、客户端传输的总数据包数,以及探测的 SSID。它根据 MAC 地址连接 Probe 和 Client 表,并按 SSID 排序结果。
ConnectedAP:该视图选择已连接接入点的 BSSID、接入点的 SSID、已连接客户端设备的 MAC 地址以及客户端设备的制造商。它根据 BSSID 和 MAC 地址分别连接 Connected、AP 和 Client 表,并按 BSSID 排序结果。
ProbeClientsConnected:该视图选择已连接接入点的 BSSID 和 SSID、探测的 MAC 地址、客户端设备的制造商和类型、客户端传输的总数据包数,以及探测的 SSID。它根据探测的 MAC 地址连接 Probe、Client 和 ConnectedAP 表,并过滤掉探测到与其所连接 SSID 相同的探测。结果按探测的 SSID 排序。
HandshakeAP:该视图选择接入点的 BSSID、接入点的 SSID、执行握手的客户端设备的 MAC 地址、客户端设备的制造商、包含握手的文件以及 hashcat 输出。它根据 BSSID 和 MAC 地址分别连接 Handshake、 和 表,并按 BSSID 排序结果。
Aircrack-ng
全部放在一个文件中(以及分别存放)
Kismet
Wigle
安装
解析文件夹中的所有文件 -f --folder
修复扩展错误、波浪号等(已在 aircrack-ng 1.6 中修复)
支持 bash 多文件:"capture*-1*"
从数据库中删除客户端或 AP 的脚本 (mac)。- (白名单)
白名单功能,不将 MAC 添加到数据库(文件 whitelist.txt,添加 MAC,创建数据库)
如有新信息则覆盖(旧 ESSID='',新 ESSID='WIFI')
Handshakes 和 PMKID 表
Hashcat 哈希格式 22000
文件表,若文件存在则跳过(完整路径)
获取 HTTP POST 密码
该程序是以下项目的一部分的延续:https://github.com/T1GR3S/airo-heat
支持禁用APft_80211r,带有 mobility_domain_id)、802.11k 无线资源测量/邻居报告(rrm_80211k)和 802.11v BSS 转换管理(bss_transition_80211v)。mbssid,带有 max_bssid_indicator)和发送信道切换宣告(csa,带有目标信道 csa_new_channel)的接入点。ssid_revealed 标记以此方式学习的名称)。group_cipherenterprisepmfrsn_capabilitiesrsn_capabilities_text0x00c0MFPR, MFPCwlan_ssidwps_versionwps_device_namewps_model_namewps_model_numberwps_config_methodswps_config_methods_text0x218c标签、按钮、键盘、虚拟显示 PINwps_config_methods_keypadft_80211rmobility_domain_idrrm_80211kbss_transition_80211vmbssidmax_bssid_indicatorcsacsa_new_channelssid_revealedClient:该表存储捕获期间检测到的无线客户端的信息,包括其 MAC 地址 (mac)、网络名称 (ssid)、制造商 (manuf)、设备类型 (type)、从此客户端接收的总数据包数 (packetsTotal),以及当 MAC 为本地管理(随机/私有地址)时设置的 randomized 标志。该表使用 MAC 地址作为主键。
SeenClient:该表存储捕获期间观察到的客户端的信息,包括其 MAC 地址 (mac)、检测时间 (time)、用于捕获数据的工具 (tool)、信号强度 (signal_rssi)、纬度 (lat)、经度 (lon)、海拔 (alt)。该表使用 MAC 地址和检测时间的组合作为主键,并与 Client 表存在外键关系。
Connected:该表存储连接到接入点的无线客户端的信息,包括接入点的 MAC 地址 (bssid) 和客户端 (mac)。该表使用接入点和客户端 MAC 地址的组合作为主键,并与 AP 和 Client 表存在外键关系。
SeenAp:该表存储捕获期间观察到的接入点的信息,包括其 MAC 地址 (bssid)、检测时间 (time)、用于捕获数据的工具 (tool)、信号强度 (signal_rssi)、纬度 (lat)、经度 (lon)、海拔 (alt),以及时间戳 (bsstimestamp)。该表使用接入点 MAC 地址和检测时间的组合作为主键,并与 AP 表存在外键关系。
Probe:该表存储客户端发送的探测请求的信息,包括客户端 MAC 地址 (mac)、网络名称 (ssid) 和探测时间 (time)。它还携带探测请求指纹,这是探测的 1:1 属性,因此直接存储在 Probe 行中:客户端在请求中包含的信息元素(标签)的有序列表 (ie_order) 及其哈希 (fingerprint),具有设备型号/操作系统的特征,以及源捕获 file。指纹列仅对从 .cap 文件解析的探测请求填充(广播探测请求的 ssid 为空);从 CSV/netxml 解析的探测请求则保留为空。该表使用客户端 MAC 地址和网络名称的组合作为主键,并与 Client 表存在外键关系。
Handshake:该表存储捕获期间捕获到的握手信息,包括接入点的 MAC 地址 (bssid)、客户端 (mac)、文件名 (file) 以及 hashcat 格式 (hashcat)。该表使用接入点和客户端 MAC 地址以及文件名的组合作为主键,并与 AP 和 Client 表存在外键关系。
Identity:该表表示无线认证中使用的 EAP(可扩展认证协议)身份和方法。bssid 和 mac 字段是分别引用 AP 和 Client 表的外键。其他字段包括认证过程中使用的 identity 和 method,以及 realm(user@realm 身份中 @ 之后的部分,对于 PEAP/TTLS 中常见的匿名外部身份非常有用)。
Certificate:该表存储在企业级(WPA-Enterprise / 802.1X)EAP-TLS/PEAP/TTLS 认证中交换的 X.509 证书,包括接入点发送的服务器证书和客户端发送的客户端证书。每一行通过 bssid 字段(引用 AP 表的外键)和 mac 字段与接入点和客户端关联;cert_type 字段指示证书的归属(AP、Client,或当无法确定 EAP 方向时为 Unknown)。它还保留源捕获 file。该表存储所有相关的证书字段:证书链中的位置 (cert_index)、version、serial_number、signature_algorithm、完整的 issuer 和 subject 可分辨名称、有效期 (not_before、not_after)、分解的 subject (subject_cn、subject_o、subject_ou) 和 issuer (issuer_cn、issuer_o、issuer_ou) 组件、public_key_algorithm、public_key_size、public_key_curve(EC)和 public_key_exponent(RSA),以及 sha1_fingerprint 和 sha256_fingerprint。它还提取最相关的 X.509 扩展:主题备用名称 (subject_alt_names)、key_usage、ext_key_usage、基本约束 (is_ca、path_length)、self_signed 标志、颁发机构和主题密钥标识符 (authority_key_id、subject_key_id)、CRL 和 OCSP 网址 (crl_urls、ocsp_urls),以及证书生命周期(天数,validity_days)。该表使用 bssid 和 sha256_fingerprint 的组合作为主键。
EAPMD5:该表存储从企业级认证中捕获的 EAP-MD5 挑战/响应对。EAP-MD5 以明文形式(在任何 TLS 隧道之外)传输 CHAP 风格的挑战和 MD5 响应,因此可以对这对数据进行嗅探并离线破解 (hashcat -m 4800 或 eapmd5pass) 以恢复密码。每一行记录 bssid (AP) 和 mac (客户端) 外键、identity、连接请求和响应的 EAP 标识符 (eap_id)、challenge、response、一行可直接使用的 hashcat 字符串,以及源 file。它使用 bssid、mac 和 eap_id 的组合作为主键。
APClientHandshakeAPUnique:该视图选择接入点的 BSSID、接入点的 SSID、执行握手的客户端设备的 MAC 地址、客户端设备的制造商、包含握手的文件以及 hashcat 输出。它根据 BSSID 和 MAC 地址分别连接 Handshake、AP 和 Client 表,并过滤掉未被 hashcat 破解的握手。结果按 SSID 分组并按 BSSID 排序。
IdentityAP:该视图选择接入点的 BSSID、接入点的 SSID、执行身份请求的客户端设备的 MAC 地址、客户端设备的制造商、身份字符串以及用于身份请求的方法。它根据 BSSID 和 MAC 地址分别连接 Identity、AP 和 Client 表,并按 BSSID 排序结果。
CertificateAP:该视图选择接入点的 BSSID 和 SSID,以及证书类型 (cert_type)、主题和颁发者通用名称、完整主题和颁发者、有效期、公钥算法和大小、self_signed 标志以及 sha256_fingerprint。它根据 BSSID 连接 Certificate 和 AP 表,并按 BSSID 排序结果。
SecurityAP:该视图选择接入点的 BSSID 和 SSID,以及 wpa_version、akm_suites、pairwise_ciphers、group_cipher、enterprise 标志以及管理帧保护列 (mfpc、mfpr)。它直接从 AP 表读取这些列(仅限有安全细节的 AP),并按 BSSID 排序结果。
CapabilitiesAP:该视图选择接入点的 BSSID 和 SSID,及其 802.11 管理能力(ft_80211r、mobility_domain_id、rrm_80211k、bss_transition_80211v、mbssid、max_bssid_indicator、csa、csa_new_channel)。它直接从 AP 表读取这些列,仅限通告至少其中一项能力的 AP,并按 BSSID 排序结果。
SummaryAP:该视图按 SSID 和 加密方式分组汇总接入点,因此相同 SSID 但不同安全设置会显示为单独的行(便于发现混合或降级配置)。对于每个分组,它选择 SSID、不同接入点的数量(APs count)、加密类型、WPA 版本 (wpa_version) 和管理帧保护状态 (pmf)、该分组中出现的所有制造商(manuf,逗号分隔)、SSID 是否隐藏,以及不同已连接客户端的数量(Clients count)。它排除没有记录加密的 AP,并按 AP 数量降序排序结果。
DNS 查询