
1. 项目概述与核心价值最近在和一些做安全测试的朋友交流发现大家对于“钓鱼网站”这个话题既充满好奇又有些讳莫如深。好奇是因为它在渗透测试、安全意识演练中扮演着关键角色讳莫如深则是因为它总带着一丝“灰色”的意味。实际上在合法授权和明确目的的前提下了解钓鱼网站的搭建原理是每一位安全从业者、企业安全负责人乃至普通用户提升防御能力的必修课。这就像医生需要了解病毒如何传播才能更好地开出处方一样。今天我就以一个从业者的角度抛开那些故弄玄虚的术语带你从零开始彻底搞懂几种主流、简单且高效的钓鱼网站搭建方法。我们的目标不是教你去做坏事而是让你深刻理解攻击者的思路和工具从而在自己的岗位上无论是加固系统、设计安全策略还是培训员工都能做到有的放矢。这篇文章会非常详细从环境准备、工具选择、配置细节到注意事项一步步拆解确保即使你没有任何编程或服务器基础也能跟着操作并成功复现。收藏这一篇相当于拥有了一份从“知道是什么”到“亲手做出来”的完整指南。2. 钓鱼网站的本质与合法应用场景在动手之前我们必须先划清红线明确边界。钓鱼网站的本质是“仿冒”通过复制一个可信度高的网站如公司登录页、银行页面、社交平台诱导用户输入敏感信息账号、密码、银行卡号。从技术上讲它涉及前端界面克隆、后端数据接收和转发或存储几个核心环节。2.1 为什么我们需要学习搭建安全渗透测试红队评估在获得书面授权的前提下安全工程师模拟攻击者对自家或客户系统进行测试。钓鱼演练是评估员工安全意识脆弱性的最有效手段之一。通过量化有多少员工点击了链接、提交了凭证企业可以精准定位安全培训的盲区。内部安全意识培训与其枯燥地宣讲不如进行一次“无害”的实战演练。让员工亲身体验一次“险些中招”其记忆效果远超十次培训。搭建一个逼真的内部系统登录页进行演练是很多大型企业安全部门的常规操作。安全技术研究作为防御者只有深入了解攻击链的每一个环节才能设计出更有效的检测和防御规则。分析钓鱼网站所用的技术、混淆手法、通信方式有助于提升威胁情报的质量和自动化检测系统的准确性。2.2 绝对禁止的行为注意任何未经明确授权对第三方网站进行仿冒并用于窃取信息的行为都是非法的且将面临严厉的法律制裁。本文所有内容仅限用于合法授权的安全测试、教育与研究目的。请务必遵守您所在地区的法律法规坚守职业道德底线。3. 环境准备与核心思路无论采用哪种方法搭建一个钓鱼网站都离不开几个核心要素一台服务器用于托管网站、一个域名让链接看起来更可信、钓鱼页面源码、以及一个用于接收和记录用户提交数据的后端。3.1 服务器选择轻量、匿名与可控对于实验和学习我们不需要昂贵的配置。重点考虑以下几点成本选择按小时或按月计费的VPS虚拟专用服务器初期选择最低配置1核1G即可完全胜任。地理位置根据你的目标受众模拟选择但用于学习则任意。操作系统推荐Ubuntu 20.04/22.04 LTS或CentOS 7/8。它们资料丰富社区支持好。本文将以Ubuntu为例。匿名性对于合法的渗透测试使用可追溯的真实账户和服务即可这本身就是合规要求的一部分。切勿追求无法追溯的“匿名”服务那通常与非法活动关联。你可以从各大主流云服务商获取VPS。初始化后你会获得一个公网IP地址如123.123.123.123和SSH登录密钥。3.2 域名与“伪装”一个看起来可信的域名能极大提高钓鱼成功率。在测试中我们通常使用子域名如果你拥有一个合法域名如yourcompany.com可以创建一个用于测试的子域名如login.yourcompany.com或secure.yourcompany-lab.com。这是企业内最合规的做法。相似域名Typosquatting注册与目标域名极其相似的域名例如将example.com仿冒为examp1e.com数字1代替字母l或example-login.com。请注意出于恶意目的注册此类域名可能侵犯商标权并构成欺诈仅可在拥有目标方明确授权的研究中使用。免费或廉价域名用于纯技术学习可以注册一个无关的廉价新域名。域名需要配置DNS解析将你的域名如phish-test.com指向你服务器的公网IP地址。这个过程在域名注册商的后台完成称为添加“A记录”。3.3 核心架构思路一个最简单的钓鱼网站工作流程如下用户访问你的钓鱼域名如fake-login.com。服务器返回一个与真实网站如real-login.com外观一模一样的页面。用户在页面上输入用户名和密码点击“登录”。表单数据被提交到你的服务器上的一个处理脚本如login.php。该脚本将窃取的凭证记录到服务器上的一个文件或数据库中同时为了不引起用户怀疑会透明地将用户重定向到真实的官方网站。这样用户可能只会觉得是自己输错了密码而不会立即察觉被钓鱼。接下来我们将介绍三种实现上述思路的具体方法难度从低到高功能从简到繁。4. 方法一使用Social-Engineer Toolkit (SET) —— 全自动化利器Social-Engineer ToolkitSET是用Python编写的开源渗透测试框架专为社会工程学设计。它最大的优点就是高度自动化内置了大量模板几乎可以“一键”生成克隆网站并启动服务非常适合快速搭建和演示。4.1 SET的安装与初始化在你的Ubuntu服务器上打开终端依次执行以下命令# 更新系统包列表 sudo apt-get update # 安装必要的依赖包括Git和Python sudo apt-get install -y git python3 python3-pip # 从GitHub克隆SET仓库 git clone https://github.com/trustedsec/social-engineer-toolkit.git # 进入SET目录 cd social-engineer-toolkit # 运行SET的安装脚本它会自动处理Python依赖 pip3 install -r requirements.txt # 或者使用Python直接安装 python3 setup.py install安装完成后通过python3 setoolkit命令启动SET。首次运行会有一个许可协议输入y同意即可进入主菜单。4.2 使用SET创建网站克隆攻击启动与选择在主菜单中选择1) Social-Engineering Attacks。选择攻击向量接着选择2) Website Attack Vectors。选择克隆方式选择3) Credential Harvester Attack Method。选择克隆站点选择2) Site Cloner。这是最常用的功能它会自动克隆一个你指定的网站。输入参数系统会询问你的公网IP地址ifconfig命令查看输入你服务器的IP如123.123.123.123。接着输入你想要克隆的完整URL例如https://www.gmail.com或https://your-target-internal-portal.com。自动处理SET会自动开始工作。它会尝试克隆目标网站的登录页面并生成一个用于接收凭证的PHP脚本index.php和post.php。所有文件会默认放在/var/www/html/目录下。4.3 配置Web服务器并启动SET通常需要配合Apache运行。安装并启动Apachesudo apt-get install -y apache2 sudo systemctl start apache2 sudo systemctl enable apache2由于SET生成的文件可能在/var/www/html/你需要确保Apache有权限读取。你可以将SET生成的文件复制过去或者直接让SET输出到该目录。更简单的方法是在SET运行时它会提示你服务已经启动在某个端口如8080。你可以使用Python的简易HTTP服务器快速启动# 在SET生成文件的目录下可能是 /root/.set/reports/... cd /path/to/generated/files python3 -m http.server 80注意在Linux上使用1024以下端口如80需要root权限可以改用sudo python3 -m http.server 80但更生产化的做法是配置Apache或Nginx虚拟主机。此时访问你的服务器IP或绑定的域名就能看到克隆的登录页面了。用户提交的数据会被记录在服务器上的一个文本文件中如harvester.txt。实操心得SET的克隆并非百分百完美对于依赖复杂JavaScript动态加载的现代单页面应用如某些使用React/Vue的登录页克隆效果可能不佳只得到一个静态外壳。SET生成的页面可能包含原网站的绝对链接如指向真实官网的CSS、JS文件这会导致页面样式错乱或行为异常。你需要手动检查页面源码将这些链接修改为相对路径或指向你的服务器。这是最“快餐式”的方法适合快速验证想法或进行简单的演示但定制化程度低容易被熟悉安全的人从页面细节上识破。5. 方法二手动克隆与PHP后端处理 —— 理解原理与深度定制如果你想完全控制钓鱼页面的每一个细节或者目标网站结构复杂手动克隆是更可靠的选择。这种方法能让你深刻理解钓鱼网站的数据流。5.1 前端页面克隆保存目标页面在浏览器中打开目标登录页必须在授权范围内按下CtrlSWindows或CmdSMac将网页“另存为”到本地。选择“网页完整”格式。你会得到一个.html文件和一个同名的资源文件夹。分析表单结构用文本编辑器打开保存的.html文件。找到form标签。关键信息包括action属性表单提交的地址。我们需要把它改成我们自己的处理脚本例如将actionhttps://real-site.com/login改为actionlogin.php。method属性通常是POST。输入框的name属性如input nameusername和input namepassword。这些name值就是我们后端脚本要接收的参数名。5.2 编写PHP数据收集脚本在服务器上与你的index.html同级目录下创建一个名为login.php的文件。?php // 禁用错误显示避免暴露信息给访问者 error_reporting(0); // 获取用户提交的用户名和密码参数名对应表单中input的name属性 $username $_POST[username]; $password $_POST[password]; // 获取一些额外信息增加情报价值 $ip_address $_SERVER[REMOTE_ADDR]; $user_agent $_SERVER[HTTP_USER_AGENT]; $timestamp date(Y-m-d H:i:s); // 拼接要记录的信息 $log_entry 时间: $timestamp | IP: $ip_address | 代理: $user_agent | 用户名: $username | 密码: $password\n; // 指定日志文件路径 $log_file stolen_credentials.log; // 将信息追加写入日志文件 file_put_contents($log_file, $log_entry, FILE_APPEND | LOCK_EX); // 为了不引起怀疑在此处透明地将用户重定向到真实的官方网站登录页 // 请将下面的URL替换成真实的登录地址 header(Location: https://real-company.com/login); exit(); // 确保重定向后立即停止脚本执行 ?5.3 部署与测试将修改好的index.html、资源文件夹和login.php一起上传到服务器的Web目录例如/var/www/html/phish/。确保目录权限正确让Web服务器如www-data用户能够写入日志文件。sudo chown -R www-data:www-data /var/www/html/phish/ sudo chmod 755 /var/www/html/phish/ touch /var/www/html/phish/stolen_credentials.log sudo chown www-data:www-data /var/www/html/phish/stolen_credentials.log通过浏览器访问你的钓鱼页面如http://your-server-ip/phish/尝试输入测试账号密码并提交。检查服务器上的stolen_credentials.log文件确认数据是否被正确记录。tail -f /var/www/html/phish/stolen_credentials.log注意事项SSL/TLS证书如果克隆的是https网站你的钓鱼站最好也配置SSL证书可以使用Let‘s Encrypt免费获取否则浏览器会显示“不安全”警告警觉性高的用户会立刻离开。重定向地址login.php中的重定向地址必须准确且最好是登录后的默认页面这样用户体验才更“顺滑”。日志安全stolen_credentials.log文件包含了敏感数据务必将其存放在Web目录不可直接访问的位置如上一级目录并通过PHP脚本的绝对路径来引用。更好的做法是直接存入数据库。6. 方法三使用Gophish框架 —— 企业级钓鱼演练平台如果你需要为整个企业组织进行定期、规模化、可度量的钓鱼安全意识演练那么手动方法就力不从心了。Gophish是一个用Go语言编写的开源钓鱼演练框架它提供了完整的Web管理界面可以轻松地管理目标用户群、邮件模板、钓鱼页面和查看详细的数据报表。6.1 Gophish的安装与配置从Gophish的GitHub Releases页面下载对应操作系统的最新版本。以Linux 64位为例# 下载最新版本请替换链接中的版本号 wget https://github.com/gophish/gophish/releases/download/v0.12.1/gophish-v0.12.1-linux-64bit.zip # 解压 unzip gophish-v0.12.1-linux-64bit.zip -d gophish # 进入目录 cd gophish修改配置文件config.json主要关注admin_server和phish_server的监听地址。为了能从外部访问管理界面建议将admin_server的listen_url从127.0.0.1:3333改为0.0.0.0:3333。phish_server是实际托管钓鱼页面的服务监听在80端口。6.2 启动与初始化启动Gophishsudo ./gophish。注意如果要用80端口需要root权限。访问管理界面浏览器打开https://你的服务器IP:3333。首次登录使用控制台输出的默认用户名和密码通常是admin/gophish登录后会强制要求修改。配置发送配置Sending Profile这是最关键的一步。你需要一个用于发送钓鱼邮件的SMTP服务器。可以使用公司内部的邮件服务器需获得授权或者使用第三方服务如Amazon SES、SendGrid等。在Gophish界面中填写SMTP服务器地址、端口、用户名通常是邮箱地址、密码和发件人名称。6.3 创建一次完整的钓鱼演练用户和用户组Users Groups导入或手动添加目标邮箱地址。可以创建不同的组用于分批次测试。邮件模板Email TemplatesGophish强大的地方在于可以导入原始邮件然后通过{{.URL}}等变量插入个性化的钓鱼链接。你可以先给自己发一封真实的通知邮件然后将邮件源码导入Gophish进行编辑替换链接。着陆页面Landing Pages这里就是配置钓鱼页面。Gophish支持直接导入你手动克隆的HTML代码方法二中的成果也提供了一个编辑器。你需要指定提交数据后是将用户重定向到真实网站还是显示一个自定义的“错误页面”。同时要勾选“捕获提交的数据”。创建活动Campaign将以上元素组合起来。选择一个邮件模板、一个着陆页面、一个用户组并设置发送邮件的时间立即或定时。启动活动后Gophish会自动发送邮件并实时监控谁点了链接、谁提交了数据。6.4 Gophish的优势与进阶技巧数据仪表盘活动概览一目了然显示发送数、打开数、点击率、数据提交率非常适合向管理层汇报安全意识现状。批量与定时可以轻松对成千上万的员工进行分批测试避免一次性造成太大影响。模板变量支持在邮件和页面中插入目标的名字、公司等变量提高欺骗性。API支持可以通过API与其他系统如HR系统集成自动同步用户列表。常见问题与排查邮件进入垃圾箱确保发送配置Sending Profile正确发件人域名有SPF/DKIM/DMARC记录。初期可以先用小规模测试将Gophish的发送IP添加到邮件服务的白名单。页面加载样式丢失导入的页面如果引用外部CSS/JS需要下载到本地并修改链接路径或者使用Gophish的“捕获文件”功能。数据没捕获到检查着陆页面的表单action是否指向了Gophish的捕获端点通常是#或留空由Gophish自动处理并确保“捕获提交数据”选项已勾选。7. 关键问题排查与防御视角搭建过程中会遇到各种问题而从防御者角度理解这些价值更大。7.1 搭建过程常见坑点页面显示错乱99%的原因是相对路径问题。克隆的页面内链接、图片、CSS、JS文件可能还是指向原始网站的绝对路径以http://或//开头。你需要用文本编辑器的查找替换功能将它们改为相对路径如./css/style.css或指向你服务器上副本的路径。表单提交后无反应或报错检查后端脚本路径确保HTML表单的action属性指向正确的PHP脚本路径。检查文件权限Web服务器进程如www-data需要对日志文件有写入权限。检查PHP错误在测试阶段可以在login.php开头临时添加ini_set(display_errors, 1); error_reporting(E_ALL);来显示错误信息。检查重定向确保header(Location: ...)函数前没有任何输出包括空格和空行否则会报“headers already sent”错误。域名解析不生效添加DNS A记录后全球生效需要时间TTL通常几分钟到几小时。可以使用ping your-domain.com或nslookup your-domain.com命令检查是否已指向你的服务器IP。7.2 从防御者角度看如何识别钓鱼网站通过亲手搭建你应该能轻易识别出钓鱼网站的破绽检查URL仔细看地址栏。是否是官方域名是否有拼写错误是否使用了不常见的顶级域如.xyz,.top检查连接安全性合法的登录页面几乎都使用HTTPS地址栏有锁形图标。如果一个“银行”或“大公司”的登录页是HTTP那一定是假的。但注意钓鱼网站也可以申请SSL证书如Let‘s Encrypt所以有锁不代表安全。检查页面细节鼠标悬停在链接上看浏览器状态栏显示的真实跳转地址是否与显示的文字相符。检查页脚版权信息、隐私政策链接是否指向官方域名。审视邮件来源钓鱼邮件常伪造发件人。查看邮件头信息检查“Return-Path”、“Received”字段里的真实服务器是否与声称的发件方一致。使用密码管理器正规的密码管理器如Bitwarden、1Password通常不会在非保存过的域名上自动填充密码。如果密码管理器不自动填充就是一个警示信号。启用双因素认证2FA这是最后也是最坚固的防线。即使密码被钓没有第二重验证因子如手机验证码、硬件密钥攻击者也无法登录。7.3 日志处理与数据安全在授权的渗透测试中捕获的凭证数据是高度敏感的测试结果必须妥善处理加密存储日志文件应加密存放测试结束后立即从服务器上彻底删除。最小化收集只收集测试必需的数据如用户名、点击时间避免收集不必要的个人信息。合规报告测试结果仅用于生成内部安全报告指出风险所在并立即通知“中招”的员工进行密码修改和安全教育。绝对禁止保留或滥用这些数据。搭建一个钓鱼网站从技术上看并不复杂但其背后的社会工程学原理、人性弱点利用以及由此引发的安全思考才是更值得深究的部分。通过这次从零到一的实践我希望你收获的不仅仅是几条命令和脚本而是一种“攻击者思维”。这种思维能让你在设计和评估安全体系时提前一步想到威胁可能来自哪里从而构建起更主动、更有效的防御。记住工具本身无善恶全在于使用者的意图。永远将你的技能用于建设性的、合规的领域这才是安全从业者长久发展的正道。