mcpField
Y
yakit-data-extract-plugin

yakit-data-extract-plugin

github.com/yaklang安全10121 次安装15 周前更新
代码仓库

关于 yakit-data-extract-plugin

yakit-data-extract-plugin 介绍如何将 Yakit History 流量转为可复用路径和扫描输入。示例涵盖按域名采集、URI 去重、提取 Cookie、保存 Payload 字典及携带登录态发包。

主要功能

  1. 01按域名采集 History 流量
  2. 02去除查询参数后对路径去重
  3. 03提取请求 Cookie
  4. 04将路径保存到 Payload 字典
  5. 05携带登录态扫描路径

适用场景

  1. 01从域名流量整理唯一路径列表
  2. 02在 Web Fuzzer 或扫描器中复用路径
  3. 03携带登录 Cookie 检查路径

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/yaklang/yak-skills --skill yakit-data-extract-plugin

安装后在 Claude Code 中输入/yakit-data-extract-plugin确认已加载。

附带文件examples/collect-domain-urls.yakexamples/path-scan-with-payload.yak

详细介绍

来自项目 README

SKILL: Yakit 历史数据提取与字典驱动扫描

AI LOAD INSTRUCTION: 本 skill 针对一个具体痛点——“在 History 里堆了一堆某域名的流量, 想把唯一路径全捞出来、拿到登录 Cookie,然后接着扫/Fuzz”。给出两个端到端可运行示例: 按域名捞流量并去重提 Cookie、把去重路径接入 Payload 字典并带登录态真实发包扫描。 两个示例都 yak <file> 自测通过,其中扫描示例会起本地真实靶站发真实 HTTP 请求作为证据。

0. 相关路由

  • 总入口:yak
  • 数据库 API(KV / Payload / 查询):yaklang-database
  • 想在 MITM 阶段直接采集而非事后捞库:mitm-hotpatch
  • 训练材料交叉引用:yaklang-ai-training-materials/library-usage/db/db-practice.yak

1. 痛点拆解

一个常见的工作流被卡在“数据搬运”上:

flowchart LR
    H[History 大量流量] --> Q[按 domain 捞取]
    Q --> D[URI 去重]
    Q --> C[提取登录 Cookie]
    D --> P[沉淀 Payload 字典]
    P --> S[带 Cookie 逐路径发包扫描]
    C --> S

手工做这件事很痛:路径重复、query 干扰去重、Cookie 散落在不同请求里、扫描时忘了带登录态。 本 skill 用 db + poc 把每一步都脚本化。

2. 按 domain 捞 History + URI 去重 + 提取 Cookie

核心数据形态(先核实,勿臆测):

来源形态
db.QueryHTTPFlowsByKeyword(domain)返回 *HTTPFlow 迭代器(channel)
flow.Url完整 URL 字符串
flow.Requestcodec.StrconvQuote 后的字符串,需 codec.StrconvUnquote 取原始字节
登录 Cookiepoc.GetHTTPPacketHeader(req, "Cookie")
collectFromHistory = func(domain) {
    pairs = []
    for flow in db.QueryHTTPFlowsByKeyword(domain) {
        req = codec.StrconvUnquote(flow.Request)~
        pairs = append(pairs, {"url": flow.Url, "req": []byte(req)})
    }
    return analyzePairs(pairs)   // 归一化去重 + 收集 cookie
}

去重 key 用“去掉 scheme 与 query 后的 host+path”,避免 ?page=1 / ?page=2 被当成两条。

完整示例:examples/collect-domain-urls.yak

3. 去重路径接 Payload 字典 + 带登录态发包扫描

把路径沉淀成 Yakit Payload 字典(持久化、可在 Web Fuzzer / 扫描器里复用),再带 Cookie 逐条发包, 用状态码区分存活/不存在:

db.SavePayload(group, dedupPaths(paths))~        // 去重后入库
for path in db.YieldPayload(group) {             // 迭代字典逐条扫描
    raw = sprintf("GET %s HTTP/1.1\r\nHost: %s\r\nCookie: %s\r\nConnection: close\r\n\r\n", path, hostport, cookie)
    rsp, _ = poc.HTTP(raw, poc.timeout(5), poc.save(false))~
    code = poc.GetStatusCodeFromResponse(rsp)    // 200 存活 / 404 不存在
}

完整示例:examples/path-scan-with-payload.yak (自测会在本地随机端口起真实靶站,真正发出 HTTP 请求并校验状态码与 Cookie 透传)

4. 坑(先核实再写)

  • flow.Request / flow.Response 是 strconv-quote 之后的字符串,直接当原文用会带转义;务必 codec.StrconvUnquote(...)~。
  • db.YieldPayload(group) 直接产出 payload 内容字符串,不是带 .Content 字段的对象,直接用 p。
  • db.SavePayload 写的是 profile 持久库;脚本里用唯一前缀的 group 并 defer db.DeletePayloadByGroup(group) 清理,避免污染。
  • 去重一定要先剥掉 query,否则同一接口的不同分页会被当成不同 URI。
  • 发包扫描务必 poc.timeout(...) + poc.save(false)(自测/批量时不写库),避免卡死与污染 History。

5. 如何验证你写的提取/扫描脚本

  • 直接 yak your-script.yak,让 YAK_MAIN 自测块用合成数据 + 本地靶站跑通逻辑。
  • 想验证真实 History 捞取,可先用 mitm-hotpatch 采集几条流量再跑。
  • 工具链与命令行验证方式见 yaklang-toolchain。

评论

支持 Markdown