白帽子如何绕开 httpx:这款 HTTP 资产探测工具的技术限制?

摘要:如果你平时做的是 Web 渗透、SRC 挖洞、红蓝对抗里的前期侦察,或者应急里的暴露面排查,那你大概率绕不开 httpx这款工具的。 我说的不是 Python 那个 HTTPX 客户端,而是 ProjectDisc
如果你平时做的是 Web 渗透、SRC 挖洞、红蓝对抗里的前期侦察,或者应急里的暴露面排查,那你大概率绕不开 httpx这款工具的。 我说的不是 Python 那个 HTTPX 客户端,而是ProjectDiscovery 出的 httpx。官方对它的定义很直接: 一个高性能、面向多探针的 HTTP 工具包支持高并发下对 URL、主机、CIDR等目标做 HTTP 层探测,并尽量保证结果稳定性。它本质上不是漏洞扫描器,而是 Web 资产探测和结果归一化工具。 工具地址链接: https://github.com/projectdiscovery/httpx 很多人第一次接触它,会把它理解成"批量访问网页的工具"。这么理解不算错,但太浅了。httpx真正厉害的地方,不在于"能不能访问",而在于它能把一堆杂乱的目标,快速整理成一批有上下文、有指纹、有优先级的 Web 资产结果。 它不是用来打的,而是用来筛的 白帽子做信息收集时,经常会遇到一个问题: 目标很多,子域很多,端口很多,URL 更多,但真正值得深挖的点很少。 这个时候,httpx的价值就出来了。 它可以在探测时顺手拿到很多 HTTP 层信息,比如: 状态码、标题、内容长度、重定向位置、响应时间、favicon hash、JARM、IP、CNAME、ASN、CDN/WAF、TLS 证书信息、CSP 信息、Web 技术栈等。 也就是说,httpx干的不是“找到漏洞”,而是先回答这些问题: 1.这个域名到底活不活;2.它跑的是不是Web服务;3.是HTTP还是HTTPS;4.是不是走了CDN;5.是不是同一套站群;6.标题像不像后台;7.favicon 能不能聚类;8.技术栈是不是PHP/Java/Node/Go;9.证书里有没有暴露别的域名;10.某批资产里哪些优先级更高这一步做好了,后面的Burp、Nuclei、Katana、手工验证,效率会完全不一样。 从技术上看,httpx 强在多探针并发探测 httpx的核心思路不是只发一个请求拿个状态码,而是围绕目标执行多种 probe。官方文档里把 probe 描述成一组针对 Web 服务器、URL 或其他 HTTP 元素的检查项。 拿最常见的几类来说: 1. 基础存活与协议识别 最基础的是判断目标是否可达。但它不是傻扫。默认情况下,如果 HTTPS 不通,它会回落到 HTTP;如果你想同时保留 HTTP 和 HTTPS 的结果,可以用-no-fallback。官方还支持自定义端口和协议映射,比如把 443 按 HTTP 跑,或者把 8443 按 HTTPS 跑。 这在实战里很有用。因为很多历史资产、非标端口、运维临时服务,协议和端口经常不规范,单靠"443=HTTPS、80=HTTP"的思路很容易漏。 2. 页面特征提取 httpx很适合做页面画像。状态码、标题、Server、content-type、响应时间、body 预览、内容长度、词数、行数,这些都是常见输出。 对测试人员来说,这些信息不是"展示用的",而是拿来做判断的: 302 到单点登录,说明可能是统一认证入口 401/403 的资产未必没价值,反而可能是后台 标题里带test、dev、admin、swagger、api,优先级就上来了 一批长度、标题、hash 都高度相似的站,很可能是同一套模板页 3. 指纹与聚类能力 很多人喜欢它,就是因为它非常适合"站群归类"。 官方支持-favicon、-jarm、-tech-detect、-asn、-cdn等能力。-tech-detect基于 Wappalyzer 数据做技术识别;favicon和JARM更适合做相似资产聚类;ASN、IP、CNAME、CDN 能帮助你判断资产归属和部署形态。 这在 SRC 场景尤其好用。你手里可能有几千个子域,真正要优先看的,不一定是首页最正常的那个,而是 favicon 和某个已知后台一致、JARM 相似、标题异常、技术栈可打的那一批。 4. 路径、端口和扩展探测 httpx不是只能打一层首页。官方支持-path、-ports、-vhost、-http2、-pipeline、-tls-probe、-csp-probe等能力,不过官方也特别提醒,这类参数更适合按场景单独使用,而不是默认全开。 这里面有几个很实战: -path :对一批目标统一探测某些路径,比如 :/login/admin/actuator/swagger-ui -ports:补扫非标 Web 端口 -vhost:适合碰虚拟主机场景 -tls-probe:从证书侧面扩展目标面 -csp-probe:从 CSP 中拿到更多相关域名线索 说白了,它不是一个"只读首页"的工具,而是一个能围绕 HTTP 面持续做扩展侦察的工具。 5. 过滤、匹配和去噪 这个点经常被低估,但实际很关键。 httpx官方支持字符串、正则、状态码、长度、词数、行数、错误页、重复结果等多种过滤与匹配方式,还支持 DSL。并且提供了-filter-error-page和-filter-duplicates这类非常贴近实战的参数。 真正跑过大规模资产的人都知道,噪声远比目标多。统一 404、WAF 拦截页、空白页、跳转页、静态占位页,这些都会淹没有效目标 httpx的强点之一,就是可以把一堆"看起来都活着"的页面,进一步压缩成"值得花时间看的页面"。 为什么它总是出现在 ProjectDiscovery 工具链里 官方 Quick Start 给的链路很典型:先做资产发现,再交给httpx做活性确认和信息提取,然后再把结果喂给nuclei。 这套思路背后其实很清楚: subfinder解决"有什么域名" naabu解决"开什么端口" httpx解决"哪些是有价值的 HTTP 面" katana解决"往里爬能爬出什么路径" nuclei解决"基于模板能打出什么问题" 所以httpx的位置非常像一个中间层。它上接资产发现,下接漏洞验证和手工测试。这个位置决定了它不一定最“炫”,但很可能是你用得最频繁的一个工具。 对白帽子来说,它最实用的几个场景 1. 渗透测试里的资产梳理 拿到一批域名、IP、端口之后,第一步不是马上扫漏洞,而是先知道哪些目标真正值得投入时间。httpx可以很快帮你筛出在线 Web 资产、登录页、跳转链、测试系统、接口页、后台和异常标题页。 2. SRC 里的批量筛点 SRC 最怕的是资产太多,眼睛不够用。这时候httpx不只是"探活工具",而是一个分类器。你可以按标题、状态码、favicon、技术栈、错误页过滤,把真正值得手工看的目标提出来。 3. 攻防演练里的快速建图 演练讲究时间效率。httpx的高并发、多输入模式、结构化输出和批量路径探测,很适合前期快速拉一张 Web 暴露面图,再往下交给人工验证或其他模块。官方也支持 CIDR、主机、URL 等多种输入。 4. 应急响应里的暴露面复核 应急里经常需要回答这种问题:哪些站还在线?哪些页面被篡改了?哪些后台还暴露着?哪些资产看起来是同一批?httpx的截图、渲染 DOM、标题、hash、favicon、证书、JARM 这些能力,就很适合做批量复核。官方文档里也提到-screenshot可以抓页面截图,并在搭配-json时把渲染后的 DOM 一起写进结果。 它还有一个优点:特别适合自动化 官方支持 JSONL、CSV、响应保存,还能作为 Go library 使用;另外还有 GitHub Action 可以跑周期化任务。 这意味着它不只是手工命令行工具,也适合塞进你自己的巡检脚本、资产监控链路、日报任务或者持续验证流程里。对于团队化作业来说,这一点其实很重要:不是每个工具都能自然接入流水线,但httpx很适合。 但也别把它神化 httpx再好用,它也不是漏洞扫描器,更不是业务逻辑测试工具。它不负责帮你理解鉴权链,不负责登录态后的深层测试,也不替代爬虫、代理或人工分析。官方的定位始终是 HTTP probing/toolkit,而不是"自动帮你找洞"的一站式工具。 所以更准确地说,httpx是一把"把目标面整理清楚"的刀。它帮你节省的,不是最后那一步验证漏洞的时间,而是前面大量无效翻页、无效点击、无效筛选的时间。 HTTPX常用命令 1.探测单个目标 httpx -uhttps://example.com 2.探测多个目标 httpx -u https://a.com https://b.com 3.从文件读取目标 httpx-l targets.txt 4.只输出存活结果,适合做清洗 httpx-l targets.txt -silent 5.显示状态码和标题 httpx-l targets.txt -sc -title 常规信息收集:状态,标题,长度,IP 1.显示状态码、标题、长度 httpx-l targets.txt -sc -title -cl 2.再加上 Web Server httpx-l targets.txt -sc -title -cl -server 3.显示 IP httpx-l targets.txt -ip 4.显示 CNAME httpx-l targets.txt -cname 5.显示响应时间 httpx-l targets.txt -rt 技术指纹:识别中间件和框架 1.开启技术识别 httpx -l targets.txt-td 2.技术识别 + 标题 httpx -l targets.txt-td-title 3.技术识别 + CPE httpx -l targets.txt-td-cpe 4.WordPress 指纹探测 httpx-l targets.txt -wp 5.favicon 哈希识别 httpx-l targets.txt -favicon 内容特征:看页面像不像同一套系统 1.显示内容类型 httpx-l targets.txt -ct 2.显示行数 httpx-l targets.txt -lc 3.显示词数 httpx -l targets.txt -wc 4.预览响应体前 100 字符 httpx-l targets.txt -bp 5.计算页面哈希 httpx -l targets.txt -hashmd5 过滤和匹配:从海量结果里捞重点 1.只看 200 httpx-l targets.txt -mc200 2.只看 200 和 302 httpx-l targets.txt -mc200,302 3.过滤掉 404 和 403 httpx-l targets.txt -fc404,403 4.匹配标题或正文里含 admin httpx-l targets.txt -ms admin 5.过滤近似重复页面 httpx-l targets.txt -fd 错误页和杂质清洗:结果更加干净 1.过滤错误页 httpx-l targets.txt -fep 2.过滤长度为 0 或固定模板页 httpx-l targets.txt -fl0,1234 3.过滤含指定字符串的页面 httpx-l targets.txt -fs"404 Not Found" 4.过滤正则匹配页面 httpx-l targets.txt -fe"error|forbidden|denied" 5.过滤 CDN 资产 httpx-l targets.txt -fcdn cloudfront,fastly 端口,路径,协议:更接近实战 1.探测多个常见 Web 端口 httpx-l targets.txt -p80,443,8080,8443 2.探测指定路径 httpx -l targets.txt -path /admin 3.同时探测多个路径 httpx -l targets.txt -path /admin,/login,/manage 4.显示 HTTP 和 HTTPS 两种结果,不自动只保留一个 httpx-l targets.txt -nf 5.自定义端口协议映射 httpx-l targets.txt -ports http:80,http:8080,https:443,https:8443官方文档明确说明:默认 HTTPS 不通会回退到 HTTP,-no-fallback 可以同时显示两种探测结果,也支持像 http:443,http:80,https:8443这样的端口协议映射 跳转,请求头,代理:适合调试和带鉴权测试 1.跟随重定向 httpx-l targets.txt -fr 2.只跟随同主机跳转 httpx-l targets.txt -fhr 3.自定义 Header httpx-u https://example.com -H"Cookie: session=abc" 4.带多个请求头 httpx-u https://example.com -H"Cookie: a=b"-H"X-Token: test" 5.走 Burp 代理 httpx -l targets.txt-proxyhttp://127.0.0.1:8080 输出保存:给报告,脚本,自动化用 1.输出到文件 httpx-l targets.txt -sc -title -o result.txt 2.以 JSONL 输出 httpx -l targets.txt-sc -title -td-json -o result.json 3.JSON 中包含响应头 httpx-l targets.txt -json -irh -o result.json 4.JSON 中包含完整请求和响应 httpx-l targets.txt -json -irr -o result.json 5.保存响应内容到目录 httpx-l targets.txt -sr -srd responses 截图和可视化:做后台梳理很好用 1.对所有页面截图 httpx-l targets.txt -ss 2.使用系统 Chrome 截图 httpx-l targets.txt -ss -system-chrome 3.截图时延长超时 httpx-l targets.txt -ss -st20 4.截图前多等 3 秒让前端渲染完 httpx-l targets.txt -ss -sid3 5.截图 + 标题 + 技术栈,一次看全 httpx -l targets.txt-ss -title -td-sc 我最常用的八条 httpx-l targets.txt -silenthttpx-l targets.txt -sc -titlehttpx-l targets.txt -sc -title -td -iphttpx-l targets.txt -fc404,403-fep -fdhttpx-l targets.txt -path /admin,/login -sc -titlehttpx-l targets.txt -p80,443,8080,8443-sc -titlehttpx-l targets.txt -json -irh -o result.jsonhttpx-l targets.txt -ss -title -td 几个高频联动的场景 1.子域名subfinder 的结果直接喂给 httpx subfinder-d example.com -silent | httpx -silentsubfinder -d example.com -silent | httpx -silent -sc -titlesubfinder -d example.com -silent | httpx -silent -sc -title -td -ip -cdnsubfinder -d example.com -silent | dnsx -silent | httpx -silent -sc -title 2.子域名发现 + 标题 + 技术栈 subfinder-d example.com -silent | httpx -sc -title -td 3.端口扫描结果继续探测 Web naabu-host example.com -silent | httpx -sc -title 4.资产清洗后给 nuclei subfinder-d example.com -silent | httpx -silent | nuclei 建议这样干 1.先活性:-silent 2.再识别:-sc -title -td -ip 3.再清洗:-fc404,403 -fep -fd 4.再定向探测:-path /admin,/login 5.最后留证据:-json 或 -ss