KkoViv/whoareurl
GitHub: KkoViv/whoareurl
一个面向 CTF 练习与学习目的的轻量级 Python Web 指纹识别工具,通过分析 HTTP 响应头(包括重定向链中的每一跳)帮助使用者理解信息收集原理。
Stars: 0 | Forks: 0
# whoareurl
`whoareurl` 是一个专为学习和 CTF 练习构建的轻量级 web 指纹识别工具。
它的目标不是取代 Burp Suite 或 OWASP ZAP 等工具。其目标是构建一个小巧、易读的 Python 程序,帮助理解在 web 挑战赛中 HTTP 响应是如何揭示有用信息的。
## 项目目标
`whoareurl` 分析 web 目标,并从 HTTP 响应中收集基础的指纹数据。
该程序的设计初衷是教育性的:当发现一个有价值的 header 时,该工具应当解释为什么该 header 在信息收集阶段可能会很重要。
一个重要的设计要点是,该工具必须检查重定向链中的每一个响应,而不仅仅是最终的响应。
## 当前范围
首个版本侧重于:
- 使用 `argparse` 读取用户输入;
- 接受 IP 地址或主机名;
- 接受端口值;
- 创建 HTTP 请求;
- 使用 `urllib.request` 使用的自定义 `HTTPRedirectHandler` 处理 HTTP 重定向;
- 存储从每个 HTTP 响应中提取的数据;
- 分析有用的响应 header;
- 以易读的方式展示分析后的数据。
主机名验证有意识地被排除在首次实现之外,因为它比 IP 和端口验证更复杂。
## 程序流程
基础的程序流程如下:
```
1. Parse user input with argparse
2. Store parsed input in a shared data container
3. Create the custom HTTPRedirectHandler class
4. Run the function that creates the HTTP request and receives responses
5. Store extracted response data as a list of response data sets
6. Run the analysis function on the collected data
7. Display the analysis result
8. End the program with bye_bye
```
## 数据模型构思
该程序需要处理一个或多个 HTTP 响应。
当目标返回重定向时,这一点尤为重要。由于事先不知道响应的数量,响应数据被存储为数据集列表。
概念如下:
```
[
response_1_data,
response_2_data,
response_3_data
]
```
每个响应数据集都包含从单个 HTTP 响应中提取的信息。
## 有用的 Header
首个值得检查的有用 header 包括:
- `Server`:声明的 web 服务器技术。
- `X-Powered-By`:声明的应用程序技术。
- `Content-Type`:响应正文类型。
- `Set-Cookie`:会话技术和 cookie 安全信号。
- `Location`:重定向目标。
- `Content-Length`:声明的响应正文大小。
- `Content-Encoding`:压缩或编码行为。
- `ETag`:缓存和资源版本行为。
- `Strict-Transport-Security`:HTTPS 强制策略。
- `Content-Security-Policy`:浏览器安全策略。
- `X-Content-Type-Options`:内容嗅探保护。
- `Referrer-Policy`:referrer 泄露控制。
- `Permissions-Policy`:浏览器功能权限。
- `WWW-Authenticate`:服务器要求的身份验证方法。
- `Allow`:资源允许的 HTTP 方法。
- `Via`:代理或网关信息。
- `Access-Control-Allow-Origin`:CORS 暴露行为。
## 主要组件
计划组件包括:
- `main`:统筹程序流程。
- `checkport`:验证通过 `argparse` 传递的端口值。
- `a_data`:存储在程序各函数之间共享的数据。
- `my_handler`:用于配合 `HTTPRedirectHandler` 工作的自定义类模块。
- `redirection`:创建 HTTP 请求并收集响应数据。
- `analyze`:分析收集到的响应数据。
- `display`:展示分析结果。
- `bye_bye`:温和地关闭程序。
## 学习重点
本项目也是一次 Python 学习练习。
代码应当保持:
- 小巧;
- 易读;
- 直白;
- 易于调试;
- 在添加高级功能之前,专注于基础的 HTTP 流程。
只有在基础的请求、重定向跟踪、分析和展示流程清晰且正常运作后,才应添加高级功能。
标签:HTTP请求分析, Python, 教育学习, 无后门, 逆向工具