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, 教育学习, 无后门, 逆向工具